
function createWindow(cUrl,cName,cFeatures) {
	var xWin = window.open(cUrl,cName,cFeatures)
}

function SelectSubmit() {
	if (FinalVal == 1){
		return FeeChecked(this.form)	
	} else if (FinalVal == 2){
		return OneOrMoreProds(this.form);
	} else if (FinalVal == 3){
		return AmountNeeded(this.form);
	} else if (FinalVal == 6){
		return ValidateForm(this.form);
		//return CheckCardNumber(this.form);
	}
	FinalVal=0; // return set value to 0
}

function format(expr,decplaces) {
	var str = "" + Math.round (eval(expr) * Math.pow(1,decplaces))
	while (str.length <= decplaces) {
		str = "0" + str
	}
	var decpoint = str.length - decplaces
	return str.substring(0,decpoint) + "." + str.substring(decpoint,str.length);
}

function decimalize(expr) {
	return format(expr,2)
}

function WholeNumbersAlert(field) {
	for (var i=0; i < ProcessForm.elements.length; i++) {
     	fld = ProcessForm.elements[i]
		nam = fld.name
    	if ((nam.substring(0,2) == "GP" || nam == "GiftTotal") && !fld.value == "" && !isNum(fld.value)) {
         	field.blur(); // need blur since focusing after tabbed to next field
			alert("Please enter whole numbers only.");
			ProcessForm.elements[i].focus();
			ProcessForm.elements[i].select();
			break;
		}
     }	
}

function CalcConfTotal(form) {
	var subtotal = 70.00
    for (var i=0; i < form.elements.length; ++i) {
     	fld = form.elements[i]
		nam = fld.name
		if (nam == "Donation") {
    		if (!isNum(fld.value)) { // require whole numbers only
    			ConfForm.elements[i].blur();
    			alert("Please enter whole numbers only.");
				ConfForm.elements[i].focus();
				ConfForm.elements[i].select();
				break;
    		}
			// Concatination problem so resort to ParseInt()
    		var donation = parseInt(fld.value)
			subtotal = (donation + subtotal) * 100 //parseInt(subtotal) + donation
			document.ConfForm.Total.value = decimalize(subtotal)
		}
	}
}   	

// I possibly could write a more elegant and versitile function, but have only a day to create this form
function UniqueSelections(Group, dropdown) {
var Value1, Value2, Value3, Value4 
var message = "You've given more than one workshop the same ranking. \nPlease rank them 1,2 or 3"
	if (Group == "1") {
		Value1 = ConfForm.WSRanking_01.selectedIndex
		Value2 = ConfForm.WSRanking_02.selectedIndex
		Value3 = ConfForm.WSRanking_03.selectedIndex
		Value4 = ConfForm.WSRanking_04.selectedIndex
	} else if (Group == "2") {
		Value1 = ConfForm.WSRanking_05.selectedIndex
		Value2 = ConfForm.WSRanking_06.selectedIndex
		Value3 = ConfForm.WSRanking_07.selectedIndex
		Value4 = ConfForm.WSRanking_08.selectedIndex
	} else if (Group == "3") {
		Value1 = ConfForm.WSRanking_09.selectedIndex
		Value2 = ConfForm.WSRanking_10.selectedIndex
		Value3 = ConfForm.WSRanking_11.selectedIndex
		Value4 = ConfForm.WSRanking_12.selectedIndex
	} 
		if ((Value1 != "0") && (Value1 == Value2 || Value1 == Value3 || Value1 == Value4)) {
			alert(message)
			dropdown.focus()
		} else if ((Value2 != "0") && (Value2 == Value3 || Value2 == Value1 || Value2 == Value4)) {
			alert(message)
			dropdown.focus()
		} else if ((Value3 != "0") && (Value3 == Value1 || Value3 == Value2 ||Value3 == Value4)) {
			alert(message)
			dropdown.focus()
		} else if ((Value4 != "0") && (Value4 == Value1 || Value4 == Value2 ||Value4 == Value3)) {
			alert(message)
			dropdown.focus()
		}
}


function ValidateConfForm(form) {

	if (form.FirstName.value == "") {
		alert("Please enter your first name")
		form.FirstName.focus()
		return false
		}

	var min2=2;

	if (form.FirstName.value.length < min2) {
		var name1 = form.FirstName.value;
		alert("Is \'" + name1 + "\' your real name? You'll need to fill in a longer first name for this form.")
		form.FirstName.focus()
		return false
		}			

	if (form.LastName.value == "") {
		alert("Please enter your last name")
		form.LastName.focus()
		return false
		}

	if (form.LastName.value.length < min2) {
		var name2 = form.LastName.value;
		alert("Is \'" + name2 + "\' your last name? You'll need to fill in a longer last name for this ProcessForm.")
		form.LastName.focus()
		return false
		}	

	var min4=4;

	if (form.Address1.value.length < min4) {
		alert("Please enter your complete address")
		form.Address1.focus()
		return false
	}
	if (form.City.value.length < min2) {	//At least 2 characters long
		alert("Please enter the full name of your city")
		form.City.focus()
		return false
	}
	if (form.State.value == "") {
		alert("Please fill in a state")
		form.State.focus()
		return false
	}
	if (!validZip(form.Zip.value)) {
		alert("That is an invalid Zip code")
		form.Zip.focus()
		form.Zip.select()
		return false
	}
	
    if (!validEmail(form.Email.value)) {
		alert("Invalid email address")
		form.Email.focus()
		form.Email.select()
		return false
	}
	
	if (form.PhoneDay.value != "" && !validphone(form.PhoneDay.value)) {
		alert("This is not a valid Day phone number.")
		form.PhoneDay.focus()
		form.PhoneDay.select()
		return false
	}

	// vaidate credit card only if they selected that payment method
	if (form.SelectedPaymentMethod.value == 1) {

		if (form.CardHoldersName.value.length < 5) {
			alert("Please enter the Card Holder's Full Name.");
			form.CardHoldersName.focus();
			return false
		}
		
		if (form.CreditCardNumber.value.length < 12) {
			alert("Please enter the full Card Number.");
			form.CreditCardNumber.focus();
			return false
		}

		if (form.CardYear.value > 2003)
			tmpyear = form.CardYear.options[form.CardYear.selectedIndex].value;
		else {
			alert("The Expiration Year is not valid.");
			return false
		}

		tmpmonth = form.CardMon.options[form.CardMon.selectedIndex].value;
		var tmpyear;
		if (!(new CardType()).isExpiryDate(tmpyear, tmpmonth)) {
			alert("This card has already expired.");
			form.CardYear.focus()
			return false
		}
		
		card = form.CardType.options[form.CardType.selectedIndex].value;
		var retval = eval(card + ".checkCardNumber(\"" + form.CreditCardNumber.value +
		"\", " + tmpyear + ", " + tmpmonth + ");");
		cardname = "";
		
		if (retval) { //If returns true, card number valid
			//return true
		} else {
		// The CreditCardNumber has the valid luhn checksum, but we want to know which cardtype it belongs to.
			for (var n = 0; n < Cards.size; n++) {
				if (Cards[n].checkCardNumber(form.CreditCardNumber.value, tmpyear, tmpmonth)) {
				cardname = Cards[n].getCardType();
				break;
				}
			}
		
			if (cardname.length > 0) {
				alert("This looks like a " + cardname + " number, not a " + card + " number.");
				form.CardType.focus();
				return false
			} else {
				alert("This card number is not valid.");
				form.CreditCardNumber.focus();
				form.CreditCardNumber.select();
				return false
			}
		}
	} // end if CC payment method selected 
}


// Process.aspx scripting
function CalculateTotal(form) {
	var subtotal=0
    for (var i=0; i < form.elements.length; ++i) {
     	fld = form.elements[i]
		nam = fld.name
    	if (nam.substring(0,2) == "PQ") {
    		if (!fld.value == "" && !isNum(fld.value)) { // require whole numbers only
    			ProcessForm.elements[i].blur();
    			alert("Please enter whole numbers only.");
				ProcessForm.elements[i].focus();
				ProcessForm.elements[i].select();
				break;
    	    }
    	       price = unescape(nam.substring(nam.indexOf("_",5) + 1,nam.length))
    	       qty = unescape(fld.value)
    	    
          if (qty > 0)
               subtotal = subtotal + (qty * price)
      	}	
	}
	
    document.ProcessForm.SubTotal.value = decimalize(subtotal)
	var DecSub = document.ProcessForm.SubTotal.value
	var shv = 0
	if (subtotal != "") {
		if (subtotal <= 2500) {
			shv = 600;
		} else if (subtotal > 2500 && subtotal <= 5000) {
			shv = 900;
		} else if (subtotal > 5000 && subtotal <= 7500) {
			shv = 1200;
		} else if (subtotal > 7500 && subtotal <= 10000) {
			shv = 1400;
		} else if (subtotal > 10000 && subtotal <= 15000) {
			shv = 1600;
		} else if (subtotal > 15000 ) {
			shv = subtotal * .1;
		} else {
			alert("There is a JavaScript error in the shipping calculation")
		}
	}
	document.ProcessForm.SH.value = decimalize(shv) // need to calculate based on SH schedule
	document.ProcessForm.Total.value = decimalize(subtotal + shv) 
}   	


function FeeChecked(form) { // if this exists & unchecked, alert & make checked
	if (typeof(document.ProcessForm.cbEventFee) != "undefined" && document.ProcessForm.cbEventFee.checked == false) {
		alert("The event fee is required for this event (Event Fee must be checked)");
		document.ProcessForm.cbEventFee.checked = true;
		return false;
	}
} //cbEventFee cbHousingFee cbMealFee


function OneOrMoreProds(form) {
	var AtLeastOne = 0
	for (var i=0; i < document.ProcessForm.elements.length; ++i) {
     	fld = document.ProcessForm.elements[i]
		nam = fld.name
		if (nam.substring(0,2) == "PQ") {
    		if (!fld.value == "") { // if quantity field & has a value
    			AtLeastOne = 1
				break;
			}
		}	
	}
	
	if(AtLeastOne == 0) {
		alert("You will need to indicate a quantity for at least\n one product to make an order.")
		return false;
	}
}

function AmountNeeded(form) { // Need Donation total amount
	if (document.ProcessForm.GiftTotal.value == "") {
		document.ProcessForm.GiftTotal.style.backgroundColor='94b7cb'
		alert("Please enter a total amount for your donation");
		ProcessForm.GiftTotal.focus();
		ProcessForm.GiftTotal.select();
		return false;
	}
	     
	var GPSum=0
	var qty=0
	var CheckDesignations = "false"
	//Check to see if GiftTotal equals the total of any designations entered
	for (var i=0; i < ProcessForm.elements.length; i++) {
     	fld = ProcessForm.elements[i]
		nam = fld.name
    	if (nam.substring(0,2) == "GP" && !fld.value == "" && isNum(fld.value)) { // Assumes number since already cheched: && !isNum(fld.value)
    		qty = unescape(fld.value)
			CheckDesignations = "true";
			GPSum = GPSum + parseFloat(qty);
		}
     }	
   if (document.ProcessForm.GiftTotal.value != GPSum && CheckDesignations == "true") { //
		alert("The sum of your designations does not equal the total gift amount. Please correct your designation amounts or the total gift amount");
		return false;
    }
}


function validEmail(email) {
	invalidChars = " /:,;"

	if (email == "") {						// cannot be empty
		return false
	}
	for (i=0; i<invalidChars.length; i++) {	// does it contain any invalid characters?
		badChar = invalidChars.charAt(i)
		if (email.indexOf(badChar,0) > -1) {
			return false
		}
	}
	atPos = email.indexOf("@",1)			// there must be one "@" symbol
	if (atPos == -1) {
		return false
	}
	if (email.indexOf("@",atPos+1) != -1) {	// and only one "@" symbol
		return false
	}
	periodPos = email.indexOf(".",atPos)
	if (periodPos == -1) {					// and at least one "." after the "@"
		return false
	}
	if (periodPos+3 > email.length)	{		// must be at least 2 characters after the "."
		return false
	}
	return true
}


function validZip(inZip) {					// Is this a valid Zip code?
	if (inZip == "") {
		return false
	}
	if (inZip.length!=5) {		// Is there in exactly 5 digits?
		return false
	}
	if (isNum(inZip)) {						// Check if Zip is numeric
		return true
	}
	return false
}

function validphone(phone) {		// Is this a valid phone number?
	if (phone == "") {
		return false
	}
	if (phone.length < 10) {			// Is there in at least 10 digits?
		return false
	}
	return true
}


function ValidateForm(form) {

	if (ProcessForm.FirstName.value == "") {
		alert("Please enter your first name")
		ProcessForm.FirstName.focus()
		return false
		}

	var min2=2;

	if (ProcessForm.FirstName.value.length < min2) {
		var name1 = form.FirstName.value;
		alert("Is \'" + name1 + "\' your real name? You'll need to fill in a longer first name for this form.")
		ProcessForm.FirstName.focus()
		return false
		}			

	if (ProcessForm.LastName.value == "") {
		alert("Please enter your last name")
		ProcessForm.LastName.focus()
		return false
		}

	if (ProcessForm.LastName.value.length < min2) {
		var name2 = ProcessForm.LastName.value;
		alert("Is \'" + name2 + "\' your last name? You'll need to fill in a longer last name for this ProcessForm.")
		ProcessForm.LastName.focus()
		return false
		}	

	var min4=4;

	if (ProcessForm.Address1.value.length < min4) {
		alert("Please enter your complete address")
		ProcessForm.Address1.focus()
		return false
	}
	if (ProcessForm.City.value.length < min2) {	//At least 2 characters long
		alert("Please enter the full name of your city")
		ProcessForm.City.focus()
		return false
	}
	if (ProcessForm.State.value == "") {
		alert("Please fill in a state")
		ProcessForm.State.focus()
		return false
	}
	if (!validZip(ProcessForm.Zip.value)) {
		alert("That is an invalid Zip code")
		ProcessForm.Zip.focus()
		ProcessForm.Zip.select()
		return false
	}
	
    if (!validEmail(ProcessForm.Email.value)) {
		alert("Invalid email address")
		ProcessForm.Email.focus()
		ProcessForm.Email.select()
		return false
	}
	
	if (ProcessForm.PhoneDay.value == "" && ProcessForm.PhoneNight.value == "") {
		alert("Please provide AT LEAST ONE phone number.")
		ProcessForm.PhoneDay.focus()
		return false
	} else {
		if (ProcessForm.PhoneDay.value != "" && !validphone(ProcessForm.PhoneDay.value)) {
			alert("This is not a valid Day phone number.")
			ProcessForm.PhoneDay.focus()
			ProcessForm.PhoneDay.select()
			return false
		}
		if (ProcessForm.PhoneNight.value != "" && !validphone(ProcessForm.PhoneNight.value)) {
			alert("This is not a valid Night phone number.")
			ProcessForm.PhoneNight.focus()
			ProcessForm.PhoneNight.select()
			return false
		}
	}


	// vaidate credit card only if they selected that payment method
	if (ProcessForm.SelectedPaymentMethod.value == 1) {

		if (ProcessForm.CardHoldersName.value.length < 5) {
			alert("Please enter the Card Holder's Full Name.");
			ProcessForm.CardHoldersName.focus();
			return false
		}
		
		if (ProcessForm.CreditCardNumber.value.length < 12) {
			alert("Please enter the full Card Number.");
			ProcessForm.CreditCardNumber.focus();
			return false
		}

		if (ProcessForm.CardYear.value > 2003)
			tmpyear = ProcessForm.CardYear.options[ProcessForm.CardYear.selectedIndex].value;
		else {
			alert("The Expiration Year is not valid.");
			return false
		}

		tmpmonth = ProcessForm.CardMon.options[ProcessForm.CardMon.selectedIndex].value;
		var tmpyear;
		if (!(new CardType()).isExpiryDate(tmpyear, tmpmonth)) {
			alert("This card has already expired.");
			ProcessForm.CardYear.focus()
			return false
		}
		
		card = ProcessForm.CardType.options[ProcessForm.CardType.selectedIndex].value;
		var retval = eval(card + ".checkCardNumber(\"" + ProcessForm.CreditCardNumber.value +
		"\", " + tmpyear + ", " + tmpmonth + ");");
		cardname = "";
		
		if (retval) { //If returns true, card number valid
			//return true
		} else {
		// The CreditCardNumber has the valid luhn checksum, but we want to know which cardtype it belongs to.
			for (var n = 0; n < Cards.size; n++) {
				if (Cards[n].checkCardNumber(ProcessForm.CreditCardNumber.value, tmpyear, tmpmonth)) {
				cardname = Cards[n].getCardType();
				break;
				}
			}
		
			if (cardname.length > 0) {
				alert("This looks like a " + cardname + " number, not a " + card + " number.");
				ProcessForm.CardType.focus();
				return false
			} else {
				alert("This card number is not valid.");
				ProcessForm.CreditCardNumber.focus();
				ProcessForm.CreditCardNumber.select();
				return false
			}
		}
	} // end if CC payment method selected 
}

function btnEnableDisable() {
		document.ProcessForm.Finish.style.background='Red'
		document.ProcessForm.Finish.value = 'Please wait...'
		document.ProcessForm.Finish.disabled = true
		return true
}

//Object CardType([String cardtype, String rules, String len, int year, int month])
//cardtype    : type of card, eg: MasterCard, Visa, etc.
//rules       : rules of the CreditCardNumber, eg: "4", "6011", "34,37".
//len         : valid length of CreditCardNumber, eg: "16,19", "13,16".
//year        : year of expiry date.
//month       : month of expiry date.
//eg:
//var VisaCard = new CardType("Visa", "4", "16");
//var AmExCard = new CardType("AmEx", "34,37", "15");

	var Cards = new makeArray(8);
	Cards[0] = new CardType("MasterCard", "51,52,53,54,55", "16");
	var MasterCard = Cards[0];
	Cards[1] = new CardType("VisaCard", "4", "13,16");
	var VisaCard = Cards[1];
	Cards[2] = new CardType("AmExCard", "34,37", "15");
	var AmExCard = Cards[2];
	Cards[3] = new CardType("DinersClubCard", "30,36,38", "14");
	var DinersClubCard = Cards[3];
	Cards[4] = new CardType("DiscoverCard", "6011", "16");
	var DiscoverCard = Cards[4];
	Cards[5] = new CardType("enRouteCard", "2014,2149", "15");
	var enRouteCard = Cards[5];
	Cards[6] = new CardType("JCBCard", "3088,3096,3112,3158,3337,3528", "16");
	var JCBCard = Cards[6];
	var LuhnCheckSum = Cards[7] = new CardType();

function CardType() {
	var n;
	var argv = CardType.arguments;
	var argc = CardType.arguments.length;
	
	this.objname = "object CardType";

	var tmpcardtype = (argc > 0) ? argv[0] : "CardObject";
	var tmprules = (argc > 1) ? argv[1] : "0,1,2,3,4,5,6,7,8,9";
	var tmplen = (argc > 2) ? argv[2] : "13,14,15,16,19";

	this.setCreditCardNumber = setCreditCardNumber;  // set CreditCardNumber method.
	this.setCardType = setCardType;  // setCardType method.
	this.setLen = setLen;  // setLen method.
	this.setRules = setRules;  // setRules method.
	this.setExpiryDate = setExpiryDate;  // setExpiryDate method.

	this.setCardType(tmpcardtype);
	this.setLen(tmplen);
	this.setRules(tmprules);
	if (argc > 4)
		this.setExpiryDate(argv[3], argv[4]);

	this.checkCardNumber = checkCardNumber;  // checkCardNumber method.
	this.getExpiryDate = getExpiryDate;  // getExpiryDate method.
	this.getCardType = getCardType;  // getCardType method.
	this.isCreditCardNumber = isCreditCardNumber;  // isCreditCardNumber method.
	this.isExpiryDate = isExpiryDate;  // isExpiryDate method.
	this.luhnCheck = luhnCheck;// luhnCheck method.
	return this;
}

//boolean checkCardNumber([String CreditCardNumber, int year, int month])
//return true if CreditCardNumber pass the luhncheck and the expiry date is
//valid, else return false.
function checkCardNumber() {
	var argv = checkCardNumber.arguments;
	var argc = checkCardNumber.arguments.length;
	var CreditCardNumber = (argc > 0) ? argv[0] : this.CreditCardNumber;
	var year = (argc > 1) ? argv[1] : this.year;
	var month = (argc > 2) ? argv[2] : this.month;
	
	this.setCreditCardNumber(CreditCardNumber);
	this.setExpiryDate(year, month);

	if (!this.isCreditCardNumber())
		return false;
	if (!this.isExpiryDate())
		return false;
	return true;	
}

//String getCardType()
//return the cardtype.
function getCardType() {
	return this.cardtype;
}

//String getExpiryDate()
//return the expiry date.
function getExpiryDate() {
	return this.month + "/" + this.year;
}

//boolean isCreditCardNumber([String CreditCardNumber])
//return true if CreditCardNumber pass the luhncheck and the rules, else return
//false.
function isCreditCardNumber() {
	var argv = isCreditCardNumber.arguments;
	var argc = isCreditCardNumber.arguments.length;
	var CreditCardNumber = (argc > 0) ? argv[0] : this.CreditCardNumber;
	if (!this.luhnCheck())
		return false;	
		
for (var n = 0; n < this.len.size; n++)
	if (CreditCardNumber.toString().length == this.len[n]) {
		for (var m = 0; m < this.rules.size; m++) {
		var headdigit = CreditCardNumber.substring(0, this.rules[m].toString().length);
			if (headdigit == this.rules[m])
			return true;
		}
		return false;
	}
	return false;
}

//boolean isExpiryDate([int year, int month])
//return true if the date is a valid expiry date,
//else return false.
function isExpiryDate() {
	var argv = isExpiryDate.arguments;
	var argc = isExpiryDate.arguments.length;

	year = argc > 0 ? argv[0] : this.year;
	month = argc > 1 ? argv[1] : this.month;

	if (!isNum(year+""))
		return false;
	if (!isNum(month+""))
		return false;
		today = new Date();
		expiry = new Date(year, month);
	if (today.getTime() > expiry.getTime())
		return false;
	else
		return true;
}

//boolean isNum(String argvalue)
//return true if argvalue contains only numeric characters,
//else return false.

function isNum(argvalue) {
	argvalue = argvalue.toString();

	if (argvalue.length == 0)
		return false;

	for (var n = 0; n < argvalue.length; n++)
	if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
	return false;

	return true;
}

//boolean luhnCheck([String CreditCardNumber])
//return true if CreditCardNumber pass the luhn check else return false.
//Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
function luhnCheck() {
	var argv = luhnCheck.arguments;
	var argc = luhnCheck.arguments.length;

	var CreditCardNumber = argc > 0 ? argv[0] : this.CreditCardNumber;

	if (! isNum(CreditCardNumber)) {
		return false;
	  }

	var no_digit = CreditCardNumber.length;
	var oddoeven = no_digit & 1;
	var sum = 0;

	for (var count = 0; count < no_digit; count++) {
		var digit = parseInt(CreditCardNumber.charAt(count));
		if (!((count & 1) ^ oddoeven)) {
			digit *= 2;
		if (digit > 9)
			digit -= 9;
		}
		sum += digit;
	}
	if (sum % 10 == 0)
		return true;
	else
		return false;
}

//ArrayObject makeArray(int size)
//return the array object in the size specified.
function makeArray(size) {
	this.size = size;
	return this;
}

//CardType setCreditCardNumber(CreditCardNumber)
//return the CardType object.
function setCreditCardNumber(CreditCardNumber) {
	this.CreditCardNumber = CreditCardNumber;
	return this;
}

//CardType setCardType(cardtype)
//return the CardType object.
function setCardType(cardtype) {
	this.cardtype = cardtype;
	return this;
}

//CardType setExpiryDate(year, month)
//return the CardType object.
function setExpiryDate(year, month) {
	this.year = year;
	this.month = month;
	return this;
}

//CardType setLen(len)
//return the CardType object.

function setLen(len) {
	// Create the len array.
	if (len.length == 0 || len == null)
		len = "13,14,15,16,19";

	var tmplen = len;
	n = 1;
	while (tmplen.indexOf(",") != -1) {
		tmplen = tmplen.substring(tmplen.indexOf(",") + 1, tmplen.length);
		n++;
	}
	this.len = new makeArray(n);
	n = 0;
	while (len.indexOf(",") != -1) {
		var tmpstr = len.substring(0, len.indexOf(","));
		this.len[n] = tmpstr;
		len = len.substring(len.indexOf(",") + 1, len.length);
		n++;
	}
	this.len[n] = len;
	return this;
}

//CardType setRules()
//return the CardType object.

function setRules(rules) {
	// Create the rules array.
	if (rules.length == 0 || rules == null)
		rules = "0,1,2,3,4,5,6,7,8,9";

	var tmprules = rules;
	n = 1;
	while (tmprules.indexOf(",") != -1) {
		tmprules = tmprules.substring(tmprules.indexOf(",") + 1, tmprules.length);
		n++;
	}
	this.rules = new makeArray(n);
	n = 0;
	while (rules.indexOf(",") != -1) {
		var tmpstr = rules.substring(0, rules.indexOf(","));
		this.rules[n] = tmpstr;
		rules = rules.substring(rules.indexOf(",") + 1, rules.length);
		n++;
	}
	this.rules[n] = rules;
	return this;
}


function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}


//<input type=text name=txtphone maxlength="13" onclick="javascript:getIt(this)" >
var n;
var p;
var p1;
function ValidatePhone(){
p=p1.value
if(p.length==3){
	//d10=p.indexOf('(')
	pp=p;
	d4=p.indexOf('(')
	d5=p.indexOf(')')
	if(d4==-1){
		pp="("+pp;
	}
	if(d5==-1){
		pp=pp+")";
	}
	//pp="("+pp+")";
	document.frmPhone.txtphone.value="";
	document.frmPhone.txtphone.value=pp;
}
if(p.length>3){
	d1=p.indexOf('(')
	d2=p.indexOf(')')
	if (d2==-1){
		l30=p.length;
		p30=p.substring(0,4);
		//alert(p30);
		p30=p30+")"
		p31=p.substring(4,l30);
		pp=p30+p31;
		//alert(p31);
		document.frmPhone.txtphone.value="";
		document.frmPhone.txtphone.value=pp;
	}
	}
if(p.length>5){
	p11=p.substring(d1+1,d2);
	if(p11.length>3){
	p12=p11;
	l12=p12.length;
	l15=p.length
	//l12=l12-3
	p13=p11.substring(0,3);
	p14=p11.substring(3,l12);
	p15=p.substring(d2+1,l15);
	document.frmPhone.txtphone.value="";
	pp="("+p13+")"+p14+p15;
	document.frmPhone.txtphone.value=pp;
	//obj1.value="";
	//obj1.value=pp;
	}
	l16=p.length;
	p16=p.substring(d2+1,l16);
	l17=p16.length;
	if(l17>3&&p16.indexOf('-')==-1){
		p17=p.substring(d2+1,d2+4);
		p18=p.substring(d2+4,l16);
		p19=p.substring(0,d2+1);
		//alert(p19);
	pp=p19+p17+"-"+p18;
	document.frmPhone.txtphone.value="";
	document.frmPhone.txtphone.value=pp;
	//obj1.value="";
	//obj1.value=pp;
	}
}
//}
setTimeout(ValidatePhone,100)
}
function getIt(m){
n=m.name;
//p1=document.forms[0].elements[n]
p1=m
ValidatePhone()
}
function testphone(obj1){
p=obj1.value
//alert(p)
p=p.replace("(","")
p=p.replace(")","")
p=p.replace("-","")
p=p.replace("-","")
//alert(isNaN(p))
if (isNaN(p)==true){
alert("Check phone");
return false;
}
}
