/************************************************************** 
 * Cross-browser event handling, by Scott Andrew
 **************************************************************/
function addEvents(element, eventType, lamdaFunction, useCapture) {
    if (element.addEventListener) {
        element.addEventListener(eventType, lamdaFunction, useCapture);
        return true;
    } else if (element.attachEvent) {
        var r = element.attachEvent('on' + eventType, lamdaFunction);
        return r;
    } else {
        return false;
    }
}

/************************************************************** 
 * Clear Default Text: functions for clearing and replacing default text in
 * <input> elements.
 * by Ross Shannon, http://www.yourhtmlsource.com/
 **************************************************************/

function clearDefaultText(e) {
    var target = window.event ? window.event.srcElement : e ? e.target : null;
    if (!target) {
    	return;
    }
    
    if (target.value == target.defaultText) {
        target.value = '';
    }
}

function replaceDefaultText(e) {
    var target = window.event ? window.event.srcElement : e ? e.target : null;
    if (!target) {
    	return;
    }
    
    if (target.value === '' && target.defaultText) {
        target.value = target.defaultText;
    }
}

function init() {
    var formInputs = document.getElementsByTagName('input');
    for (var i = 0; i < formInputs.length; i++) {
        var theInput = formInputs[i];
        
        if (theInput.type == 'text' && (theInput.className.match("text") || theInput.className.match(/\bcleardefault\b/) || theInput.id.match(/\SearchForm_SearchForm_Search\b/) || theInput.id.match(/\SignupForm_AfterContent_Surname\b/) || theInput.id.match(/\SignupForm_AfterContent_Email\b/) || theInput.id.match(/\SignupForm_AfterContent_FirstName\b/) )) {  
            /* Add event handlers */          
            addEvents(theInput, 'focus', clearDefaultText, false);
            addEvents(theInput, 'blur', replaceDefaultText, false);
            
            /* Save the current value */
            if (theInput.value !== '') {
                theInput.defaultText = theInput.value;
            }
        }
    }
}

/*
 * Zebra Striping and mouseover rows for tables.
 * by Marko Dugonjic, http://www.maratz.com/blog/
 */
var stripe = function() {
    if (!document.getElementsByTagName || !document.createTextNode) return;
    var even = true;
    var trs = document.getElementsByTagName('tr');      
    for (var i = 0; i < trs.length; i++) {
        if (trs[i].parentNode.nodeName == 'TBODY') {
            trs[i].onmouseover = function(){
                this.className += (!this.className) ? 'ruled' : ' ruled';
            }
            trs[i].onmouseout = function(){
                this.className = this.className.replace(' ruled', '').replace('ruled', '');
            }        
            if(even)
            trs[i].className += (!trs[i].className) ? 'even' : ' even';        
            even = !even;
        }
    }
}

DOMAssistant.DOMReady(stripe); 

/************************************************************** 
 * Accessible menu
 * 
 * 
 **************************************************************/
 /**
 * Adds and removes classes to a list of links to allow keyboard accessibility
 *
 * @param string dropDownId
 * @param string hoverClass
 * @param int mouseOffDelay
 */
function dropdown(dropdownId, hoverClass, mouseOffDelay) {
	if(dropdown = document.getElementById(dropdownId)) {
		var listItems = dropdown.getElementsByTagName('li');
		for(var i = 0; i < listItems.length; i++) {
			listItems[i].onmouseover = function() { this.className = addClass(this); }
			listItems[i].onmouseout = function() {
				var that = this;
				setTimeout(function() { that.className = removeClass(that); }, mouseOffDelay);
				this.className = that.className;
			}
			
			var anchor = listItems[i].getElementsByTagName('a');
			anchor = anchor[0];
			anchor.onfocus = function() { tabOn(this.parentNode); }
			anchor.onblur = function() { tabOff(this.parentNode); }
		}
	}
	
	function tabOn(li) {
		if(li.nodeName == 'LI') {
			li.className = addClass(li);
			tabOn(li.parentNode.parentNode);
		}
	}
	
	function tabOff(li) {
		if(li.nodeName == 'LI') {
			li.className = removeClass(li);
			tabOff(li.parentNode.parentNode);
		}
	}
	
	function addClass(li) { return li.className + ' ' + hoverClass; }
	function removeClass(li) { return li.className.replace(hoverClass, ""); }
}
sfHover = function() {
	var sfEls = document.getElementById("mainnav").getElementsByTagName("LI");
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function() {
			this.className+=(this.className.length>0? " ": "") + "sfhover";
		};
		sfEls[i].onmouseout=function() {
			this.className=this.className.replace(new RegExp("( ?|^)sfhover\\b"), "");
		};
	}
};
mcAccessible = function() {
	var mcEls = document.getElementById("mainnav").getElementsByTagName("A");
	for (var i=0; i<mcEls.length; i++) {
		mcEls[i].onfocus=function() {
			this.className+=(this.className.length>0? " ": "") + "sffocus"; //a:focus
			this.parentNode.className+=(this.parentNode.className.length>0? " ": "") + "sfhover"; //li < a:focus
			if(this.parentNode.parentNode.parentNode.nodeName == "LI") {
				this.parentNode.parentNode.parentNode.className+=(this.parentNode.parentNode.parentNode.className.length>0? " ": "") + "sfhover"; //li < ul < li < a:focus
				if(this.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "LI") {
					this.parentNode.parentNode.parentNode.parentNode.parentNode.className+=(this.parentNode.parentNode.parentNode.parentNode.parentNode.className.length>0? " ": "") + "sfhover"; //li < ul < li < ul < li < a:focus
				}
			}
		};
		mcEls[i].onblur=function() {
			this.className=this.className.replace(new RegExp("( ?|^)sffocus\\b"), "");
			this.parentNode.className=this.parentNode.className.replace(new RegExp("( ?|^)sfhover\\b"), "");
			if(this.parentNode.parentNode.parentNode.nodeName == "LI") {
				this.parentNode.parentNode.parentNode.className=this.parentNode.parentNode.parentNode.className.replace(new RegExp("( ?|^)sfhover\\b"), "");
				if(this.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "LI") {
					this.parentNode.parentNode.parentNode.parentNode.parentNode.className=this.parentNode.parentNode.parentNode.parentNode.parentNode.className.replace(new RegExp("( ?|^)sfhover\\b"), "");
				}
			}
		};
	}
};

DOMAssistant.DOMReady(function() {
	dropdown('mainnav', 'hover', 150);
	$$('navigation').removeClass('js-disabled');
	}
); 

/************************************************************** 
 * Validate subscribe fields
 **************************************************************/

function validateForm(objElem) {

	if ($$('SignupForm_AfterContent_FirstName').value == "First Name:" || $$('SignupForm_AfterContent_FirstName').value == "" ) {
		$$('SignupForm_AfterContent_FirstName').addClass("validation-error");
//		alert('fn');
		return false;
	}

	if ($$('SignupForm_AfterContent_Surname').value == "Surname:" || $$('SignupForm_AfterContent_Surname').value == "" ) {
		$$('SignupForm_AfterContent_Surname').addClass("validation-error");
//		alert('sn');
		return false;
	}

	if ($$('SignupForm_AfterContent_Email').value == "Email:" || $$('SignupForm_AfterContent_Email').value == "" ) {
		$$('SignupForm_AfterContent_Email').addClass("validation-error");
//		alert('em');
		return false;
	}
	
}

// removes the 'error' class on focus
function unValidateField(objElem) {
	
	if ($(objElem).hasClass("validation-error")) {
		$(objElem).removeClass("validation-error");
	}
}

// checks for defaults and errors if found. Email is handled by PHP
function validateField(objElem) {
	
	
	if (objElem.value == "First Name:" || objElem.value == "Surname:" || objElem.value == "Email:" || objElem.value == "") {
		$(objElem).addClass("validation-error");
		objElem.value="";
		return false;
	}

	if (objElem.id == "SignupForm_AfterContent_Email" && !isEmail(objElem.value) ) {
		$(objElem).addClass("validation-error");
		return false;
	}
}

// fired on load for Subscribe page.
function signupForm() {

	//remove labels from view
	$$("SignupForm_AfterContent").elmsByTag("label").each(function () {
		$(this).style.display="none";	
	});

	//add in labels to input boxes
	if($$('SignupForm_AfterContent_FirstName').value == "") { $$('SignupForm_AfterContent_FirstName').value = "First Name:"; }
	if($$('SignupForm_AfterContent_Surname').value == "") { $$('SignupForm_AfterContent_Surname').value = "Surname:"; }
	if($$('SignupForm_AfterContent_Email').value == "") { $$('SignupForm_AfterContent_Email').value = "Email:"; }

	//add validation to inputs
	$$("SignupForm_AfterContent").elmsByTag("input").each(function () {
		$(this).addClass("more-space");
		$$(this).addEvent("blur", function () {validateField(this);}); 
		$$(this).addEvent("focus", function () {unValidateField(this);}); 
	});

	//add validation to form submit
	$$("SignupForm_AfterContent").addEvent("submit", function () {return validateForm(this);}); 

	init();

}


/************************************************************** 
 * Insert twitter widget
 **************************************************************/
function twitter() {
	new TWTR.Widget({
		version: 2,
		type: 'profile',
		id: 'twitt',
		rpp: 3,
		interval: 2000,
		width: 423,
		height: 234,
		theme: {
			shell: {
				background: '#deedf9',
				color: '#000000'
			},
			tweets: {
				background: '#bcd4e9',
				color: '#003c7d',
				links: '#f1960c'
			}
		},
		features: {
		scrollbar: false,
		loop: false,
		live: false,
		hashtags: true,
		timestamp: true,
		avatars: false,
		behavior: 'all'
		}
	}).render().setUser('allcreatureshea').start();
}

/************************************************************** 
 * FIX for IE8's NOSCRIPT bugs
 **************************************************************/
var strBrowser = navigator.userAgent.toLowerCase();
if(strBrowser.indexOf("msie") > -1 && strBrowser.indexOf("mac") < 0){
	DOMAssistant.DOMReady(initNoscript); 
}

function initNoscript() {
	var els = document.getElementsByTagName('noscript');
	for ( var i = 0; i < els.length; i++ ) {
		els[i].style.display='none';
	}
}


/************************************************************** 
 * Insert on store pages
 **************************************************************/

function storeInitChoose() {
	// ADD PLUS/MINUS BUTTONS TO QUANTITY BOXES
	// ADDS ON FOCUS/BLUR VALIDATION TO FIELD
	$$("StoreMultiForm_StoreMultiForm").elmsByClass("middleColumn", "div").each(function () {
		$(this).addContent("<a onclick='add(\""+$(this).firstChild.id+"\");' class='add'>+</a><a onclick='minus(\""+$(this).firstChild.id+"\");' class='minus'>-</a>"); 
		$(this.firstChild).addEvent("keyup", function() {CheckAmount(this);notNull(this);}); 
	$$("StoreMultiForm_StoreMultiForm").addEvent("submit", validateSubmitChoose ); 
	});

}

function storeInitDetails() {
	// ADDS ON FOCUS/BLUR VALIDATION TO FIELDS
	$$("StoreMultiForm_StoreMultiForm_fullName").addEvent("blur", function() {required(this);}); 
	$$("StoreMultiForm_StoreMultiForm_postalAddress").addEvent("blur", function() {required(this);}); 
	$$("StoreMultiForm_StoreMultiForm_billingAddress").addEvent("blur", function() {required(this);}); 
	$$("StoreMultiForm_StoreMultiForm_contactPhone").addEvent("blur", function() {required(this);phoneNumber(this);}); 
	$$("StoreMultiForm_StoreMultiForm_contactEmail").addEvent("blur", function() {required(this);emailCheck(this);}); 
	$$("StoreMultiForm_StoreMultiForm").addEvent("submit", validateSubmitStore ); 
}

function contactInitDetails() {
	// ADDS ON FOCUS/BLUR VALIDATION TO FIELDS
	$$("Form_Form_EditableTextField1").addEvent("blur", function() {required(this);}); 
	$$("Form_Form_EditableTextField2").addEvent("blur", function() {required(this);}); 
	$$("Form_Form_EditableEmailField4").addEvent("blur", function() {required(this);emailCheck(this);}); 
	$$("Form_Form_EditableTextField5").addEvent("blur", function() {required(this);phoneNumber(this);}); 
	$$("Form_Form_EditableTextField7").addEvent("blur", function() {required(this);}); 
	$$("Form_Form").addEvent("submit", validateSubmitContact ); 
}

/************************************************************** 
 * VALIDATE ON SUBMIT
 **************************************************************/
function validateSubmitChoose() {
	var formCheck = false;
	$$("StoreMultiForm_StoreMultiForm").elmsByClass("text", "input").each(function () {
		if($(this).value != "" && $(this).value != "0") {
			formCheck = true;
		}
	});

	if (formCheck == false) {
		window.location.hash = 'StoreMultiForm_StoreMultiForm';
		ReturnError.setItem('overall', 'You must select an item to continue.');	//add to error array
	} else {
		ReturnError.removeItem('overall');	//remove from error array

	}
	
	return formError();
}

function validateSubmitStore() {

	var formName = '';
	
	formName = $$("StoreMultiForm_StoreMultiForm_fullName");
	required(formName);

	formName = $$("StoreMultiForm_StoreMultiForm_postalAddress");
	required(formName);
	
	formName = $$("StoreMultiForm_StoreMultiForm_billingAddress");
	required(formName);
	
	formName = $$("StoreMultiForm_StoreMultiForm_contactPhone");
	required(formName);
	phoneNumber(formName);
	
	formName = $$("StoreMultiForm_StoreMultiForm_contactEmail");
	required(formName);
	emailCheck(formName);
	
	return formError();
}

function validateSubmitContact() {
	var formName = '';
	
	formName = $$("Form_Form_EditableTextField1");
	required(formName);

	formName = $$("Form_Form_EditableTextField2");
	required(formName);
	
	formName = $$("Form_Form_EditableTextField7");
	required(formName);
	
	formName = $$("Form_Form_EditableTextField5");
	required(formName);
	phoneNumber(formName);
	
	formName = $$("Form_Form_EditableEmailField4");
	required(formName);
	emailCheck(formName);
	
	return formError();
}


function add(inputElem) {
	var elm = $$(inputElem);

	var elmVal = parseFloat(elm.value);
	var newValue = '0';
	
	if (isNaN(elmVal) || elmVal < 0) {
		newValue = 0;
	} else {
		newValue = elmVal + 1;
	}
	
	elm.value = newValue;
}

function minus(inputElem) {
	var elm = $$(inputElem);

	var elmVal = parseFloat(elm.value);
	var newValue = '0';
	
	if (isNaN(elmVal) || elmVal < 0) {
		newValue = 0;
	} else if(elmVal != 0) {
		var newValue = elmVal - 1;
	}

		elm.value = newValue;
	
}

	/************************************************************** 
	 * VALIDATE HELPERS
	 **************************************************************/
	
	// Returns true on a valid email address
	function isEmail(e) {
		ok = "1234567890qwertyuiop[]asdfghjklzxcvbnm.@-_QWERTYUIOPASDFGHJKLZXCVBNM";
	
		for (i = 0; i < e.length; i++) {
			if (ok.indexOf(e.charAt(i)) < 0) {
				return (false);
			}
		}
	
		if (document.images) {
			re = /(@.*@)|(\.\.)|(^\.)|(^@)|(@$)|(\.$)|(@\.)/;
			re_two = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
			if (!e.match(re) && e.match(re_two)) {
				return ( - 1);
			}
		}
	}

	// returns the name of the field form the associated label
	function getFieldName(formElem) {
		var objName = $$(formElem);
		
		var getDiv = objName.id;
		var nameDiv = theForm.id+"_"
		//alert(nameDiv);
		getDiv = getDiv.replace(nameDiv, "");
		
		var getLabel = $$(getDiv);
		return getLabel.firstChild.innerHTML;
	}

	// Checks by default agains numbers only, can extend for phone numbers with spaces, brackets etc by appending the allowed characters.
	function IsNumeric(sText, moreValid) {
		var ValidChars = "0123456789"+moreValid;
		var IsNumber=true;
		var Char;
	 
		for (i = 0; i < sText.length && IsNumber == true; i++) { 
			Char = sText.charAt(i); 
			if (ValidChars.indexOf(Char) == -1) {
				IsNumber = false;
			}
		}
		return IsNumber;
	}
	
	// Returns true or false depending on check by chkNumeric.
	function CheckAmount(formElem) {
		var minval = '0';
		var maxval = "";
	
		var objName = $$(formElem);
	
		if (chkNumeric(objName, minval, maxval) === false) {
			//objName.select();
			objName.focus();
			return false;
		} else {
			return true;
		}
	}
	
	// replaces a null value with a zero
	function notNull(formElem) {
		var objName = $$(formElem);
	
		if (objName.value == "" || objName.value == null) {
			objName.value = "0"
		}
	}

	// Phone Number checker
	function phoneNumber(formElem) {
		var objName = $$(formElem);
	
		if (!IsNumeric(objName.value, " ()+") ) {
			objName.addClass("validation-error");
			objName.addEvent("focus", function() {removeRequired(this);}); 
		}
	}

	// Phone Number checker
	function emailCheck(formElem) {
		var objName = $$(formElem);
	
		if (!isEmail(objName.value)) {
			objName.addClass("validation-error");
			objName.addEvent("focus", function() {removeRequired(this);}); 
		}
	}

	// checks for null and throws validation error
	function required(formElem) {
		var objName = $$(formElem);
	
		if (objName.value == "" || objName.value == null) {
			objName.addClass("validation-error");
			objName.addEvent("focus", function() {removeRequired(this);}); 
			//var theId = objName.id;
			//var theText = getFieldName(objName);
			
			ReturnError.setItem(objName.id, getFieldName(objName));	//add to error array
			formError();
		}
	}

	// checks for and removes validation error
	function removeRequired(formElem) {
		var objName = $$(formElem);
	
		objName.removeClass("validation-error");
		objName.removeEvent("focus", function() {removeRequired(this);});
		ReturnError.removeItem(objName.id);	//remove from error array
		formError();

	}
	// Function to check a string.
	function chkNumeric(objName, minval, maxval) {
		var checkOK = "0123456789";
		var checkStr = objName;
		var allValid = true;
		var allNum = "";
	
		for (i = 0; i < checkStr.value.length; i++) {
			ch = checkStr.value.charAt(i);
			for (j = 0; j < checkOK.length; j++) {if (ch == checkOK.charAt(j)) { break; }}
			if (j == checkOK.length) {
				allValid = false;
				break;
			}
		}
		
		// If we have invalid characters, remove them.
		if (!allValid) {
			checkStr.value = checkStr.value.replace(/[^0123456789]/g, "");
			return (false);
		}

		// set the minimum and maximum
		var chkVal = allNum;
		var prsVal = parseInt(allNum, 10);
		if (chkVal !== "" && !(prsVal >= minval)) {
			checkStr.value = "0";
			return (false);
		}
	}

	
	// Returns an error given an element and array with errors
	function formError() {	
		if (ReturnError.length > 0) {
		
			var returnArray = new Array();
			var returnText = new Array();

			for (var i in ReturnError.items) {
				returnArray.push(ReturnError.items[i]);
			}

			for ( var i=returnArray.length-1; i>=0; --i ){
				
				////// IE6 FIX :(
				if (typeof(isIE) != 'undefined') { // set using conditional comments
					if(String(returnArray[i]).match("function") != null) {
						break;
					}
				}

				if(i != 0 && i != 1) {
					returnText += returnArray[i]+", ";
				} else if(i == 1) {
					returnText += returnArray[i]+" &amp; ";
				} else if(i == 0) {
					returnText += returnArray[i];
				}
			}

			errorElem.setStyle("display", "block");
			errorElem.innerHTML = "Please check the following fields: <strong>"+returnText+"</strong>";
			//document.location=document.location + "#" + errorElem.id;
			
//			if (window.location.hash != "#StoreMultiForm_StoreMultiForm_error") {
//				window.location = window.location.pathname + "#" + errorElem.id;
//			}
			
			return false;
		} else {
			errorElem.setStyle("display", "none");
			errorElem.innerHTML = "";
	
			return true;
		}
	
	
	}
		
	
function Hash(){this.length=0;this.items=new Array();for(var a=0;a<arguments.length;a+=2){if(typeof(arguments[a+1])!="undefined"){this.items[arguments[a]]=arguments[a+1];this.length++}}this.removeItem=function(b){var c;if(typeof(this.items[b])!="undefined"){this.length--;var c=this.items[b];delete this.items[b]}return c};this.getItem=function(b){return this.items[b]};this.setItem=function(b,d){var c;if(typeof(d)!="undefined"){if(typeof(this.items[b])=="undefined"){this.length++}else{c=this.items[b]}this.items[b]=d}return c};this.hasItem=function(b){return typeof(this.items[b])!="undefined"};this.clear=function(){for(var b in this.items){delete this.items[b]}this.length=0}};
