﻿var COMPANY_NAME = "#tbCompanyName";
var CONTACT_NAME = "#tbContactName";
var CONTACT_PHONE = "#tbContactPhone";
var ALT_CONTACT_NAME = "#tbAltContactName";
var ALT_CONTACT_PHONE = "#tbAltContactPhone";
var FAX_NUMBER = "#tbFaxNumber";
var EMAIL_ADDRESS = "#tbEmailAddress";
var EXISTING_ONE_CALL_TICKET_NUMBER = "#tbExistingOneCallTicketNumber";
var DATE_OF_EXCAVATION = "#_tbDateOfExcavation";
var PREFERRED_LOCATE_DATE = "#_tbPreferredLocateDate";
var PROVINCE_LIST = "#ddlProvince";
var CITY_LIST = "#ddlCity";
var ADDRESS = "#tbAddress";
var LOCATION_OF_SITE = "#ddlLocationOfSite";
var NEAREST_INTERSECTION = "#tbNearestIntersection";
var SECOND_INTERSECTION = "#tbSecondIntersection";
var WORK_BEING_DONE_FOR = "#tbWorkBeingDoneFor";
var DESCRIPTION = "#tbDescription";
var PROVINCE_HOLDER = "#hidProvince";
var CITY_HOLDER = "#hidCity";
var LOCATION_OF_SITE_HOLDER = "#hidLocationOfSite";
var FILE_UPLOAD = "#fuSitePlan";
var SUBMIT_BUTTON = "#btnSubmit";
var CLEAR_BUTTON = "#btnClear";
var DATE_OF_EXCAVATION_BUTTON = "#btnDateOfExcavation";
var PREFERRED_LOCATE_DATE_BUTTON = "#btnPreferredLocateDate";

var FILE_EXTENSIONS = new Array( "pdf", "xls", "xlsx", "doc", "docx", "dgn", "dwg", "dwf", "dxf" );

$(document).ready(
	function () {
	    $(COMPANY_NAME).focus();

	    $(PROVINCE_LIST).change(
			function (event) {
			    var selectedLocationCode = $(PROVINCE_LIST).val();
			    UpdateCityDropdownList(selectedLocationCode);
			}
		);


	    $(SUBMIT_BUTTON).click(function () { return ValidateInputs(); });
	    $(CLEAR_BUTTON).click(function () { ClearInputs(); });
	}
);

function ClearInputs() {
	$(COMPANY_NAME).val("");
	$(CONTACT_NAME).val("");
	$(CONTACT_PHONE).val("");
	$(ALT_CONTACT_NAME).val("");
	$(ALT_CONTACT_PHONE).val("");
	$(FAX_NUMBER).val("");
	$(EMAIL_ADDRESS).val("");
	$(EXISTING_ONE_CALL_TICKET_NUMBER).val("");
	$(DATE_OF_EXCAVATION).val("");
	$(PROVINCE_LIST + " [value='']").attr("selected", true);
	ClearCityList();
	$(ADDRESS).val("");
	$(LOCATION_OF_SITE + " [value='']").attr("selected", true);
	$(NEAREST_INTERSECTION).val("");
	$(SECOND_INTERSECTION).val("");
	$(WORK_BEING_DONE_FOR).val("");
	$(DESCRIPTION).val("");
}

function ValidateInputs() 
{
	// validate contact name
	if ( !ValidateCustomerName($(CONTACT_NAME).val()) )
	{
		alert("Please enter a valid contact name.");
		$(CONTACT_NAME).val("");
		$(CONTACT_NAME).focus();
		return false;
	}

	// validate contact phone
	if (!ValidateLocalPhone($(CONTACT_PHONE).val())) {
		alert("Please enter a valid phone number including area code. I.E: (888) 888-8888.");
		$(CONTACT_PHONE).val("");
		$(CONTACT_PHONE).focus();
		return false;
	}

	// validate alt phone
	if (!ValidateAltContactPhone($(ALT_CONTACT_PHONE).val())) {
		alert("Please enter a valid phone number including area code. I.E: (888) 888-8888.");
		$(ALT_CONTACT_PHONE).val("");
		$(ALT_CONTACT_PHONE).focus();
		return false;
	}

	// validate fax
	if (!ValidateFaxNumber($(FAX_NUMBER).val())) {
		alert("Please enter a valid fax number including area code. I.E: (888) 888-8888.");
		$(FAX_NUMBER).val("");
		$(FAX_NUMBER).focus();
		return false;
	}

	// validate email
	if (!ValidateEmail($(EMAIL_ADDRESS).val())) {
		alert("Please enter a valid email address or leave it blank.");
		$(EMAIL_ADDRESS).val("");
		$(EMAIL_ADDRESS).focus();
		return false;
	}

	// validate date of excavation
	if (!ValidateNonEmptyField($(DATE_OF_EXCAVATION).val()) || !ValidateDate($(DATE_OF_EXCAVATION).val())) 
	{
		alert("Please enter a valid date of excavation.");
		$(DATE_OF_EXCAVATION).val("");
		$(DATE_OF_EXCAVATION).focus();
		return false;
    }

    // validate preferred locate date
    if (!ValidateNonEmptyField($(PREFERRED_LOCATE_DATE).val()) || !ValidateDate($(PREFERRED_LOCATE_DATE).val())) 
    {
        alert("Please enter a valid preferred locate date.");
        $(PREFERRED_LOCATE_DATE).val("");
        $(PREFERRED_LOCATE_DATE).focus();
        return false;
    }

	$(PROVINCE_HOLDER).val("");
	$(CITY_HOLDER).val("");
	$(LOCATION_OF_SITE_HOLDER).val("");

	if ($(PROVINCE_LIST).val() == "") {
		alert("Please choose an appropriate province.");
		return false;
	}

	if ($(CITY_LIST).val() == "-1") {
		alert("Please choose an appropriate region.");
		return false;
	}

	// validate address
	if (!ValidateNonEmptyField($(ADDRESS).val())) {
		alert("Please enter a valid address.");
		$(ADDRESS).val("");
		$(ADDRESS).focus();
		return false;
	}

	// validate location of site
	if ($(LOCATION_OF_SITE).val() == "") {
		alert("Please choose a location type.");
		return false;
	}

	// validate file upload
	if ($(FILE_UPLOAD).val() != "") {
		if (!ValidateUploadFileName($(FILE_UPLOAD).val())) 
		{
			alert("The file you have chosen is an invalid file format.");
			$(FILE_UPLOAD).focus();
			return false;
		}
	}

	// validate nearest intersection
	if (!ValidateNonEmptyField($(NEAREST_INTERSECTION).val())) {
		alert("Please enter a valid Intersection.");
		$(NEAREST_INTERSECTION).val("");
		$(NEAREST_INTERSECTION).focus();
		return false;
	}
	else if ($(NEAREST_INTERSECTION).val().length > 24) {
		alert("The maximum length for the nearest intersection field is 24 characters.");
		$(NEAREST_INTERSECTION).focus();
		return false;
	}
	else if ($(NEAREST_INTERSECTION).val().indexOf('/') >= 0) {
		alert("The '/' is NOT allowed in the nearest intersection field.");
		$(NEAREST_INTERSECTION).focus();
		return false;
	}

	$(PROVINCE_HOLDER).val($(PROVINCE_LIST).val());
	$(CITY_HOLDER).val($(CITY_LIST).val());
	$(LOCATION_OF_SITE_HOLDER).val($(LOCATION_OF_SITE).val());

	return true;
}

function UpdateCityDropdownList(locationCode) 
{
	ClearCityList();

	$.ajax({
		type: "GET",
		dataType: "xml",
		url: "Handlers/GetCityListByLocationCode.ashx",
		data: { LocationCode: locationCode },
		cache: false,
		success: function(response) {
			$(response).find("option").each(function() {
				$(CITY_LIST).append($("<option></option>").attr("value", $(this).text()).text($(this).text()));
			});
		}
	});
}

function ClearCityList() 
{
	$(CITY_LIST + " [value!='-1']").remove();
}

function ValidateUploadFileName(strFName) 
{
	var ext = strFName.substring(strFName.lastIndexOf('.') + 1).toLowerCase();
	
	for( var i = 0; i < FILE_EXTENSIONS.length; i++ )
	{       
		if (ext == FILE_EXTENSIONS[i])
		{            
			return true;
		}
	}

	return false;
}

function ValidateCustomerName(strCName) 
{
	if ((strCName.length < 1) || (strCName.length > 20)) 
	{
		return false;   //invalid Customer Name length
	}

    if (strCName.match(/[^a-zA-ZÀ-ÿ0-9 \'\`\-\.]/)) 
	{
		return false;   //invalid characters in Customer Name
	}

	return true;
}

function ValidateLocalPhone(strPhoneNumber) {

	var strVal;

	strVal = strPhoneNumber;
	if (strPhoneNumber.length != strVal.length) {
		return false;
	}

	if (strVal.length != 14) {
		return false;
	}

	return ValidatePhoneNumber(strPhoneNumber);

	return true;
}

function ValidateAltContactPhone(strPhoneNumber) {
	if (strPhoneNumber == "")
		return true;
	
	return ValidatePhoneNumber(strPhoneNumber);
}

function ValidateFaxNumber(strFax) {
	if (strFax == "")
		return true;
	return ValidatePhoneNumber(strFax);
}

function ValidatePhoneNumber(p)
{
    var re = /^\(?[0-9]\d{2}[\)\.-]?\s?\d{3}[\s\.-]?\d{4}$/
    return re.test(p);
}

function ValidateEmail(strEmail) 
{
	if (strEmail.length == 0) 
	{
		return true;    //invalid Email length
	}

	if ((strEmail.indexOf(".") < 0) || (strEmail.indexOf("@") < 0)) 
	{
		return false;   //required characters in e-mail address
	}
	if (strEmail.match(/[`~!#$%^\*\(\)+=\\\|\{\}\" "[\]'":;\?\/><,]/)) { //' terminate "string" so editor parse/highlight works again
		//invalid characters in an email address
		return false;
	}

	return true;
}

// returns true if the string is a valid date formatted as...
// mm dd yyyy, mm/dd/yyyy, mm.dd.yyyy, mm-dd-yyyy
function ValidateDate(str)
{
    var re = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
    return re.test(str);
}

function ValidateNonEmptyField(strValue) {
	if ((strValue.length < 1) || (strValue.length > 40)) {		
		return false;
	}

	if (strValue.match("/[^a-zA-Z0-9-. #,/]/")) {		
		return false;
	}

	return true;
}
