var PatternsDict = new Object();

PatternsDict.Currency = /(\$)*\d{1,3}(,\d{3})*(\.\d{2})*/;
PatternsDict.Date = /^((0?[1,3,5,7,8]|1[0,2])(\/|\-)*([1-9]|[0-2][0-9]|3[0-1])|(0?2(\/|\-)*([1-9]|[0-2][0-9]))|(0?[4,6,9]|11)(\/|\-)*([1-9]|[0-2][0-9]|30))((\/|\-)*([1-2][0-9])*[0-9][0-9])*$/;
PatternsDict.Email = /[A-Za-z]+\@[A-Za-z]+\.[A-Za-z]+/;
PatternsDict.Exists = /([A-Za-z]|[0-9])+/;
PatternsDict.Postal = /^((\w{3} \w{3})|(\w{6}))$/;
PatternsDict.Time = /^([1-9]|1[0-2]):[0-5]\d$/;
PatternsDict.Zip = /^\d{5}(-\d{4})*$/;
PatternsDict.DNS_Octet = /^\d*\d*\d$/;
PatternsDict.Phone = /^(\()*\d{3}(\))*( )*\d{3}(\-| )*\d{4}$/;
PatternsDict.PhoneNPA = /\d{3}/;
PatternsDict.PhoneNXX = /\d{3}/;
PatternsDict.PhoneSuffix = /\d{4}/;

function ValidateForm( form ) {
var elArr = form.elements;

	for (var i = 0; i < elArr.length; i++ ) {
		with( elArr[i] ) {
			var v = elArr[i].valPat;
			
			if (!v) continue;
			
			var thePat = PatternsDict[v];
			
			var gotIt = thePat.exec(value);

			if (!gotIt) {
				alert( elArr[i].valText );
				return false;
			}
		}
	}
	return true;
}

//var dispatchLookup = new Array()
//dispatchLookup["isUSState"] = new dispatcher(isUSState)
//dispatchLookup["isPhone"] = new dispatcher(isPhone)

// main validation function called by form event handlers
//function validate(frame, field, method) {
//	gFrame = frame
//	gField =  eval("window." + frame.name + ".document.forms[0]." + field.name)
//	var args = validate.arguments
//	for (i = 2; i < args.length; i++) {
//		if (!dispatchLookup[args[i]].doValidate()) {
//			return false
//		}
//	}
//	return true
//}

function dispatcher(validationFunc) {
   this.doValidate = validationFunc
}

// general purpose function to see if an input value has been entered at all 
function isEmpty(inputStr) { 
	if (inputStr == null || inputStr == "") { 
		return true 
	} 
	return false 
}

// general purpose function to see if a suspected numeric input is a positive integer 
function isPosInteger(inputVal) {
	var num = parseInt(inputVal);
	var strNum = String(num);
	if (isNaN(num)) {
		return false
	}
	if (num < 0) {
		return false
	}
	if (strNum != inputVal) {
		return false
	}
	
	return true
} 

// general purpose function to see if a suspected numeric input is a positive or negative integer 
function isInteger(inputVal) {
	var num = parseInt(inputVal)
	if (isNaN(num)) {
		return false
	}
	return true
} 

// general purpose function to see if a suspected numeric input 
// is a positive or negative number 
function isNumber(inputVal) {
	var num = parseFloat(inputVal)
	if (isNaN(num)) {
		return false
	}
	return true
}

// general purpose function to see if a suspected numeric input
// is within a range (this works with integers as well as floats)
function inRange(inputVal,lowerBound,upperBound) {
	var num = parseFloat(inputVal)
	if (isNaN(num)) { return false }
	if ((num < lowerBound) || (num > upperBound)) { return false }
	return true
}

// check the entered month for too high a value
function checkMonthLength(mm,dd) {
	var months = new Array("","January","February","March","April","May","June","July","August","September","October","November","December")
	if ((mm == 4 || mm == 6 || mm == 9 || mm == 11) && dd > 30) {
		alert(months[mm] + " has only 30 days.")
		return false
	} else if (dd > 31) {
		alert(months[mm] + " has only 31 days.")
		return false
	}
	return true
}

// States array
var USStates = new Array(51)
USStates["AL"] = "ALABAMA"
USStates["AK"] = "ALASKA"
USStates["AZ"] = "ARIZONA"
USStates["AR"] = "ARKANSAS"
USStates["CA"] = "CALIFORNIA"
USStates["CO"] = "COLORADO"
USStates["CT"] = "CONNECTICUT"
USStates["DE"] = "DELAWARE"
USStates["DC"] = "DISTRICT OF COLUMBIA"
USStates["FL"] = "FLORIDA"
USStates["GA"] = "GEORGIA"
USStates["HI"] = "HAWAII"
USStates["ID"] = "IDAHO"
USStates["IL"] = "ILLINOIS"
USStates["IN"] = "INDIANA"
USStates["IA"] = "IOWA"
USStates["KS"] = "KANSAS"
USStates["KY"] = "KENTUCKY"
USStates["LA"] = "LOUISIANA"
USStates["ME"] = "MAINE"
USStates["MD"] = "MARYLAND"
USStates["MA"] = "MASSACHUSETTS"
USStates["MI"] = "MICHIGAN"
USStates["MN"] = "MINNESOTA"
USStates["MS"] = "MISSISSIPPI"
USStates["MO"] = "MISSOURI"
USStates["MT"] = "MONTANA"
USStates["NE"] = "NEBRASKA"
USStates["NV"] = "NEVADA"
USStates["NH"] = "NEW HAMPSHIRE"
USStates["NJ"] = "NEW JERSEY"
USStates["NM"] = "NEW MEXICO"
USStates["NY"] = "NEW YORK"
USStates["NC"] = "NORTH CAROLINA"
USStates["ND"] = "NORTH DAKOTA"
USStates["OH"] = "OHIO"
USStates["OK"] = "OKLAHOMA"
USStates["OR"] = "OREGON"
USStates["PA"] = "PENNSYLVANIA"
USStates["RI"] = "RHODE ISLAND"
USStates["SC"] = "SOUTH CAROLINA"
USStates["SD"] = "SOUTH DAKOTA"
USStates["TN"] = "TENNESSEE"
USStates["TX"] = "TEXAS"
USStates["UT"] = "UTAH"
USStates["VT"] = "VERMONT"
USStates["VA"] = "VIRGINIA"
USStates["WA"] = "WASHINGTON"
USStates["WV"] = "WEST VIRGINIA"
USStates["WI"] = "WISCONSIN"
USStates["WY"] = "WYOMING"

// States array
var States = new Array("AL", "AK", "AR", "AZ", "CA", "CO", "CT", 
						"DC", "DE", "FL", "GA", "HI", "IA", "ID", "IL", 
						"IN", "KS", "KY", "LA", "MA", "MD", "ME", "MI", 
						"MN", "MO", "MS", "MT", "NC", "ND", "NE", "NH", 
						"NJ", "NM", "NV", "NY", "OH", "OK", "OR", "PA", 
						"RI", "SC", "SD", "TN", "TX", "UT", "VA", "VT", 
						"WA", "WI", "WV", "WY")

// Provinces array
var Provinces = new Array("AB", "BC", "MB", "NB", "NF","NS", "NT", 
						"ON", "PE", "QC", "SK", "YT")

// input value is a U.S. state abbreviation; set entered value to all uppercase
// also set companion field (NAME="<xxx>_expand") to full state name
function isState(inputStr) {
	if (inputStr.length == 0 || USStates[inputStr] == null) {
		return false
	}
	return true
}

function toState(inputStr) {
	var state = new String
	state = inputStr.substring(0,2)
	state = state.toUpperCase()
	if (USStates[state]) {
		return state
	}
	state = "XX"
	return state
}

function isDigit(inputChar) {
	if (inputChar < "0" || inputChar > "9") {
		return false
	}
	return true
}

// 

function isPhone(inputStr) {

	var thePat = PatternsDict["Phone"];
	var gotIt = thePat.exec(inputStr);
	
	if (!gotIt) {
		return false;
	}
	return true;
}

function isPhoneNPA(inputStr) {

	var thePat = PatternsDict["PhoneNPA"];
	var gotIt = thePat.exec(inputStr);
	
	if (!gotIt) {
		return false;
	}

	if (inputStr < 199) {
		return false;
	}
	
	return true;
}

function isPhoneNXX(inputStr) {

	var thePat = PatternsDict["PhoneNXX"];
	var gotIt = thePat.exec(inputStr);
	
	if (!gotIt) {
		return false;
	}
	
	if (inputStr < 199) {
		return false;
	}
	
	return true;
}

function isPhoneSuffix(inputStr) {

	var thePat = PatternsDict["PhoneSuffix"];
	var gotIt = thePat.exec(inputStr);
	
	if (!gotIt) {
		return false;
	}
	return true;
}

function isZip(inputStr) {
	var strLen = inputStr.length
	if (strLen < 5) { return false }
	if (!isDigit(inputStr.charAt(0)) ||
		!isDigit(inputStr.charAt(1)) ||
		!isDigit(inputStr.charAt(2)) ||
		!isDigit(inputStr.charAt(3)) ||
		!isDigit(inputStr.charAt(4))) { return false }
	if (strLen == 5) { return true }
	if (strLen != 10) { return false }
	if (inputStr.charAt(5) != "-" ||
		!isDigit(inputStr.charAt(6)) ||
		!isDigit(inputStr.charAt(7)) ||
		!isDigit(inputStr.charAt(8)) ||
		!isDigit(inputStr.charAt(9))) { return false }
	return true
}

function extractDigits(inputStr) {
	var outputStr = new String
	for (var i = 0; i < inputStr.length; i++) {
		var oneChar = inputStr.charAt(i)
		if (isDigit(oneChar)) {
			outputStr += oneChar
		}
	}
	return outputStr
}

function toPhone(inputStr) {
	if (inputStr == ""){
	return ""
	}
	var resultStr = new String
	var badDigits = "xxxxxxxxxx"
	var theDigits = extractDigits(inputStr)
	if (theDigits.length < 10) {
		theDigits = badDigits.substring(0,(10-theDigits.length)) + theDigits
	}
	resultStr = "(" + theDigits.substring(0,3) + ")" + theDigits.substring(3,6) + "-" + theDigits.substring(6,10)
	return resultStr
}

function toZip(inputStr) {
	var resultStr = new String
	var theDigits = extractDigits(inputStr)
	var numDigits = theDigits.length
	if (theDigits.length < 9) {
		theDigits = theDigits + "xxxxxxxxx"
	}
	if (numDigits < 6) {
		resultStr = theDigits.substring(0,5)
	} else {
		resultStr = theDigits.substring(0,5) + "-" + theDigits.substring(5,9)
	}
	return resultStr
}

var gMM
var gDD
var gYY
function parseDate(inputStr) {
	gMM = -1
	gDD = -1
	gYY= -1
	var endMonth = inputStr.indexOf("/")
	if (endMonth == -1) {
		gDD = parseInt(inputStr)
		return
	}
	gMM = parseInt(inputStr.substring(0,endMonth))
	var endDay = inputStr.indexOf("/",endMonth+1)
	if (endDay == -1) {
		gDD = parseInt(inputStr.substring(endMonth+1))
		return
	}
	gDD = parseInt(inputStr.substring(endMonth+1,endDay))
	gYY = parseInt(inputStr.substring(endDay+1)) % 100
}

function toDate(inputStr) {
	parseDate(inputStr)
	if (!inRange(gDD,1,31)) { gDD = "dd" }
	if (!inRange(gMM,1,12)) { gMM = "mm" }
	if (gYY == -1) { gYY = "yy" }
	if (gYY > 0 && gYY < 10) { gYY = "0" + gYY }
	resultStr = gMM + "/" + gDD + "/" + gYY
	return resultStr
}

// check the entered month for too high a value
function checkMonthLength(yy,mm,dd) {
	var months = new Array("","January","February","March","April","May","June","July","August","September","October","November","December")
	if (mm == 4 || mm == 6 || mm == 9 || mm == 11) {
		if (dd > 30) { 
				alert(months[mm] + " has only 30 days.")
				return false
		}
	} else if (mm == 2) { 
		if (yy % 4 > 0 && dd > 28) {
			alert("February of " + yy + " has only 28 days.")
			return false
		} else if (dd > 29) {
			alert("February of " + yy + " has only 29 days.")
			return false
		}
	}
	return true
}

function isDate(inputStr) {
	if (isEmpty(inputStr)) { return false }
	parseDate(inputStr)
	if (!inRange(gMM,1,12)) { return false }
	if (!inRange(gDD,1,31)) { return false }
	if (!checkMonthLength(gYY,gMM,gDD)) { return false }
	if (gYY == -1) { return false }
	return true
}

function isEmail(strEmail) {

	if(strEmail.length < 5)		{ return false }
	if(strEmail.indexOf('@') == -1)	{ return false	}
	if(strEmail.indexOf('.') == -1)	{ return false	}
	return true
}	

function isSelected( control ) {
var intCtr;
var blnFound;

	blnFound = false;
	for (intCtr = 1; intCtr < control.length; intCtr++) {
		if (control.options[intCtr].selected) {
			blnFound = true;
		}
	}
	
	return blnFound;
}

function checkForm(form) {
	
	if (isEmpty(form.txtAddr.value)){
		alert("Please enter a valid street address.");
		return false;
	}
	if (isEmpty(form.txtCity.value)){
		alert("Please enter a valid city.");
		return false;
	}
	
	if (isEmpty(form.txtNPA.value)) {
		alert("Please enter an Area Code");
		return false;
		}
	else if (form.txtNPA.value < 200) {
		alert("Please enter a valid Area Code");
		return false;
		}	
	else if (!isNumber(form.txtNPA.value)) {
		alert("Please enter a numeric Area Code");
		return false;
	}
	
	if (isEmpty(form.txtNXX.value)) {
		alert("Please enter a Prefix");
		return false;
		}
	else if (form.txtNXX.value < 200) {
		alert("Please enter a valid Prefix");
		return false;
		}	
	else if (!isNumber(form.txtNXX.value)) {
		alert("Please enter a numeric Prefix");
		return false;
	}
	
	
	if (isEmpty(form.txtExt.value)) {
		alert("Please enter an Extension");
		return false;
		}
	else if (form.txtExt.value.length < 4) {
		alert("Please enter a valid Extension");
		return false;
		}
	else if (!isNumber(form.txtExt.value)) {
		alert("Please enter a numeric Extension");
		return false;
	}

if (isEmpty(form.txtZip.value)) {
		alert("Please enter a valid ZIP.");
		return false;
	}
	if (!isEmpty(form.txtZip.value)){
		if (!isZip(form.txtZip.value)){
			alert("Please enter a valid ZIP.");
			return false;
		}
	}
//	form.ID.value = "";
	return true;
}

function btnEnter_onclick (form) {
	if (checkForm(form)) {
		form.submit()
	}
}

function btnSave_Click( form ) {
	form.action = "ServiceCheck.asp?PROSPECT=SAVE"
	form.submit()
}

function focusAddress() {
	document.frmMain.txtAddr.focus()
}

function Go_Onclick() {
  var collection;
  collection = document.TheForm.rdoSelectEndpoint;    //.all['rdoSelectEndpoint'];
  
  if (collection.length == 1) {
	
	if (document.TheForm.rdoSelectEndpoint.checked) {
	
	document.TheForm.submit();
	return;
	}
  }else
  for (i=0;i<collection.length;i++) {
    if (collection[i].checked){
		document.TheForm.submit();
	return;
	}
  }
  alert("Please select an Endpoint.")
}

function GoLineShare_Onclick() {
	if (CheckTerm()){
		if (CheckCPE()){
			if (CheckPackage()){
				document.TheForm.submit();
			}
		}
	}
}

function CheckCPE() {
  var collection;
  collection = document.TheForm.rdoCPE;
  
	if (collection.length > 1) {
		for (i=0;i<collection.length;i++) {
			if (collection[i].checked) {
				return true;
			}
		}
	} else {
		if (document.TheForm.rdoCPE.checked) {
			return true;
		}
	}
	alert("Please select a DSL Customer Premises Equipment (CPE) Provider.");
	return false;
}

function CheckTerm() {
  var collection;
  collection = document.TheForm.terms;    //.all['rdoSelectEndpoint'];
  
	if (collection.length > 1) {
		for (i=0;i<collection.length;i++) {
			if (collection[i].checked) {
				return true;
			}
		}
	} else {
		if (document.TheForm.terms.checked) {
			return true;
		}
	}
	alert("Please select a Term.");
	return false;
}

function CheckPackage() {
  var collection;
  collection = document.TheForm.packages;    //.all['rdoSelectEndpoint'];
  
	if (collection.length > 1) {
		for (i=0;i<collection.length;i++) {
			if (collection[i].checked) {
				return true;
			}
		}
	} else {
		if (document.TheForm.packages.checked) {
			return true;
		}
	}
	alert("Please select a Package.");
	return false;
}

function btnReset_Click() {
	window.location = "/NetworkNow/Ordering/ServiceCheck.asp";
}

function ChangeCountry() {
	for (var i = 0; i < document.frmMain.CountryCode.length; i++) {
		if (document.frmMain.CountryCode.options[i].selected) {
			window.document.frmMain.action = '/NetworkNow/Ordering/ServiceCheck.asp?Country=True';
			window.document.frmMain.submit();
			//return ChangeStates(document.frmMain.CountryCode.options[i].value);
		}
	}
}

function ChangeStates(strCountryCode) {
	// First, delete the existing entries
	for (var i = document.frmMain.txtState.length; i > 0; i--) {
		document.frmMain.txtState.options[i] = null;
	}
	if (strCountryCode == "CA") {
		for (var i = 0; i < Provinces.length; i++) {
			var option = new Option(Provinces[i], Provinces[i]);
			document.frmMain.txtState.options[i+1] = option;
		}
	} else if (strCountryCode == "US") {
		for (var i = 0; i < States.length; i++) {
			var option = new Option(States[i], States[i]);
			document.frmMain.txtState.options[i+1] = option;
		}
	}
	
}

