/* ----------------------------
		Requires jQuery
---------------------------- */

function fnValidate(f) {
	
	//Get rid of existing warnings
	$('p.warning',f).remove();
	$('.validation_warning',f).removeClass('validation_warning');
	top.strFirstFailure = '';
	top.bValid = true;
	
	//Loop through all fields
	$(':input',f).each(function(){
		//console.log(this.name);
		validateField(this);
	});
	
	if (!top.bValid) eval('f.'+top.strFirstFailure+'.focus()');
	return top.bValid;
}

function validateUserInfo(f) {
	
	//Get rid of existing warnings
	$('p.warning').remove();
	$('.validation_warning').removeClass('validation_warning');
	top.strFirstFailure = '';
	top.bValid = true;
	
	//Loop through all billing address fields
	$('#billing_info :input').each(function(){
		//console.log(this.name);
		validateField(this);
	});
	
	//Loop through all billing address fields, IF NECESSARY
	if (!$('#shipping_sameas_billing').attr('checked')) {
		
		$('#shipping_address :input').each(function(){
			//console.log(this.name);
			validateField(this);
		});
	}
	
	if (!top.bValid) eval('f.'+top.strFirstFailure+'.focus()');
	return top.bValid;
}

function validateField(oInput) {
	if ($(oInput).attr('required') == 'required') {
		if (oInput.value == '') {
			addWarning(oInput);
			top.bValid = false;
			if (top.strFirstFailure == '') top.strFirstFailure = oInput.name;
		}
	}
	if (oInput.value !== '') {
		if ($(oInput).attr('validationtype') == 'email') {
			if (!isValidEmail(oInput.value)) {
				addWarning(oInput);
				top.bValid = false;
				if (top.strFirstFailure == '') top.strFirstFailure = oInput.name;
			}
		}
		if ($(oInput).attr('validationtype') == 'phone') {
			if (oInput.value < 10 || !isNumeric(oInput.value)) {
				addWarning(oInput);
				top.bValid = false;
				if (top.strFirstFailure == '') top.strFirstFailure = oInput.name;
			}
		}
		if ($(oInput).attr('validationtype') == 'zip') {
			if (oInput.value < 5 || !isNumeric(oInput.value)) {
				addWarning(oInput);
				top.bValid = false;
				if (top.strFirstFailure == '') top.strFirstFailure = oInput.name;
			}
		}
		if ($(oInput).attr('validationtype') == 'number') {
			if (!isNumeric(oInput.value)) {
				addWarning(oInput);
				top.bValid = false;
				if (top.strFirstFailure == '') top.strFirstFailure = oInput.name;
			}
		}
	}
}

function isNumeric(val) {
	var ValidChars = "0123456789.-()";
	for (i=0; i<val.length; i++) if (ValidChars.indexOf(val.charAt(i)) == -1) return false;
	return true;
}

function isValidEmail(val) {
	var iLen = val.length;
	if 	((iLen < 6) || (val.indexOf('@') < 1) || ((val.charAt(iLen - 3) != '.') && (val.charAt(iLen - 4) != '.') && (val.charAt(iLen - 5) != '.')) ) return false;
	return true;
}

function addWarning(oInput){
	if (oInput.title) {
		strWarning = oInput.title;
	} else {
		strWarning = oInput.name+" is required.";
	}
	$(oInput).parent().addClass('validation_warning');
	$(oInput).parent().append('<p class="warning">'+strWarning+'</p>');
}