// page init
jQuery(function() {
	initClear();
	initGallery();
})
// gallery init
function initGallery() {
	jQuery('div.gallery').scrollTabGallery({
		holder : '.visual',
		pagerBtns: '.switcher ul a',
		btnPrev : '.switcher-small .link-prev',
		btnNext : '.switcher-small .link-next',
		duration: 600
	});
}
// clear inputs init
function initClear() {
	clearFormFields({
		clearInputs: true,
		clearTextareas: true,
		passwordFieldText: true,
		addClassFocus: "focus",
		filterClass: "default"
	});
}

// clear inputs on focus init
function clearFormFields(o)
{
	if (o.clearInputs == null) o.clearInputs = true;
	if (o.clearTextareas == null) o.clearTextareas = true;
	if (o.passwordFieldText == null) o.passwordFieldText = false;
	if (o.addClassFocus == null) o.addClassFocus = false;
	if (!o.filterClass) o.filterClass = "default";
	if(o.clearInputs) {
		var inputs = document.getElementsByTagName("input");
		for (var i = 0; i < inputs.length; i++ ) {
			if((inputs[i].type == "text" || inputs[i].type == "password") && inputs[i].className.indexOf(o.filterClass) == -1) {
				inputs[i].valueHtml = inputs[i].value;
				inputs[i].onfocus = function ()	{
					if(this.valueHtml == this.value) this.value = "";
					if(this.fake) {
						inputsSwap(this, this.previousSibling);
						this.previousSibling.focus();
					}
					if(o.addClassFocus && !this.fake) {
						this.className += " " + o.addClassFocus;
						this.parentNode.className += " parent-" + o.addClassFocus;
					}
				}
				inputs[i].onblur = function () {
					if(this.value == "") {
						this.value = this.valueHtml;
						if(o.passwordFieldText && this.type == "password") inputsSwap(this, this.nextSibling);
					}
					if(o.addClassFocus) {
						this.className = this.className.replace(o.addClassFocus, "");
						this.parentNode.className = this.parentNode.className.replace("parent-"+o.addClassFocus, "");
					}
				}
				if(o.passwordFieldText && inputs[i].type == "password") {
					var fakeInput = document.createElement("input");
					fakeInput.type = "text";
					fakeInput.value = inputs[i].value;
					fakeInput.className = inputs[i].className;
					fakeInput.fake = true;
					inputs[i].parentNode.insertBefore(fakeInput, inputs[i].nextSibling);
					inputsSwap(inputs[i], null);
				}
			}
		}
	}
	if(o.clearTextareas) {
		var textareas = document.getElementsByTagName("textarea");
		for(var i=0; i<textareas.length; i++) {
			if(textareas[i].className.indexOf(o.filterClass) == -1) {
				textareas[i].valueHtml = textareas[i].value;
				textareas[i].onfocus = function() {
					if(this.value == this.valueHtml) this.value = "";
					if(o.addClassFocus) {
						this.className += " " + o.addClassFocus;
						this.parentNode.className += " parent-" + o.addClassFocus;
					}
				}
				textareas[i].onblur = function() {
					if(this.value == "") this.value = this.valueHtml;
					if(o.addClassFocus) {
						this.className = this.className.replace(o.addClassFocus, "");
						this.parentNode.className = this.parentNode.className.replace("parent-"+o.addClassFocus, "");
					}
				}
			}
		}
	}
	function inputsSwap(el, el2) {
		if(el) el.style.display = "none";
		if(el2) el2.style.display = "inline";
	}
}

jQuery.fn.scrollTabGallery = function(options){
	var options = jQuery.extend({
		btnPrev : '.link-prev',
		btnNext : '.link-next',
		pagerBtns: '.pager a',
		holder : '.holder',
		slider : 'ul',
		slides : 'li',
		step : false,
		autoRotation : true,
		switchTime : 5000,
		speed : 500
	}, options);

	return this.each(function(){
		var gallery = jQuery(this);
		var holder = jQuery(options.holder, gallery);
		var slider = jQuery(options.slider, holder);
		var slides = jQuery(options.slides, slider);
		var btnPrev = jQuery(options.btnPrev, gallery);
		var btnNext = jQuery(options.btnNext, gallery);
		var pagerBtns = jQuery(options.pagerBtns, gallery);
		var autoRotation = options.autoRotation;
		var switchTime = options.switchTime;
		var step = options.step;
		var speed = options.duration;
		
		var index = 0;
		var count = 0;
		var slidesWidth = 0;
		var slideWidth = slides.eq(0).outerWidth(true);
		var count = slides.length;
		var timer;
		
		var thumbsHolder = $('.gallery .switcher .frame');
		var thumbsSlider = thumbsHolder.find('ul');
		var thumbsSlides = thumbsSlider.find('li');
		var thumbWidth = thumbsSlides.eq(0).outerWidth(true);
		var thumbsWidth = thumbsSlides.length * thumbWidth;
		var visThumbs = Math.floor(thumbsHolder.width() / thumbWidth);
		var btnThumbsNext = $('.gallery .switcher .link-next');
		var btnThumbsPrev = $('.gallery .switcher .link-prev');
		var maxMargin = thumbsSlides.length * thumbWidth - thumbsHolder.width();
		var scrollIndex = 0;
		var sumMargin = 0;
		var scrollSteps = 0;
		
		thumbsSlides.each(function() {
			sumMargin += thumbWidth* visThumbs;
			if(sumMargin < maxMargin) {
				scrollSteps++;
			}
		})
		scrollSteps++;
		
		function switchSlide() {
			slider.stop().animate({marginLeft: - index * slideWidth}, {
				duration : speed
			})
			
			pagerBtns.removeClass('active');
			pagerBtns.eq(index).addClass('active');
			
			if(thumbsSlides.length > visThumbs) {
				var slide = 0;
				var curSlideSet = Math.ceil( (index + 1) / visThumbs) ;
				slide = visThumbs * (curSlideSet - 1);
			
				if(slide + visThumbs < thumbsSlides.length) slide = slide;
				else slide = thumbsSlides.length - visThumbs;
				thumbsSlider.stop().animate({marginLeft: - slide * thumbWidth }, {
					duration: speed
				})
				scrollIndex = curSlideSet -1;
			}
			
			autoSlide();
		}
		function scrollThumbs() {
			var scrollMargin = scrollIndex * visThumbs * thumbWidth;
			if(scrollMargin > maxMargin) {
				scrollMargin = maxMargin;
			}
			thumbsSlider.stop().animate({marginLeft: -scrollMargin}, {
				duration: speed
			})
		}
		
		btnThumbsNext.click(function() {
			if(scrollIndex == scrollSteps) scrollIndex = 0;
			else scrollIndex++;
			scrollThumbs();
			return false;
		})
		btnThumbsPrev.click(function() {
			if(scrollIndex == 0) scrollIndex = scrollSteps;
			else scrollIndex--;
			scrollThumbs();
			return false;
		})
		function slideNext() {
			if(index == count -1) index = 0;
			else index++;
			switchSlide();
		}
		function slidePrev() {
			if(index == 0) index = count -1;
			else index--;
			switchSlide();
		}
		btnPrev.click(function() {
			stopAutoSlide();
			slidePrev();
			return false;
		})
		btnNext.click(function() {
			stopAutoSlide();
			slideNext();
			return false;
		})
		pagerBtns.each(function(n) {
			$(this).click(function() {
				index = n;
				switchSlide();
				return false;
			})
		})
		pagerBtns.eq(0).addClass('active');
		function stopAutoSlide() {
			if(timer) clearTimeout(timer);
		}
		function autoSlide() {
			if(!autoRotation) return;
			if(timer) clearTimeout(timer);
			timer = setTimeout(slideNext, switchTime + speed);
		}
		autoSlide();
	});
}
