/***********************************************************************/
//  Really Basic Form Validation
/***********************************************************************/
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+$/,"");
}

String.prototype.contains = function (t) { return this.indexOf(t) >= 0 ? true : false }

Array.prototype.contains = function (obj) { var i = this.length; while (i--) { if (this[i] === obj) { return true; } } return false; }     

document.getElementsByClassName = function( clsName, nodeName, startnodeID ) {    
  var tag = nodeName||'*';
  var starttagID = startnodeID||'';
  var retVal = new Array();   
  var starttag;
  var elements;
 
  if (starttagID) {
    starttag = document.getElementById(starttagID);   
    if (starttag)
      elements = starttag.getElementsByTagName(tag); 
    else
      elements = document.getElementsByTagName(tag); 
  }
  else
    elements = document.getElementsByTagName(tag); 
  
  for(var i = 0;i < elements.length;i++) {  
   if(elements[i].className.indexOf(" ") >= 0) {            
      var classes = elements[i].className.split(" ");            
      for(var j = 0;j < classes.length;j++) {                
        if(elements[i].className == clsName) {                   
          retVal.push(elements[i]);
          break;
        }            
      }        
    }        
    else if(elements[i].className == clsName) {          
      retVal.push(elements[i]);    
    }
  }    
  return retVal;
};

document.getElementsByType = function( tag, elementType, startnodeID ) {    
  var starttagID = startnodeID||'';
  var retVal = new Array();   
  var elements;
  
  if (starttagID) {
    starttag = document.getElementById(starttagID);   
    if (starttag)
      elements = starttag.getElementsByTagName(tag); 
    else
      elements = document.getElementsByTagName(tag); 
  }
  else
    elements = document.getElementsByTagName(tag); 
         
  for(var i = 0;i < elements.length;i++) {  
   if(elements[i].type == elementType) { 
     retVal.push(elements[i]);
    }        
  }    
  return retVal;
};
//\ END --- Get Elements By Non Standard Methods


function replaceClass(element, searchClass, replaceClass) {
  if (element) {
    if(element.className.indexOf(" ") >= 0) {            
      var classes = element.className.split(" ");  
      var newclasslist = '';          
      var found = false;        
      for(var j = 0;j < classes.length;j++) {   
        if(classes[j] == searchClass) {                   
          newclasslist = newclasslist + ' ' + replaceClass;
          found = true;
        }   
        else {
          newclasslist = newclasslist + ' ' + classes[j];
        }         
      }  
      if (found)
        element.className = newclasslist;  
      else
        element.className = newclasslist + ' ' + replaceClass;  
    }        
    else if(element.className == searchClass) {          
      element.className = replaceClass;    
    }
    else {
      element.className = element.className + ' ' + replaceClass;    
    }
  }
}


function removeClass(element, searchClass) {
  if (element) {
    if (element.className.indexOf(" ") > 0) {
      var classes = element.className.split(" ");
      var newclasslist = '';
      var found = false;
      for (var j = 0; j < classes.length; j++) {
        if (classes[j] == searchClass) {
          continue;
        }
        else {
          newclasslist += classes[j] + ' ';
        }
      }
      element.className = newclasslist.trim();
    }
    else if (element.className == searchClass) {
      element.className = "";
    }
  }
}

var MailIDS = [];
MailIDS[0] = "AddressLabel";
MailIDS[1] = "StateLabel";
MailIDS[2] = "CountryLabel";
MailIDS[3] = "CityLabel";
MailIDS[4] = "ZipLabel";

  FormIDsubstring = "MyMembershipID";
  function hasClass(myNode, mycssClass) {

    if(myNode.className.indexOf(" ") >= 0) {
      var classes = myNode.className.split(" ");            
      for(var j = 0;j < classes.length;j++) {                
        if(classes[j] == mycssClass) { 
          return true; 
        }
      }
    }
    else {         
      if (myNode.className == mycssClass) {
          return true; 
      }    
    } 
    return false;              
  }

	function validateForm(myForm, RequiredClass, IDsubstring, startID) {
	  var email = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
	  var typetext = /^[a-zA-Z0-9]/;
	  var typepassword = /[a-zA-Z0-9&!$@*]{6,10}/;
	  var typephone = /((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}/
	  var emailfield = /.*Email.*/;
	  var phonefield = /.*Phone.*/;
	  var invalid_string = "";
	  var form_focus = null;
	  var RegExpID = new RegExp(IDsubstring);
	  
    var StartElementID = startID||'';
	  
    var passwordElements = document.getElementsByType("input","password",StartElementID);
    var InputElements = myForm.getElementsByTagName("input");    
    var SelectElements = myForm.getElementsByTagName("select");    
    var TextareaElements = myForm.getElementsByTagName("textarea");    
          
    for(var i = 0;i < InputElements.length;i++) { 
      var ElementName = InputElements[i].id.substr(InputElements[i].id.search(RegExpID) + IDsubstring.length); 
      if(hasClass(InputElements[i], RequiredClass)) {            
        if (emailfield.test(ElementName)){
          if (!email.test(InputElements[i].value)) {
	          invalid_string += "You entered an invalid " + ElementName.replace(/_/g," ") + "\n";      
	          if (form_focus == null)
	            form_focus = InputElements[i];
	        }
	      }
	      else {
          if (phonefield.test(ElementName)){
            if (!typephone.test(InputElements[i].value)) {
	            invalid_string += "You entered an invalid " + ElementName.replace(/_/g," ") + "\n";      
	            if (form_focus == null)
	              form_focus = InputElements[i];
	          }
	        }
	        else {
            if ((InputElements[i].type == "text") && (!typetext.test(InputElements[i].value))) {
	            invalid_string += "Invalid " + ElementName.replace(/_/g," ") + " -- text fields must start with a letter or number.\n";      
	            if (form_focus == null)
	              form_focus = InputElements[i];
            }
            if ((InputElements[i].type == "password") && (!typepassword.test(InputElements[i].value))) {
	            invalid_string += "Invalid " + ElementName.replace(/_/g," ") + " -- passwords fields must contain 6-10 letters, numbers, or &!$@*\n";      
	            if (form_focus == null)
	              form_focus = InputElements[i];
            }
          }
	      }
      }
    }
    
    for(var j = 0;j < SelectElements.length;j++) { 
      if(hasClass(SelectElements[j], RequiredClass)) {            
        if (SelectElements[j].selectedIndex == 0) {
          var ElementName = SelectElements[j].id.substr(SelectElements[j].id.search(RegExpID) + IDsubstring.length); 
	        invalid_string += "You did not select an option for " + ElementName.replace(/_/g," ") + "\n";      
	        if (form_focus == null)
	          form_focus = SelectElements[j];
        }
      }
    }
    
    for(var k = 0;k < passwordElements.length;k++) { 
      if (k != 0) {
        if (passwordElements[k].value != passwordElements[k-1].value) {
          invalid_string += "Password and Confirmation Password were not the same\n";      
          if (form_focus == null) {
            form_focus = passwordElements[k-1];
          }
          break;
        }
      }
    }
    invalid_string += checkpdflist();

    if (invalid_string != "") {
      alert(invalid_string);
      if (form_focus.focus())
        form_focus.focus();
      return false;
    }
    else {
      myForm.submit();
  //    alert("Form Submitted");
    }
  } 
  
	function testSelect(mySelect, RequiredClass, idString, testString) {
	  if (mySelect.options[mySelect.selectedIndex].text == testString) {
      var ids = idString.split("-");            
      for(var j = 0;j < ids.length;j++) {                
	      var docElement = document.getElementById(ids[j].trim())
        if(docElement) { 
          if(!hasClass(docElement, RequiredClass)) {  
             docElement.className = docElement.className + " " + RequiredClass;
          }         
        }
      } 
	  }
	  else{
      var ids = idString.split("-");            
      for(var j = 0;j < ids.length;j++) {                
	      var docElement = document.getElementById(ids[j].trim());
        if(docElement) { 
          if(hasClass(docElement, RequiredClass)) {  
            var classes = docElement.className.split(" ");  
            var newclasslist = "";          
            for(var i = 0;i < classes.length;i++) {  
              if (classes[i] != RequiredClass)
                newclasslist = newclasslist + classes[i] + " ";         
            }
            docElement.className = newclasslist.trim();
          }         
        }
      } 
	  }
  }


  function checkpdflist() {
    var listholder = document.getElementById("pdflist");
    if (listholder) {
      var checkelements = document.getElementsByType("input", "checkbox", "pdflist")
      for (i = 0; i < checkelements.length; i++) {
        if (checkelements[i].checked)
          return "";
      }
      return "You need to select at least one PDF";
    }
    return "Unable to find PDF list!";
  }


  function checkradio_deliver(myradio) {
    if (myradio.checked) {
      var MailIDNodes = new Array(MailIDS.length);
      for (i = 0; i < MailIDS.length; i++) {
        MailIDNodes[i] = document.getElementById(MailIDS[i]);
        if (myradio.value == "ship") {
          var strongtags = MailIDNodes[i].getElementsByTagName("strong");
          var strongtag = strongtags[0];
          strongtag.innerHTML = "* ";

          var inputtags = MailIDNodes[i].getElementsByTagName("input");
          if (inputtags.length > 0) {
            var inputtag = inputtags[0];
            if (!inputtag.className.contains("Required")) {
              inputtag.className += " Required";
            }
          }
        }
        else {
          var strongtags = MailIDNodes[i].getElementsByTagName("strong");
          var strongtag = strongtags[0];
          strongtag.innerHTML = "";

          var inputtags = MailIDNodes[i].getElementsByTagName("input");
          if (inputtags.length > 0) {
            var inputtag = inputtags[0];
            if (inputtag.className.contains("Required")) {
              removeClass(inputtag, "Required");
            }
          }
        }
      } // for (var i = 0; i < MailIDS.length; i++) {
    } // if (myradio.checked) {
  } // function checkradio_deliver(radio) {