")})},y=function(t){o.settings.auto&&r.stopAuto(),r.goToNextSlide(),t.preventDefault()},z=function(t){o.settings.auto&&r.stopAuto(),r.goToPrevSlide(),t.preventDefault()},k=function(t){r.startAuto(),t.preventDefault()},M=function(t){r.stopAuto(),t.preventDefault()},I=function(e){o.settings.auto&&r.stopAuto();var i=t(e.currentTarget),s=parseInt(i.attr("data-slide-index"));s!=o.active.index&&r.goToSlide(s),e.preventDefault()},q=function(e){var i=o.children.length;return"short"==o.settings.pagerType?(o.settings.maxSlides>1&&(i=Math.ceil(o.children.length/o.settings.maxSlides)),o.pagerEl.html(e+1+o.settings.pagerShortSeparator+i),void 0):(o.pagerEl.find("a").removeClass("active"),o.pagerEl.each(function(i,s){t(s).find("a").eq(e).addClass("active")}),void 0)},D=function(){if(o.settings.infiniteLoop){var t="";0==o.active.index?t=o.children.eq(0).position():o.active.index==x()-1&&o.carousel?t=o.children.eq((x()-1)*m()).position():o.active.index==o.children.length-1&&(t=o.children.eq(o.children.length-1).position()),t&&("horizontal"==o.settings.mode?b(-t.left,"reset",0):"vertical"==o.settings.mode&&b(-t.top,"reset",0))}o.working=!1,o.settings.onSlideAfter(o.children.eq(o.active.index),o.oldIndex,o.active.index)},A=function(t){o.settings.autoControlsCombine?o.controls.autoEl.html(o.controls[t]):(o.controls.autoEl.find("a").removeClass("active"),o.controls.autoEl.find("a:not(.bx-"+t+")").addClass("active"))},W=function(){1==x()?(o.controls.prev.addClass("disabled"),o.controls.next.addClass("disabled")):!o.settings.infiniteLoop&&o.settings.hideControlOnEnd&&(0==o.active.index?(o.controls.prev.addClass("disabled"),o.controls.next.removeClass("disabled")):o.active.index==x()-1?(o.controls.next.addClass("disabled"),o.controls.prev.removeClass("disabled")):(o.controls.prev.removeClass("disabled"),o.controls.next.removeClass("disabled")))},H=function(){o.settings.autoDelay>0?setTimeout(r.startAuto,o.settings.autoDelay):r.startAuto(),o.settings.autoHover&&r.hover(function(){o.interval&&(r.stopAuto(!0),o.autoPaused=!0)},function(){o.autoPaused&&(r.startAuto(!0),o.autoPaused=null)})},L=function(){var e=0;if("next"==o.settings.autoDirection)r.append(o.children.clone().addClass("bx-clone"));else{r.prepend(o.children.clone().addClass("bx-clone"));var i=o.children.first().position();e="horizontal"==o.settings.mode?-i.left:-i.top}b(e,"reset",0),o.settings.pager=!1,o.settings.controls=!1,o.settings.autoControls=!1,o.settings.tickerHover&&!o.usingCSS&&o.viewport.hover(function(){r.stop()},function(){var e=0;o.children.each(function(){e+="horizontal"==o.settings.mode?t(this).outerWidth(!0):t(this).outerHeight(!0)});var i=o.settings.speed/e,s="horizontal"==o.settings.mode?"left":"top",n=i*(e-Math.abs(parseInt(r.css(s))));N(n)}),N()},N=function(t){speed=t?t:o.settings.speed;var e={left:0,top:0},i={left:0,top:0};"next"==o.settings.autoDirection?e=r.find(".bx-clone").first().position():i=o.children.first().position();var s="horizontal"==o.settings.mode?-e.left:-e.top,n="horizontal"==o.settings.mode?-i.left:-i.top,a={resetValue:n};b(s,"ticker",speed,a)},O=function(){o.touch={start:{x:0,y:0},end:{x:0,y:0}},o.viewport.bind("touchstart",X)},X=function(t){if(o.working)t.preventDefault();else{o.touch.originalPos=r.position();var e=t.originalEvent;o.touch.start.x=e.changedTouches[0].pageX,o.touch.start.y=e.changedTouches[0].pageY,o.viewport.bind("touchmove",Y),o.viewport.bind("touchend",V)}},Y=function(t){var e=t.originalEvent,i=Math.abs(e.changedTouches[0].pageX-o.touch.start.x),s=Math.abs(e.changedTouches[0].pageY-o.touch.start.y);if(3*i>s&&o.settings.preventDefaultSwipeX?t.preventDefault():3*s>i&&o.settings.preventDefaultSwipeY&&t.preventDefault(),"fade"!=o.settings.mode&&o.settings.oneToOneTouch){var n=0;if("horizontal"==o.settings.mode){var r=e.changedTouches[0].pageX-o.touch.start.x;n=o.touch.originalPos.left+r}else{var r=e.changedTouches[0].pageY-o.touch.start.y;n=o.touch.originalPos.top+r}b(n,"reset",0)}},V=function(t){o.viewport.unbind("touchmove",Y);var e=t.originalEvent,i=0;if(o.touch.end.x=e.changedTouches[0].pageX,o.touch.end.y=e.changedTouches[0].pageY,"fade"==o.settings.mode){var s=Math.abs(o.touch.start.x-o.touch.end.x);s>=o.settings.swipeThreshold&&(o.touch.start.x>o.touch.end.x?r.goToNextSlide():r.goToPrevSlide(),r.stopAuto())}else{var s=0;"horizontal"==o.settings.mode?(s=o.touch.end.x-o.touch.start.x,i=o.touch.originalPos.left):(s=o.touch.end.y-o.touch.start.y,i=o.touch.originalPos.top),!o.settings.infiniteLoop&&(0==o.active.index&&s>0||o.active.last&&0>s)?b(i,"reset",200):Math.abs(s)>=o.settings.swipeThreshold?(0>s?r.goToNextSlide():r.goToPrevSlide(),r.stopAuto()):b(i,"reset",200)}o.viewport.unbind("touchend",V)},Z=function(){var e=t(window).width(),i=t(window).height();(a!=e||l!=i)&&(a=e,l=i,r.redrawSlider(),o.settings.onSliderResize.call(r,o.active.index))};return r.goToSlide=function(e,i){if(!o.working&&o.active.index!=e)if(o.working=!0,o.oldIndex=o.active.index,o.active.index=0>e?x()-1:e>=x()?0:e,o.settings.onSlideBefore(o.children.eq(o.active.index),o.oldIndex,o.active.index),"next"==i?o.settings.onSlideNext(o.children.eq(o.active.index),o.oldIndex,o.active.index):"prev"==i&&o.settings.onSlidePrev(o.children.eq(o.active.index),o.oldIndex,o.active.index),o.active.last=o.active.index>=x()-1,o.settings.pager&&q(o.active.index),o.settings.controls&&W(),"fade"==o.settings.mode)o.settings.adaptiveHeight&&o.viewport.height()!=v()&&o.viewport.animate({height:v()},o.settings.adaptiveHeightSpeed),o.children.filter(":visible").fadeOut(o.settings.speed).css({zIndex:0}),o.children.eq(o.active.index).css("zIndex",o.settings.slideZIndex+1).fadeIn(o.settings.speed,function(){t(this).css("zIndex",o.settings.slideZIndex),D()});else{o.settings.adaptiveHeight&&o.viewport.height()!=v()&&o.viewport.animate({height:v()},o.settings.adaptiveHeightSpeed);var s=0,n={left:0,top:0};if(!o.settings.infiniteLoop&&o.carousel&&o.active.last)if("horizontal"==o.settings.mode){var a=o.children.eq(o.children.length-1);n=a.position(),s=o.viewport.width()-a.outerWidth()}else{var l=o.children.length-o.settings.minSlides;n=o.children.eq(l).position()}else if(o.carousel&&o.active.last&&"prev"==i){var d=1==o.settings.moveSlides?o.settings.maxSlides-m():(x()-1)*m()-(o.children.length-o.settings.maxSlides),a=r.children(".bx-clone").eq(d);n=a.position()}else if("next"==i&&0==o.active.index)n=r.find("> .bx-clone").eq(o.settings.maxSlides).position(),o.active.last=!1;else if(e>=0){var c=e*m();n=o.children.eq(c).position()}if("undefined"!=typeof n){var g="horizontal"==o.settings.mode?-(n.left-s):-n.top;b(g,"slide",o.settings.speed)}}},r.goToNextSlide=function(){if(o.settings.infiniteLoop||!o.active.last){var t=parseInt(o.active.index)+1;r.goToSlide(t,"next")}},r.goToPrevSlide=function(){if(o.settings.infiniteLoop||0!=o.active.index){var t=parseInt(o.active.index)-1;r.goToSlide(t,"prev")}},r.startAuto=function(t){o.interval||(o.interval=setInterval(function(){"next"==o.settings.autoDirection?r.goToNextSlide():r.goToPrevSlide()},o.settings.pause),o.settings.autoControls&&1!=t&&A("stop"))},r.stopAuto=function(t){o.interval&&(clearInterval(o.interval),o.interval=null,o.settings.autoControls&&1!=t&&A("start"))},r.getCurrentSlide=function(){return o.active.index},r.getCurrentSlideElement=function(){return o.children.eq(o.active.index)},r.getSlideCount=function(){return o.children.length},r.redrawSlider=function(){o.children.add(r.find(".bx-clone")).outerWidth(u()),o.viewport.css("height",v()),o.settings.ticker||S(),o.active.last&&(o.active.index=x()-1),o.active.index>=x()&&(o.active.last=!0),o.settings.pager&&!o.settings.pagerCustom&&(w(),q(o.active.index))},r.destroySlider=function(){o.initialized&&(o.initialized=!1,t(".bx-clone",this).remove(),o.children.each(function(){void 0!=t(this).data("origStyle")?t(this).attr("style",t(this).data("origStyle")):t(this).removeAttr("style")}),void 0!=t(this).data("origStyle")?this.attr("style",t(this).data("origStyle")):t(this).removeAttr("style"),t(this).unwrap().unwrap(),o.controls.el&&o.controls.el.remove(),o.controls.next&&o.controls.next.remove(),o.controls.prev&&o.controls.prev.remove(),o.pagerEl&&o.settings.controls&&o.pagerEl.remove(),t(".bx-caption",this).remove(),o.controls.autoEl&&o.controls.autoEl.remove(),clearInterval(o.interval),o.settings.responsive&&t(window).unbind("resize",Z))},r.reloadSlider=function(t){void 0!=t&&(n=t),r.destroySlider(),d()},d(),this}}(jQuery);/* Cristall Box v1.1 - продукт линейки Cristall Group
управляет модальными окнами, показывает произвольное содержимое в модальном окне
по ajax, элемент страницы, одиночные изображения или группу изображений
разработчик: Большаков Е.В.
mail: cristall-group@yandex.ru
17.07.2015
*/
(function($){
// установка на страницу
$.fn.cristallBox = function( options ){
// настройки по умолчанию
var settings = {
speed: 500, // скорость анимации
ajaxPath: '/ajax/', // путь к папке ajax-файлов
offset: -10, // смещение модального окна относительно верха страницы
widthOffset: 20, // поправка по ширине при масштабировании окна
heightOffset: 100, // поправка по высоте при масштабировании окна
widthOffsetH: 60, // поправка по ширине при масштабировании окна для высоких и узких изображений
heightOffsetH: 110, // поправка по высоте при масштабировании окна для высоких и узких изображений
};
// настройки программы
var sett = $.extend( settings, options||{});
var el$ = this, startEl, imgAll, top, paramsEl, buttons = '';
var ekran = $('#ekranBlock'), modalBlock = $( '#modalBlock' );
// добавляем на страницу необходимые HTML-элементы ( если их нет в DOM )
makeElements();
// добавляем скорость анимации в стили
$('#ekranBlock').css( 'transition', sett.speed / 1000 + 's' );
// события модуля работы модальных окон
$.modalActions = function( e ){
e = e ? e : $( '[data-modal]' );
// навешиваем события на элементы обернутого набора
e.unbind( 'click' );
e.click( function(){
// убираем события на закрытие окна
$( '.modalClose, #ekranBlock').unbind( 'click' );
// снимаем события на открытие окон
e.unbind( 'click' );
// элемент-источник вызова окна
startEl = $(this);
// имя открываемого окна
var blockOpen = startEl.data( 'modal' );
// действия на открытие окна
$.modalOpenActions( { block:blockOpen, htmlEl:true } );
// отменяем переход по ссылке
return false;
});
}
$.modalActions( el$ );
// открытие модальных окон
$.modalOpenActions = function ( paramsEl ){
// получаем данные для показа окна
paramsEl = getData( paramsEl );
if( ekran.length < 1 ){
ekran = $('#ekranBlock');
}
if( modalBlock.length < 1 ){
modalBlock = $( '#modalBlock' );
}
// показываем экран, если он не открыт
if( ekran.is(':hidden') ){
// сначала показываем блок
ekran.addClass( 'act' );
// теперь проявляем
setTimeout(function(){ ekran.addClass( 'active' ) }, 1 );
}
// функция исполняемая до открытия окна
if( paramsEl['script'] ){
eval( paramsEl['script'] );
}
// показываем модальное окно
modalOpen( paramsEl );
};
$(window).resize(function(){
var o = $('.modalItem.imgBox .imgItem.active img');
if( o.length > 0 ){
$( '.imgBlock' ).css( getImgSize( o ) );
}
});
// установки для добавления содержимого модального окна
function setContent( paramsEl, str ){
// контент-зона
if( paramsEl['content'] ){
// контент-зона блока
var cont = $( str + ' .content' );
// тип содержимого
switch( paramsEl['content'] ){
// содержимое по ajax
case 'ajax':
ajaxActions( paramsEl, str );
break;
// изображения
case 'img':
if( paramsEl['group'] ){
var index = paramsEl['index'] ? paramsEl['index'] : 0;
// группа изображений
var g = $('img[data-group=' + paramsEl['group'] + ']');
if( g.length > 0 ){
imgAll = [];
// обходим все элементы входящие в эту группу
g.each(function( i ){
var classN = '', e = $(this), title = e.attr('title');
// для первого элемента списка
if( i == index ){ classN = 'active'; }
title = title ? "" + title + '' : '' ;
imgAll.push(
"
"+
"" + title +
"
" );
});
imgAll = galleryHtml( imgAll );
}
}else{ // одиночное изображение внутри ссылки открытия модального окна
if( !startEl ){ return false; }
var imgBlock = startEl.find('img');
if( imgBlock.length > 0 ){
var src = imgBlock.attr('src');
if( src ){
var titleImg = imgBlock.attr('title') ? imgBlock.attr('title') : '';
}else{
src = 'no_img.jpg';
var titleImg = 'Изображения нет';
}
imgAll =
"
" +
"
" +
"" +
"" + titleImg + '' +
'
' +
'
';
}else{
// любое количество изображений по ссылке
if( paramsEl['src'] ){
src = paramsEl['src'].split(',');
var count = src.length;
if( count > 0 ){
imgAll = [];
for( var i = 0; i < count; i++ ){
var classN = i ? '' : 'active';
imgAll.push(
"
" +
"" +
"
" );
}
imgAll = galleryHtml( imgAll );
}
}
}
}
var str = '#modalBlock';
// для галереи добавляем отдельный класс, для оформления
$( str + ' .modalItem.' + paramsEl['block'] ).addClass( 'imgBox' );
if( !paramsEl['title'] ){
paramsEl['title'] = 'Фотогалерея';
}
// вставляем галерею в окно
cont.html( imgAll );
// события на кнопки управления галереей
if( buttons ){
var leftButton = $( str + ' .left' );
leftButton.unbind('click');
leftButton.click(function(){
buttonsActions( true );
});
var rightButton = $( str + ' .right' );
rightButton.unbind('click');
rightButton.click(function(){
buttonsActions(false);
});
}
break;
// текст для контент-зоны
case 'text':
cont.html( paramsEl['text'] );
break;
// содержимое блока из элемента страницы
default:
cont.html( $( paramsEl['content'] ).html() );
break;
}
}
// заголовок окна
if( paramsEl['title'] ){
$( str ).find( 'h2' ).html( paramsEl['title'] );
}
};
// обновление контент-зоны для ajax
function ajaxActions( paramsEl, str ){
var cont = $( str + ' .content' ); // контент-зона блока
if( !paramsEl['path'] ){
paramsEl['path'] = sett.ajaxPath + paramsEl['block'] + '.php';
}
if( paramsEl['params'] ){
cont.load( paramsEl['path'], { 'params':paramsEl['params'] }, function(){
if( paramsEl['reload'] ){
$.modalActions(); // перезагружаем события на модальные окна
}
});
}else{
cont.load( paramsEl['path'], function(){
if( paramsEl['reload'] ){
$.modalActions();
}
});
}
};
// действия появления \ скрытия модального окна
function modalOpen( paramsEl ){
var str = '#modalBlock .modalItem';
var str2 = str + '.' + paramsEl['block'];
// если окно открыто
if( $( str2 + '.active' ).length > 0 ){
// обновляем зону контента
if( paramsEl['content'] == 'ajax' || paramsEl['path'] ){
ajaxActions( paramsEl, str2 );
}
// далее ничего не делаем
return false;
}
// ранее открытые окна скрываем
var open = $( str + ':visible' );
if( open.length > 0 ){
open.removeClass('active');
setTimeout(function(){ open.removeClass('act') }, sett.speed );
}
// имеем имя блока, но его нет в DOM
if( $( str2 ).length < 1 ){
// создаем модальное окно по имени блока
modalBlock.append( $.modalBlockTemplate( paramsEl['block'] ) );
}
// получаем содержимое в зависимости от типа его получения
setContent( paramsEl, str2 );
// устанавливаем позицию модальных окон
setModalPosition();
if( paramsEl['content'] == 'img' ){
img = $( '.imgBlock .imgItem.active img' );
// изменяем размеры окна с изображениями
$( '.imgBlock' ).css( getImgSize( img ) );
}
// показываем запрашиваемое окно
// установлена пауза до открытия окна
if( paramsEl['pause'] && paramsEl['pause'] > sett.speed ){
setTimeout( function(){ openActions( str2 ); }, paramsEl['pause'] );
}else{
// даем время для заполнения контент-зоны, также если одно окно открыто, заменяем другим через паузу
setTimeout( function(){ openActions( str2 ); }, sett.speed );
}
};
// действия по открытию окна
function openActions( str ){
modalBlock.addClass( 'active' );
var o = $( str );
o.addClass( 'act' );
setTimeout(function(){ o.addClass( 'active' ) }, 1 );
setTimeout(function(){
// восстанавливаем события на закрытие модальных окон
modalCloseEvent( true );
// прячем индикатор загрузки
ekran.find( 'i,span' ).addClass( 'hide' );
}, sett.speed * 2 );
};
// событие на ссылки закрытия модальных окон и экран
function modalCloseEvent( mark ){
var e = $( '.modalClose, #ekranBlock');
e.unbind('click');
e.click(function(){
$.modalCloseActions( mark );
});
};
// действия по закрытию окна
$.modalCloseActions = function( mark ){
modalBlock.removeClass( 'active' );
// сначала закрываем окно
var o = $( '#modalBlock .modalItem' )
o.removeClass('active');
setTimeout(function(){
o.removeClass( 'act' );
// следом экран
ekran.removeClass( 'active' );
setTimeout(function(){
ekran.removeClass( 'act' );
setTimeout(function(){
// восстанавливаем события на открытие модальных окон
$.modalActions( el$ );
// восстанавливаем видимость индикатора загрузки
ekran.find( 'i,span' ).removeClass( 'hide' );
}, sett.speed );
}, sett.speed );
}, sett.speed );
$( '#modalBlock .errorInfo' ).remove();
};
// шаблон модального окна
$.modalBlockTemplate = function( block ){
var text =
"
" +
"
Информационное сообщение
" +
"
Контент-зона пуста. Проверьте атрибут 'data-content' для получения содержимого
";
return text;
};
// устанавливаем позицию окна
function setModalPosition(){
// определяем позицию окна браузера
top = window.pageYOffset - sett['offset'];
// устанавливаем положение модального окна
modalBlock.css( 'top', top + 'px' );
};
// кнопки управления слайдером
function buttonsActions( left ){
var str = '#modalBlock .imgItem';
var imgItems = $( str );
var index = $( str + '.active' ).data('index');
// идем налево
if( left ){
if( index ){
index--;
}else{
index = imgItems.length - 1;
}
}else{ // направо
if( index == imgItems.length - 1 ){
index = 0;
}else{
index++;
}
}
// получаемый блок изображения
var ob = $( str + '[data-index='+ index +']' );
// получаем размеры окна для показа нового изображения
img = ob.find( 'img' );
// изменяем размеры окна с изображениями
ob.closest( '.imgBlock' ).css( getImgSize( img ) );
// растворяем предыдущее изображение
$( '#modalBlock .imgItem img.active, #modalBlock .imgItem .imgTitle.active').removeClass('active');
setTimeout(function(){
// скрываем блок изображения
$( str + '.active' ).removeClass('active');
// открываем следующий блок
ob.addClass('active');
setTimeout(function(){
// проявляем изображение
ob.find( 'img' ).addClass( 'active' );
setTimeout(function(){
// показываем заголовок
ob.find( '.imgTitle' ).addClass( 'active' );
}, sett.speed / 2 );
}, sett.speed / 2 );
}, sett.speed );
};
// устанавливаем размеры блока для изображений для реализации анимационного изменения размеров окна
function getImgSize( img ){
var width, height;
// размеры изображения
var iw = img[0]['naturalWidth']; // исходная ширина изображения
var ih = Number( img[0]['naturalHeight'] ) + 45; // исходная высота изображения + место для подписи к изображению
//console.log( 'widthImg_' + iw + ' heightImg_' +ih );
var iratio = iw / ih; // пропорции изображения
// размеры окна
var wh = $( window ).height() - sett.heightOffset; // высота окна
// широкие изображения
if( iratio > 1 ){
var ww = $( window ).width() * 0.9 - sett.widthOffset; // ширина окна
width = ww;
height = ww / iratio;
// после этого высота оказалась больше необходимой
if( height > wh ){
width = wh * iratio;
height = wh;
}
if( height > ih ){
height = ih;
}
if( width > iw + 80 ){
width = iw + 80;
}
// console.log( 'width_' + width + ' height_' + height );
}else{ // подгоняем высокие изображения
var ww = $( window ).width() * 0.9 - sett.widthOffsetH; // ширина окна
if( ih > wh ){
// считаем от высоты
width = wh * iratio;
height = wh;
//console.log(1);
}else{
//console.log( 2 );
width = iw;
height = ih;
}
//console.log( 'width_' + width + ' height_' + height );
if( width > ww ){
width = ww;
height = width / iratio;
}
}
// console.log( 'width_' + width + ' height_' + height );
return { 'width' : width, 'height' : height };
}
// формируем содержимое фото галереи
function galleryHtml( imgArr ){
// изображений больше 1 -> добавляем кнопки слайдера
if( imgArr.length > 1 ){
buttons =
""+
"";
}
// html содержимого фото галереи
return "
" + imgArr.join( '' ) + '
' + buttons;
};
// получаем данные для показа окна
function getData( paramsEl ){
// получено имя открываемого блока в виде строки
if( typeof( paramsEl ) == 'string' ){
startEl = false;
return {block:paramsEl};
}
// данные как атрибуты html-элемента
if( paramsEl['htmlEl'] ){
if( !paramsEl['block'] ){
alert( 'Не установлен атрибут data-modal' );
return false;
}
// список всех возможных атрибутов
var attr = ['title', 'content', 'script', 'path', 'params', 'group', 'src', 'text', 'pause', 'index', 'reload'];
$.each( attr, function( k, v ){
var tmp = startEl.data( v );
if( tmp != undefined ){
paramsEl[ v ] = tmp;
}
});
}
if( paramsEl['text'] ){
paramsEl['content'] = 'text';
}
if( paramsEl['path'] ){
paramsEl['content'] = 'ajax';
}
return paramsEl;
};
// добавляем на страницу необходимые HTML-элементы ( если их нет в DOM )
function makeElements(){
// проверяем наличие экрана
if( $( '#ekranBlock' ).length < 1 ){
modalBlock.before( "
... идет загрузка ...
" );
}
if( $( '#boxBlocks' ).length < 1 ){
// уже есть блок с HTML готовых модальных окон
if( modalBlock.length > 0 ){
// добавляем блок - обертку блока модальных окон
modalBlock.wrap( "" );
// нужных элементов нет -> добавляем их
}else{
$('body').append(
"
"+
"
"+
"
"+
""+
""+
"... идет загрузка ..."+
"
"+
"
"+
""+
""+
"
" );
}
}
// проверяем наличие сервисного блока
if( $( '#serviceBlock' ).length < 1 ){
modalBlock.after( "" );
}
};
return el$;
}
})(jQuery);/* cristallForm.v1.0.js - продукт линейки Cristall Group
скрипты обеспечения работы форм, валидация полей
разработчик: Большаков Е.В.
mail: cristall-group@yandex.ru
17.07.2015
использование $('form').cristallForm();
атрибут form data-act='no' - снимает наблюдение за этой формой;
атрибут form data-act='reload' - после проверки полей, обрабатываем форму через перезагрузку страницы;
проверяемые поля помечаем class='check';
атрибут поля data-required='1' - обязательное поле
атрибут поля data-min='10' - минимальное количество слов 10 шт
атрибут поля data-type='...' - тип содержимого поля для проверки ( email, text, num-число, phone, common, link, checkbox, select )