function FormatNumber(num,decimalNum,bolLeadingZero,bolParens,bolCommas)
/**********************************************************************
    IN:
        NUM - the number to format
        decimalNum - the number of decimal places to format the number to
        bolLeadingZero - true / false - display a leading zero for
                                        numbers between -1 and 1
        bolParens - true / false - use parenthesis around negative numbers
        bolCommas - put commas as number separators.

    RETVAL:
        The formatted number!
 **********************************************************************/
{
    //if (isNaN(parseInt(num))) return "NaN";
    if (isNaN(parseFloat(num)) || num=="") num=0;

    var tmpNum;
    var iSign = parseFloat(num) < 0 ? -1 : 1;       // Get sign of number

    var valid = "-.0123456789"
    var temp;
    var dummyStr="";
    var numString;

    numStr=new String(num);
    for (var i=0; i<numStr.length; i++) {
        temp = "" + numStr.substring(i, i+1);
        if (valid.indexOf(temp) > -1) {
            dummyStr+=temp;
        }
    }
    num=parseFloat(dummyStr);
    tmpNum=num;
    
    // Adjust number so only the specified number of numbers after
    // the decimal point are shown.
    tmpNum *= Math.pow(10,decimalNum);
    tmpNum = Math.round(Math.abs(tmpNum))
    tmpNum /= Math.pow(10,decimalNum);
    tmpNum *= iSign;                    // Readjust for sign
    
    
    // Create a string object to do our formatting on
    var tmpNumStr = new String(tmpNum);

    // See if we need to strip out the leading zero or not.
    if (!bolLeadingZero && num < 1 && num > -1 && num != 0)
        if (num > 0)
            tmpNumStr = tmpNumStr.substring(1,tmpNumStr.length);
        else
            tmpNumStr = "-" + tmpNumStr.substring(2,tmpNumStr.length);
        
    // See if we need to put in the commas
    if (bolCommas && (num >= 1000 || num <= -1000)) {
        var iStart = tmpNumStr.indexOf(".");
        if (iStart < 0)
            iStart = tmpNumStr.length;

        iStart -= 3;
        while (iStart >= 1) {
            if (tmpNumStr.substring(iStart-1,iStart)!="-")
                tmpNumStr = tmpNumStr.substring(0,iStart) + "," + tmpNumStr.substring(iStart,tmpNumStr.length)
            iStart -= 3;
        }       
    }
    
    // See if we need to add trailing zeroes
    dec = tmpNumStr.indexOf(".");
    end = ((dec > -1) ? "" + tmpNumStr.substring(dec,tmpNumStr.length) : "");

    MyStart=end.length;
    if (end == "") {
       tmpNumStr+= ".";
       MyStart=1;
    }
    for (MyIndex=MyStart; MyIndex<=decimalNum; MyIndex++)
        tmpNumStr += "0";

    // See if we need to use parenthesis
    if (bolParens && num < 0)
        tmpNumStr = "(" + tmpNumStr.substring(1,tmpNumStr.length) + ")";
        
    return tmpNumStr;       // Return our formatted string!
} //FormatNumber()

function str2dec(obj) {
var checkstr = "-.0123456789";
var temp="";
var MyValue;

    MyValue=obj.value;

    if (typeof(MyValue)=="undefined") return 0;
    if (MyValue.length==0) return 0;

    /* Delete all chars except 0..9A...Z */
    for (i = 0; i < MyValue.length; i++) {
        if (checkstr.indexOf(MyValue.substr(i,1)) >= 0) {
            temp = temp + MyValue.substr(i,1);
        }
    }
    return parseFloat(temp);
} //str2dec()

var win = null;
function newWindow(mypage,myname,w,h,features) {
  var winl = (screen.width-w)/2;
  var wint = (screen.height-h)/2;
  if (winl < 0) winl = 0;
  if (wint < 0) wint = 0;
  var settings = 'height=' + h + ',';
  settings += 'width=' + w + ',';
  settings += 'top=' + wint + ',';
  settings += 'left=' + winl + ',';
  settings += features;
  win = window.open(mypage,myname,settings);
  win.window.focus();
}

function check_decimal(field) {
    var valid = "-.,0123456789"
    var ok = true;
    var temp;

    for (var i=0; i<field.value.length; i++) {
        temp = "" + field.value.substring(i, i+1);
        if (valid.indexOf(temp) == "-1") {
            ok=false;
            break;
        }
    }
    if (!ok) {
        alert("Invalid decimal number.");
        field.focus();
        field.select();
    }
    
    return ok;
}

function check_number(field) {
    var valid = "-0123456789"
    var ok = true;
    var temp;

    for (var i=0; i<field.value.length; i++) {
        temp = "" + field.value.substring(i, i+1);
        if (valid.indexOf(temp) == "-1") {
            ok=false;
            break;
        }
    }
    if (!ok) {
        alert("Invalid decimal number.");
        field.focus();
        field.select();
    }
    
    return ok;
}

function check_email(email) {
    var ss1,ss2;
    
    ss1=email;
    ss2=ss1.split(" ");
    if (ss2.length>1) {
        return false;
    }
    ss2=ss1.split("@");
    if (ss2.length!=2) {
        return false;
    }

    ss1=ss2[1].split(".");
    if (ss1.length<2) {
        return false;
    }
    return true;
}

function check_cc(textObj) {
 /*
  *  This function validates a credit card entry.
  *  If the checksum is ok, the function returns true.
  */
   var ccNum;
   var odd = 1;
   var even = 2;
   var calcCard = 0;
   var calcs = 0;
   var ccNum2 = "";
   var aChar = '';
   var cc;
   var r;
   
   ccNum = textObj.value;
   for(var i = 0; i != ccNum.length; i++) {
      aChar = ccNum.substring(i,i+1);
      if(aChar == '-') {
         continue;
      }

      ccNum2 = ccNum2 + aChar;
   }
   
   cc = parseInt(ccNum2);
   if(cc == 0) {
      return false;
   }
   r = ccNum.length / 2;
   if(ccNum.length - (parseInt(r)*2) == 0) {
      odd = 2;
      even = 1;
   }
   
   for(var x = ccNum.length - 1; x > 0; x--) {
      r = x / 2;
      if(r < 1) {
         r++;
      }
      if(x - (parseInt(r) * 2) != 0) {
         calcs = (parseInt(ccNum.charAt(x - 1))) * odd;
      }
      else {
         calcs = (parseInt(ccNum.charAt(x - 1))) * even;
      }
      if(calcs >= 10) {
         calcs = calcs - 10 + 1;
      }
      calcCard = calcCard + calcs;
   }
   
   calcs = 10 - (calcCard % 10);
   if(calcs == 10) {
      calcs = 0;
   }
   
   if(calcs == (parseInt(ccNum.charAt(ccNum.length - 1)))) {
      return true;
   }
   else {
      return false;
   }
}

function validatePaymentForm(form) {
    obj = form.country_code;
    if (obj.value=="") {
        alert("Please select Country");
        obj.focus();
        return false;
    }

    obj = form.firstName;
    if (obj.value=="") {
        alert("Please enter First Name");
        obj.focus();
        return false;
    }

    obj = form.lastName;
    if (obj.value=="") {
        alert("Please enter Last Name");
        obj.focus();
        return false;
    }

    obj = form.creditCardType;
    if (obj.value=="") {
        alert("Please select Card Type");
        obj.focus();
        return false;
    }

    obj = form.creditCardNumber;
    if (obj.value=="") {
        alert("Please enter Card Number");
        obj.focus();
        return false;
    }

    if (!check_cc_number(form)) return false;

    obj = form.expDateMonth;
    if (obj.value=="") {
        alert("Please select Expiration Month");
        obj.focus();
        return false;
    }

    obj = form.expDateYear;
    if (obj.value=="") {
        alert("Please select Expiration Year");
        obj.focus();
        return false;
    }

    if (!check_cc_exp(form)) return false;

    obj = form.cvv2Number;
    if (obj.value=="") {
        alert("Please enter Card Verification Number");
        obj.focus();
        return false;
    }

    obj = form.address1;
    if (obj.value=="") {
        alert("Please enter Address 1");
        obj.focus();
        return false;
    }

    obj = form.city;
    if (obj.value=="") {
        alert("Please enter City");
        obj.focus();
        return false;
    }

    obj = form.state;
    if (obj.value=="") {
        alert("Please enter State/Province/Region");
        obj.focus();
        return false;
    }

    obj = form.zip;
    if (obj.value=="") {
        alert("Please enter Postal Code");
        obj.focus();
        return false;
    }

    obj = form.hometel;
    if (obj.value=="") {
        alert("Please enter Home Telephone");
        obj.focus();
        return false;
    }

    obj = form.email;
    if (obj.value=="") {
        alert("Please enter Email");
        obj.focus();
        return false;
    }

    if (!check_email(obj.value)) {
        alert("Please enter a valid Email");
        obj.focus();
        return false;
    }

    return true;
}

function updateState(form) {
    if (form.country_code.value=="US") {
        document.getElementById("FormState").innerHTML = "<select name='state'>"
                    + "<option>-- Choose a State --</option>"
                    + "<option value='AK'>AK</option>"
                    + "<option value='AL'>AL</option>"
                    + "<option value='AR'>AR</option>"
                    + "<option value='AZ'>AZ</option>"
                    + "<option value='CA'>CA</option>"
                    + "<option value='CO'>CO</option>"
                    + "<option value='CT'>CT</option>"
                    + "<option value='DC'>DC</option>"
                    + "<option value='DE'>DE</option>"
                    + "<option value='FL'>FL</option>"
                    + "<option value='GA'>GA</option>"
                    + "<option value='HI'>HI</option>"
                    + "<option value='IA'>IA</option>"
                    + "<option value='ID'>ID</option>"
                    + "<option value='IL'>IL</option>"
                    + "<option value='IN'>IN</option>"
                    + "<option value='KS'>KS</option>"
                    + "<option value='KY'>KY</option>"
                    + "<option value='LA'>LA</option>"
                    + "<option value='MA'>MA</option>"
                    + "<option value='MD'>MD</option>"
                    + "<option value='ME'>ME</option>"
                    + "<option value='MI'>MI</option>"
                    + "<option value='MN'>MN</option>"
                    + "<option value='MO'>MO</option>"
                    + "<option value='MS'>MS</option>"
                    + "<option value='MT'>MT</option>"
                    + "<option value='NC'>NC</option>"
                    + "<option value='ND'>ND</option>"
                    + "<option value='NE'>NE</option>"
                    + "<option value='NH'>NH</option>"
                    + "<option value='NJ'>NJ</option>"
                    + "<option value='NM'>NM</option>"
                    + "<option value='NV'>NV</option>"
                    + "<option value='NY'>NY</option>"
                    + "<option value='OH'>OH</option>"
                    + "<option value='OK'>OK</option>"
                    + "<option value='OR'>OR</option>"
                    + "<option value='PA'>PA</option>"
                    + "<option value='RI'>RI</option>"
                    + "<option value='SC'>SC</option>"
                    + "<option value='SD'>SD</option>"
                    + "<option value='TN'>TN</option>"
                    + "<option value='TX'>TX</option>"
                    + "<option value='UT'>UT</option>"
                    + "<option value='VA'>VA</option>"
                    + "<option value='VT'>VT</option>"
                    + "<option value='WA'>WA</option>"
                    + "<option value='WI'>WI</option>"
                    + "<option value='WV'>WV</option>"
                    + "<option value='WY'>WY</option>"
                    + "<option value='AA'>AA</option>"
                    + "<option value='AE'>AE</option>"
                    + "<option value='AP'>AP</option>"
                    + "<option value='AS'>AS</option>"
                    + "<option value='FM'>FM</option>"
                    + "<option value='GU'>GU</option>"
                    + "<option value='MH'>MH</option>"
                    + "<option value='MP'>MP</option>"
                    + "<option value='PR'>PR</option>"
                    + "<option value='PW'>PW</option>"
                    + "<option value='VI'>VI</option>"
                    + "</select>";
    }
    else {
        document.getElementById("FormState").innerHTML = "<input type='text' size='25' maxlength='40' name='state' value='' />";
    }
}