$(document).ready(function(){
	$('div.gallery').gallery({
		duration: 500,
		autoRotation: 3000,
		listOfSlides: '.holder > ul > li',
		switcher: '.switcher>li'
	});
	$('.tab-content').hide();
	$('#tab-0').show();
	
	switchProductColor( $('#appearanceId').val() );
	switchView( $('#currentViewId').val() );
	switchSize( $('#size').val() );
	updatePrice();
	updateCustomizeUrl();
	
	$('#nav li').hover(
        function () {
            //show its submenu
            $('ul', this).slideDown(100);
 
        },
        function () {
            //hide its submenu
            $('ul', this).slideUp(100);        
        }
    );
});
(function($) {
	$.fn.gallery = function(options) {
		var args = Array.prototype.slice.call(arguments);
		args.shift();
		this.each(function(){
			if(this.galControl && typeof options === 'string') {
				if(typeof this.galControl[options] === 'function') {
					this.galControl[options].apply(this.galControl, args);
				}
			} else {
				this.galControl = new Gallery(this, options);
			}
		});
		return this;
	};
	function Gallery(context, options) { this.init(context, options); };
	Gallery.prototype = {
		options:{},
		init: function (context, options){
			this.options = $.extend({
				duration: 700,
				slideElement:1,
				autoRotation: false,
				effect: false,
				listOfSlides: '.list > li',
				switcher: false,
				autoSwitcher: false,
				disableBtn: false,
				nextBtn: 'a.link-next, a.btn-next, a.next',
				prevBtn: 'a.link-prev, a.btn-prev, a.prev',
				circle: true,
				clone: false,
				direction: false,
				event: 'click',
				IE: false
			}, options || {});
			var self = this;
			this.context = $(context);
			this.els = this.context.find(this.options.listOfSlides);
			this.list = this.els.parent();
			this.count = this.els.length;
			this.autoRotation = this.options.autoRotation;
			this.direction = this.options.direction;
			this.duration = this.options.duration;
			if (this.options.clone) {
				this.list.append(this.els.clone());
				this.list.prepend(this.els.clone());
				this.els = this.context.find(this.options.listOfSlides);
			}
			this.wrap = this.list.parent();
			if (this.options.nextBtn) this.nextBtn = this.context.find(this.options.nextBtn);
			if (this.options.prevBtn) this.prevBtn = this.context.find(this.options.prevBtn);

			this.calcParams(this);
			
			if (this.options.autoSwitcher) {
				this.switcherHolder = this.context.find(this.options.switcher).empty();
				this.switchPattern = $('<ul class="'+ (this.options.autoSwitcher == true ? '' : this.options.autoSwitcher) +'"></ul>');
				for (var i=0;i<this.max+1;i++){
					$('<li><a href="#">'+i+'</a></li>').appendTo(this.switchPattern);
				}
				this.switchPattern.appendTo(this.switcherHolder);
				this.switcher = this.context.find(this.options.switcher).find('li');
				this.active = 0;
			} else {
				if (this.options.switcher) {
					this.switcher = this.context.find(this.options.switcher);
					this.active = this.switcher.index(this.switcher.filter('.active:eq(0)'));
				}
				else this.active = this.els.index(this.els.filter('.active:eq(0)'));
			}
			if (this.active < 0) this.active = 0;
			this.last = this.active;
			if (this.options.switcher) this.switcher.removeClass('active').eq(this.active).addClass('active');
			if (this.options.clone) this.active += this.count;
			
			if (this.options.effect) this.els.css({opacity: 0}).removeClass('active').eq(this.active).addClass('active').css({opacity: 1}).css('opacity', 'auto');
			else {
				if (this.direction) this.list.css({marginTop: -(this.mas[this.active])});
				else this.list.css({marginLeft: -(this.mas[this.active])});
			}
			
			
			if (this.options.nextBtn) this.initEvent(this, this.nextBtn,true);
			if (this.options.prevBtn) this.initEvent(this, this.prevBtn,false);
			
			this.initWindow(this,$(window));
			
			if (this.autoRotation) this.runTimer(this);
			
			if (this.options.switcher) this.initEventSwitcher(this, this.switcher);
			if (this.options.disableBtn && !this.options.circle && !this.options.clone) this.disableControls();
		},
		calcParams: function(self){
			this.mas = [];
			this.sum = 0;
			this.max = this.count-1;
			this.width = 0;
			this.els.each(function(){self.mas.push(self.width);self.width += self.direction?$(this).outerHeight(true):$(this).outerWidth(true);self.sum+=self.direction?$(this).outerHeight(true):$(this).outerWidth(true);});
			this.finish = this.direction?this.sum-this.wrap.outerHeight():this.sum-this.wrap.outerWidth();
			for (var i=0;i<this.count;i++){
				if (this.mas[i]>=this.finish) {
					this.max = i;
					break;
				}
			}
		},
		changeSettings: function(set,val){
			this[set] = val;
		},
		fadeElement: function(){
			this.els.eq(this.last).animate({opacity:0}, {queue:false, duration: this.duration});
			this.els.removeClass('active').eq(this.active).addClass('active').animate({
				opacity:1
			}, {queue:false, duration: this.duration, complete: function(){
				$(this).css('opacity','auto');
			}});
			if (this.options.switcher) this.switcher.removeClass('active').eq(this.active).addClass('active');
			this.last = this.active;
		},
		scrollElement: function(f){
			if (this.direction) this.list.animate({marginTop: f ? -this.finish : -(this.mas[this.active])}, {queue:false, duration: this.duration});
			else this.list.animate({marginLeft: f ? -this.finish : -(this.mas[this.active])}, {queue:false, duration: this.duration});
			if (this.options.switcher) this.switcher.removeClass('active').eq(this.options.clone ? this.active < this.count ? this.active/this.options.slideElement : this.active >= this.count*2 ? (this.active - this.count*2)/this.options.slideElement : (this.active - this.count)/this.options.slideElement : this.active/this.options.slideElement).addClass('active');
		},
		runTimer: function($this){
			if($this._t) clearTimeout($this._t);
			$this._t = setInterval(function(){
				$this.nextStep();
			}, this.autoRotation);
		},
		initEventSwitcher: function($this, el){
			el.bind($this.options.event, function(){
				if (!$(this).hasClass('active')){
					$this.active = $this.switcher.index($(this)) * $this.options.slideElement;
					if ($this.options.clone) $this.active += $this.count;
					$this.initMove();
				}
				return false;
			});
		},
		initEvent: function($this, addEventEl, dir){
			addEventEl.bind($this.options.event, function(){
				if (dir) $this.nextStep();
				else $this.prevStep();
				if($this._t) clearTimeout($this._t);
				if ($this.autoRotation) $this.runTimer($this);
				return false;
			});
		},
		disableControls: function(){
			this.prevBtn.removeClass(this.options.disableBtn);
			this.nextBtn.removeClass(this.options.disableBtn);
			if (this.active>=this.max) this.nextBtn.addClass(this.options.disableBtn);
			if (this.active<=0) this.prevBtn.addClass(this.options.disableBtn);
		},
		initMove: function(){
			var f = false;
			if (this.active >= this.max && !this.options.clone) {
				f = true;
				this.active = this.max;
			}
			if(this._t) clearTimeout(this._t);
			if (!this.options.effect) this.scrollElement(f);
			else this.fadeElement();
			if (this.autoRotation) this.runTimer(this);
			if (this.options.disableBtn && !this.options.circle && !this.options.clone) this.disableControls();
		},
		nextStep:function(){
			var f = false;
			this.active = this.active + this.options.slideElement;
			if (this.options.disableBtn && !this.options.circle && !this.options.clone) this.disableControls();
			if (this.options.clone){
				if (this.active > this.count*2) {
					if (this.direction) this.list.css({marginTop:-this.mas[this.count]});
					else this.list.css({marginLeft:-this.mas[this.count]});
					this.active = this.count+this.options.slideElement;
				}
			} else {
				if (this.active >= this.max) {
					if (this.options.circle) {
						if (this.active > this.max) this.active = 0;
						else {
							this.active = this.max;
							f = true
						}
					}
					else {
						this.active = this.max;
						f = true;
					}
				}
			}
			if (!this.options.effect) this.scrollElement(f);
			else this.fadeElement();
		},
		prevStep: function(){
			var f = false;
			this.active = this.active - this.options.slideElement;
			if (this.options.disableBtn && !this.options.circle && !this.options.clone) this.disableControls();
			if (this.options.clone){
				if (this.active < 0) {
					if (this.direction) this.list.css({marginTop:-this.mas[this.count]});
					else this.list.css({marginLeft:-this.mas[this.count]});
					this.active = this.count-1;
				}
			} else {
				if (this.active < 0) {
					if (this.options.circle) {
						this.active = this.max;
						f = true;
					}
					else this.active = 0;
				}
			}
			if (!this.options.effect) this.scrollElement(f);
			else this.fadeElement();
		},
		initWindow: function($this,$window){
			$window.focus($.proxy(this.play,this));
			$window.blur($.proxy(this.stop,this));
		},
		stop: function(){
			if (this._t) clearTimeout(this._t);
		},
		play: function(){
			if (this._t) clearTimeout(this._t);
			if (this.autoRotation) this.runTimer(this);
		}
	}
}(jQuery));
function initPage()
{
	clearFormFields({
		clearInputs: true,
		clearTextareas: true,
		passwordFieldText: false,
		addClassFocus: "focus",
		filterClass: "default"
	});
}
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";
	}
}

function switchDepartment(dep) {
	$('.maintab.active').removeClass('active');
	$('#maintab-' + dep).addClass('active');
	$('.tab-content').hide();
	$('#tab-' + dep).show();

	switchCategoryAll(dep);
}

function switchCategory(cat) {
	$('.cattab.active').removeClass('active');
	$('#cat-tab-'+cat).addClass('active');
	$('#products-area li').hide();
	$('.cat-'+cat).show();
} 

function switchGeneralCategory(genCat) {
	$('.cattab.active').removeClass('active');
	$('#gen-cat-tab-'+genCat).addClass('active');
	$('#products-area li').hide();
	$('.gen-cat-'+genCat).show();
} 

function switchCategoryAll(dep) {
	$('.cattab.active').removeClass('active');
	$('#all-tab-'+dep).addClass('active');
	
	if(dep==0) {
		$('#products-area li').show();
	}
	else {
		$('#products-area li').hide();
		$('.dep-'+dep).show();
	}
}

function switchProductColor(id) {
	$('.product-color li').removeClass('active');
	$('#product-color-'+id).addClass('active');
	$('#appearanceId').val(id);
	
	updateProductImages();
	updateCustomizeUrl();
}

function switchPrintColor(id) {
	$('.print-color li').removeClass('active');
	$('#print-color-'+id).addClass('active');
	$('#printColorIds').val(id);
	
	updateProductImages();
	updateCustomizeUrl();
}

function updateProductImages() {
	updateMainProductImage();

	$('.product-view-image').each(function() {
		var viewId = $(this).attr('id').substr(19);
		var designId = ( viewId == $('#viewId').val() ) ? $('#designId').val() : 'null';
		
		url = getProductImageUrl( $('#appearanceId').val(), $('#printColorIds').val(), designId, viewId, 100 );
		$(this).attr('src', url);
	});
}

function showLoadingImages() {
	var loadingImageUrl = 'http://www.bufftees.com/images/ajax-loader.gif';
	$('#mainProductImage').attr('src', loadingImageUrl);
	$('.product-view-image').each(function() {
		$(this).attr('src', loadingImageUrl);
	});	
}

function updateMainProductImage() {
	var designId = ( $('#currentViewId').val() == $('#viewId').val() ) ? $('#designId').val() : 'null';
	var mainUrl = getProductImageUrl( $('#appearanceId').val(), $('#printColorIds').val(), designId, $('#currentViewId').val(), 450);
	$('#mainProductImage').attr('src', mainUrl);
}

function getProductImageUrl(appearanceId, printColorId, designId, viewId, pixSize) {
	var url = 'http://www.bufftees.com/images/products/';
	url += $('#productTypeId').val() + '/';
	url += appearanceId + '/';
	url += designId + '/';
	url += viewId + '/';
	if( printColorId != '' ) {
		url += printColorId + '/';
	}
	url += $('#hyphenatedname').val() + '-' + pixSize + '.png';
	
	return url;
}

function switchSize(id) {
	$('#size').val(id);
	$('.size li').removeClass('active');
	$('#size-'+id).addClass('active');
}

function switchView(id) {
	$('#currentViewId').val(id);
	$('.product-view').removeClass('active');
	$('#product-view-' + id).addClass('active');
	updateMainProductImage();
}

function updatePrice() {
	var price = $('#productPrice').val() * $('#quantity').val();
	$('#price').html( '$' + price.toFixed(2) );
}

function changeCategory(slug) {
	location = ( slug == 0 ) ? 'http://www.bufftees.com' : 'http://www.bufftees.com/designs/' + slug;
}

function validateShirtForm() {
	if( validateSize() && validateQuantity() ) {
		submitShirtForm();
	}
}

function validateQuantity() {
	if( !$('#quantity').val().match(/^[0-9]+$/) || $('#quantity').val() == 0 ) {
		alert('Invalid quantity entered.');
		$('#quantity').val(1);
		return false;
	}
	else {
		updatePrice();
		return true;
	}
}

function validateSize() {
	if( $('#size').val() == '' ) {
		alert('Please select a size.');
		return false;
	}
	else {
		return true;
	}
}

function submitShirtForm() {
	$('#shirt-form').submit();
}

function popup(url) {
	$('#nav ul.subnav').hide();
	window.open( url, "", "status = 0, location = 0, height = 700, width = 680, scrollbars = 1, resizable = 1, top = 100, left = 400" );
}

function updateCustomizeUrl() {
	var url = 'http://bufftees.spreadshirt.com/customize';
	url += '/productType/' + $('#productTypeId').val();
	url += '/productColor/' + $('#appearanceId').val();
	url += '/design/' + $('#designId').val();
	if( $('#printColorIds').val() != '' ) {
		url += '/designColor1/' + $('#printColorIds').val();
	}
	$('.customize-block a.btn-custom').attr('href', url);
}



if (window.addEventListener)
	window.addEventListener("load", initPage, false);
else if (window.attachEvent)
	window.attachEvent("onload", initPage);
