/* USAGE:
Put this line in the head
  <SCRIPT LANGUAGE="JavaScript" SRC="include/forms.js"></SCRIPT>

And add:
  onSubmit="return checkform(this);"
to your form declaration

*/


function getArgs() {
    var args = new Object();
    var query = location.search.substring(1);  // Get query string.
    var pairs = query.split("&");              // Break at ampersand.
    for(var i = 0; i < pairs.length; i++) {
	var pos = pairs[i].indexOf('=');       // Look for "name=value".
	if (pos == -1) continue;               // If not found, skip.
	var argname = pairs[i].substring(0,pos);  // Extract the name.
	var value = pairs[i].substring(pos+1); // Extract the value.
	args[argname] = unescape(value);          // Store as a property.
    }
return args;                               // Return the object.
}

function getArgsFromURL(inputURL) {
    var args = new Object();
    var urlSplit = inputURL.split("?");
    var query = urlSplit[1];  // Get query string.
    if (query) 
    {
    var pairs = query.split("&");              // Break at ampersand.
    for(var i = 0; i < pairs.length; i++) {
	var pos = pairs[i].indexOf('=');       // Look for "name=value".
	if (pos == -1) continue;               // If not found, skip.
	var argname = pairs[i].substring(0,pos);  // Extract the name.
	var value = pairs[i].substring(pos+1); // Extract the value.
	args[argname] = unescape(value);          // Store as a property.
    }//end of for loop
    }//if there is a query string
return args;                               // Return the object.
}


function writeBackLink() {
	var args = getArgs();
	var hrefText = '<p align="center"><a href="default.asp?';
	if (args.CallingPage)
	{
		var subargs = getArgsFromURL(unescape(args.CallingPage));
		if (!subargs.pageID && !subargs.PageID && !subargs.groupID && !subargs.GroupID && !subargs.sectionID && !subargs.SectionID)
		{
			document.write('<p align="center"><a href="/default.asp?sectionID=42&amp;groupID=79">back to E-Services</a></p>');
		}
		else
		{
		if (subargs.pageID) hrefText = hrefText + 'pageID=' + parseInt(subargs.pageID) + '&';
		if (subargs.PageID) hrefText = hrefText + 'pageID=' + parseInt(subargs.PageID) + '&';
		if (subargs.groupID) hrefText = hrefText + 'groupID=' + parseInt(subargs.groupID) + '&';
		if (subargs.GroupID) hrefText = hrefText + 'groupID=' + parseInt(subargs.GroupID) + '&';
		if (subargs.sectionID) hrefText = hrefText + 'sectionID=' + parseInt(subargs.sectionID) + '&';
		if (subargs.SectionID) hrefText = hrefText + 'SectionID=' + parseInt(subargs.SectionID) + '&';
		document.write(hrefText);
		document.write('">back</a></p>');
		}
	}
	else
	{
		document.write('<p align="center"><a href="/default.asp?sectionID=42&amp;groupID=79">back to E-Services</a></p>');
	}
}



function checkform(frmobj){ 
  goofed = -1; 
  retval = true; 
  output = ''; 
  i = 0; 
  
  while((i < frmobj.elements.length)){ 
    retval = true; 
    strNameVariable = frmobj.elements[i].name; 
    if(strNameVariable.indexOf('req', 0) == 0) 
      switch(frmobj.elements[i].type){ 
        case 'text': 
          switch(strNameVariable.substr(3,3)){ 
            case 'txt': 
              retval = checkblank(frmobj.elements[i].value); 
              if(!retval) 
              {
                // This will work output = output + strNameVariable.substr(7,strNameVariable.indexOf("_")-7).replace(/!/gi, ' ') + ' is a required field.\n';
                output = output + strNameVariable.substr(7,strNameVariable.length).replace(/!/gi, ' ') + ' is a required field.\n';
              }
              break; 
            case 'dte': 
              retval = checkblank(frmobj.elements[i].value); 
              if(retval) 
                retval = checkdate(frmobj.elements[i].value); 
              if(!retval) 
                output = output + strNameVariable.substr(7,strNameVariable.length).replace(/!/gi, ' ') + ' is a required field (mm/dd/yyyy).\n';

              break; 
            case 'tme': 
              retval = checkblank(frmobj.elements[i].value); 
              if(retval) 
                retval = checktime(frmobj.elements[i].value); 
              if(!retval) 
                output = output + strNameVariable.substr(7,strNameVariable.length).replace(/!/gi, ' ') + ' is a required field (hh:mm AM/PM).\n';

              break; 
            case 'num': 
              retval = checkblank(frmobj.elements[i].value); 
              if(retval) 
                retval = checknum(frmobj.elements[i].value); 
              if(!retval) 
                output = output + strNameVariable.substr(7,strNameVariable.length).replace(/!/gi, ' ') + ' is a required numeric field.\n';

              break; 
            case 'eml': 
              retval = checkblank(frmobj.elements[i].value); 
              if(retval) 
                retval = checkemail(frmobj.elements[i].value); 
              if(!retval) 
                output = output + strNameVariable.substr(7,strNameVariable.length).replace(/!/gi, ' ') + ' is a required field (myemail@domain.com).\n';

              break; 
            case 'phn': 
              retval = checkblank(frmobj.elements[i].value); 
              if(retval) 
                retval = checkphone(frmobj.elements[i].value); 
              if(!retval) 
                output = output + strNameVariable.substr(7,strNameVariable.length).replace(/!/gi, ' ') + ' is a required field in proper format ((555) 555-1212).\n';

              break; 
            case 'zip': 
              retval = checkblank(frmobj.elements[i].value); 
              if(retval) 
                retval = checkzip(frmobj.elements[i].value); 
              if(!retval) 
                output = output + strNameVariable.substr(7,strNameVariable.length).replace(/!/gi, ' ') + ' is a required field (65616).\n';

              break; 
            case 'ssn': 
              retval = checkblank(frmobj.elements[i].value); 
              if(retval) 
                retval = checkssn(frmobj.elements[i].value); 
              if(!retval) 
                output = output + strNameVariable.substr(7,strNameVariable.length).replace(/!/gi, ' ') + ' is a required field (111-11-1111).\n';

              break; 
          } 
          break; 
        case 'file': 

          
          
          retval = checkblank(frmobj.elements[i].value); 
          if(!retval){
            output = output + strNameVariable.substr(4,strNameVariable.length).replace(/!/gi, ' ') + ' is a required field.\n';
          }
          else{

		var array = frmobj.elements[i].value.split("\\");
	        var fileName = array[array.length-1]; 

		retval = checkforspaces(fileName);
		if(retval){
		  	output = output + strNameVariable.substr(4, strNameVariable.length).replace(/!/gi, ' ') + ' cannot contain spaces in the filename.\n';
			retval = false;
	 	}

          }
		  	
          break; 
        case 'password': 
          retval = checkblank(frmobj.elements[i].value); 
          if(!retval) 
            output = output + strNameVariable.substr(4,strNameVariable.length).replace(/!/gi, ' ') + ' is a required field.\n';

          break; 
        case 'textarea': 
          retval = checkblank(frmobj.elements[i].value); 
          if(!retval)
            output = output + strNameVariable.substr(7,strNameVariable.length).replace(/!/gi, ' ') + ' is a required field.\n';            
          break; 
        case 'select-one': 
          if((frmobj.elements[i].selectedIndex == -1) || (frmobj.elements[i].options[frmobj.elements[i].selectedIndex].value == 0)){

            output = output + 'Please Select a(n) '+ strNameVariable.substr(4,strNameVariable.length).replace(/!/gi, ' ') +'.\n';

            retval = false; 
          } 
          break; 
        case 'select-multiple': 
          if(frmobj.elements[i].selectedIndex == -1){ 
            output = output + 'Please select at least one of '+ strNameVariable.substr(4,strNameVariable.length).replace(/!/gi, ' ') +'.\n';

            retval = false; 
          } 
          break; 
        case 'radio': //MODIFIED BY ML 6/5/01
	if (frmobj.elements[i-1] != null){
		priorObjectName = frmobj.elements[i-1].name;}
	else{
		priorObjectName = "";}
          j = i; 
          if(strNameVariable != priorObjectName){ 
            while((j < frmobj.elements.length) && (frmobj.elements[j].name == strNameVariable) && (!frmobj.elements[j].checked))
              j++; 
            if((j == frmobj.elements.length) && (!frmobj.elements[j - 1].checked)) 
              retval = false; 
            else if(!frmobj.elements[j].checked) 
              retval = false; 
            if(!retval) 
              output = output + 'Please select a ' + strNameVariable.substr(4,strNameVariable.length).replace(/!/gi, ' ') + '.\n';
          } 
          break;
        case 'checkbox': //ADDED BY ML 10/1/03 
          if(!frmobj.elements[i].checked)
	    retval = false;
          if(!retval)
             output = output + 'Please check box to indicate ' + strNameVariable.substr(4,strNameVariable.length).replace(/!/gi, ' ') + '.\n'; 
          break; 
        case 'checkboxOFF': 
          j = i; 
          if(strNameVariable != frmobj.elements[i-1].name){ 
            while((j < frmobj.elements.length) && (frmobj.elements[j].name == strNameVariable) && (!frmobj.elements[j].checked))

              j++; 
            if((j == frmobj.elements.length) && (!frmobj.elements[j - 1].checked)) 
              retval = false; 
            else if(!frmobj.elements[j].checked) 
              retval = false; 
            if(!retval) 
              output = output + 'Please select at least one of '+ strNameVariable.substr(4,strNameVariable.length).replace(/!/gi, ' ') +'.\n';

          } 
          break; 
        case 'hidden':
          switch(strNameVariable.substr(3,3)){ 
            case 'dte': 
              retval = checkblank(frmobj.elements[i].value); 
              if(retval) 
                retval = checkdate(frmobj.elements[i].value); 
              if(!retval) 
                output = output + strNameVariable.substr(7,strNameVariable.length).replace(/!/gi, ' ') + ' is a required field (mm/dd/yyyy).\n';

              break; 
              }
			
      } 
    else 
      switch(frmobj.elements[i].type){
	  case 'file':

		  if(checkblank(frmobj.elements[i].value)){
		    
			var array = frmobj.elements[i].value.split("\\");
	                var fileName = array[array.length - 1];
		  	retval = checkforspaces(fileName);

			if(retval){
			  	output = output + strNameVariable + ' cannot contain spaces in the filename.\n';
				retval = false;
		 	}
		  }
			
          break;  
        case 'text': 
          switch(strNameVariable.substr(0,3)){ 
            case 'txt': 
              if(frmobj.elements[i].value.length > 0) 
                retval = checkblank(frmobj.elements[i].value); 
              if(!retval) 
                output = output + 'Please enter a valid ' + strNameVariable.substr(3,strNameVariable.length).replace(/!/gi, ' ') + '.\n';

              break; 
            case 'dte': 
              retval = checkblank(frmobj.elements[i].value); 
              if(retval) 
                retval = checkdate(frmobj.elements[i].value); 
              else 
                retval = true; 
              if(!retval) 
                output = output + strNameVariable.substr(3,strNameVariable.length).replace(/!/gi, ' ') + ' Needs to be a Correctly Formatted Date, mm/dd/yyyy.\n';

              break; 
            case 'tme': 
              retval = checkblank(frmobj.elements[i].value); 
              if(retval) 
                retval = checktime(frmobj.elements[i].value); 
              else 
                retval = true; 
              if(!retval) 
                output = output + strNameVariable.substr(3,strNameVariable.length).replace(/!/gi, ' ') + ' Needs to be a Correctly Formatted Time, hh:mm AM/PM.\n';

              break; 
            case 'num': 
              retval = checkblank(frmobj.elements[i].value); 
              if(retval) 
                retval = checknum(frmobj.elements[i].value); 
              else 
                retval = true; 
              if(!retval) 
                output = output + strNameVariable.substr(3,strNameVariable.length).replace(/!/gi, ' ') + ' Needs to be Numerical Data.\n';

              break; 
            case 'eml': 
              retval = checkblank(frmobj.elements[i].value); 
              if(retval) 
                retval = checkemail(frmobj.elements[i].value); 
              else 
                retval = true; 
              if(!retval) 
                output = output + strNameVariable.substr(4,strNameVariable.length).replace(/!/gi, ' ') + ' needs to be a valid e-mail (myemail@domain.com).\n';

              break; 
            case 'phn': 
              retval = checkblank(frmobj.elements[i].value); 
              if(retval) 
                retval = checkphone(frmobj.elements[i].value); 
              else 
                retval = true; 
              if(!retval) 
                output = output + strNameVariable.substr(4,strNameVariable.length).replace(/!/gi, ' ') + ' Needs to be a valid phone number ((555) 555-1212).\n'; //modified by ML 6/7/01

              break; 
            case 'zip': 
              retval = checkblank(frmobj.elements[i].value); 
              if(retval) 
                retval = checkzip(frmobj.elements[i].value); 
              else 
                retval = true; 
              if(!retval)
                output = output + strNameVariable.substr(3,strNameVariable.length).replace(/!/gi, ' ') + ' Needs to be a Valid Zip Code (65616).\n';

              break; 
            case 'ssn': 
              retval = checkblank(frmobj.elements[i].value); 
              if(retval) 
                retval = checkssn(frmobj.elements[i].value); 
              else 
                retval = true; 
              if(!retval) 
                output = output + strNameVariable.substr(3,strNameVariable.length).replace(/!/gi, ' ') + ' Needs to be a Valid Social Security Number (111-11-1111).\n';

              break; 
          } 
          break; 
      } 
    if(!retval && (goofed == -1)) 
      goofed = i; 
    i++; 
  } 
  if(output != ''){ 
    frmobj.elements[goofed].focus(); 
    output = output.replace(/_/g," "); //ADDED BY ML 6/5/01
    alert(output.replace(/ARAM./gi, '')); 
    retval = false; 
  } 
   
  return retval; 
}

function checkforspaces(strtext){
  return (strtext.search(/\s/) != -1 );
}

function checkblank(strtext){ 
  return (strtext.search(/[\S+\s+]/) != -1); 
}

function checktime(strtime){ 
  //return (strtime.search(/^(12|11|10|09|08|07|06|05|04|03|02|01|[1-9]){1}[:]{1}[0-5]{1}[0-9]{1}[ ]{1}(pm|(am|(PM|AM))){1}$/) != -1); 
  return (strtime.search(/^(12|11|10|09|08|07|06|05|04|03|02|01|[1-9]){1}([:]{1}[0-5]{1}[0-9]{1})?[ ]{0,2}[AaPp][ .]?[Mm][.]?$/) != -1); //added by ML 7/25/01
}

function checknum(strnum){ 
  return (strnum.search(/^[0-9]+(.[0-9]+)?$/) != -1); 
}

function checkemail(stremail){ 
//  return (stremail.search(/^[A-Za-z0-9_.]+[@]{1}[A-Za-z0-9_.]+(.com|(.org|(.net|(.gov|.edu))))$/) != -1);
//  return (stremail.search(/[@]{1}([.]+[\.])+[.]+/) != -1); 
  return (stremail.search(/^\s*[^@\s]+[@]{1}([^\.@\s]+[\.]{1})+[^\.@\s]+\s*$/) != -1); //added by ML 1/9/02
//  return true; 
}

function checkphone(strphone){ 
  //return (strphone.search(/^\([0-9]{3}\)\s[0-9]{3}\-[0-9]{4}$/) != -1); 
  //return (strphone.search(/^\(?[0-9]{3}(\)\s?|\-|\s|\/)[0-9]{3}(\-)[0-9]{4}/) != -1); //added by ML 6/6/01
  return (strphone.search(/^\(?\(?[0-9]{3}(\)\s?|\-|\s|\/|\.)[0-9]{3}(\-|\s|\.)[0-9]{4}/) != -1); //added by ML 6/6/01
}

function checkssn(strssn){ 
  return (strssn.search(/^[0-9]{3}\-[0-9]{2}\-[0-9]{4}$/) != -1); 
}

function checkzip(strzip){
  return (strzip.search(/^[0-9]{5}$/) != -1);
}

function correctdate(month, day, year){
  dTestDate = new Date();
  dTestDate.setMonth(month);
  dTestDate.setYear(year);
  dTestDate.setDate(day);
  return (dTestDate.getMonth() == month);
}

function checkdate(strdate){
  return (strdate.search(/^[01]?\d\/[0123]?\d\/[0-9]{4}/) != -1);
  //retval = true;
  //return retval;
}

function checkRedlightForm(frmobj){
  var goofed = -1; 
  var retval = true;
  var retval2 = true; 
  var output = ''; 
  var i = 0;   
  var strNameVariable = '';
  var strSummonsNbr = '';
  var strSummonsNbrConf = '';
  var intSummonsNbrItem = -1;
  var strAmountDue = '';
  var intAmountDueItem = -1;

  while((i < frmobj.elements.length)){ 
    retval = true;
    strNameVariable = frmobj.elements[i].name;   

    switch(strNameVariable){

    case 'aSummonsNumber':
      intSummonsNbrItem = i;
      strSummonsNbr = frmobj.elements[i].value;
      retval = checkSummonsNbr(frmobj.elements[i].value);
      if(!retval)
        output = output + 'Summons Number is blank or is not in a valid format.\n';
      break;

    case 'hConfirmSummonsNumber':
      strSummonsNbrConf = frmobj.elements[i].value;      
      retval = checkSummonsNbr(frmobj.elements[i].value);
      if(!retval)
        output = output + 'Confirm Summons Number is blank or is not in a valid format.\n';
      break;

    case 'amountDue':
      intAmountDueItem = i;
      strAmountDue = frmobj.elements[i].value;
      break;

    case 'bCourtDate':
      retval = checkDateFormat(frmobj.elements[i].value);
      if(!retval)
        output = output + 'Court Date is required in format MM/DD/YYYY.\n';
      retval = confirmFutureDate(frmobj.elements[i].value);
      retval2 = confirmScheduledCourtDate(frmobj.elements[i].value);
      if (!retval || !retval2)
	{
	retval = false;
        output = output + 'Not a valid date for Red Light court hearings.\n';
	}
      break;

    case 'cLastName':
      retval = checkblank(frmobj.elements[i].value); 
      if(!retval) output = output + 'Last Name is a required field.\n';
      break;

    case 'dFirstName':
      retval = checkblank(frmobj.elements[i].value); 
      if(!retval) output = output + 'First Name is a required field.\n';
      break;

    case 'eMiddleInitial':
      retval = checkblank(frmobj.elements[i].value); 
      if(!retval) output = output + 'Middle Initial is a required field.\n';
      break;

    case 'gContactPhone':
      retval = checkphone(frmobj.elements[i].value);
      if(!retval) output = output + 'Contact Phone is required in format (555) 555-1212.\n';
      break;


    }


    //retval = checkblank(frmobj.elements[i].value); 
    //if(!retval) output = output + strNameVariable + ' is a required field.\n';

    if(!retval && (goofed == -1)) 
      goofed = i; 
    i++; 
  } 

  if (strSummonsNbr != strSummonsNbrConf){
    output = output + 'Summons Number and Confirm Summons Number do not match.\n';
    goofed = intSummonsNbrItem;
  }

  if(strSummonsNbr.search(/STP/)==0) {
    var splitSummonsNumber = strSummonsNbr.split("STP");
    var portionAfterSTP = splitSummonsNumber[1];
    if (portionAfterSTP >= "003012"){
      if ((strAmountDue != "85.00") && (strAmountDue != "85")){
        output = output + 'Show Amount Due exactly as shown on Summons with no dollar sign.  Do not enter partial payments.\n';
        goofed = intSummonsNbrItem;
      }
    }
    else
    {
      if ((strAmountDue != "70.00") && (strAmountDue != "70")){
        output = output + 'Show Amount Due exactly as shown on Summons with no dollar sign.  Do not enter partial payments.\n';
        goofed = intSummonsNbrItem;
      }
    }
  }
  else
  {
    if ((strAmountDue != "70.00") && (strAmountDue != "70") && (strAmountDue != "85.00") && (strAmountDue != "85")){
      output = output + 'Show Amount Due exactly as shown on Summons with no dollar sign.  Do not enter partial payments.\n';
      goofed = intSummonsNbrItem;
    }    
  }

  if(output != ''){ 
    frmobj.elements[goofed].focus();
    output = output.replace(/_/g," "); 
    //alert(output.replace(/ARAM./gi, ''));
    alert(output); 
    retval = false; 
  } 
   
  return retval;

}

function checkSummonsNbr(strSummonsNbr){
  return strSummonsNbr.search(/STP[0-9]{6}/) != -1;
}

function prefillRedlightAmount(frmob) {
  if(frmob.aSummonsNumber.value.search(/STP/)==0) {
    var splitSummonsNumber = document.RedLightPaymentForm.aSummonsNumber.value.split("STP");
    var portionAfterSTP = splitSummonsNumber[1];
    if (portionAfterSTP >= "003012"){
      frmob.amountDue.value = "85.00"
    }
    else
    {
      frmob.amountDue.value = "70.00"
    }
  }
}

function checkDateFormat(strDate){
  return strDate.search(/^[01]?\d\/[0123]?\d\/2[0-9]{3}/) != -1;
}

function confirmFutureDate(strDate){
  var dteSupplied
  var dteToday

  dteSupplied = Date.parse(strDate);
  dteToday = new Date();
  dteToday.setHours(0);
  dteToday.setMinutes(0);
  dteToday.setSeconds(0);
  dteToday.setMilliseconds(0);
  return (dteSupplied >= dteToday);
}

function confirmScheduledCourtDate(strDate){
  var retval;
  var courtDates = new Array();

  courtDates[35] = "09/08/2009";
  courtDates[36] = "09/22/2009";
  courtDates[37] = "09/29/2009";
  courtDates[38] = "10/13/2009";
  courtDates[39] = "10/20/2009";
  courtDates[40] = "10/27/2009";
  courtDates[41] = "11/10/2009";
  courtDates[42] = "11/17/2009";
  courtDates[43] = "12/08/2009";
  courtDates[44] = "12/15/2009";
  courtDates[45] = "1/12/2010";
  courtDates[46] = "1/19/2010";
  courtDates[47] = "1/26/2010";
  courtDates[48] = "2/09/2010";
  courtDates[49] = "2/16/2010";
  courtDates[50] = "2/23/2010";
  courtDates[51] = "3/09/2010";
  courtDates[52] = "3/23/2010";
  courtDates[53] = "3/30/2010";
  courtDates[54] = "4/13/2010";
  courtDates[55] = "4/20/2010";
  courtDates[56] = "4/27/2010";
  courtDates[57] = "5/04/2010";
  courtDates[58] = "5/25/2010";
  courtDates[59] = "6/08/2010";
  courtDates[60] = "6/15/2010";
  courtDates[61] = "6/22/2010";
  courtDates[62] = "6/29/2010";
  courtDates[63] = "7/13/2010";
  courtDates[64] = "7/20/2010";
  courtDates[65] = "7/27/2010";
  courtDates[67] = "8/17/2010";
  courtDates[68] = "8/24/2010";
  courtDates[70] = "9/21/2010";
  courtDates[71] = "9/28/2010";
  courtDates[72] = "10/12/2010";
  courtDates[73] = "10/26/2010";
  courtDates[74] = "11/09/2010";
  courtDates[75] = "11/16/2010";
  courtDates[76] = "12/07/2010";
  courtDates[77] = "12/14/2010";

  retval = false; //priming value

  for(var i = 0; i < (courtDates.length); i++){
    if (Date.parse(strDate) == Date.parse(courtDates[i]))
      retval = true;
  }
  return retval;
}