
function IsNumeric(sText) {
	var ValidChars = "0123456789.";
	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;
}

function validateZipCode(zipCodeField) {
	// ensure zip code is the correct length and numeric
	if (zipCodeField.attr('value').length == 5 && zipCodeField.attr('value') != zipCodeField.attr('placeholder') && IsNumeric(zipCodeField.attr('value'))) {
		return true;
	} else {
		return false;
	}
}

// ADDED FOR CANADIAN POSTAL CODES
function validateZipCodeWithCanadian(zipCodeField) {
  var canadian_format = /^[a-zA-Z0-9]{3} [a-zA-Z0-9]{3}$/
  // ensure zip code is the correct length and numeric: US ZIP CODES
  if (zipCodeField.attr('value').length == 5 && zipCodeField.attr('value') != zipCodeField.attr('placeholder') && IsNumeric(zipCodeField.attr('value'))) {
		return true;
	// ensure zip code is the correct length and alpha-numeric: CANADIAN POSTAL CODES
	} else if ( zipCodeField.attr('value').length == 7 && zipCodeField.attr('value') != zipCodeField.attr('placeholder') && canadian_format.test(zipCodeField.attr('value')) ) {
    return true;
	} else {
		return false;
	}
}

function equalTitle(theField) {
	if (theField.attr('title')==theField.attr('value') || theField.attr('value')=='') {
		return true;
	} else {
		return false;
	}
}

function customFormValZip() {
	return ! validateZipCode($("#txtZipQuick"));
}
function customFormValZip2() {
	return ! validateZipCode($("#txtZip2"));
}
function customFormValZip3() {
	return ! validateZipCode($("#txtZip"));
}
// ADDED FOR CANADIAN POSTAL CODES 
// (I don't see other places where customFormValZip3 is used, but I created a new function just to be sure)
function customFormValZip4() {
	return ! validateZipCodeWithCanadian($("#txtZip"));
}

function customFormValRequiredNotTitle1() {
	return equalTitle($("#txtFirst"));
}
function customFormValRequiredNotTitle2() {
	return equalTitle($("#txtLast"));
}
function customFormValRequiredNotTitle3() {
	return equalTitle($("#txtMessage"));
}
function customFormValRequiredNotTitle4() {
	return equalTitle($("#txtNamex"));
}
function customFormValRequiredProduct() {
	return (($('select#selProduct').val() == null) || ($('select#selProduct').val() == '') || ($('select#selProduct').val() == 'Please Select a Product'));
}

// send form data via ahah
function sendFrmNewsletter() {
	var options = { 
		target:        '#frmSuccessContainer',   // target element(s) to be updated with server response 
		beforeSubmit:  showRequest,  // pre-submit callback 
		success:       showResponse,  // post-submit callback 
		
		// other available options: 
		//url:       url         // override for form's 'action' attribute 
		//type:      type        // 'get' or 'post', override for form's 'method' attribute 
		//dataType:  null        // 'xml', 'script', or 'json' (expected server response type) 
		clearForm: false,        // clear all form fields after successful submit 
		resetForm: false        // reset the form after successful submit 
		
		// $.ajax options can be used here too, for example: 
		//timeout:   3000 
	};
	
	$("#submitbutton").attr('disabled','disabled').fadeOut('fast');
	$("#search-activity").fadeIn();
	
	$("#frmNewsletter").ajaxSubmit(options);
	
	return false;
};

// search form pre-submit callback 
function showRequest(formData, jqForm, options) {
	var queryString = $.param(formData);
	//alert('About to submit: \n\n' + queryString);
	return true;
}

// search form post-submit callback 
function showResponse(responseText, statusText)  {
	//alert('status: ' + statusText + '\n\nresponseText: \n' + responseText + '\n\nThe output div should have already been updated with the responseText.');
	//$("#search-activity").fadeOut('fast');
	//$("#submitbutton").fadeIn().removeAttr('disabled');
	$("#frmNewsletter").fadeOut();
	$("#frmSuccessContainer").fadeIn();
}

$(document).ready(function() {
	// SUCCESS AJAX CALL, replace "success: false," by:     success : function() { callSuccessFunction() }, 
	
	$("#frmLocatorQuick").validationEngine({ promptPosition: "bottomLeft", scroll:false });
	$("#frmLocatorQuick2").validationEngine({ promptPosition: "topLeft", scroll:false });
	$("#frmLocator").validationEngine({ promptPosition: "topLeft", scroll:false });
	$("#frmNewsletter").validationEngine({
		promptPosition: "bottomLeft", 
		scroll:false, 
		inlineValidation: true, 
		success: function() { sendFrmNewsletter() }
	});
	$("#frmContact").validationEngine({ promptPosition: "topLeft", scroll:false });
	
	
	//$.validationEngine.loadValidation("#date")
	//alert($("#formID").validationEngine({returnIsValid:true}))
	//$.validationEngine.buildPrompt("#date","This is an example","error")	 		 // Exterior prompt build example								 // input prompt close example
	//$.validationEngine.closePrompt(".formError",true) 							// CLOSE ALL OPEN PROMPTS
});

