//-- Preload images to cure the browser flickering issue
if (document.images) {
	var aryImages = new Array(
		"/images/spacer.gif",
		"/images/btn_aqua.png",
		"/images/btn_blue.png",
		"/images/btn_disabled.png",
		"/images/btn_gray.png",
		"/images/btn_green.png",
		"/images/btn_orange.png",
		"/images/btn_red.png",
		"/images/btn_yellow.png",
		"/images/campaign_donate_over.png"
	);
	var aryPreload = new Array();
	for (var img=0; img<aryImages.length; img++) {
		aryPreload[img] = new Image();
		aryPreload[img].src = aryImages[img];
	}
}

Array.prototype.contains = function(obj) {
	var i = this.length;
	while (i--) {
		if (this[i] === obj) {
			return true;
		}
	}
	return false;
}

function formatPhone(field, event) {
	if (field.value.replace(/^\s+|\s+$/g, "") == "") {
		return true;
	}
	var code = 0;
	if (event) {
		event = event || window.event;
		code = event.which || event.keyCode;
	}
	//-- ignore backspace, tab, shift, ctrl, home, end, arrows, del
	var aryCodes = [ 8, 9, 16, 17, 35, 36, 37, 38, 39, 46 ];
	if (!aryCodes.contains(code)) {
		if (field.value.match(/^[01]?\s?\(\d{1,2}$/) ||
			field.value.match(/^[01]?\s?\(\d{3}\)\s\d{1,2}$/) ||
			field.value.match(/^[01]?\s?\(\d{3}\)\s\d{3}-\d{1,4}$/) || 
			field.value.match(/^[01]?\s?\(\d{3}\)\s\d{3}-\d{4}\s[x]{1}\s[\d]{1,5}$/)
		) {
			return true;
		}
		var proceed = true;
		if (proceed) proceed = !field.value.match(/^([01])\s$/);
		if (proceed) proceed = !field.value.match(/^([01]?\s?)(\()$/);
		if (proceed) proceed = !field.value.match(/^([01]?\s?)(\([0-9]{3}\))\s$/);
		if (proceed) proceed = !field.value.match(/^([01]?\s?)(\([0-9]{3}\))\s([0-9]{3})\-$/);
		if (proceed) proceed = !field.value.match(/^([01]?\s?)(\([0-9]{3}\))\s([0-9]{3})\-([0-9]{4})([ex\s])$/);
		if (proceed) {
			var temp = field.value.replace(/[^0-9]/g, "");
			var cursor = temp.length;
			var prefix = temp.replace(/^([01]?)([0-9]*)$/, "$1").length;
			temp = temp.replace(/^([01]?)([0-9]{0,3})([0-9]{0,3})([0-9]{0,4})([0-9]*)$/, "$1 ($2) $3-$4 x $5");
			if (cursor < (11+prefix)) temp = temp.replace(/\s*x\s*$/, "");
			if (cursor < (6+prefix)) temp = temp.replace(/\-\s*$/, "");
			if (cursor < (3+prefix)) temp = temp.replace(/\)\s*$/, "");
			if (cursor < (1+prefix)) temp = temp.replace(/\s\(*$/, "");
			if (!cursor) temp = "";
			if (cursor > (15+prefix)) temp = temp.substring(0,temp.length-(cursor-(15+prefix)));
			temp = temp.replace(/^\s+|\s+$/g, "");
			field.value = temp;
		} else {
			if (field.value.match(/^([01]?\s?)(\([0-9]{3}\))\s([0-9]{3})\-([0-9]{4})([ex\s])$/)) {
				field.value = field.value.replace(/([ex\s])$/, " x ");
			} else {
				field.value = field.value;
			}
		}
		//field.focus();
	}
	return true;
}

function formatNumeric(field, event) {
	// Usage: onkeyup="formatNumeric(this,event)"
	event = event || window.event;
	code = event.which || event.keyCode;
	//-- ignore backspace, tab, shift, ctrl, home, end, arrows, del
	var aryCodes = [ 8, 9, 16, 17, 35, 36, 37, 38, 39, 46 ];
	if (!aryCodes.contains(code)) {
		field.value = field.value.replace(/[^0-9\-]/g, "");
		field.value = field.value.replace(/^([-][1-9]\d*|\d+)(.*?)$/g, "$1");
	}
	return true;
}

function formatAlphaNumeric(field, event) {
	// Usage: onkeyup="formatAlphaNumeric(this,event)"
	event = event || window.event;
	code = event.which || event.keyCode;
	//-- ignore backspace, tab, shift, ctrl, home, end, arrows, del
	var aryCodes = [ 8, 9, 16, 17, 35, 36, 37, 38, 39, 46 ];
	if (!aryCodes.contains(code)) {
		field.value = field.value.replace(/[^a-fA-F0-9]/g, "");
		field.value = field.value.replace(/^([a-fA-F0-9]{0,6})(.*?)$/g, "$1");
	}
	return true;
}

function formatZipCode(field, event) {
	// Usage: onkeyup="formatZipCode(this,event)"
	if (field.value.replace(/^\s+|\s+$/g, "") == "") {
		return true;
	}
	event = event || window.event;
	code = event.which || event.keyCode;
	//-- ignore backspace, tab, shift, ctrl, home, end, arrows, del
	var aryCodes = [ 8, 9, 16, 17, 35, 36, 37, 38, 39, 46 ];
	if (!aryCodes.contains(code)) {
		if (!field.value.match(/^[0-9]*$/)) {
			field.value = field.value.replace(/[^0-9]/g, "");
		}
		if (field.value.replace(/^\s*|\s*$/) != "") {
			if (!field.value.match(/^([0-9]{1,5})$/)) {
				field.value = field.value.replace(/([0-9]{1,5})([0-9]*)$/, "$1");
			}
		}
	}
	return true;
}

function isNumeric(text) {
	if (text.replace(/^\s+|\s+$/g, "") == "") {
		return false;
	}
	var objRegExp = /^([-][1-9]\d*|\d+)$/;
	return objRegExp.test(text);
}

function isPhone(text) {
	if (text.replace(/^\s+|\s+$/g, "") == "") {
		return false;
	}
	var objRegExp = /^[01]?[- .]?(\([2-9]\d{2}\)|[2-9]\d{2})[- .]?\d{3}[- .]?\d{4}(([\s]*(x|ext|ext.){1}[\s]*[0-9]{1,6}[\s]*|[\s]*[0-9]{0,6}[\s]*))$/;
	return objRegExp.test(text);
}

function formatCardNumber(field, amex, event) {
	try {
		var code = 0;
		if (event) {
			event = event || window.event;
			code = event.which || event.keyCode;
		}
		var code = 14;
		//-- ignore backspace, tab, shift, ctrl, home, end, arrows, del
		var aryCodes = [ 8, 9, 16, 17, 35, 36, 37, 38, 39, 46 ];
		if (!aryCodes.contains(code)) {
			return formatCardNumberBase(field, amex.checked);
		}
	} catch (er) { }
	return true;
}

function formatCardNumberBase(field, formatAmex) {
	try {
		if (field.value.replace(/^\s+|\s+$/g, "") == "") {
			return true;
		}
		var strValue = field.value.replace(/^\s+|\s+$/g, "");
		if (formatAmex) {
			if (strValue.match(/^\d{1,3}$/) ||
				strValue.match(/^\d{4}-?$/) ||
				strValue.match(/^\d{4}-\d{1,5}$/) ||
				strValue.match(/^\d{4}-\d{6}-?$/) ||
				strValue.match(/^\d{4}-\d{6}-\d{1,5}$/)
			) {
				return true;
			}
		} else {
			if (strValue.match(/^\d{1,3}$/) ||
				strValue.match(/^\d{4}-?$/) ||
				strValue.match(/^\d{4}-\d{1,3}$/) ||
				strValue.match(/^\d{4}-\d{4}-?$/) ||
				strValue.match(/^\d{4}-\d{4}-\d{1,3}$/) ||
				strValue.match(/^\d{4}-\d{4}-\d{4}-?$/) ||
				strValue.match(/^\d{4}-\d{4}-\d{4}-\d{1,4}$/)
			) {
				return true;
			}
		}
		
		strValue = strValue.replace(/[^0-9]/g, "");
		if (formatAmex) {
			if (strValue.length >= 10) {
				field.value = strValue.replace(/^(\d{4})(\d{6})(\d*)$/, "$1-$2-$3");
			} else if (strValue.length >= 4) {
				field.value = strValue.replace(/^(\d{4})(\d*)$/, "$1-$2");
			}
		} else {
			if (strValue.length >= 12) {
				field.value = strValue.replace(/^(\d{4})(\d{4})(\d{4})(\d*)$/, "$1-$2-$3-$4");
			} else if (strValue.length >= 8) {
				field.value = strValue.replace(/^(\d{4})(\d{4})(\d*)$/, "$1-$2-$3");
			} else if (strValue.length >= 4) {
				field.value = strValue.replace(/^(\d{4})(\d*)$/, "$1-$2");
			}
		}
	} catch (er) { }
	return true;
}

function validateFormField(isValid, theField, strMessage) {
	if (isValid && theField) {
		var strType = theField.type;
		try {
			strType = (theField[0].type != undefined ? theField[0].type : strType);
		} catch (er) { }
		var strValue = "";
		var isChecked = false;
		if (strType.indexOf("select") < 0) {
			if (strType.indexOf("checkbox") < 0 && strType.indexOf("radio") < 0) {
				strValue = new String(theField.value);
			} else {
				for (var i=0; i<theField.length; i++) {
					if (theField[i].checked) {
						strValue = new String(theField[i].value);
						isChecked = true;
						break;
					}
				}
			}
		} else {
			strValue = theField.options[theField.selectedIndex].value;
			strValue = (strValue.replace(/^\s+|\s+$/g, "") == "-1" ? "" : strValue);
		}
		if (strValue.replace(/^\s+|\s+$/g, "") == "" && !isChecked) {
			if (strMessage.replace(/^\s+|\s+$/g, "") != "") { alert(strMessage); }
			try {
				theField.focus();
			} catch (er) { }
			return false;
		}
		return true;
	}
	return isValid;
}

function validateFormFieldState(isValid, theField, strMessage) {
	if (isValid && theField) {
		var strValue = new String(theField.value);
		if (strValue.replace(/^\s+|\s+$/g, "") == "") {
			if (strMessage.replace(/^\s+|\s+$/g, "") != "") { alert(strMessage); }
			try {
				theField.focus();
			} catch (er) { }
			return false;
		}
		var objRegExp = /^[a-zA-Z]{2}$/;
		if (!objRegExp.test(strValue)) {
			if (strMessage.replace(/^\s+|\s+$/g, "") != "") { alert(strMessage); }
			try {
				theField.focus();
			} catch (er) { }
			return false;
		}
		return true;
	}
	return isValid;
}

function validateFormFieldZipCode(isValid, theField, strMessage) {
	if (isValid && theField) {
		var strValue = new String(theField.value);
		if (strValue.replace(/^\s+|\s+$/g, "") == "") {
			if (strMessage.replace(/^\s+|\s+$/g, "") != "") { alert(strMessage); }
			try {
				theField.focus();
			} catch (er) { }
			return false;
		}
		var objRegExp = /^[0-9]{5}$/;
		if (!objRegExp.test(strValue)) {
			if (strMessage.replace(/^\s+|\s+$/g, "") != "") { alert(strMessage); }
			try {
				theField.focus();
			} catch (er) { }
			return false;
		}
		return true;
	}
	return isValid;
}

function validateFormFieldEmail(isValid, theField, strMessage) {
	if (isValid && theField) {
		var strValue = new String(theField.value);
		if (strValue.replace(/^\s+|\s+$/g, "") == "") {
			if (strMessage.replace(/^\s+|\s+$/g, "") != "") { alert(strMessage); }
			try {
				theField.focus();
			} catch (er) { }
			return false;
		}
		var objRegExp = /^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/;
		if (!objRegExp.test(strValue)) {
			if (strMessage.replace(/^\s+|\s+$/g, "") != "") { alert(strMessage); }
			try {
				theField.focus();
			} catch (er) { }
			return false;
		}
		return true;
	}
	return isValid;
}

function validateFormFieldPhone(isValid, theField, strMessage) {
	if (isValid && theField) {
		var strValue = new String(theField.value);
		if (strValue.replace(/^\s+|\s+$/g, "") == "") {
			if (strMessage.replace(/^\s+|\s+$/g, "") != "") { alert(strMessage); }
			try {
				theField.focus();
			} catch (er) { }
			return false;
		}
		var objRegExp = /^[01]?[- .]?(\([2-9]\d{2}\)|[2-9]\d{2})[- .]?\d{3}[- .]?\d{4}(([\s]*(x|ext|ext.){1}[\s]*[0-9]{1,6}[\s]*|[\s]*[0-9]{0,6}[\s]*))$/;
		if (!objRegExp.test(strValue)) {
			if (strMessage.replace(/^\s+|\s+$/g, "") != "") { alert(strMessage); }
			try {
				theField.focus();
			} catch (er) { }
			return false;
		}
		return true;
	}
	return isValid;
}

function validateFormFieldPassword(isValid, theField, strMessage) {
	if (isValid && theField) {
		var strValue = new String(theField.value);
		if (strValue.replace(/^\s+|\s+$/g, "") == "") {
			if (strMessage.replace(/^\s+|\s+$/g, "") != "") { alert(strMessage); }
			try {
				theField.focus();
			} catch (er) { }
			return false;
		}
		var objRegExp = /^[a-zA-Z0-9_\.\-]{6,}$/;
		if (!objRegExp.test(strValue)) {
			if (strMessage.replace(/^\s+|\s+$/g, "") != "") { alert(strMessage); }
			try {
				theField.focus();
			} catch (er) { }
			return false;
		}
		return true;
	}
	return isValid;
}

function validateFormFieldEquals(isValid, theField1, theField2, strMessage) {
	if (isValid && theField1 && theField2) {
		if (theField1.value.replace(/^\s+|\s+$/g, "") != theField2.value.replace(/^\s+|\s+$/g, "")) {
			if (strMessage.replace(/^\s+|\s+$/g, "") != "") { alert(strMessage); }
			try {
				theField1.focus();
			} catch (er) { }
			return false;
		}
		return true;
	}
	return isValid;
}

var maxLengthField;
function imposeMaxLength(field, event) {
	//-- maxlength attribute must be set
	//-- onkeyup, onkeydown				return imposeMaxLength(this, event)
	//-- onpaste						imposeMaxLength(this, event); this.blur(); this.focus();
	//-- oninput, onfocus, onblur		imposeMaxLength(this, event)
	try {
		if (field.value.replace(/^\s+|\s+$/g, "") == "") {
			return true;
		}
		event = event || window.event;
		code = event.which || event.keyCode;
		//-- allow backspace, tab, shift, ctrl, home, end, arrows, del
		var aryCodes = [ 8, 9, 16, 17, 35, 36, 37, 38, 39, 46 ];
		if (aryCodes.contains(code)) {
			return true;
		}
		var maxlen = (field.getAttribute ? parseInt(field.getAttribute("maxlength")) : "");
		if (isNaN(maxlen)) {
			return true;
		}
		if (field.value.length >= maxlen) {
			field.value = field.value.substring(0, maxlen-1);
			maxLengthField = field;
			setTimeout("maxLengthField.scrollTop = maxLengthField.scrollHeight;", 0);
		}

		return (field.value.length < maxlen);
	} catch (err) {
		//alert(err.description);
		return true;
	}
}

function validateSignup(theForm) {
	var isValid = true;
	isValid = validateFormField(isValid, theForm.strFirstName, "Your first name is required!");
	isValid = validateFormField(isValid, theForm.strLastName, "Your last name is required!");
	isValid = validateFormField(isValid, theForm.strAddress1, "Your address is required!");
	isValid = validateFormField(isValid, theForm.strCity, "Your city is required!");
	isValid = validateFormField(isValid, theForm.strState, "Your state is required!");
	isValid = validateFormFieldState(isValid, theForm.strState, "Your state is invalid!");
	isValid = validateFormField(isValid, theForm.strZip, "Your zip code is required!");
	isValid = validateFormFieldZipCode(isValid, theForm.strZip, "Your zip code is invalid!");
	isValid = validateFormField(isValid, theForm.strEmail, "Your email address is required!");
	isValid = validateFormFieldEmail(isValid, theForm.strEmail, "Your email address is invalid!");
	isValid = validateFormField(isValid, theForm.strPhone, "Your phone number is required!");
	isValid = validateFormFieldPhone(isValid, theForm.strPhone, "Your phone number is invalid!");
	isValid = validateFormField(isValid, theForm.strPassword, "Your password is required!");
	isValid = validateFormFieldPassword(isValid, theForm.strPassword, "Your password must be at least 6 characters in length!");
	isValid = validateFormField(isValid, theForm.strConfirmPassword, "You must confirm your password!");
	isValid = validateFormFieldEquals(isValid, theForm.strPassword, theForm.strConfirmPassword, "Your passwords do not match!");
	return isValid;
}

$(document).ready(function(){
	$("form#login #login-email, form#login #login-password").focus(function() {
		if ($(this).hasClass("empty")) {
			$(this).val("");
			$(this).removeClass("empty");
		}
	});
	$("form#login #login-email, form#login #login-password").blur(function() {
		if ($(this).val().replace(/^\s+|\s+$/g, "") == "" || $(this).val().replace(/^\s+|\s+$/g, "") == $(this).attr("title")) {
			$(this).val($(this).attr("title"));
			$(this).addClass("empty");
		}
	});
	$("form#login #login-email, form#login #login-password").blur();
	
	$("form#login").submit(function() {
		if ($("form#login #login-email").hasClass("empty")) {
			$("form#login #login-email").val("");
			$("form#login #login-email").removeClass("empty");
		}
		if ($("form#login #login-password").hasClass("empty")) {
			$("form#login #login-password").val("");
			$("form#login #login-password").removeClass("empty");
		}
	});
	
	$('#bar ul li.navitem, #nav ul li.navitem').hover(
		function() {
			$(this).addClass('hover');
		},
		function() {
			$(this).removeClass('hover');
		}
	);
	$('#bar ul li.subitem, #nav ul li.subitem').hover(
		function() {
			$(this).addClass('subhover');
			$(this).children('a, span').addClass('subhover');
			$(this).children('ul').addClass('subactive');
		},
		function() {
			$(this).children('ul').removeClass('subactive');
			$(this).children('a, span').removeClass('subhover');
			$(this).removeClass('subhover');
		}
	);
	//$('#bar ul li ul li:first-child').addClass('top');
});

