// -----------------------------------------------------------------
// Function    : IsFormComplete
// Language    : JavaScript
// Description : Checks if all elements in a form have a non-blank value
// Copyright   : (c) 1998 Shawn Dorman
// http://www.goodnet.com/~sdorman/web/IsFormComplete.html
// -----------------------------------------------------------------
// Ver    Date    Description of modification
// --- ---------- --------------------------------------------------
// 1.0 08/31/1996 Original write
// 1.1 09/30/1998 CHG: Use standard header format
// -----------------------------------------------------------------
// Source: Webmonkey Code Library
// (http://www.hotwired.com/webmonkey/javascript/code_library/)
// -----------------------------------------------------------------
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		alert("The date format should be : mm/dd/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Please enter a valid date")
		return false
	}
return true
}

function IsEmailValid(FormName,ElemName)
{
var EmailOk  = true;
var Temp     = document.forms[FormName].elements[ElemName]
var AtSym    = Temp.value.indexOf('@')
var Period   = Temp.value.lastIndexOf('.')
var Space    = Temp.value.indexOf(' ')
var Length   = Temp.value.length - 1   // Array is from 0 to length-1

if ((AtSym < 1) ||                     // '@' cannot be in first position
    (Period <= AtSym+1) ||             // Must be atleast one valid char btwn '@' and '.'
    (Period == Length ) ||             // Must be atleast one valid char after '.'
    (Space  != -1))                    // No empty spaces permitted
   {  
      EmailOk = false
      //Temp.focus()
   }
return EmailOk
}

//  *****  08.09.2004  jim@andymeadows.com
//
//  force XXX-XXX-XXXX formating of Phone Number

function format_phone(ptr_pnumber) {
    var rv = false;

    var get_digitsRegExp = /\d/;
    var raw_number = ptr_pnumber.value.replace(/\D/g, "");

    if ( raw_number.length != 10 ) {
        alert ( "Please enter 10 digits for the phone number.");
    } else {
        ptr_pnumber.value = raw_number.substring(0,3) + "-"
                            + raw_number.substring(3,6) + "-"
                            + raw_number.substring(6);
        rv = true;
    }

    return rv;
}

function IsPhoneValid(FormName, ElemName) {
	format_phone(document.forms[FormName].elements[ElemName]);
    	
	var msg ='';
	var reg = new RegExp("(^[0-9]{3}-[0-9]{4})|(^[0-9]{3}-[0-9]{3}-[0-9]{4})");
	var Temp     = document.forms[FormName].elements[ElemName];
	//alert(FormName+' '+Temp);
	var rslt = reg.test(Temp.value);
	return rslt;
}

function IsAmountValid(FormName, ElemName) {
	var elemObj = document.forms[FormName].elements[ElemName]
	//alert('inside isAmtValid '+ElemName+'\nvalue '+elemObj.value+' '+Number(elemObj.value)+'\n'+FormName);
	var rslt = true;
	if ( isNaN( Number(elemObj.value)) )
	{	
		rslt = false;
	} else if (Number(elemObj.value) == 0)
	{	
		elemObj.value = 0;
	}

	return rslt;
}
function ck_value(frm, elem) {
//	alert ('inside ck_value '+elem.id+ ' elem name '+elem.name+' form name '+frm.name);
	var elemOk = true;
	 if ((elem.name.indexOf('_nbr') != -1 && elem.name.indexOf('_phone') == -1 && elem.name.indexOf('_fax') == -1 && elem.name.indexOf('_cell') == -1 )
		 || elem.name.indexOf('_cst') != -1 ||  elem.name.indexOf('_amt') != -1)
	 { 
		 var rslt = IsAmountValid(frm.name, elem.id);
		 if (!rslt) { 				 
			elemOk = false;
		 }
	 }
	 //eval for phone, e-mail, date

	 if (elem.name.indexOf('_phone') != -1 || elem.name.indexOf('_fax') != -1|| elem.name.indexOf('_cell') != -1)
	 { 
		if (!IsPhoneValid(frm.name, elem.name))
		{
			elemOk = false;
		}
	 }
	 if (elem.name.indexOf('_email') != -1)
	 {
		if (!IsEmailValid(frm.name, elem.name))
		{
			elemOk = false;
		}
	 }

	 if (elem.name.indexOf('_dt') != -1 )
	 {
		 if ( !isDate(elem.value))
		 {
			 elemOk = false;
		 }
	 }
	 //alert (elemOk+' '+elem.name+' '+elem.value);
	 return elemOk;

}
function verifyCell(frm, elem) {
//	alert('inside verify cell '+elem.name+' '+elem.id);
	var elemOk = true;
	if (elem.value == '')
     {  
		elemOk = false	
     } else {
		elemOk = ck_value (frm, elem);
	 }

	 if (!elemOk)
	 {   
		changeLabel("on",elem.id);
	 } else {
		changeLabel("off",elem.id);
	 }

	return elemOk;

}

function searchArray(pArray, pSearchParm) {
	//alert ('inside searchArray '+pArray+' '+pSearchParm)
	var found = false;
	var s=0;
	while (!found && s < pArray.length)
	{
		if (pSearchParm.indexOf(pArray[s]) != -1)
		{	
			found = true;
		}
		s++
	}
	return found;
}

function verifyRow(FormName, tableId, pArrExclude) {
	var FormOk= true;
// verifies associated row elements
		var curTable = document.getElementById(tableId);
		var aRows = curTable.getElementsByTagName('tr');
		//starting at one because of header row 
		var rowCnt = 0;
		for ( i= 1; i< aRows.length ;i++ )
		{	var curRow = aRows[i];
			var aCurRowInpts = curRow.getElementsByTagName('input');
			var rowNotBlank = false;
			// begin row iteration
			var z = 0;
			while (!rowNotBlank && z < aCurRowInpts.length)
			{
				if (aCurRowInpts[z].value != '')
				{
					rowNotBlank = true;
				}
				z++;
			}

			if (rowNotBlank)
			{	
				z = 0;
				while (z < aCurRowInpts.length)
				{
					if (!searchArray(pArrExclude, aCurRowInpts[z].name))
					{	
						var retval = verifyCell(FormName, aCurRowInpts[z])
						if (!retval) { FormOk = false;	}
					} else if (aCurRowInpts[z].value != '')
					{
						var retval = verifyCell(FormName, aCurRowInpts[z])
						if (!retval) { FormOk = false;	}
					}
					z++;
				}
				rowCnt++;
			}

		} // end table iteration

		if (!rowNotBlank && rowCnt == 0)
		{
			alert('You must enter at least one advertising vehicle before submitting');
			FormOk = false;
		}
		//alert ('FormOk '+FormOk);
		
		return FormOk;

}

// password - between 6-8 chars, uppercase, lowercase, and numeral

function checkPassword (strng) {
var error = "";
if (strng == "") {
   error = "You didn't enter a password.\n";
}

    var illegalChars = /[\W_]/; // allow only letters and numbers

    //if ((strng.length < 4) || (strng.length > 25)) {
	if ((strng.length < 8) || (strng.length > 12)) {
       error = "The password is the wrong length.\nPlease choose a password between 8 and 12 characters.";
    }
    /*else if (illegalChars.test(strng)) {
      error = "The password contains illegal characters.\n";
    } 
    else if (!( (strng.search(/([a-z])+/) > -1) && (strng.search(/([A-Z])+/) > -1) && (strng.search(/([0-9])+/) > -1)) ) {
       error = "The password must contain at least one uppercase letter, one lowercase letter, and one numeral.\n";
    }*/

if (error != "")
{
	alert (error);
	return false;
}	

return true;
}    

function IsFormComplete(FormName, pVerifyValue)
{ //	alert ('inside IsCom '+document.forms[FormName.name])
// pVerifyValue is a true or false indicating to check the value as well for proper entry
// e.g. check a phone field for a phone number, e-mail for e-mail, etc.
var x       = 0
var FormOk  = true

var arrElem;
var arrCkIfVal;

if (typeof(FormName)=='string')
{
	var frm = document.forms[FormName];
} else {
	var frm = document.forms[FormName.name];
}
// the following are created within the PHP scripts generating the forms
	arrElem = eval(arrElemToCheck);
	arrCkIfVal = eval(arrElemIfCheck);

var elem
var id
var errCnt = 0
while ((x < arrElem.length) ) { 
   //verifying required fields
	var elemOk  = true
	elem = frm.elements[arrElem[x]];
	//alert(elem.name);
	id = 'id_'+elem.name
	//alert ('elem.name '+elem.name+' elem.value |'+elem.value+'| '+id);
	if (elem.value == '')
     {  if (FormOk)   {  var goToId = elem.name;     }
		elemOk = false	
		errCnt ++;
     } else {
		elemOk = verifyCell(frm, elem) 
	 }
	 if (!elemOk)
	 {
		 FormOk = false;
		 changeLabel("on",id);
	 } else {
		changeLabel("off",id);
	 }
	 
	 x ++
}	
x = 0;
// verifying non-required fields
while (x < arrCkIfVal.length)
{	
	var elemOk  = true
	elem = frm.elements[arrCkIfVal[x]];

	id = 'id_'+elem.name;
	if (elem.value != '' )
	{
		elemOk = ck_value(frm, elem);
	}
	 if (!elemOk)
	 {   errCnt ++;
		 FormOk = false;
		 changeLabel("on",id);
	 } else {
		changeLabel("off",id);
	 }
	 
	 x ++
}

if (!FormOk)
{	var msg1, msg2
	if (errCnt == 1)
	{
		msg1 = " is ";
		msg2 = " it";

	} else {
		msg1 = "s are ";
		msg2 = " them";
	}
	alert ('The highlighted field'+msg1+'either blank or in error, please correct'+msg2+'.');

}
	return FormOk

}

function ValidateForm(FormName, TableID){
// wrapper for IsFormComplete
	arrExclude = Array ('promo')
	var vRowRslt = verifyRow(FormName, TableID, arrExclude);
	var vComplete = IsFormComplete(FormName, true);

	if (vRowRslt && vComplete)
	{
		return true;
	} else {
		return false;
	}
}

