//Page init scripts
jQuery(function(){
	initScaleNav();
	filterList();
	/* initTabs(); */
});
jQuery(window).load(function(){
	initSlider();
});

function filterList(){
	jQuery('.inner-gallery2').each(function(){
		var hold = jQuery(this);
		var btnPrev = jQuery('.navigation .prev');
		var btnNext = jQuery('.navigation .next');
		filterSlider = new SliderNV(jQuery(this),{
			slider:'.gallery-holder .gallery',
			slides: '>li',
			pagerLinks:'.thumbnails > li',
			filterPageLink: 'filterItem',
			effect: false,
			afterInit: function(obj){
				obj.slides.each(function(){
					if(jQuery(this).attr('title').length) jQuery(this).attr('filterItem', jQuery(this).attr('title')).removeAttr('title');
				});
			}
		});
		hold.FilterList({
			afterFiltering: function(){
				if(filterSlider) filterSlider.pagerLinks.filter(':visible').eq(0).trigger('click');
			}
		});
		btnPrev.bind('click', function(){
			if(filterSlider) filterSlider.pagerLinks.eq(filterSlider.currentElement).prevAll().filter(':visible').eq(0).trigger('click');
			return false;
		});
		btnNext.bind('click', function(){
			if(filterSlider) filterSlider.pagerLinks.eq(filterSlider.currentElement).nextAll().filter(':visible').eq(0).trigger('click');
			return false;
		});
	});
};
jQuery.fn.FilterList = function(options){
	var options = jQuery.extend({
		filterLink: '.country-nav .tabset a',
		filterItem: '.thumbnails-holder .thumbnails > li',
		filterOnItem: 'title',
		filterOnItemNew: 'filterItem',
		filterOnLink: 'href',
		activeClass: 'active',
		animSpeed: 1,
		afterFiltering: function(){}
	},options);

	return this.each(function(){
		var set = jQuery(this);
		var filterLink = jQuery(options.filterLink, set);
		var filterItem = jQuery(options.filterItem, set);
		if(!filterLink.length) return;
		var activeFilter = filterLink.filter('.active:eq(0)').length ? filterLink.filter('.active:eq(0)').attr(options.filterOnLink) : false;
		set.data('activeFilter', activeFilter);
		filterLink.bind('click', function(){
			activeFilter = jQuery(this).attr(options.filterOnLink);
			set.data('activeFilter', activeFilter);
			filterLink.removeClass(options.activeClass);
			jQuery(this).addClass(options.activeClass);
			filtering(false);
			return false;
		});

		/* refresh filter */
		filterItem.each(function(){
			if(jQuery(this).attr(options.filterOnItem)) jQuery(this).attr(options.filterOnItemNew, jQuery(this).attr(options.filterOnItem)).removeAttr(options.filterOnItem);
		});

		/* filtering */
		function filtering(load){
			filterItem.each(function(){
				if(jQuery(this).attr(options.filterOnItemNew) == activeFilter) {
					jQuery(this).show(load ? 0 : options.animSpeed, function(){
						if(typeof afterFiltering) options.afterFiltering(activeFilter);
					});
				}
				else {
					jQuery(this).hide(load ? 0 : options.animSpeed, function(){
						if(typeof afterFiltering) options.afterFiltering(activeFilter);
					});
				}
			});
		};

		if(activeFilter){
			filtering(true);
			// if(typeof afterFiltering) options.afterFiltering(activeFilter);
		};
	});
}
/* initSlider */
function initSlider(){
	jQuery('.gallery-home').each(function(){
		new SliderNV(jQuery(this),{
			slider:'.gallery',
			pagerLinks:'.switcher > li',
			generatePagination: '.switcher',
			btnPrev:'a.prev',
			btnNext:'a.next',
			effect: false,
			autoRotation: true,
			switchTime: 5000
		});
	});
	jQuery('.inner-gallery').each(function(){
		new SliderNV(jQuery(this),{
			slider:'.gallery-holder .gallery',
			pagerLinks:'.country-menu nav > ul > li',
			effect: false,
			beforeAnimation: function(obj){
				if(obj.set.next().hasClass('panel') && obj.set.next().find('ul.list').length){
					obj.set.next().find('ul.list').hide();
					obj.set.next().find('ul.list').eq(obj.currentElement).show();
				};
			},
			afterInit: function(obj){
				if(obj.set.next().hasClass('panel') && obj.set.next().find('ul.list').length){
					obj.set.next().find('ul.list').hide();
					obj.set.next().find('ul.list').eq(obj.currentElement).show();
				};
			}
		});
	});
	
	jQuery('.country-menu').each(function(){
		new SliderNV(jQuery(this),{
			slider:'nav > ul',
			btnPrev:'a.prev',
			btnNext:'a.next'
		});
	});
	jQuery('.country-nav').each(function(){
		new SliderNV(jQuery(this),{
			sliderHolder: 'nav',
			slider:'nav > ul',
			btnPrev:'a.prev',
			btnNext:'a.next'
		});
	});
};
/* slider module */
(function($){
	SliderNV = function(){
		this.init.apply(this,arguments)
	}
	SliderNV.prototype = {
		init: function(context, options){
			/* default options */
			this.options = jQuery.extend({
				sliderHolder: '>div',
				slider:'>ul',
				slides: '>li',
				pagerLinks:'div.pager a',
				generatePagination: false,
				generatePaginationMarkup: '<li><a href="#">&amp;nbsp;</a></li>',
				btnPrev:'a.btn-prev111',
				btnNext:'a.btn-next111',
				activeClass:'active',
				disabledClass:'disabled',
				circleSlide: true,
				effect: true, // true == slide effect & false == fade effect
				pauseClass:'gallery-paused',
				pauseOnHover:true,
				autoRotation:false,
				switchTime:5000,
				animSpeed:650,
				easing:'swing',
				pagerEvent: 'click',
				butttonEvent:'click',
				beforeInit: function(){},
				afterInit:function(){},
				beforeAnimation: function(){},
				afterAnimation: function(){},
				filter: false,
				vertical:false,
				reverse: false,
				step: false,
				startElement: 0,
				autoHeight: false
			},options);
			if(!context) return;
			this.set = context;
			this.elementInit();
			this.eventInit();
			if(typeof this.options.beforeInit === 'function') this.options.beforeInit(this);
			this.startPosition(this.currentElement);
			if(typeof this.options.afterInit === 'function') this.options.afterInit(this);
			this.set.data('sliderNV', this);
		},
		elementInit: function(){
			this.sliderHolder = jQuery(this.options.sliderHolder, this.set);
			this.slider = jQuery(this.options.slider, this.set);
			this.slides = jQuery(this.options.slides, this.slider);
			this.sumHeight = 0;
			this.sumWidth = 0;
			this.slides.each(jQuery.proxy(function(i, elem){
				this.sumHeight += jQuery(elem).outerHeight(true);
				this.sumWidth += jQuery(elem).outerWidth(true);
			},this));
			this.currentElement = parseInt(this.options.startElement);
			this.pagination();
			this.stepCount = this.slides.length;
			this.disableButton();
			this.autoSlide();
		},
		eventInit: function(){
			this.set.find(this.options.btnPrev).unbind(this.options.butttonEvent).bind(this.options.butttonEvent, jQuery.proxy(function(){
				this.prev();
				return false;
			}, this));
			this.set.find(this.options.btnNext).unbind(this.options.butttonEvent).bind(this.options.butttonEvent, jQuery.proxy(function(){
				this.next();
				return false;
			}, this));
			if(this.options.pauseOnHover){
				this.set.unbind('mouseenter').bind('mouseenter', jQuery.proxy(function(){
					this.set.addClass(this.options.pauseClass);
					clearTimeout(this.autoTimer);
				}, this)).unbind('mouseleave').bind('mouseleave',jQuery.proxy(function(){
					this.set.removeClass(this.options.pauseClass);
					this.autoSlide();
				}, this));
			};
		},
		pagination: function(){
			if(this.options.generatePagination) {
				this.set.find(this.options.generatePagination).empty()
				this.slides.each(jQuery.proxy(function(){
					var temp = jQuery(this.options.generatePaginationMarkup);
					this.set.find(this.options.generatePagination).append(temp);
				},this));
			};
			this.pagerLinks = jQuery(this.options.pagerLinks, this.set).filter(':visible');
			if(this.pagerLinks){
				this.pagerLinks.each(jQuery.proxy(function(idx, elem){
					jQuery(elem).unbind(this.options.pagerEvent).bind(this.options.pagerEvent, jQuery.proxy(function(){
						if(!jQuery(elem).hasClass(this.options.activeClass)){
							this.currentElement = idx;
							this.pagerLinks.removeClass(this.options.activeClass).eq(this.currentElement).addClass(this.options.activeClass);
							this.swichFunction(this.currentElement);
							if(!this.options.circleSlide) this.disableButton();
							this.set.data('sliderNV', this);
						};
						return false;
					},this));
				},this));
			};
		},
		prev: function(){
			if(this.currentElement > 0){
				this.currentElement--;
			}
			else if(this.options.circleSlide) {
				this.currentElement = this.stepCount-1;
			}
			this.pagerLinks.removeClass(this.options.activeClass).eq(this.currentElement).addClass(this.options.activeClass);
			this.swichFunction(this.currentElement);
			if(!this.options.circleSlide) this.disableButton();
			this.set.data('sliderNV', this);
		},
		next: function(){
			if(this.currentElement < this.stepCount-1){
				this.currentElement++;
			}
			else if(this.options.circleSlide) {
				this.currentElement = 0;
			}
			this.pagerLinks.removeClass(this.options.activeClass).eq(this.currentElement).addClass(this.options.activeClass);
			this.swichFunction(this.currentElement);
			if(!this.options.circleSlide) this.disableButton();
			this.set.data('sliderNV', this);
		},
		disableButton: function(){
			this.set.find(this.options.btnPrev).removeClass(this.options.disabledClass);
			this.set.find(this.options.btnNext).removeClass(this.options.disabledClass);
			if(this.currentElement == 0){
				this.set.find(this.options.btnPrev).addClass(this.options.disabledClass);
			}
			else if(this.currentElement == this.stepCount-1){
				this.set.find(this.options.btnNext).addClass(this.options.disabledClass);
			};
		},
		recalcOffsets: function(curr){
			if(this.options.vertical) {
				/* slide vertical */
				if(this.options.step) {
					this.stepHeight = this.slides.eq(curr).outerHeight(true)*parseInt(this.options.step);
					this.stepCount = Math.ceil((this.sumHeight-this.sliderHolder.height())/this.stepHeight)+1;
					this.offset = -this.stepHeight*curr;
				} else {
					this.stepHeight = this.sliderHolder.height();
					this.stepCount = Math.ceil(this.sumHeight/this.stepHeight);
					this.offset = -this.stepHeight*curr;
					if(this.offset < this.stepHeight-this.sumHeight) this.offset = this.stepHeight-this.sumHeight;
				}
			}
			else {
				/* slide horizontal */
				if(this.options.step) {
					this.stepWidth = this.slides.eq(curr).outerWidth(true)*parseInt(this.options.step);
					this.stepCount = Math.ceil((this.sumWidth-this.sliderHolder.width())/this.stepWidth)+1;
					this.offset = -this.stepWidth*curr;
					if(this.offset < this.sliderHolder.width()-this.sumWidth) this.offset = this.sliderHolder.width()-this.sumWidth;
				} else {
					this.stepWidth = this.sliderHolder.width();
					this.stepCount = Math.ceil(this.sumWidth/this.stepWidth);
					this.offset = -this.stepWidth*curr;
					if(this.offset < this.stepWidth-this.sumWidth) this.offset = this.stepWidth-this.sumWidth;
				}
			};
			return this.offset;
		},
		swichFunction: function(curr){
			if(!this.options.effect){
				/* fade effect */
				if(typeof this.options.beforeAnimation ==='function') this.options.beforeAnimation(this);
				this.slides.filter(':visible').fadeOut(this.options.animSpeed);
				this.slides.eq(curr).fadeIn(this.options.animSpeed, jQuery.proxy(function(){
					if(typeof this.options.afterAnimation ==='function') this.options.afterAnimation(this);
					this.autoSlide();
					if(this.options.autoHeight) this.slider.css({ position: 'relative', height: this.slides.eq(curr).outerHeight(true) });
					this.set.data('sliderNV', this);
				},this));
			}
			else {
				/* slide effect */
				var marginType = {};
				marginType[this.options.vertical ? 'marginTop' : 'marginLeft'] = this.recalcOffsets(curr);
				if(typeof this.options.beforeAnimation ==='function') this.options.beforeAnimation(this);
				this.slider.animate(
					marginType,
					{
						queue: false,
						duration: this.options.animSpeed,
						complete: jQuery.proxy(function(){
							if(typeof this.options.afterAnimation ==='function') this.options.afterAnimation(this);
							this.autoSlide();
							this.set.data('sliderNV', this);
						},this)
					}
				);
			};
			this.set.data('sliderNV', this);
		},
		startPosition: function(curr){
			if(this.options.effect) {
				var marginType = {};
				marginType[this.options.vertical ? 'marginTop' : 'marginLeft'] = this.recalcOffsets(curr);
				this.slider.css(marginType);
			}
			else {
				this.slides.css({ position: 'absolute', top: 0, left: 0 });
				this.slider.css({ position: 'relative' });
				if(this.options.autoHeight) this.slider.css({ position: 'relative', height: this.slides.eq(this.currentElement).outerHeight(true) });
				this.slides.hide().eq(this.currentElement).show();
			}
			this.pagerLinks.removeClass(this.options.activeClass).eq(this.currentElement).addClass(this.options.activeClass);
		},
		autoSlide: function(){
			if(this.options.autoRotation && !this.set.hasClass(this.options.pauseClass)){
				if(this.autoTimer) clearTimeout(this.autoTimer);
				this.autoTimer = setTimeout(jQuery.proxy(function(){
					if(this.options.reverse) {
						this.prev();
					}
					else {
						this.next();
					}
				},this), this.options.switchTime + this.options.animSpeed);
			}
		}
	}
})( jQuery );

/* initScaleNav */
function initScaleNav(){
	initAutoScalingNav({
		menuId: "nav",
		sideClasses: true,
		tag: "a"
	});
}
function initAutoScalingNav(o) {
	if (!o.menuId) o.menuId = "nav";
	if (!o.tag) o.tag = "a";
	if (!o.spacing) o.spacing = 0;
	if (!o.constant) o.constant = 0;
	if (!o.minPaddings) o.minPaddings = 0;
	if (!o.liHovering) o.liHovering = false;
	if (!o.sideClasses) o.sideClasses = false;
	if (!o.equalLinks) o.equalLinks = false;
	if (!o.flexible) o.flexible = false;
	var nav = document.getElementById(o.menuId);
	if(nav) {
		nav.className += " scaling-active";
		var lis = nav.getElementsByTagName("li");
		var asFl = [];
		var lisFl = [];
		var width = 0;
		for (var i=0, j=0; i<lis.length; i++) {
			if(lis[i].parentNode == nav) {
				var t = lis[i].getElementsByTagName(o.tag).item(0);
				asFl.push(t);
				asFl[j++].width = t.offsetWidth;
				lisFl.push(lis[i]);
				if(width < t.offsetWidth) width = t.offsetWidth;
			}
			if(o.liHovering) {
				lis[i].onmouseover = function() {
					this.className += " hover";
				}
				lis[i].onmouseout = function() {
					this.className = this.className.replace("hover", "");
				}
			}
		}
		var menuWidth = nav.clientWidth - asFl.length*o.spacing - o.constant;
		if(o.equalLinks && width * asFl.length < menuWidth) {
			for (var i=0; i<asFl.length; i++) {
				asFl[i].width = width;
			}
		}
		width = getItemsWidth(asFl);
		if(width < menuWidth) {
			var version = navigator.userAgent.toLowerCase();
			for (var i=0; getItemsWidth(asFl) < menuWidth; i++) {
				asFl[i].width++;
				if(!o.flexible) {
					asFl[i].style.width = asFl[i].width + "px";
				}
				if(i >= asFl.length-1) i=-1;
			}
			if(o.flexible) {
				for (var i=0; i<asFl.length; i++) {
					width = (asFl[i].width - o.spacing - o.constant/asFl.length)/menuWidth*100;
					if(i != asFl.length-1) {
						lisFl[i].style.width = width + "%";
					}
					else {
						if(navigator.appName.indexOf("Microsoft Internet Explorer") == -1 || version.indexOf("msie 8") != -1 || version.indexOf("msie 9") != -1)
							lisFl[i].style.width = width + "%";
					}
				}
			}
		}
		else if(o.minPaddings > 0) {
			for (var i=0; i<asFl.length; i++) {
				asFl[i].style.paddingLeft = o.minPaddings + "px";
				asFl[i].style.paddingRight = o.minPaddings + "px";
			}
		}
		if(o.sideClasses) {
			lisFl[0].className += " first-child";
			lisFl[0].getElementsByTagName(o.tag).item(0).className += " first-child-a";
			lisFl[lisFl.length-1].className += " last-child";
			lisFl[lisFl.length-1].getElementsByTagName(o.tag).item(0).className += " last-child-a";
		}
		nav.className += " scaling-ready";
	}
	function getItemsWidth(a) {
		var w = 0;
		for(var q=0; q<a.length; q++) {
			w += a[q].width;
		}
		return w;
	}
};


//// TABS
// init tabs when page ready
function initTabs() {
	if(typeof ContentTabs !== 'undefined') {
		ContentTabs.init();
	}
}

// content tabs module
ContentTabs = {
	options: {
		classOnParent: false,
		hiddenClass: 'tab-hidden',
		visibleClass: 'tab-active',
		activeClass: 'active',
		tabsets: 'ul.tabset',
		tablinks: 'a.tab',
		event: 'click'
	},
	init: function(){
		this.createStyleSheet();
		this.getTabsets();
		return this;
	},
	createStyleSheet: function() {
		this.tabStyleSheet = document.createElement('style');
		this.tabStyleSheet.setAttribute('type', 'text/css');
		this.tabStyleRule = '.'+this.options.hiddenClass;
		this.tabStyleRule += '{position:absolute !important;left:-9999px !important;top:-9999px !important;display:block !important}';
		document.getElementsByTagName('head')[0].appendChild(this.tabStyleSheet);
		if (this.tabStyleSheet.styleSheet) {
			this.tabStyleSheet.styleSheet.cssText = this.tabStyleRule;
		} else {
			this.tabStyleSheet.appendChild(document.createTextNode(this.tabStyleRule));
		}
	},
	getTabsets: function() {
		this.tabsets = this.queryElements(this.options.tabsets);
		for(var i = 0; i < this.tabsets.length; i++) {
			this.initTabset(this.tabsets[i]);
		}
	},
	initTabset: function(tabset) {
		var tabLinks = this.queryElements(this.options.tablinks, tabset), instance = this;
		for(var i = 0; i < tabLinks.length; i++) {
			tabLinks[i]['on'+this.options.event] = function(){
				instance.switchTab(this, tabLinks);
				return false;
			}
			if(this.hasClass(this.options.classOnParent ? tabLinks[i].parentNode : tabLinks[i], this.options.activeClass)) {
				this.switchTab(tabLinks[i], tabLinks);
			}
		}
	},
	switchTab: function(link, set) {
		for(var i = 0; i < set.length; i++) {
			var curLink = set[i];
			var curTab = document.getElementById(curLink.href.substr(curLink.href.indexOf('#')+1));
			if(curLink === link) {
				this.addClass(this.options.classOnParent ? curLink.parentNode : curLink, this.options.activeClass);
				this.addClass(curTab,this.options.visibleClass);
				this.removeClass(curTab,this.options.hiddenClass);
			} else {
				this.removeClass(this.options.classOnParent ? curLink.parentNode : curLink, this.options.activeClass);
				this.removeClass(curTab,this.options.visibleClass);
				this.addClass(curTab,this.options.hiddenClass);
			}
		}
	},
	queryElements: function(selector, holder) {
		var box = holder || document;
		if(box.querySelectorAll) {
			return box.querySelectorAll(selector);
		} else {
			var res = [], selectorData = selector.split('.');
			var tagName = selectorData[0];
			var set = box.getElementsByTagName(tagName);
			if(selectorData.length > 1) {
				for(var i = 0; i < set.length; i++) {
					if(this.hasClass(set[i], selectorData[1])) res.push(set[i]);
				}
				return res;
			} else {
				return set;
			}
		}
	},
	hasClass: function (obj,cname) {
		return (obj.className ? obj.className.match(new RegExp('(\\s|^)'+cname+'(\\s|$)')) : false);
	},
	addClass: function (obj,cname) {
		if (!this.hasClass(obj,cname)) obj.className += " "+cname;
	},
	removeClass: function (obj,cname) {
		if (this.hasClass(obj,cname)) obj.className=obj.className.replace(new RegExp('(\\s|^)'+cname+'(\\s|$)'),' ');
	}
};
