//Validate Email Address function
function validateAddress(incoming) {
	var emailstring = incoming;
	var ampIndex = emailstring.indexOf("@");
	var afterAmp = emailstring.substring((ampIndex + 1), emailstring.length);
		// find a dot in the portion of the string after the ampersand only
	var dotIndex = afterAmp.indexOf(".");
		// determine dot position in entire string (not just after amp portion)
	dotIndex = dotIndex + ampIndex + 1;
		// afterAmp will be portion of string from ampersand to dot
	afterAmp = emailstring.substring((ampIndex + 1), dotIndex);
		// afterDot will be portion of string from dot to end of string
	var afterDot = emailstring.substring((dotIndex + 1), emailstring.length);
	var beforeAmp = emailstring.substring(0,(ampIndex));
		//var email_regex = /^[\w\d\!\#\$\%\&\'\*\+\-\/\=\?\^\_\`\{\|\}\~]+(\.[\w\d\!\#\$\%\&\'\*\+\-\/\=\?\^\_\`\{\|\}\~])*\@(((\w+[\w\d\-]*[\w\d]\.)+(\w+[\w\d\-]*[\w\d]))|((\d{1,3}\.){3}\d{1,3}))$/;
	var email_regex = /^\w(?:\w|-|\.(?!\.|@))*@\w(?:\w|-|\.(?!\.))*\.\w{2,3}/ 
		// index of -1 means "not found"
	if ((emailstring.indexOf("@") != "-1") &&
		(emailstring.length > 5) &&
		(afterAmp.length > 0) &&
		(beforeAmp.length > 1) &&
		(afterDot.length > 1) &&
		(email_regex.test(emailstring)) ) {
		  return true;
	} else {
			
			return false;
	}
}

//Validate Number field function
function IsNumeric(sText)
{
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;

 
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
   
   }



function ChangeCursor(status)
    { 
        if (status == "wait")
        {
          document.body.style.cursor = "wait";
        }
        else
        {
          document.body.style.cursor = "default";
        }
       
    }
    
 function alphanumeric(alphane)
{
	var numeric = alphane;
	for(var j=0; j<numeric.length; j++)
		{
		  var alphaa = numeric.charAt(j);
		  var hh = alphaa.charCodeAt(0);
		  if((hh > 47 && hh<59) || (hh > 64 && hh<91) || (hh > 96 && hh<123))
		  {
		  }
		else	{
			 return false;
		  }
		}
 return true;
}

//-----------------ALERT VERSION- alerts still need to be inserted, check case 7 for example -------------------------  
    function CheckValidFormALERT(vform)
    {
      var obj_error_cell;
	  var typevalue;
      var isvalid = true;
      
      for (counter = 0; counter < vform.length; counter++) // Loop through all the form elements
      {
        switch(vform[counter].validtype) // check validation types
        {
            case 1: //required field
                 var typevalue = vform[counter].name;

                 if (vform[counter].value == "")
                 {
                    isvalid = false;
					alert("* " + typevalue + " is a required field.");
                 }
                 else
                 {

                 }
            break
            case 2: //date field
            case 3: //date field and required
            
                 obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                 
                 if (vform[counter].value != "") // a value has being entered and so needs validating
                 {
                    // var MMDDYYYYDatePattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
                   
                    var DatePattern = /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
  
                    if (!vform[counter].value.match(DatePattern))
                    {
                      isvalid = false;
                      obj_error_cell.firstChild.nodeValue = "* Invalid date";
                    }     
                    else
                    {
                        obj_error_cell.firstChild.nodeValue = "";
                    } 
                 }
                 else if (vform[counter].value == "" && vform[counter].validtype == 3) //empty value and is required
                 {
                      isvalid = false;
                      obj_error_cell.firstChild.nodeValue = "* Date Required";
                 }
                 else
                 {
                    obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 4: //drop down list validate default value not chosen
                obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                 if (vform[counter].value == "0")
                 {
                    isvalid = false;
                    obj_error_cell.firstChild.nodeValue = "* Required field";
                 }
                 else
                 {
                    obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 5: //password validation
                obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                 if (vform[counter].value == "")
                 {
                    isvalid = false;
                    obj_error_cell.firstChild.nodeValue = "* Required field";
                 }
                 //else if (vform[counter].value != "" && vform[counter].value.length < 6) 
                 //{
                 //     isvalid = false;
                 //     obj_error_cell.firstChild.nodeValue = "* 6 or more characters required";
                 //}
                 else
                 {
                    obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 6: //Email validation
                obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                 if (vform[counter].value == "")
                 {
                    isvalid = false;
                    obj_error_cell.firstChild.nodeValue = "* Required field";
                 }
                 else if (vform[counter].value != "") 
                 {				
					if (validateAddress(vform[counter].value)==false){
						isvalid = false;
						obj_error_cell.firstChild.nodeValue = "* Invalid Email";
					}else{
						obj_error_cell.firstChild.nodeValue = "";
					}
                 }
                 else
                 {
                    obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 7: //Numeric validation
                obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                
                 if (vform[counter].value != "") 
                 {
  
                    if (!IsNumeric(vform[counter].value))
                    {
                      isvalid = false;
                      obj_error_cell.firstChild.nodeValue = "* Invalid Number";
                      alert("* Incomplete Billing Details: Please provide a valid Card Security Code.");
                    }     
                    else
                    {
                        obj_error_cell.firstChild.nodeValue = "";
                    } 
                 } else if (vform[counter].value == "") {
						isvalid = false;
						obj_error_cell.firstChild.nodeValue = "* Required field";
						alert("* Incomplete Billing Details: Please provide a valid Card Security Code.");
                 }else {
						obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 8: //String Validation: Only Numbers and Letters Allowed - No Special Characters Allowed or Empty Spaces
                 obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                
                 if (vform[counter].value != "") 
                 {
  
                    if (!alphanumeric(vform[counter].value))
                    {
                      isvalid = false;
                      obj_error_cell.firstChild.nodeValue = "* No Special Characters Allowed";
                    }     
                    else
                    {
                        obj_error_cell.firstChild.nodeValue = "";
                    } 
                 } else if (vform[counter].value == "") {
						isvalid = false;
						obj_error_cell.firstChild.nodeValue = "* Required field";
                 }else {
						obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 9: //String Validation: Only Letters Allowed - No Special Characters or Numbers Allowed or Empty Spaces
                 obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                
                 if (vform[counter].value != "") 
                 {
                    if (!alphanumeric(vform[counter].value) || IsNumeric(vform[counter].value))
                    {
                      isvalid = false;
                      obj_error_cell.firstChild.nodeValue = "* No spaces or special characters allowed";
                    }     
                    else
                    {
                        obj_error_cell.firstChild.nodeValue = "";
                    } 
                 } else if (vform[counter].value == "") {
						isvalid = false;
						obj_error_cell.firstChild.nodeValue = "* Required field";
                 }else {
						obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 10: //required field for Item selection objects - Type 1
                 obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                 if (vform[counter].value == "")
                 {
                    isvalid = false;
                    obj_error_cell.firstChild.nodeValue = "* Selection Required";
                 }
                 else
                 {
                    obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 11: //required field for Item selection objects - Type 2
                 var typevalue = vform[counter].name;
                 if (vform[counter].value == "selected")
                 {
                    isvalid = false;
                    alert("* Please make a selection");
                 }
                 else
                 {
                    
                 }
            break
            case 12: //width
                var typevalue = vform[counter].name;
                 if (vform[counter].value != "") 
                 {
  
                    if (!IsNumeric(vform[counter].value))
                    {
                      isvalid = false;
                      alert("* " + typevalue + " is invalid number");
                    }     
                    else if (vform[counter].value>1000)
                    {
                      isvalid = false;
                      alert("* " + typevalue + " cannot exceed 1000cm");                  
                    }
                    else
                    {
                        obj_error_cell.firstChild.nodeValue = "";
                    } 
                 } else if (vform[counter].value == "") {
						isvalid = false;
						alert("* " + typevalue + " is required");
                 }else {
						obj_error_cell.firstChild.nodeValue = "";
                 }
            break   
            case 13: //projection
                var typevalue = vform[counter].name;
                 if (vform[counter].value != "") 
                 {
  
                    if (!IsNumeric(vform[counter].value))
                    {
                      isvalid = false;
                      alert("* Projection is invalid number");
                    }     
                    else if (vform[counter].value>600)
                    {
                      isvalid = false;
                      alert("* Projection cannot exceed 600cm");                  
                    }
                    else
                    {
                        obj_error_cell.firstChild.nodeValue = "";
                    } 
                 } else if (vform[counter].value == "") {
						isvalid = false;
						alert("* Projection is required");
                 }else {
						obj_error_cell.firstChild.nodeValue = "";
                 }
            break 			
        }
      }
      if (isvalid) 
      {
        ChangeCursor("wait");
      }
      return isvalid;
    }
//-----------------ALERT VERSION END--------------------------     

    function CheckValidForm(vform)
    {
      var obj_error_cell;
      var isvalid = true;
      
      for (counter = 0; counter < vform.length; counter++) // Loop through all the form elements
      {
        switch(vform[counter].validtype) // check validation types
        {
            case 1: //required field
                 obj_error_cell = document.getElementById("Err_" + vform[counter].name);

                 if (vform[counter].value == "")
                 {
                    isvalid = false;
                    obj_error_cell.firstChild.nodeValue = "* Required field";
                 }
                 else
                 {
                    obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 2: //date field
            case 3: //date field and required
            
                 obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                 
                 if (vform[counter].value != "") // a value has being entered and so needs validating
                 {
                    // var MMDDYYYYDatePattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
                   
                    var DatePattern = /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
  
                    if (!vform[counter].value.match(DatePattern))
                    {
                      isvalid = false;
                      obj_error_cell.firstChild.nodeValue = "* Invalid date";
                    }     
                    else
                    {
                        obj_error_cell.firstChild.nodeValue = "";
                    } 
                 }
                 else if (vform[counter].value == "" && vform[counter].validtype == 3) //empty value and is required
                 {
                      isvalid = false;
                      obj_error_cell.firstChild.nodeValue = "* Date Required";
                 }
                 else
                 {
                    obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 4: //drop down list validate default value not chosen
                obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                 if (vform[counter].value == "0")
                 {
                    isvalid = false;
                    obj_error_cell.firstChild.nodeValue = "* Required field";
                 }
                 else
                 {
                    obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 5: //password validation
                obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                 if (vform[counter].value == "")
                 {
                    isvalid = false;
                    obj_error_cell.firstChild.nodeValue = "* Required field";
                 }
                 //else if (vform[counter].value != "" && vform[counter].value.length < 6) 
                 //{
                 //     isvalid = false;
                 //     obj_error_cell.firstChild.nodeValue = "* 6 or more characters required";
                 //}
                 else
                 {
                    obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 6: //Email validation
                obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                 if (vform[counter].value == "")
                 {
                    isvalid = false;
                    obj_error_cell.firstChild.nodeValue = "* Required field";
                 }
                 else if (vform[counter].value != "") 
                 {				
					if (validateAddress(vform[counter].value)==false){
						isvalid = false;
						obj_error_cell.firstChild.nodeValue = "* Invalid Email";
					}else{
						obj_error_cell.firstChild.nodeValue = "";
					}
                 }
                 else
                 {
                    obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 7: //Numeric validation
                obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                
                 if (vform[counter].value != "") 
                 {
  
                    if (!IsNumeric(vform[counter].value))
                    {
                      isvalid = false;
                      obj_error_cell.firstChild.nodeValue = "* Invalid Number";
                    }     
                    else
                    {
                        obj_error_cell.firstChild.nodeValue = "";
                    } 
                 } else if (vform[counter].value == "") {
						isvalid = false;
						obj_error_cell.firstChild.nodeValue = "* Required field";
                 }else {
						obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 8: //String Validation: Only Numbers and Letters Allowed - No Special Characters Allowed or Empty Spaces
                 obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                
                 if (vform[counter].value != "") 
                 {
  
                    if (!alphanumeric(vform[counter].value))
                    {
                      isvalid = false;
                      obj_error_cell.firstChild.nodeValue = "* No Special Characters Allowed";
                    }     
                    else
                    {
                        obj_error_cell.firstChild.nodeValue = "";
                    } 
                 } else if (vform[counter].value == "") {
						isvalid = false;
						obj_error_cell.firstChild.nodeValue = "* Required field";
                 }else {
						obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 9: //String Validation: Only Letters Allowed - No Special Characters or Numbers Allowed or Empty Spaces
                 obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                
                 if (vform[counter].value != "") 
                 {
                    if (!alphanumeric(vform[counter].value) || IsNumeric(vform[counter].value))
                    {
                      isvalid = false;
                      obj_error_cell.firstChild.nodeValue = "* No spaces or special characters allowed";
                    }     
                    else
                    {
                        obj_error_cell.firstChild.nodeValue = "";
                    } 
                 } else if (vform[counter].value == "") {
						isvalid = false;
						obj_error_cell.firstChild.nodeValue = "* Required field";
                 }else {
						obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 10: //required field for Item selection objects - Type 1
                 obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                 if (vform[counter].value == "")
                 {
                    isvalid = false;
                    obj_error_cell.firstChild.nodeValue = "* Selection Required";
                 }
                 else
                 {
                    obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 11: //required field for Item selection objects - Type 2
                 obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                 if (vform[counter].value == "selectval")
                 {
                    isvalid = false;
                    obj_error_cell.firstChild.nodeValue = "* Selection Required";
                 }
                 else
                 {
                    obj_error_cell.firstChild.nodeValue = "";
                 }
            break
            case 12: //V12 Specific validation for config settings page
                obj_error_cell = document.getElementById("Err_" + vform[counter].name);
                 if (vform[counter].value != "") 
                 {
  
                    if (!IsNumeric(vform[counter].value))
                    {
                      isvalid = false;
                      obj_error_cell.firstChild.nodeValue = "* Invalid Number";
                    }     
                    else if (vform[counter].value>999999999)
                    {
                      isvalid = false;
                      obj_error_cell.firstChild.nodeValue = "* Number has to be less than - 999999999";                    
                    }
                    else
                    {
                        obj_error_cell.firstChild.nodeValue = "";
                    } 
                 } else if (vform[counter].value == "") {
						isvalid = false;
						obj_error_cell.firstChild.nodeValue = "* Required field";
                 }else {
						obj_error_cell.firstChild.nodeValue = "";
                 }
            break            
        }
      }
      if (isvalid) 
      {
        ChangeCursor("wait");
      }
      return isvalid;
    }
