var blankErrors;
var phoneErrors;
var emailErrors;
var dateErrors;
var numErrors;

function ShowErrors(tr, td){
    document.getElementById(tr).style.display="block";
    document.getElementById(td).innerHTML = "";        
    if (blankErrors){
      document.getElementById(tr).style.display="block";
      document.getElementById(td).innerHTML = "* Required Fields.";             
      if (!phoneErrors && !numErrors && !dateErrors & !emailErrors){ return false; }
    }
    if (phoneErrors){
      document.getElementById(tr).style.display="block";
      document.getElementById(td).innerHTML = document.getElementById(td).innerHTML + "<br>* Invalid Phone Number.";             
      if (!numErrors && !dateErrors && !emailErrors){ return false; }
    }
    if (emailErrors){
      document.getElementById(tr).style.display="block";
      document.getElementById(td).innerHTML = document.getElementById(td).innerHTML + "<br>* Invalid Email Address.";             
      if (!numErrors && !dateErrors){ return false; }
    }
    if (numErrors){
      document.getElementById(tr).style.display="block";
      document.getElementById(td).innerHTML = document.getElementById(td).innerHTML + "<br>* Value must be a number. (% & , - $ are Invalid)";             
      if (!dateErrors){ return false; }
    }
    if (dateErrors){
      document.getElementById(tr).style.display="block";
      document.getElementById(td).innerHTML = document.getElementById(td).innerHTML + "<br>* Invalid Date.";             
      return false;
    }
    return true;    
}

function IsValid(obj, type){
  var reg_expr;
  var reg_expr2;        
  switch(type){
      case "REQTEXT":
          if (obj.value.trim() == ""){                 
              obj.parentNode.children[1].style.display = "inline";
              blankErrors = true;
          }else{
              obj.parentNode.children[1].style.display = "none"; 
          }
          break;
      case "REQTEXTPHONE":
          if (obj.value.trim() == ""){                 
              obj.parentNode.children[1].style.display = "inline";
              blankErrors = true;
          }else{
              reg_expr = new RegExp(/^\(?(\d{3})\)?[-| ]?(\d{3})[-| ]?(\d{4})$/);
              reg_expr2 = new RegExp(/^\(?(\d{1})\)?[-| ]?(\d{3})\)?[-| ]?(\d{3})[-| ]?(\d{4})$/);                    
              if (reg_expr.test(obj.value.trim()) == true || reg_expr2.test(obj.value.trim()) == true){                         
                  obj.parentNode.children[1].style.display = "none"; 
              }else{                        
                  obj.parentNode.children[1].style.display = "inline";
                  phoneErrors = true;
              }
          }
          break;
      case "REQTEXTDATE":
          if (obj.value.trim() == ""){                 
              obj.parentNode.children[1].style.display = "inline";
              blankErrors = true;
          }else{
              if (isValidDate(obj.value.trim())){                         
                  obj.parentNode.children[1].style.display = "none"; 
              }else{                        
                  obj.parentNode.children[1].style.display = "inline";
                  dateErrors = true;
              }
          }             
          break;
      case "REQTEXTEMAIL":
          if (obj.value.trim() == ""){                 
              obj.parentNode.children[1].style.display = "inline";
              blankErrors = true;
          }else{
              reg_expr = new RegExp(/^.+@.+\..{2,3}$/);                                        
              if (reg_expr.test(obj.value.trim()) == true){                         
                  obj.parentNode.children[1].style.display = "none"; 
              }else{                        
                  obj.parentNode.children[1].style.display = "inline";
                  emailErrors = true;
              }
          }                
          break;
      case "REQNUM":         
          if (obj.value.trim() == ""){                 
              obj.parentNode.children[1].style.display = "inline";
              blankErrors = true;
          }else{              
              if (IsNumeric(obj.value.trim())){
                  obj.parentNode.children[1].style.display = "none"; 
              }else{                 
                  obj.parentNode.children[1].style.display = "inline";
                  numErrors = true;
              }
          }                
          break;
  }            
}
     
function IsNumeric(txt){       
    var vc = "0123456789.";
    var isn=true;
    var chr;
    for (i=0;i<txt.length && isn==true;i++){ 
        chr = txt.charAt(i); 
        if (vc.indexOf(chr) == -1){
            isn = false;
        }
    }
    return isn;
}

function isValidDate(dateStr) { 
    var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; // requires 4 digit year
    var matchArray = dateStr.match(datePat); // is the format ok?
    if (matchArray == null) { return false; }
    month = matchArray[1]; // parse date into variables
    day = matchArray[3];
    year = matchArray[4];
    if (month < 1 || month > 12) { return false; }
    if (day < 1 || day > 31) { return false; }
    if ((month==4 || month==6 || month==9 || month==11) && day==31) { return false; }
    if (month == 2) { // check for february 29th
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day>29 || (day==29 && !isleap)) { return false; }
    }
    return true;
}

function SendData(action, data){
    var ReturnStr = "";
    Spry.Utils.loadURL('POST', "CreateAccount?a="+action, false, SendComplete, 
            {postData: data, headers: {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}});
    
    function SendComplete(req){
        ReturnStr = req.xhRequest.responseText;
    }
    return ReturnStr;
}

function AddToDataString(obj, txt, first){    
    var str = "";   
    if (first){ 
        str = obj.name + "=" + encodeURIComponent(obj.value);
    }else{
        str = txt + "&" + obj.name + "=" + encodeURIComponent(obj.value);
    }
    return str;
}

String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
        return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
        return this.replace(/\s+$/,"");
}
