/*** SET GLOBALS HERE ***/

var errtxt="";
var errs=0;
var val_other=5;
var focus_fld="";
var blank_bkgrnd="#F0FFFF";

function set_alert(field,alerttxt)
{
    if ( alerttxt != "")
	{
	   if ( errtxt!="")
	      { errtxt = errtxt + '\n'; }
	   errtxt = errtxt + alerttxt;
	}
	errs++;
	if ( errs==1)
		{focus_fld = field;}
	field.style.background = 'Yellow';

	return true;
}

function set_fld_focus(field)
{
	field.focus();
}

function validate_required(field,alerttxt)
{
  if ( field.value==null || field.value=="")
  { 
	 if ( alerttxt != "")
	 {
	  	set_alert(field,alerttxt + " must be supplied");
	 }
	 else
	 {
	 	set_alert(field, "");
	 }
	 return false;
   }
   field.style.background = 'White';
   return true;
}

function validate_blank(field,alerttxt)
{
  if ( field.value==null || field.value=="")
  { 
     field.style.background = blank_bkgrnd;
     return true;
  } 

  set_alert(field,alerttxt);
  return false;
}

function check_email(field)
{
   var knownDoms=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
   
   // First is there an "@" and "."?
   var atpos=field.value.indexOf("@");
   var dotpos=field.value.lastIndexOf(".");
   if ( atpos<1 || dotpos-atpos<2)
   	  { return false; }
   
   var eparts   = field.value.split("@");
   var user     = eparts[0];
   var domain   = eparts[1];

   for (i=0; i<user.length; i++) 
   {
      if (user.charCodeAt(i)>127) 
	  {
		 return false;
      }
   }
   
   for (i=0; i<domain.length; i++) 
   {
      if (domain.charCodeAt(i)>127) 
	  { return false;}
   }
   // Domain is either IP Address or host.domain
   var obpos=domain.indexOf("[");
   var cbpos=domain.indexOf("]");
   var domparts = domain.split(".");
   var numparts = domparts.length;  

   if (obpos>-1 && cbpos==domain.length-1)
   {
      //  Looks like an IP Address
   	  // An IP Address has 4 parts
   	  if (numparts<4 || numparts>4) 
   	  {
	     return false;
      }
   }
   else
   {
      // Looks like host.domain
   	  // Make sure there's a host name preceding the domain.
   	  if (numparts<2) 
   	  {
	     return false;
      }
      // Domain name seems valid
   	  // Make sure that it ends in a known domain or a two-letter country
      if (domparts[numparts-1].length!=2 && 
   	      domparts[numparts-1].search(knownDoms)==-1) 
      {
	     return false;
      }
   }
   // If we've gotten this far, everything's valid!
   return 
}
function validate_email(field)
{
   if (validate_required(field,"Email Address")==true )
   {
	  if ( check_email( field) == false )
   	  {
	     set_alert(field,"Not a valid email address");
	     return false;
      }
      return true;
   }
   return false;
}


function validate_select(field,alerttxt)
{
   if (field.selectedIndex==0)
   { 
      set_alert(field,alerttxt);
	  return false;
   }
   field.style.background = 'White';
   return true;
}



function validate_zipcode(field,alerttxt)
{
   if (validate_required(field,alerttxt)==true )
   {
   	  // Only validate if field is filled
      // Strip out acceptable non-numeric characters
  	  var stripped = field.value.replace(/[\(\)\.\-\ ]/g, '');

	  if ( (stripped.length == 5) || (stripped.length == 9))
	  {
	  	 // US Zip Code = 5 or 9 digits.
		 if (isNaN(parseInt(stripped))) 
	  	 {
	     	set_alert(field,alerttxt + " contains illegal characters");
	 	 	return false;
  	  	 }
	  }
	  else if ( stripped.length == 6 )
	  {
	  	 // Canadian Postal Code
		 if ( stripped.match(/^[a-zA-Z0-9]+$/))
		 {
			return true;
		 }
		 else
		 {
		 	set_alert(field,alerttxt + " contains illegal characters");
	 	 	return false;
		 }
	  }
	  else
	  {
	  	 // Unknown
		 set_alert(field,alerttxt + 
		 	" must be 5 or 9 digits for US, 6 alphanumeric for Canada");
	 	 return false;
	  }
	  return true;
  }
  return false;
}
function validate_date(field,alerttxt)
{
   if (validate_required(field, alerttxt)==true )
   {
      var dateparts = field.value.split("/");
   	  var numparts  = dateparts.length;  

	  if ( numparts == 3 )
	  {
	     var mn =dateparts[0];
		 var dy =dateparts[1];
		 var yr =dateparts[2];
		 var dayobj = new Date(yr, mn-1, dy);

		 if ((dayobj.getMonth()+1==mn)&&(dayobj.getDate()==dy)&&(dayobj.getFullYear()==yr))
		 {
			return true;
		 } 
	  }
	  set_alert(field, alerttxt + " is invalid format");
   }
   return false;
}

function validate_phonenum(field,alerttxt)
{
  // Only validate if field is filled
  if (field.value!=null && field.value!="")
  {
     // Strip out acceptable non-numeric characters
  	 var stripped = field.value.replace(/[\(\)\.\-\ ]/g, '');

     if (isNaN(parseInt(stripped))) 
	 {
	  	set_alert(field, alerttxt + " contains illegal characters");
	 	return false;
  	 }
  	 if ( (stripped.length < 10)) 
	 {
	    set_alert(field, "Include area code with " + alerttxt); 
		return false;
     }
	 if ( (stripped.length > 10)) 
	 {
	    set_alert(field, alerttxt + " is not a valid phone number");
		return false;
     }
  }
  field.style.background = 'White';
  return true;
}

function validate_phones()
{
 	if (validate_required(document.DelReq.HOMENBR,"")== false &&
	    validate_required(document.DelReq.CELLNBR,"")== false &&
		validate_required(document.DelReq.WORKNBR,"")== false    )
	{ 	
		set_alert(document.DelReq.HOMENBR, "Must supply at least one phone number");

		document.DelReq.HOMENBR.style.background = 'Yellow';
		document.DelReq.CELLNBR.style.background = 'Yellow';
		document.DelReq.WORKNBR.style.background = 'Yellow';
		
		return false;
	}
	
	if (validate_phonenum(document.DelReq.HOMENBR, "Home Phone Number") == true &&
	    validate_phonenum(document.DelReq.CELLNBR, "Cell Phone Number") == true &&
		validate_phonenum(document.DelReq.WORKNBR, "Work Phone Number") == true   )
	{
	 	
		return true;
	}
	return false;
}

function validate_affil( field, other)
{
   if ( validate_select(field, "Must specify Affiliation"))
   {
       if ( field.selectedIndex==val_other)
	   {
	      return( validate_required( other, "Must supply other Affilition Information"));
	   }
	   else
	   {
	      return( validate_blank( other, "Cannot enter OTHER unless Affilition is Other"));
	   }
   }
}

function affil_changed()
{
	validate_select(document.DelReq.Affiliation,"");

	if (document.DelReq.Affiliation.selectedIndex==val_other)
	{
	   document.DelReq.OTHER.style.background = 'white';
	   document.DelReq.OTHER.focus();
	}
	else
	{
	   if ( validate_blank( document.DelReq.OTHER, "") == false)
	   {
		  document.DelReq.OTHER.focus();
	   }
	}
}

function replyby_changed()
{
	var selection = document.DelReq.ReplyBy.selectedIndex;
	var err_cnt = 0;

	document.DelReq.HOMENBR.style.background = 'white';
	document.DelReq.WORKNBR.style.background = 'white';
	document.DelReq.CELLNBR.style.background = 'white';
	document.DelReq.ReplyBy.style.background = 'white';
	if (selection == 1)
	{
		if ( validate_required(document.DelReq.EMAIL,"NEED")==false)
		{ alert("Must supply E-mail Address"); err_cnt++; }
	}
	else if (selection == 2)
	{
		if ( validate_required(document.DelReq.HOMENBR,"NEED")==false)
		{ alert("Must supply Home Phone Number"); err_cnt++; }
	}
	else if (selection == 3)
	{
		if ( validate_required(document.DelReq.WORKNBR,"NEED")==false)
		{ alert("Must supply Work Phone Number"); err_cnt++; }
	}
	else if (selection == 4)
	{
		if ( validate_required(document.DelReq.CELLNBR,"NEED")==false)
		{ alert("Must supply Cell Phone Number"); err_cnt++; }
	}
	else if (selection == 5)
	{
		if ( validate_phones() == false)
		{err_cnt++ } 
	}
	if ( err_cnt > 0)
	{
		document.DelReq.ReplyBy.style.background = 'yellow';
 	}
}

function validate_form(thisform)
{
   errs=0;
   errtxt="";
   focus_fld="";
   
   validate_required(document.DelReq.NAME, "Name");
   validate_required(document.DelReq.ADDR, "Address");
   validate_required(document.DelReq.CITY, "City");
   validate_select  (document.DelReq.STATE,"Must select State");
   validate_zipcode (document.DelReq.ZIP,  "Zip Code");
   validate_email   (document.DelReq.EMAIL);
   validate_phones  ();
   validate_select  (document.DelReq.ReplyBy,     "Must specify Reply By Method");
   validate_affil   (document.DelReq.Affiliation, document.DelReq.OTHER);
   validate_required(document.DelReq.YEAR,        "Vehicle Year");
   validate_required(document.DelReq.MAKE,        "Vehicle Make");
   validate_required(document.DelReq.MODEL,       "Vehicle Model");
   validate_select  (document.DelReq.Drivable,    "Must specify drivability");
   validate_select  (document.DelReq.Transmission,"Must select a Transmission Type");
   validate_date    (document.DelReq.PICKUPDATE,  "Must specify pickup date");
   validate_required(document.DelReq.FromAddr,    "Pickup Address");
   validate_required(document.DelReq.FromCity,    "Pickup City");
   validate_select  (document.DelReq.FromState,   "Must select Pickup State");
   validate_zipcode (document.DelReq.FromZIP,  	  "Pickup Zip Code");
   validate_required(document.DelReq.ToAddr,   	  "Dropoff Address");
   validate_required(document.DelReq.ToCity,   	  "Dropoff City");
   validate_select  (document.DelReq.ToState,  	  "Must select Dropoff State") ;
   validate_zipcode (document.DelReq.ToZIP,    	  "Dropoff Zip Code");
   
   if ( errs > 0 )
      { alert(errtxt); 
	    set_fld_focus(focus_fld)
	    return false; 
	  }		
   return true;
}

function validate_reset(thisform)
{
   var answer = confirm("Are you sure you want to reset?");
   
   if (answer)
   {
      document.DelReq.NAME.style.background = 'White';
   	  document.DelReq.ADDR.style.background = 'White';
  	  document.DelReq.CITY.style.background = 'White';
  	  document.DelReq.STATE.style.background = 'White';
   	  document.DelReq.ZIP.style.background = 'White';
	  document.DelReq.EMAIL.style.background = 'White';
	  document.DelReq.HOMENBR.style.background = 'White';
	  document.DelReq.CELLNBR.style.background = 'White';
	  document.DelReq.WORKNBR.style.background = 'White';
	  document.DelReq.ReplyBy.style.background = 'White';
	  document.DelReq.Affiliation.style.background = 'White';
	  document.DelReq.OTHER.style.background = blank_bkgrnd;
      document.DelReq.YEAR.style.background = 'White';
   	  document.DelReq.MAKE.style.background = 'White';
	  document.DelReq.MODEL.style.background = 'White';
	  document.DelReq.Drivable.style.background = 'White';
	  document.DelReq.Transmission.style.background = 'White';
	  document.DelReq.PICKUPDATE.style.background = 'White';
	  document.DelReq.FromAddr.style.background = 'White';
	  document.DelReq.FromCity.style.background = 'White';
	  document.DelReq.FromState.style.background = 'White';
	  document.DelReq.FromZIP.style.background = 'White';
	  document.DelReq.ToAddr.style.background = 'White';
	  document.DelReq.ToCity.style.background = 'White';
	  document.DelReq.ToState.style.background = 'White';
	  document.DelReq.ToZIP.style.background = 'White';
   	  document.DelReq.NAME.focus();
   }
   return answer;
}

//preload();


