ERR = 1;
function message(type, str) {
  var intro;
  if (type == ERR) {
    intro = "Input Error";
  }
  var msg = "========================================\n" +
            intro + "\n" +
            "--------------------------------------------------------------------------------\n\n" +
            str + "\n\n" +
            "--------------------------------------------------------------------------------\n";
  alert(msg);
}


String.prototype.right = function (n) {
  if (n < this.length) {
    return this.substring (this.length - n, this.length);
  } else {
    return this;
  }
}


function getX(obj) {
  var x=0;
  while (obj.offsetParent.tagName != "BODY") {
    x += obj.offsetLeft;
    obj = obj.offsetParent;
  }
  return x + obj.offsetLeft;
}


function getY(obj) {
  var y=0;
  while (obj.offsetParent.tagName != "BODY") {
    y += obj.offsetTop;
    obj = obj.offsetParent;
  }
  return y + obj.offsetTop;
}


function valAmount(f) {
  var num=f.value;
  if (/[^\.\d]/.test(num)) {
    message(ERR,"You must enter a number in this field.");
    f.value="";
    f.focus();
  }
}


function valNumber(f) {
  var num=f.value;
  if (/[^\d]/.test(num)) {
    message(ERR,"You must enter a number in this field.");
    f.value="";
    f.focus();
  }
}


function LUHN(origcc, fld)
{
    var cc = fld.value;
    if (origcc == '' && fld.value == '') {
        return;
    }
    var recognized = false;
    if (cc.substr(0, 4) == "6011" && cc.length == 16) {
        recognized = true;
    }
    else if (cc.substr(0, 1) == "3" && cc.length == 15) {
        recognized = true;
    }
    else if (cc.substr(0, 1) == "4" && (cc.length == 13 || cc.length == 16)) {
        recognized = true;
    }
    else if (cc.substr(0, 1) == "5" && cc.length == 16) {
        recognized = true;
    }
    var pos;
    var sum1 = 0;
    var sum2 = 0;
    var dbl, value;
    for (var i = 0; i < cc.length; i++) {
        pos = (cc.length - 1) - i;
        digit = cc.substr(pos, 1);
        if (i / 2 == Math.floor(i / 2)) {
            sum1 += 1*digit;
        }
        else {
            dbl = 2*digit;
            value = Math.floor(dbl / 10) + dbl - 10 * Math.floor(dbl / 10);
            sum2 += value;
        }
    }
    var chksum = sum1 + sum2;
    if (!recognized || chksum / 10 != Math.floor(chksum / 10)) {
        fld.value = origcc;
        fld.focus();
        message(ERR,"You must enter a valid Credit Card number.");
    }
}


function valSSN(fld) {
  if (!/^(\d{3})-?(\d{2})-?(\d{4})/.test(fld.value)) {
    message(ERR,"You must enter a valid SSN.");
    fld.value="";
    fld.focus();
    return false;
  }
  else {
    fld.value=RegExp.$1+"-"+RegExp.$2+"-"+RegExp.$3;
  }
}


function valEmail (fld) {
  if (fld.value.length == 0 || fld.value == "Email Address") return;
  if (!/^([a-zA-Z0-9._-]+\.)*[a-zA-Z0-9._-]+@([a-zA-Z0-9._-]+\.)*[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]{2,5}$/.test(fld.value)) {
    message(ERR,"You must enter a valid Email address.");
    fld.value="";
    fld.focus();
    return false;
  }
  return true;
}


function valZip (fld) {
  if (!/^\d{5}(-?\d{4})?$/.test(fld.value)) {
    message(ERR,"Invalid Zip Code.");
    fld.value="";
    fld.focus();
    return false;
  }
  return true;
}


function formatText(t) {
  t = t.replace(/\n/g, "<br />");
  return t;
}


function formatSSN(f) {
  var ssn=f.value;
  if (/^(\d{3})[-\s]?(\d{2})[-\s]?(\d{4})/.test(ssn)) {
    f.value=RegExp.$1+"-"+RegExp.$2+"-"+RegExp.$3;
  }
  else {
    message(ERR,"You must enter a valid SSN or Tax ID.");
    f.value="";
    f.focus();
  }
}


function formatPhone(f) {
  var phone=f.value;
  if (phone.length == 0) return;
  if (/^\((\d{3})\)\s?(\d{3})[-\.\s]?(\d{4})((\s|\s?[xX])(\d+))?$/.test(phone) ||
      /^(\d{3})[-\s.]?(\d{3})[-\.\s]?(\d{4})((\s|\s?[xX])(\d+))?$/.test(phone)) {
    var fPhone="("+RegExp.$1+") "+RegExp.$2+"-"+RegExp.$3;
    if (RegExp.$6.length > 0) fPhone += " x"+RegExp.$6;
    f.value=fPhone;
  }
  else {
    message(ERR,"You must enter a valid phone number.");
    f.value="";
    f.focus();
  }
}


function formatMoney(f) {
  var amount=f.value;
  if (/(\$\s?)?\d{1,2}(,?\d{3})*(\.\d{1,2})?/.test(amount)) {
    amount=amount.replace(/\s/g,"");
    amount=amount.replace(/\$/,"");
    amount=amount.replace(/,/,"");
    f.value="$"+amount;
  }
  else {
    message(ERR,"You must enter a valid dollar amount.");
    f.value="";
    f.focus();
  }
}


function formatDate(fld) {
  var field = fld.value;
  var errmsg = "";
  if (field.length == 0) return;
// First, check the date to make sure it's valid.
  var datetest = /^(\d{1,2})([-\/\.])(\d{1,2})\2(\d{2,4})$/;
  if (datetest.test(field)) {
    var mo = RegExp.$1;
    var da = RegExp.$3;
    var yr = RegExp.$4;
    if (1*yr < 5) { yr = 1*yr + 2000; }
    var datestr = mo + "/" + da + "/" + yr;
    var checkdate = new Date(datestr);
    var checkmo = 1 + checkdate.getMonth();
    var checkda = checkdate.getDate();
    var checkyr = checkdate.getFullYear();
    if (mo != checkmo || da != checkda) {
      errmsg = "Please enter a valid date.";
    }
  }
  else {
    errmsg = "Please enter a date (MM/DD/YYYY).";
  }
  if (errmsg.length > 0) {
    message(ERR, errmsg);
    fld.value = "";
    fld.focus();
  }
  else {
    fld.value = checkmo + "/" + checkda + "/" + checkyr;
  }
}


IE = (!document.layers);
function validate(f) {
  var fldList="";
  for (var i=0; i < f.elements.length; ++i) {
    if (f.elements[i].onfocus) {
      s=f.elements[i].onfocus.toString();
      if (s.indexOf("required = true") > -1) {
        var pattern=/fldDesc\s*=\s*(["'])(.*)\1/;
        pattern.test(s);
        var desc=(RegExp.$2.length > 0) ? RegExp.$2 : f.elements[i].name;
        if (f.elements[i].type=="text") {
          if (f.elements[i].value.length==0) {
            fldList+="  "+desc+"\n";
          }
          else if (IE) f.elements[i].style.backgroundColor="#ffffff";
        }
        else if (f.elements[i].type.substr(0, 6)=="select") {
          if (f.elements[i].selectedIndex==0) {
            fldList+="  "+desc+"\n";
          }
          else if (IE) f.elements[i].style.backgroundColor="#ffffff";
        }
        else if (f.elements[i].type=="textarea") {
          if (f.elements[i].value.length==0) {
            fldList+="  "+desc+"\n";
          }
          else if (IE) f.elements[i].style.backgroundColor="#ffffff";
        }
      }
    }
  }
  if (fldList.length > 0) {
    alert("Before submitting this form, please fill in the following:\n\n"+fldList);
    return false;
  }
  else {
    return true;
  }
}


function resetColor() {
  this.style.backgroundColor="#ffffff";
}


flash = new Array("http://www.mysimpleforex.com/media/disclaimer.php?swf=Freedom_forex",
                  "http://www.mysimpleforex.com/media/disclaimer.php?swf=Freedom_audio"
                 );
function flashPopup(n)
{
    var attr = "top=50,left=50,width=640,height=480";
    open(flash[n], "flash", attr);
}


function createCell(str)
{
    var td = document.createElement("td");
    var txt = document.createTextNode(str);
    td.appendChild(txt);
    return td;
}


function sort(s, dir)
{
    var f = document.forms["data"];
    f.sortord.value = s;
    f.dir.value = dir;
    f.submit();
}


function toggleLayer( whichLayer )
{
    var elem, vis;
    if (document.getElementById) // this is the way the standards work
        elem = document.getElementById(whichLayer);
    else if (document.all)  // this is the way old msie versions work
        elem = document.all[whichLayer];
    else if (document.layers) // this is the way nn4 works
        elem = document.layers[whichLayer];
    vis = elem.style;
// if the style.display value is blank we try to figure it out here
    if (vis.display == '' && elem.offsetWidth != undefined && elem.offsetHeight != undefined)
        vis.display = (elem.offsetWidth != 0 && elem.offsetHeight != 0) ? 'block' : 'none';
    vis.display = (vis.display == '' || vis.display == 'block') ? 'none' : 'block';
}


function getFormFields(f)
{
    var params = arguments.length == 2 ? arguments[1] : new Array();
    var kvPairs = new Array();
    var k;
    var i = 0;
    for (n = 0; n < f.elements.length; n++) {
        k = f.elements[n].name; 
        if (!k) { continue; }
        value = "";
        if (f.elements[n].type == "text" || f.elements[n].type == "textarea" || f.elements[n].type == "hidden") {
            value = escape(f.elements[n].value);
        }
        else if (f.elements[n].type.substr(0, 6)=="select") {
            value = escape(f.elements[n].options[f.elements[n].selectedIndex].value);
        }
        else if (f.elements[n].type == "checkbox" ) {
            if (f.elements[n].checked) {
                value = escape(f.elements[n].value);
            }
        }
        if (params[k]) {
            value = escape(params[k]);
            params[k] = null;
        }
        if (value) {
            kvPairs[i++] = k + "=" + escape(value);
        }
    }
    for (k in params) {
        value = "";
        if (params[k]) {
            value = escape(params[k]);
        }
        if (value) {
            kvPairs[i++] = k + "=" + escape(value);
        }
    }
    return kvPairs.join("&");
}
