
$(function(){
	$('.sidebar-holder').css('visibility', 'hidden');
	initCustomForms();
	initGallery();
	initNav();
	initMainSlideShow();
	initFooterSlide();
});

$(window).load(function () {
	
	//if(!$.browser.msie) {
		initSidebar();
		$('.sidebar-holder').css('visibility', 'visible');
	//}
	
});

//footer open/close
function initFooterSlide(){
	var holder = $('#footer');
	var slideHolder = $('div.slide-holder',holder);
	var slide = $('div.slide',slideHolder);
	var opener = $('a.footer-expand',holder);
	var duration = 500;
	
	opener.click(function(){
		if (slide.is(':animated')) return false;

		if (!holder.hasClass('active')) {
			holder.addClass('active');
			slideHolder.show();
			slide.css({top:slide.height()}).animate({top:0},duration);
		} else {
			slide.animate({top:slide.height()},duration,function(){
				slideHolder.hide();
				holder.removeClass('active');
			});
		}
		return false;
	});
}

//footer & navigation gallery
function initGallery(){
	//nav drop gallery
	var dropNav = $('div.events-drop').show();
	$('div.inner',dropNav).simpleCircleGallery();
	dropNav.hide();
	
	//footer drop gallery
	var dropFooter = $('div.slide-holder').show();
	var dropInner = $('div.slide-container');
	$('div.carusel',dropFooter).simpleCircleGallery({
		slider:'div.mask > ul'
	});
	var dropInnerW = dropInner.width()
	
	if (dropFooter.width() > dropInnerW*2) dropInner.css({width:dropInnerW*2+100});
	
	dropFooter.hide();
}

//simple circle gallery plugin
$.fn.simpleCircleGallery = function(_options){
	var options = $.extend({
		slider:'> div > ul ',
		slides:'>li',
		btnPrev:'a.btn-prev',
		btnNext:'a.btn-next',
		duration:550
	},_options)
	
	return this.each(function(){
		var mainHolder = $(this);
		var slider = $(options.slider, mainHolder);
		var slides = $(options.slides, slider);
		var btnPrev = $(options.btnPrev, mainHolder);
		var btnNext = $(options.btnNext, mainHolder);
		var duration = options.duration;
		var step = slides.eq(0).outerWidth(true);
		var slidesW = step*slides.length;
		var offset = slidesW;
		slider.append(slides.clone()).prepend(slides.clone());
		slider.css({marginLeft:-offset});
		btnNext.click(function(){
			if (!slider.is(':animated')) nextSlide();
			return false;
		});
		btnPrev.click(function(){
			if (!slider.is(':animated')) prevSlide();
			return false;
		});
		
		function nextSlide(){
			offset += step;
			switchSlide();
		}
		function prevSlide(){
			offset -= step;
			switchSlide();
		}
		function switchSlide(){
			slider.animate({marginLeft:-offset},duration,function(){
				if ((offset == slidesW*2) || (offset == 0)) {
					offset = slidesW;
					slider.css({marginLeft:-offset});
				}
			})
		}
	});
}

//body background slideshow
function initMainSlideShow(){
	var holder = $('#slideshow');	
	if (holder.length) {
		var switcherHolder = $('div.slide-navigation');
		switcherHolder.css({marginLeft:-switcherHolder.width/2,display:'block'});
		var next = $('a.btn-next',switcherHolder);
		var prev = $('a.btn-prev',switcherHolder);
		var switcher = $('> div',switcherHolder);
		
		holder.slideshow({
			slides:'>li',
			dynamicLoad:'img',
			effect:'fade',
			nextBtn:next,
			autoPlay:true,
			prevBtn:prev,
			pagingHolder:switcher,
			createPaging:true,
			afterLoad:function(slide){
				imageStretcher.stretch(slide.find('img').get(0));
			}
		});
	}
}

//create jQuery plugin
$.fn.slideshow = function(options){return new slideshow(this, options);}

//constructor
function slideshow(obj, options){this.init(obj,options)}

//prototype
slideshow.prototype = {
	init:function(obj, options) {
		this.options = $.extend({
			slides:'> div > ul > li',
			nextBtn:'a.btn-next',
			prevBtn:'a.btn-prev',
			pagingHolder:'ul.switcher',
			pagingTag:'li',
			createPaging:false,
			autoPlay:false,
			dynamicLoad:false,
			imgAttr:'alt',
			effect:'slideX',//fade, slideX, slideY,
			startSlide:0,
			switchTime:5000,
			animSpeed:700,
			afterLoad:null
		},options);
		
		this.mainHolder = $(obj);
		this.slides = $(this.options.slides,this.mainHolder);		
		
		if (typeof this.options.nextBtn ==='object') this.nextBtn = this.options.nextBtn
		else this.nextBtn = $(this.options.nextBtn,this.mainHolder);
		if (typeof this.options.prevBtn ==='object') this.prevBtn = this.options.prevBtn
		else this.prevBtn = $(this.options.prevBtn,this.mainHolder);
		
		this.dynamicLoad = this.options.dynamicLoad;
		this.imgAttr = this.options.imgAttr;
		this.animSpeed = this.options.animSpeed;
		this.switchTime = this.options.switchTime;
		this.effect = this.options.effect;
		this.autoPlay = this.options.autoPlay;
		this.previous = -1;
		this.current = this.options.startSlide;
		this.loadingFrame = 1;
		this.busy = false;
		this.direction = 1;
		this.timer;
		this.pagingArray = new Array;
		this.loadArray = new Array;
		this.preloader = new Array;
		this.slidesParent = this.slides.eq(0).parent();
		this.slideW = this.slidesParent.width();
		this.slideH = this.slidesParent.height();
		this.initPaging();
		this.setStyles();
		this.bindEvents();
		this.showSlide();
	},
	
	initPaging:function(){
		if (typeof this.options.pagingHolder ==='object') this.pagingHolder = this.options.pagingHolder
		else this.pagingHolder = $(this.options.pagingHolder,this.mainHolder);
		
		if (this.options.createPaging) {
			this.pagingHolder.each(function(i,obj){
				var _this = $(obj);
				_this.empty();
				var list = $('<ul>');
				for (var i = 0; i < this.slides.length; i++) $('<li><a href="#">' + (i + 1) + '</a></li>').appendTo(list);
				_this.append(list);
			}.bind(this));
		}
		
		this.paging = $(this.options.pagingTag, this.pagingHolder);
		var ratio = Math.ceil(this.paging.length / this.slides.length);
		for (var i = 0; i < ratio; i++) {
			this.pagingArray.push(this.paging.slice(i*this.slides.length, (i*this.slides.length)+this.slides.length));
		}
	},
	
	setStyles:function(){
		//loader
		if (this.dynamicLoad) {
			this.loader = $('<div class="loader">');
			this.loaderDiv = $('<div>').appendTo(this.loader)
			this.loader.append(this.loaderDiv).appendTo(this.mainHolder);
		}
		
		//slides
		if (this.effect == 'fade') {
			this.slides.css({display:'none',opacity:0});
			this.slides.eq(this.current).css({display:'block',opacity:1});
		} else if (this.effect == 'slideX'){
			this.slides.css({display: 'none',left:-this.slideW});
			this.slides.eq(this.current).css({display:'block',left:0});
		} else if (this.effect == 'slideY'){
			this.slides.css({display:'none',top:-this.slideH});
			this.slides.eq(this.current).css({display:'block',top:0});
		}
	},
	
	bindEvents:function(){
		this.nextBtn.bind('click',function(){
			if (!this.busy) this.nextSlide();
			return false;
		}.bind(this));
		
		this.prevBtn.bind('click',function(){
			if (!this.busy) this.prevSlide();
			return false;
		}.bind(this));
		
		for (var i = 0; i < this.pagingArray.length; i++) {
			this.pagingArray[i].each(function(i,obj){
				$(obj).bind('click',function(){
					if (i != this.current && !this.busy) {
						this.busy = true;
						this.previous = this.current;
						this.current = i;
						if (this.previous > i) this.direction = 1
						else this.direction = -1;
						this.showSlide();
					}
					return false;
				}.bind(this));
			}.bind(this))
		}
		
		if (this.dynamicLoad) this.loader.bind('click',this.abortLoading.bind(this));
	},
	
	nextSlide:function(){
		this.busy = true;
		this.previous = this.current;
		if (this.current < this.slides.length-1) this.current++
		else this.current = 0;
		this.direction = 1;
		this.showSlide();
	},
	
	prevSlide:function(){
		this.busy = true;
		this.previous = this.current;
		if (this.current > 0) this.current--
		else this.current = this.slides.length-1;
		this.direction = -1;
		this.showSlide();
	},
	
	showSlide:function(){
		var obj = this;
		var _current = this.current;
		clearTimeout(this.timer);
		
		if (typeof this.loadArray[_current] != 'undefined' || !this.dynamicLoad) {
			//slide already loaded
			if (this.previous != -1) this.switchSlide()
			else {
				obj.refreshStatus();
				if (obj.autoPlay) obj.startAutoPlay();
			}
		} else {
			//slide not loaded
			this.showLoading();
			
			var slide = this.slides.eq(this.current);
			var images = $(this.dynamicLoad,slide);
			var counter = 0;
			images.each(function(){
				var preloader = new Image;
				obj.preloader.push(preloader);
				var img = $(this);
				preloader.onload = function(){
					counter++;
					checkImages();
				}
				preloader.onerror = function(){
					//ignore errors
					counter++;
					checkImages();
				}
				preloader.src = img.attr(obj.imgAttr);
			});
			
			function checkImages(){
				if (counter == images.length) {
					images.each(function(){
						var img = $(this);
						img.attr('src',img.attr(obj.imgAttr));
					});
					obj.loadArray[_current] = 1;
					obj.hideLoading();
					if (obj.previous != -1) obj.switchSlide()
					else {
						obj.refreshStatus();
						if (obj.autoPlay) obj.startAutoPlay();
					}
					if (typeof obj.options.afterLoad === 'function') obj.options.afterLoad(obj.slides.eq(obj.current));
				}
			}
		}
	},
	
	switchSlide:function(){
		var obj = this;
		
		if (this.effect == 'fade') {
			this.slides.eq(this.previous).stop().animate({opacity:0},this.animSpeed,callback);
			this.slides.eq(this.current).stop().css({display:'block'}).animate({opacity:1},this.animSpeed);
		} else if (this.effect == 'slideX'){
			this.slides.eq(this.current).css({display:'block',left:this.slideW*this.direction}).animate({left:0},this.animSpeed);
			this.slides.eq(this.previous).animate({left:-this.slideW*this.direction},this.animSpeed+10,callback);
		} else if (this.effect == 'slideY'){
			this.slides.eq(this.current).css({display:'block',top:this.slideH*this.direction}).animate({top:0},this.animSpeed);
			this.slides.eq(this.previous).animate({top:-this.slideH*this.direction},this.animSpeed+10,callback);
		}
		
		function callback(){
			$(this).css({display:'none'});
			if (obj.autoPlay) obj.startAutoPlay();
			obj.busy = false;
		}
		
		this.refreshStatus();
	},
	
	refreshStatus:function(){
		for (var i = 0; i < this.pagingArray.length;i++) {
			this.pagingArray[i].eq(this.previous).removeClass('active');
			this.pagingArray[i].eq(this.current).addClass('active');
		}
	},
	
	showLoading:function(){
		var obj = this;
		this.loader.show();
		clearInterval(this.loadingTimer);
		obj.loadingTimer = setInterval(animateLoading, 66);
		
		function animateLoading(){
			if (!obj.loader.is(':visible')){
				clearInterval(obj.loadingTimer);
				return;
			}
			obj.loaderDiv.css('top', obj.loadingFrame * -40);
			obj.loadingFrame = (obj.loadingFrame + 1) % 12;
		}
	},
	
	hideLoading:function(){
		this.loader.hide();
	},
	
	abortLoading:function(){
		this.busy = false;
		this.loader.hide();
		this.current = this.previous;
		for (var i = 0; i < this.preloader.length; i++) {
			this.preloader[i].onload = null;
			this.preloader[i].onerror = null;
		}
		if (this.autoPlay) this.startAutoPlay();
	},
	
	startAutoPlay:function(){
		var obj = this;
		clearTimeout(obj.timer);
		obj.timer = setTimeout(function(){
			obj.nextSlide();
		},obj.switchTime);
	}
}

// bind scope function
Function.prototype.bind = function(scope) {
	var _function = this;
	return function() {
		return _function.apply(scope, arguments);
	}
}

// image stretcher module
var imageStretcher = (function(){
	var windowWidth, windowHeight, images = [];
	var firstResize = true;
	function addImage(img) {
		recalcSize();
		images.push(img);
		if(img.complete) {
			getRatio(img, resizeImage);
		} else {
			img.onload = function(){
				getRatio(img, resizeImage);
				img.onload = null;
			}
			img.src = img.src; // IE Fix
		}
	}
	function removeImage(img) {
		for(var i=0; i<images.length; i++) {
			if(images[i] === img) {
				images.splice(i,1);
				return;
			}
		}
	}
	function getRatio(img, cb) {
		img.style['msInterpolationMode'] = 'bicubic'; // IE7 fix
		var newImg = new Image();
		newImg.onload = function() {
			img.ratio = newImg.width / newImg.height;
			if(typeof cb === 'function') cb.apply(img)
			newImg.onload = null;
		}
		newImg.src = img.src;
	}
	function resizeImage(img) {
		
		/* THE REAL THING
		var _ratio = this.ratio;
		var _slideWidth = windowWidth;
		var _slideHeight = _slideWidth/_ratio;
		if(_slideHeight < windowHeight) {
			_slideHeight = windowHeight;
			_slideWidth = _slideHeight * _ratio;
		}
		this.style.width = _slideWidth+'px';
		this.style.height = _slideHeight+'px';
		this.style.top = (windowHeight-_slideHeight)/2+'px';
		this.style.left = (windowWidth-_slideWidth)/2+'px';
		*/
		
		//THE HACK FOR THE COUNTDOWN.
		if(windowHeight > 615 || firstResize) {
			firstResize = false;
			var _ratio = this.ratio;
			var _slideWidth = windowWidth;
			var _slideHeight = _slideWidth/_ratio;
			if(_slideHeight < windowHeight) {
				_slideHeight = windowHeight;
				_slideWidth = _slideHeight * _ratio;
			}
			this.style.width = _slideWidth+'px';
			this.style.height = _slideHeight+'px';
			this.style.top = (windowHeight-_slideHeight)/2+'px';
			this.style.left = (windowWidth-_slideWidth)/2+'px';
		}
		
	}

	function recalcSize() {
		windowWidth = getClientWidth();
		windowHeight = getClientHeight();
	}
	function handleResize() {
		recalcSize();
		for(var i=0; i<images.length; i++) resizeImage.apply(images[i]);
	}
	addHandler(window, 'resize', handleResize);

	// util functions
	function addHandler(object, event, handler) {
		if (typeof object.addEventListener != 'undefined') object.addEventListener(event, handler, false);
		else if (typeof object.attachEvent != 'undefined') object.attachEvent('on' + event, handler);
	}
	function getClientWidth(){return window.document.compatMode === 'CSS1Compat' && window.document.documentElement['clientWidth'] || window.document.body['clientWidth']}
	function getClientHeight(){return window.document.compatMode === 'CSS1Compat' && window.document.documentElement['clientHeight'] || window.document.body['clientHeight']}

	// methods
	return {
		stretch: addImage,
		unstretch: removeImage
	}
})()

//circle sidebar gallery
function initSidebar(){
	var nbBlocks = $('div.sidebar-holder #menu li').size();
	var currentBlock = 1;
	var sidebar = $('div.sidebar-holder').fixedSlideBlock();;
	var header = $('#header');
	var footer = $('#footer');
	var slider = $('>ul',sidebar);
	var slides = $('>li',slider);
	var duration = 300;
	var overlayOpacity = 0.5;
	var multiplier = 1.5;
	var step = 1;
	var stepInterval = 3000;
	var timer;
	var openedArray = new Array;	
	var timerStartMove;
	var sliderMoveTimeout = 1500;
	var direction = 1;
	var sliderH = slider.height()/multiplier;
	var margin = 0;
	slider.append(slides.clone()).append(slides.clone());
	slider.css({marginTop:-margin});
	var slides = $('>li',slider);
	var sidebarH = 0;
	
	
	function moveSlider(){
            
		timer = setInterval(function(){
                        
			var nextStep = $(slides[currentBlock + direction]).height();
			margin += nextStep*direction;
			
			if (margin > sliderH || margin < 0) {
				margin = 0;				
				slider.css({marginTop:-margin});
			}else{
				slider.animate({
					marginTop: -margin
				});				
			}
                        
			if(direction == -1) {
				currentBlock = (currentBlock <= 0) ? nbBlocks : currentBlock - 1;
			}else{
				currentBlock = (currentBlock >= nbBlocks) ? 1 : currentBlock + 1;
			}
		},stepInterval);
	}
	/*
	slides.mousemove(function(e){
		var offset = e.pageY - sidebar.offset().top;
		var currentZone = Math.ceil((offset/sidebarH) * nbBlocks);
		if (offset < sidebarH/6) {
			direction = -1;			
		}
		if (offset > (sidebarH/6) * 5) {
			direction = 1			
		}		
	});*/
	
	function calcSidebarH(){
		var headerH = header.outerHeight()
		var winT = $(window).scrollTop();
		if (winT < headerH) headerH -= winT
		else headerH -= headerH;
		
		sidebarH = $(window).height()-headerH-footer.outerHeight()+10;
		if (sidebarH < 0) sidebarH = 0;
		sidebar.css({height:sidebarH});
	}
	
	$(window).resize(calcSidebarH).scroll(calcSidebarH);
	calcSidebarH();
	moveSlider();
	
	slides.each(function(i){
		var slide = $(this);
		var animation = false;
		var overlay = $('div.overlay',slide);
		var opener = $('a.btn-add',slide);
		var caption = $('div.description',slide);
		var visual  = $('div.image',slide);
                
		var visualFinishW = visual.width(); 
		var visualFinishH = visual.height(); 
		var visualStartW = visualFinishW/multiplier;
		var visualStartH = visualFinishH/multiplier;
		visual.css({
			width:visualStartW,
			height:visualStartH
		});
		
		var slideW = slide.width();
		var slideH = slide.height();
		
		overlay.css({
			height:slideH,
			width:slideW,
			opacity:overlayOpacity,
			display:'block'
		});
		
		caption.show();
		var captionW = caption.width();
		var captionH = caption.height() + 10;
		caption.hide();
		
		var slideFinishW = visualFinishW + captionW;
		if (visualFinishH > captionH) var slideFinishH = visualFinishH
		else var slideFinishH = captionH;
                
                opener.hide();
		
		$('>img',visual).css({width:'100%',height:'100%'});
		(opener, overlay).click(function(event){
                        event.stopPropagation();
			if (!slide.hasClass('active') && !animation) {
                            
                            clearInterval(timer);
                            animation = true;				
                            
                            var gapDirection = ((currentBlock - slide.attr('data-position')) < 0) ? -1: 1;				
                            var posGap = Math.abs(currentBlock - slide.attr('data-position'));
                            
                            var currentPositionH=0;
                            var totalGap = 0;
                            var counter = 0;
                            var wantedBlock = currentBlock;
                            for(var i=0;i<posGap;i++) {
                                
                                if(gapDirection == -1) {
                                    wantedBlock = (wantedBlock >= nbBlocks) ? 1 : wantedBlock + 1;
                                }else{
                                    wantedBlock = (wantedBlock <= 0) ? nbBlocks : wantedBlock - 1;
                                }
                                totalGap += $(slides[wantedBlock]).height();
                                
                                margin -= $(slides[wantedBlock]).height()*gapDirection;			
                                if (margin > sliderH || margin < 0) {
                                        margin = 0;
                                }
                            }
                            
                            for(var i=0; i<currentBlock; i++) {
                                    currentPositionH += $(slides[i]).height();
                            }                                
                            slider.css({marginTop:(slideH - currentPositionH)+"px"});
                          
                            currentBlock = wantedBlock;                                
                            slider.animate({
                                    marginTop: "+="+(totalGap*gapDirection)+"px"
                            }, function() {
                                    var targetBlock = currentBlock-1;
                                    $(slides[targetBlock]).addClass('active');
                                    openedArray.push(targetBlock);
                                    
                                    $('div.overlay',$(slides[targetBlock])).fadeOut(duration,function(){
                                            $(slides[targetBlock]).animate({width:slideFinishW,height:slideFinishH},duration)
                                            $('div.image',$(slides[targetBlock])).animate({width:visualFinishW,height:visualFinishH},duration,function(){
                                                    $('div.description',$(slides[targetBlock])).fadeIn(duration,cb);
                                                    $('a.btn-add',$(slides[targetBlock])).fadeIn();
                                            });
                                    });                                 
                            });
                            return false;
			}
                    return true;
		});
		
		slide.bind('closeSlide',function(){
			slide.removeClass('active');
                        opener.fadeOut();
			caption.fadeOut(duration,function(){
				slide.add(visual).animate({width:visualStartW, height:visualStartH},duration,function(){
					overlay.fadeIn(duration,function(){
						cb();
						clearTimeout(timer);
						moveSlider();
					});
				});
			});
		})
		
		slide.mouseenter(function(){
			clearTimeout(timerStartMove);
		}).mouseleave(function(){
			
			timerStartMove = setTimeout(function(){
				if (openedArray.length != 0) {
					for (var j = 0; j < openedArray.length; j++) {
						slides.eq(openedArray[j]).trigger('closeSlide');
					}
					openedArray.length = 0;
				}
			},sliderMoveTimeout)
		});
		function cb(){animation = false;}
                
	});	
}

//fixed sidebar plugin
$.fn.fixedSlideBlock = function(options){
	var options = $.extend({
		holder:'#wrapper'
	},options);
	
	return this.each(function(){
		var block = $(this);
		var startTop = parseInt(block.css('top'));
		var holder = $(options.holder);
		if (!holder || !holder.length) {
			holder = block.parent();
		}
		var startLeftPosition = block.position().left;
		var startTopOffset = block.offset().top;
		var offsetDiffLeft = block.offset().left - holder.offset().left
		$(window).scroll(positioning).resize(positioning)
		
		function positioning(){
			var winT = $(window).scrollTop();
			var winL = $(window).scrollLeft();
			var blockH = block.outerHeight();
			var holderT = holder.offset().top;
			var holderB = holderT + holder.outerHeight();
			var pos;
			
			if (winT >= holderT+startTop) pos = 1
			else pos = 2;
			
			switch (pos){
				case 1:
					if ($.browser.msie && $.browser.version < 7) {
						block.css({position:'absolute',bottom:'auto',right:'auto',
							top:winT-startTopOffset+startTop,
							left:startLeftPosition
						});
					} else {
						block.css({position:'fixed',bottom:'auto',right:'auto',
							top:0,
							left:holder.offset().left+offsetDiffLeft-winL
						});
					}
				break
				case 2:
					block.css({position:'absolute',right:'auto',bottom:'auto',
						top:startTop,
						left:startLeftPosition
					});
				break
			}
		}
		
		positioning();
	});
}

//slide navigation
function initNav(){
	var openers = $('#nav li.with-drop');	
	var slide = $('div.nav-holder div.drop-holder').hide();
	var drops = $('div.drop',slide);
	var duration = 450;
	var timeout = 450;
	var timer;
	var active = -1;
	var hoverFlag = false;
	
	openers.each(function(i){
		var opener = $(this);
		var drop = drops.eq(i);
		opener.bind('mouseenter',function(){
			clearTimeout(timer);
			if (active == -1) {
				timer = setTimeout(function(){
					//not open
					active = i;
					opener.addClass('active');
					slide.css({display:'block'});
					drop.css({display:'block'});
					var h = drop.height();
					drop.css({opacity:0,display:'none'});
					slide.css({height:0}).stop().animate({height:h},duration,function(){
						slide.css({height:'auto'});
						drop.css({display:'block'}).stop().animate({opacity:1},duration);
					});
				},timeout)
			} else if (active == i) {
				//open == hovered
				if (drop.is(':hidden')) {
					drop.css({display:'block'});
					var h = drop.height();
					drop.css({display:'none',opacity:0});
					slide.stop().animate({height:h},duration,function(){
						drop.css({display:'block'}).stop().animate({opacity:1},duration);
					});	
				} else {
					drop.stop().animate({opacity:1},duration);
				}
			} else {
				//open != hovered
 				drop.css({display:'block'});
				var h = drop.height();
				drop.css({display:'none',opacity:0});
				//fade block already display
				if (drops.eq(active).is(':visible')) {
					drops.eq(active).stop().animate({opacity:0},duration,function(){
						openers.eq(active).removeClass('active');
						active = i;
						openers.eq(active).addClass('active');
						slide.stop().animate({height:h},duration,function(){
							slide.css({height:'auto'});
							drop.css({display:'block'}).stop().animate({opacity:1},duration)
						})
						$(this).css({display:'none'});
					})
				} else {
				//fade block not display
					openers.eq(active).removeClass('active');
					active = i;
					openers.eq(active).addClass('active');
					slide.stop().animate({height:h},duration,function(){
						slide.css({height:'auto'});
						drop.css({display:'block'}).stop().animate({opacity:1},duration)
					})
				}
			}
		}).bind('mouseleave', hide);
	});
	
	function hide(){
		clearTimeout(timer);
		timer = setTimeout(function(){
			if (!hoverFlag) {
				drops.eq(active).stop().animate({opacity:0},duration,function(){
					openers.eq(active).removeClass('active');
					slide.stop().animate({height:0},duration,function(){
						slide.css({display:'none',height:'auto'});
						active = -1;
					});
					$(this).css({display:'none'});
				})
			}
		},timeout)
	}
	
	slide.hover(function(){
		hoverFlag=true;
	},function(){
		hoverFlag=false;
		hide();
	});
}

// custom forms init
function initCustomForms() {
	$('select').customSelect();
}

// custom forms plugin
;(function(jQuery){
	// custom checkboxes module
	jQuery.fn.customCheckbox = function(_options){
		var _options = jQuery.extend({
			checkboxStructure: '<div></div>',
			checkboxDisabled: 'disabled',
			checkboxDefault: 'checkboxArea',
			checkboxChecked: 'checkboxAreaChecked',
			filterClass:'default'
		}, _options);
		return this.each(function(){
			var checkbox = jQuery(this);
			if(!checkbox.hasClass('outtaHere') && checkbox.is(':checkbox') && !checkbox.hasClass(_options.filterClass)){
				var replaced = jQuery(_options.checkboxStructure);
				this._replaced = replaced;
				if(checkbox.is(':disabled')) replaced.addClass(_options.checkboxDisabled);
				else if(checkbox.is(':checked')) replaced.addClass(_options.checkboxChecked);
				else replaced.addClass(_options.checkboxDefault);

				replaced.click(function(){
					if(checkbox.is(':checked')) checkbox.removeAttr('checked');
					else checkbox.attr('checked', 'checked');
					changeCheckbox(checkbox);
				});
				checkbox.click(function(){
					changeCheckbox(checkbox);
				});
				replaced.insertBefore(checkbox);
				checkbox.addClass('outtaHere');
			}
		});
		function changeCheckbox(_this){
			_this.change();
			if(_this.is(':checked')) _this.get(0)._replaced.removeClass().addClass(_options.checkboxChecked);
			else _this.get(0)._replaced.removeClass().addClass(_options.checkboxDefault);
		}
	}

	// custom radios module
	jQuery.fn.customRadio = function(_options){
		var _options = jQuery.extend({
			radioStructure: '<div></div>',
			radioDisabled: 'disabled',
			radioDefault: 'radioArea',
			radioChecked: 'radioAreaChecked',
			filterClass:'default'
		}, _options);
		return this.each(function(){
			var radio = jQuery(this);
			if(!radio.hasClass('outtaHere') && radio.is(':radio') && !radio.hasClass(_options.filterClass)){
				var replaced = jQuery(_options.radioStructure);
				this._replaced = replaced;
				if(radio.is(':disabled')) replaced.addClass(_options.radioDisabled);
				else if(radio.is(':checked')) replaced.addClass(_options.radioChecked);
				else replaced.addClass(_options.radioDefault);
				replaced.click(function(){
					if(jQuery(this).hasClass(_options.radioDefault)){
						radio.attr('checked', 'checked');
						changeRadio(radio.get(0));
					}
				});
				radio.click(function(){
					changeRadio(this);
				});
				replaced.insertBefore(radio);
				radio.addClass('outtaHere');
			}
		});
		function changeRadio(_this){
			jQuery(_this).change();
			jQuery('input:radio[name='+jQuery(_this).attr("name")+']').not(_this).each(function(){
				if(this._replaced && !jQuery(this).is(':disabled')) this._replaced.removeClass().addClass(_options.radioDefault);
			});
			_this._replaced.removeClass().addClass(_options.radioChecked);
		}
	}

	// custom selects module
	jQuery.fn.customSelect = function(_options) {
		var _options = jQuery.extend({
			selectStructure: '<div class="selectArea"><span class="left"></span><span class="center"></span><a href="#" class="selectButton"></a><div class="disabled"></div></div>',
			hideOnMouseOut: false,
			copyClass: true,
			selectText: '.center',
			selectBtn: '.selectButton',
			selectDisabled: '.disabled',
			optStructure: '<div class="optionsDivVisible"><div class="select-top"></div><div class="select-center"><ul></ul><div class="select-bottom"></div></div>',
			optList: 'ul',
			filterClass:'default'
		}, _options);
		return this.each(function() {
			var select = jQuery(this);
			if(!select.hasClass('outtaHere') && !select.hasClass(_options.filterClass)) {
				if(select.is(':visible')) {
					var hideOnMouseOut = _options.hideOnMouseOut;
					var copyClass = _options.copyClass;
					var replaced = jQuery(_options.selectStructure);
					var selectText = replaced.find(_options.selectText);
					var selectBtn = replaced.find(_options.selectBtn);
					var selectDisabled = replaced.find(_options.selectDisabled).hide();
					var optHolder = jQuery(_options.optStructure);
					var optList = optHolder.find(_options.optList);
					if(copyClass) optHolder.addClass('drop-'+select.attr('class'));
					if(select.attr('disabled')) selectDisabled.show();
					select.find('option').each(function(){
						var selOpt = jQuery(this);
						var _opt = jQuery('<li><a href="#">' + selOpt.html() + '</a></li>');
						if(selOpt.attr('selected')) {
							selectText.html(selOpt.html());
							_opt.addClass('selected');
						}
						_opt.children('a').click(function() {
							optList.find('li').removeClass('selected');
							select.find('option').removeAttr('selected');
							jQuery(this).parent().addClass('selected');
							selOpt.attr('selected', 'selected');
							selectText.html(selOpt.html());
							select.change();
							optHolder.hide();
							return false;
						});
						optList.append(_opt);
					});
					replaced.width(select.outerWidth());
					replaced.insertBefore(select);
					optHolder.css({
						width: select.outerWidth(),
						display: 'none',
						position: 'absolute'
					});
					jQuery(document.body).append(optHolder);

					var optTimer;
					replaced.hover(function() {
						if(optTimer) clearTimeout(optTimer);
					}, function() {
						if(hideOnMouseOut) {
							optTimer = setTimeout(function() {
								optHolder.hide();
							}, 200);
						}
					});
					optHolder.hover(function(){
						if(optTimer) clearTimeout(optTimer);
					}, function() {
						if(hideOnMouseOut) {
							optTimer = setTimeout(function() {
								optHolder.hide();
							}, 200);
						}
					});
					selectBtn.click(function() {
						if(optHolder.is(':visible')) {
							optHolder.hide();
						}
						else{
							if(_activeDrop) _activeDrop.hide();
							optHolder.children('ul').css({height:'auto', overflow:'hidden'});
							optHolder.css({
								top: replaced.offset().top + replaced.outerHeight(),
								left: replaced.offset().left,
								display: 'block'
							});
							if(optHolder.children('ul').height() > 200) optHolder.children('ul').css({height:200, overflow:'auto'});
							_activeDrop = optHolder;
						}
						return false;
					});
					replaced.addClass(select.attr('class'));
					select.addClass('outtaHere');
				}
			}
		});
	}

	// event handler on DOM ready
	var _activeDrop;
	jQuery(function(){
		jQuery('body').click(hideOptionsClick)
		jQuery(window).resize(hideOptions)
	});
	function hideOptions() {
		if(_activeDrop && _activeDrop.length) {
			_activeDrop.hide();
			_activeDrop = null;
		}
	}
	function hideOptionsClick(e) {
		if(_activeDrop && _activeDrop.length) {
			var f = false;
			jQuery(e.target).parents().each(function(){
				if(this == _activeDrop) f=true;
			});
			if(!f) {
				_activeDrop.hide();
				_activeDrop = null;
			}
		}
	}
})(jQuery);
