// JavaScript Document
//http://www.w3schools.com/jS/js_operators.asp

// Get elements by class name
// Developed by Robert Nyman, http://www.robertnyman.com
// Code/licensing: http://code.google.com/p/getelementsbyclassname/
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

// Get elements by id
function id() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}


// Main menu
menuHover = function(nav) {
	var sfEls = document.getElementById(nav).getElementsByTagName("li");
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function() {
			this.className+=" sfhover";
		}
		
		sfEls[i].onmouseout=function() {
			this.className=this.className.replace(new RegExp("\\s?sfhover\\b"), "");
		}
	}

	var listItem = document.getElementById(nav).getElementsByTagName('LI');
	var active = getElementsByClassName('current', 'LI', document.getElementById(nav))[0];

	for(var i=0; i < listItem.length; i++){
		listItem[i].onmouseover = function(){
			var self = this;
			for(var a=0; a < listItem.length; a++){

				if(self == listItem[a] || self == listItem[a].parentNode.parentNode){	
					
					// keep the current item in view
					if(self.getElementsByTagName('UL')[0]) self.getElementsByTagName('UL')[0].style.left = '0px';

					var changeStyle = self.getElementsByTagName('a');
					changeStyle[0].className+=" current";

					if(listItem[a].parentNode == 'ul') { 
						listItem[a].parentNode.style.left = '0px';
					}

					// remove all other "current" classes from other listItem
					for(var b=0; b < listItem.length; b++){
						if(listItem[b] != self && listItem[b] != active) listItem[b].className = '';
					}

				} else if(self != listItem[a]) {
					if(listItem[a].getElementsByTagName('UL')[0]) listItem[a].getElementsByTagName('UL')[0].style.left = '-5000px';

					if(listItem[a].className == 'current'){
						if(listItem[a].getElementsByTagName('UL')[0]) listItem[a].getElementsByTagName('UL')[0].style.left = '-5000px';
					}
				}
			}
		}

		listItem[i].onmouseout = function(){	
			var self = this;
			if(this != active){
				if(self.getElementsByTagName('UL')[0]) self.getElementsByTagName('UL')[0].style.left = '-5000px';

				var changeStyle = self.getElementsByTagName('a');
				changeStyle[0].className=this.className.replace(new RegExp("\\s?current\\b"), "");
			} 
			if(active) {
				active.className = 'current'; 
				if(active.getElementsByTagName('UL')[0]) active.getElementsByTagName('UL')[0].style.left = '0px';
			}
		}
	}
}


addEvent(window, 'load', function () { menuHover('menu'); });

function addEvent( obj, type, fn ) {
	if ( obj.attachEvent ) {
		obj['e'+type+fn] = fn;
		obj[type+fn] = function(){
			obj['e'+type+fn]( window.event );
		}
		obj.attachEvent( 'on'+type, obj[type+fn] );
	} else
		obj.addEventListener( type, fn, false );
}

function removeEvent( obj, type, fn ) {
	if ( obj.detachEvent ) {
		obj.detachEvent( 'on'+type, obj[type+fn] );
		obj[type+fn] = null;
	} else
	obj.removeEventListener( type, fn, false );
}


// Functions to validate user selected product option
function valRequired() {
	if (document.order_form.product_option_1.value == "") 
		{
			alert("Please select one of the options before adding to your cart.");
			document.order_form.product_option_1.focus();
			document.order_form.product_option_1.style.backgroundColor = "#ffffcc";
		}
	else 
		document.order_form.submit();
}

// Functions for wish list submit
function wishListSubmit() {
	if (document.order_form.product_option_1.value == "") 
		{
			alert("Please select one of the options before adding to your wish list.");
			document.order_form.product_option_1.focus();
			document.order_form.product_option_1.style.backgroundColor = "#ffffcc";
		}
	else 
		document.order_form.submit();
}

// Functions to validate user selected product options on kits
function valRequiredKit() {
	if (document.order_form_kit.product_option_1_kit1.value == "") 
		{
			alert("Please select one of the options before adding to your cart.");
			document.order_form_kit.product_option_1_kit1.focus();
			document.order_form_kit.product_option_1_kit1.style.backgroundColor = "#ffffcc";
		}
	if (document.order_form_kit.product_option_1_kit2.value == "") 
		{
			alert("Please select one of the options before adding to your cart.");
			document.order_form_kit.product_option_1_kit2.focus();
			document.order_form_kit.product_option_1_kit2.style.backgroundColor = "#ffffcc";
		}
	else 
		document.order_form_kit.submit();
}

// Functions to validate user selected product option
function valRequiredDonation() {
	if (document.order_form.product_option_1.value == "") 
		{
			alert("Thank you for your generosity, please select an amount");
			document.order_form.product_option_1.focus();
			document.order_form.product_option_1.style.backgroundColor = "#ffffcc";
		}
	else 
		document.order_form.submit();
}

// Functions for product detail images
function changeImg(src) {
	var oldSrc = document.getElementById('mainImg').src.split('/');
	oldSrc[oldSrc.length-1] = src;
	document.getElementById('mainImg').src = oldSrc.join('/');
}

function largeImg(src) {
	var oldSrc = document.getElementById('mainImg').src.split('/');
	oldSrc[oldSrc.length-1] = src;
	window.open(oldSrc.join('/'),"viewLarge","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=770,height=600,top=30,left=30");
}

function newWindow() {
	window.open("","windowname","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=450,height=425,top=30,left=30");
}

// Suckerfish
//http://www.htmldog.com/articles/suckerfish/dropdowns/
/*
sfHover = function() {
	var sfEls = document.getElementById("nav").getElementsByTagName("LI");
	for (var i=0; i < sfEls.length; i++) {
		sfEls[i].onmouseover = function() {
			this.className+=" sfhover";
		}
		sfEls[i].onmouseout = function() {
			this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
		}
	}
}
if (window.attachEvent) window.attachEvent("onload", sfHover);
*/
