var needed;

function calcTotal() 
{
var count, total;
if (!document.regForm.day1.checked &&
     !document.regForm.day2.checked &&
     !document.regForm.day3.checked &&
     !document.regForm.day4.checked &&
     !document.regForm.day5.checked &&
//The index is in order of radio buttons, not based on value
     document.regForm.ads[2].checked)
    {document.regForm.AmountDue.value=0;
//     alert("No seminars selected!");
     return;}
 count = CountSems();
 total=0;
 if (document.regForm.ugmember.checked) 
   {
//if adding ADS day back, change next line to [2]
   if (count==5) {total=1349};
   if (count==4) {total=1169};
   if (count==3) {total=899};
   if (count==2 || count==1) {total=629};
   if (document.regForm.ads[0].checked || document.regForm.ads[1].checked) {total=total+359}   
   } 
   else {
//if adding ADS day back, change next line to [2]
   if (count==5) {total=1499};
   if (count==4) {total=1299};
   if (count==3) {total=999};
   if (count==2 || count==1) {total=699};
   if (document.regForm.ads[0].checked || document.regForm.ads[1].checked) {total=total+399}
   } 
  document.regForm.AmountDue.value=total;
} 

function CountSems()
{
var SumSems=0;
if (document.regForm.day1.checked) {SumSems++};
if (document.regForm.day2.checked) {SumSems++};
if (document.regForm.day3.checked) {SumSems++};
if (document.regForm.day4.checked) {SumSems++};
if (document.regForm.day5.checked) {SumSems++};
return SumSems;
}

function AddToNeeded(value)
{
if (needed=="") {needed=value}
else {needed = needed + ', ' + value}
}

function isEmail (s)
{   if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return false;
       else return (isEmail.arguments[1] == true);
   
    if (isWhitespace(s)) return false;
    
    var i = 1;
    var sLength = s.length;

    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }

    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

function isWhitespace (s)

{   var i;
    var whitespace = ' ';

    if (isEmpty(s)) return true;

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);

        if (whitespace.indexOf(c) == -1) return false;
    }

    return true;
}

function isCreditCard(st) {
  if (st.length > 19)
    return (false);

  sum = 0; mul = 1; l = st.length;
  for (i = 0; i < l; i++) {
    digit = st.substring(l-i-1,l-i);
    tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }

  if ((sum % 10) == 0)
    return (true);
  else
    return (false);

} 
function isVisa(cc)
{
  if (((cc.length == 16) || (cc.length == 13)) &&
      (cc.substring(0,1) == 4))
    return isCreditCard(cc);
  return false;
} 

function isMasterCard(cc)
{
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 16) && (firstdig == 5) &&
      ((seconddig >= 1) && (seconddig <= 5)))
    return isCreditCard(cc);
  return false;

}

function isDiscover(cc)
{
  first4digs = cc.substring(0,4);
  if ((cc.length == 16) && (first4digs == "6011"))
    return isCreditCard(cc);
  return false;

}

function isAmericanExpress(cc)
{
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 15) && (firstdig == 3) &&
      ((seconddig == 4) || (seconddig == 7)))
    return isCreditCard(cc);
  return false;

} 

function stripCharsInBag (s, bag)

{   var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }

    return returnString;
}


function checkCard()
{
var cardNumberNoSpaces = stripCharsInBag(document.regForm.cn.value,' ');
if (document.regForm.ct.selectedIndex==1) 
  {if (!isVisa(cardNumberNoSpaces))  {return false;}}
if (document.regForm.ct.selectedIndex==2) 
 {if (!isMasterCard(cardNumberNoSpaces))  {return false}}
if (document.regForm.ct.selectedIndex==3) 
 {if (!isAmericanExpress(cardNumberNoSpaces))  {return false}}
return true;
}

function mangleCard(s)
{
var cardNumberNoSpaces = stripCharsInBag(s,' ');
s = cardNumberNoSpaces;
var newString = s.substring(0,4);
var l = s.length;
  for (i = 4; i < l; i++) {
    digitAsString = s.charAt(i);
    if (digitAsString==" ") continue;
    digit = parseInt(digitAsString);
    if (Math.round(i/2)==i/2)
      {if (digit==9) {digit=0} else {digit++}
      } 
      else
      {if (digit==0) {digit=9} else {digit--}
      } 
    newString = newString + digit.toString();
  }
  return newString;
}

function doMangle()
{
if (!document.regForm.cn.value=="") {document.regForm.cn.value=mangleCard(document.regForm.cn.value)};
}



function validateForm()
{
var invalid, confirminfo;
needed="";
valid = true;
  if (CountSems()==1)
  if (!confirm("You have selected to attend only one Delphi Developer Day seminar. One day is priced the same as two days. Continue anyway?")) {return false}
  calcTotal();
  if (document.regForm.AmountDue.value==0)
  {
  alert("You have not selected any seminars to attend. Please indicate which seminars you want to attend.");
    return false;
  }
  if (document.regForm.ugmember.checked && document.regForm.ugname.value=="")
  {
   alert("You must provide a user group name to get the user group discount");
    return false;
  }
  if (!isEmail(document.regForm.email.value)) 
     {alert(document.regForm.email.value + " is not a valid email address. Please correct before submitting");
      return false;}
  if (document.regForm.ct.selectedIndex !=0 && document.regForm.cn.value=="")
     {alert("You have selected a credit card type, but you have not entered a value in Credit Card Number. If you are paying by credit card, please enter the credit card number. If you are not paying by credit card, or want us to call you for the credit card number, please set Credit Card Type to None");
      return false;}

  if (document.regForm.ct.selectedIndex==0 && document.regForm.cn.value != "")
     {alert("Credit Card Type is set to None, but you entered a value in Credit Card Number. If you are paying by credit card, please select the card type. Otherwise, please erase the information in the Credit Card Number field");
      return false;}
  if (!document.regForm.ct.selectedIndex==0) 
     {if (!checkCard())
       {alert("The credit card number you entered is not a valid credit card number. Please correct the card number or card type and resubmit");
        return false;}
     }
  if (document.regForm.ct.selectedIndex!=0 && document.regForm.exactname.value=="")
     {alert("Please enter your name exactly as it appears on the credit card in the Name on card field");
      return false;}

  if (document.regForm.FirstName.value=="") 
     {AddToNeeded("First Name"); valid=false;}   
  if (document.regForm.LastName.value=="")
     {AddToNeeded("Last Name"); valid=false;}
  if (document.regForm.MailingAddress.value=="")
     {AddToNeeded("Mailing Address"); valid=false;}
  if (document.regForm.City.value=="")
     {AddToNeeded("City"); valid=false;}
  if (document.regForm.State.value=="")
     {AddToNeeded("State/Province"); valid=false;}
  if (document.regForm.ZipCode.value=="")
     {AddToNeeded("Zip/Postal Code"); valid=false;}
  if (document.regForm.Country.value=="")
     {AddToNeeded("Country"); valid=false;}
  if (document.regForm.PhoneNumber.value=="")
     {AddToNeeded("Phone Number"); valid=false;}
  if (document.regForm.email.value=="")
     {AddToNeeded("email"); valid=false;}
  if (document.regForm.AmountDue.value=="")
     {AddToNeeded("Amount Due"); valid=false;}
  if (document.regForm.exactname.value=="" && !document.regForm.ct.selectedIndex==0)
     {AddToNeeded("Name on Card"); valid=false;}
  if (! (document.regForm.rweek[0].checked || 
      document.regForm.rweek[1].checked || 
      document.regForm.rweek[2].checked || 
      document.regForm.rweek[3].checked || 
      document.regForm.rweek[4].checked || 
      document.regForm.rweek[5].checked || 
      document.regForm.rweek[6].checked) ) 
     {AddToNeeded("City of attendance"); valid=false;}

  if (!valid) 
     {alert("The following required field(s) are blank: " + needed +". Please ensure that all required fields have been entered before submitting.");
      return false;}
  confirminfo = "\nName:  " + document.regForm.FirstName.value + " " + document.regForm.LastName.value +
                "\nEmail: " + document.regForm.email.value +
                "\nPhone: " + document.regForm.PhoneNumber.value;
  if (confirm("IMPORTANT: Please confirm that the following information is correct. If it is not, click Cancel and correct the information before resubmitting."+confirminfo)) 
    {doMangle(); return true} else {return false}   
}

function validateBrochureRequest()
{
var invalid, confirminfo;
needed="";
valid = true;
  if (document.regForm.FirstName.value=="") 
     {AddToNeeded("First Name"); valid=false;}   
  if (document.regForm.LastName.value=="")
     {AddToNeeded("Last Name"); valid=false;}
  if (document.regForm.MailingAddress.value=="")
     {AddToNeeded("Mailing Address"); valid=false;}
  if (document.regForm.City.value=="")
     {AddToNeeded("City"); valid=false;}
  if (document.regForm.State.value=="")
     {AddToNeeded("State/Province"); valid=false;}
  if (document.regForm.ZipCode.value=="")
     {AddToNeeded("Zip/Postal Code"); valid=false;}

  if (!valid) 
     {alert("The following required field(s) are blank: " + needed +". Please ensure that all required fields have been entered before submitting.");
      return false;}
  confirminfo = "\n" + document.regForm.FirstName.value + " " + document.regForm.LastName.value +
                "\n" + document.regForm.MailingAddress.value;
  if (document.regForm.MailingAddress2.value!="")
     {confirminfo = confirminfo + "\n" + document.regForm.MailingAddress2.value;}
  confirminfo = confirminfo + "\n" + document.regForm.City.value + 
    ", " + document.regForm.State.value + " " +document.regForm.ZipCode.value;

  if (confirm("IMPORTANT: Please confirm that the following information is correct. If it is not, click Cancel and correct the information before resubmitting."+confirminfo)) 
    {return true;} else {return false;}   
}
