/**********************
Do not allow the user to double click on the button
**********************/
var saveDisabled = false;
function disableDoubleClick(buttonName,disableImage){
  var thisButton = document.getElementById(buttonName);
  if (saveDisabled == false){
    saveDisabled = true;
    thisButton.src= disableImage; 
    return true;
  } else {
    return false;
  }
}

function enableSaveButton(buttonName){
  var thisButton = document.getElementById(buttonName);
  if (saveDisabled == true){
    saveDisabled = false; 
    thisButton.src="/shared/graphics/allapp_img/savebutton.gif"; 
  }
}

/*****************
validateDate
Checks for valid dates of the form MM/DD/YYYY
******************/
function validateDate(source, arguments){
  var trueFalseArg = true;
  var d = arguments.Value;
  var firstSlash = d.indexOf("/");
  if (firstSlash < 0){
    trueFalseArg = false;
  } else {
    var secondSlash = d.indexOf("/",firstSlash+1);
    if (secondSlash < 0){
      trueFalseArg = false;
    } else {
      var month = d.substr(0,firstSlash);
      var day = d.substr((firstSlash+1),(secondSlash-(firstSlash+1)));
      var year = d.substr((secondSlash+1),(d.length-(secondSlash+1)));
      if (isNaN(parseInt(month)) || isNaN(parseInt(day)) || isNaN(parseInt(year))){
        trueFalseArg = false;
      }
      //Check month between 1 and 12
      else if ((parseInt(month,10) > 12) || (parseInt(month,10) < 1)){
        trueFalseArg = false;
      }
      //Check for day between 1 and 31
      else if ((parseInt(day,10) > 31) || (parseInt(day,10) < 1)){
        trueFalseArg = false;
      }
      //Check months 4,6,9,11 have days less than 31
      else if (((parseInt(month,10) == 4) || (parseInt(month,10) == 6) || 
                (parseInt(month,10) == 9) || (parseInt(month,10) == 11)) && 
               (parseInt(day,10) > 30)){
        trueFalseArg = false;
      }
      //Check for four digit year
      else if (year.length != 4 && year.length != 2){
        trueFalseArg = false;
      }
      //Check for Feb > 29 days
      else if ((parseInt(month,10) == 2) && (parseInt(day,10) > 29)){
        trueFalseArg = false;
      } 
      //Check if Feb and year divisible by 400, days less than 30
      else if ((parseInt(month,10) == 2) && 
               ((parseInt((parseInt(year,10) / 400),10)) == (parseInt(year,10) / 400))){
        if (parseInt(day,10) > 29){ 
          trueFalseArg = false;
        }
      }
      //Check if Feb and year divisible by 100, days less than 29
      else if ((parseInt(month,10) == 2) && 
               ((parseInt((parseInt(year,10) / 100),10)) == (parseInt(year,10) / 100))){
        if (parseInt(day,10) > 28){ 
          trueFalseArg = false;
        }
      }
      //Check if Feb and year divisible by 4, days less than 29
      else if ((parseInt(month,10) == 2) && 
               ((parseInt(((parseInt(year,10)) / 4),10)) != ((parseInt(year,10)) / 4))){
        if (parseInt(day,10) > 28){ 
          trueFalseArg = false;
        }
      }
    }
  }
  if (trueFalseArg == false){
    enableSaveButton();
  }

  arguments.IsValid = trueFalseArg;
}

function OpenWindow(URL, WinName, Width, Height, HideTools)
{
	var intHeight;
	var intWidth;
	var Top;
	var Left;
	var Features;
	var Timer= new Date();
	if(Width)
	{
		intWidth = Width;
	}
	else
	{
		intWidth = screen.availWidth * .80;
	}
	
	if(Height)
	{
		intHeight = Height;
	}
	else
	{
		intHeight = screen.availHeight * .80;
	}
	Top = (screen.availHeight-intHeight) / 2
	Left = (screen.availWidth-intWidth) / 2
	if(HideTools)
	{
		window.open(URL,WinName, "SCROLLBARS=1,TOOLBAR=0,RESIZABLE=1,MENUBAR=0,HEIGHT=" + intHeight + ",WIDTH=" + intWidth + ",TOP=" + Top +  ",LEFT=" + Left)
	}
	else
	{
		window.open(URL,WinName, "SCROLLBARS=1,TOOLBAR=1,RESIZABLE=1,MENUBAR=1,HEIGHT=" + intHeight + ",WIDTH=" + intWidth + ",TOP=" + Top +  ",LEFT=" + Left)
	}	
}

function OpenWindow1(URL, WinName, Width, Height, HideTools)
{
	var intHeight;
	var intWidth;
	var Top;
	var Left;
	var Features;
	var Timer= new Date();
	if(Width)
	{
		intWidth = Width;
	}
	else
	{
		intWidth = screen.availWidth * .80;
	}
	
	if(Height)
	{
		intHeight = Height;
	}
	else
	{
		intHeight = screen.availHeight * .80;
	}
	Top = (screen.availHeight-intHeight) / 2
	Left = (screen.availWidth-intWidth) / 2
	if(HideTools)
	{
		window.open(URL,WinName, "SCROLLBARS=1,TOOLBAR=0,RESIZABLE=1,MENUBAR=0,HEIGHT=" + intHeight + ",WIDTH=" + intWidth + ",TOP=" + Top +  ",LEFT=" + Left)
	}
	else
	{
		window.open(URL,WinName, "SCROLLBARS=1,TOOLBAR=1,RESIZABLE=1,MENUBAR=1,HEIGHT=" + intHeight + ",WIDTH=" + intWidth + ",TOP=" + Top +  ",LEFT=" + Left)
	}	
}

function CalcCharsRemaining(strTextAreaID,strLabelID,lMaxLength)
{
    var txt1 = document.getElementById(strTextAreaID).value;
    var txtLen = document.getElementById(strTextAreaID).value.length;
    var lCnt = lMaxLength - txt1.length;

    if (lCnt <= 0) 
    {
        document.getElementById(strTextAreaID).value = document.getElementById(strTextAreaID).value.substr(0,lMaxLength);
        lCnt = 0;
    }
    strLabelID.innerText = 'Characters remaining: ' + lCnt;
    
}

//Used to do prePost validation on comment text that may fail page validation.
function validateComments(id)
{
	  var obj = document.getElementById(id);
	  obj.value = obj.value.replace(/</g, "< ");
	  return false;
}
	    
function validateCommentsText(source, arguments)
{
    var obj = document.getElementById(source.controltovalidate);
    obj.value = obj.value.replace(/</g, "< ");
    arguments.IsValid = true;
}

function chkSerialNumberLength(source, arguments)
{
    var obj = document.getElementById(source.controltovalidate);
    if (obj.value.length != 4)
    {
        arguments.IsValid = false;
    }
    else
    {
        arguments.IsValid = true;
    }
}

function chkQtyGreaterThan0(source, arguments)
{
    var obj = document.getElementById(source.controltovalidate);
    if (obj.value <= 0)
    {
        arguments.IsValid = false;
    }
    else
    {
        arguments.IsValid = true;
    }
}

function chkQtyNotNegative(source, arguments)
{
    var obj = document.getElementById(source.controltovalidate);
    if (obj.value < 0)
    {
        arguments.IsValid = false;
    }
    else
    {
        arguments.IsValid = true;
    }
}

/*
Generic Form Validation.
tboland@gmail.com
http://www.techtoolblog.com
License: Free To Use, If Modified/Added
please send updated source to tboland@gmail.com

To Validate a Form Element Add the Custom Attribute:
validate="VALIDATEHOW"
 
Your Current Options Are:
"not_empty"
"integer"
"number" - decimal allowed
"email"
"phone" - includes international phone numbers

Multiple Validation uses the following syntax:
validate="not_empty|integer"

To Add a Message Add the Custom Attribute:
msg="Name is a required field" 

By Default the Messages are shown next to the form element.
To Show Alert Boxes add a Custom Attribute in the form tag (show_alert):
<form action="mypage.aspx" show_alert="1? onSubmit="return Validate(this);">

Examples:
<html>
<head>
<script language="JavaScript" src="gfv.js" type="text/javascript"></script>
</head>
<body>
<form action="mypage.php" show_alert="1? onSubmit="return Validate(this);">
First Name <input type="Text" name="FirstName" maxlength="25? validate="not_empty" msg="First Name is Required" /><br/>
Email <input type="text" name="Email" maxlength="25? validate="email" msg="Email is Required" /><br/>
<input type="submit" value="Go">
</form></body></html>

ADVANCED USERS:
Add Your Own Function Calls to the validate attribute.
It Must return true or false
example:
<input type="text" name="Age" validate="ValidateAge" />
*/

/*
function Validate(objForm) 
{
 var arrValidated=new Array();
 for (var i=0; i<objForm.elements.length; i++) {
var element=objForm.elements[i];
var elName=element.name;
if ((!elName)||(elName.length == 0)||(arrValidated[elName]))
continue;
arrValidated[elName] = true;
var validationType = element.getAttribute("validate");
if ((!validationType)||(validationType.length == 0))
continue;
var strMessages=element.getAttribute("msg");
if (!strMessages)
strMessages = "";
var arrMessages = strMessages.split("|");
var arrValidationTypes = validationType.split("|"); 
for (var j=0; j<arrValidationTypes.length; j++) {
var curValidationType = arrValidationTypes[j];
var blnValid=true;
switch (curValidationType) {
case "not_empty":
blnValid = ValidateNotEmpty(element);
break;
case "integer":
blnValid = ValidateInteger(element);
break;
case "number":
blnValid = ValidateNumber(element);
break;
case "email":
blnValid = ValidateEmail(element);
break;
case "phone":
blnValid = ValidatePhone(element);
break;
default:
try {
blnValid = eval(curValidationType+"(element)");
}
catch (ex) {
blnValid = true;
}
}
if (blnValid == false) {
var message="invalid value for "+element.name;
if ((j < arrMessages.length)&&(arrMessages[j].length > 0))
message = arrMessages[j];
InsertError(element, message);
if ((typeof element.focus == "function")||(element.focus)) {
element.focus();
}
return false;
}
else
ClearError(element);
}
 }
 return true;

}

//Empty Validation
function ValidateNotEmpty(objElement) {
 var strValue = GetElementValue(objElement);
 var blnResult = true;
 if(allTrim(strValue) == "") //check for nothing
 {
 blnResult = false;
 }
 return blnResult;
}

//Integer Validation
function ValidateInteger(objElement)
// check for valid numeric strings 
{
var strString = GetElementValue(objElement);
var strValidChars = "0123456789?;
var strChar;
var blnResult = true;
// test strString consists of valid characters listed above
for (i = 0; i < strString.length && blnResult == true; i++)
{
strChar = strString.charAt(i);
if (strValidChars.indexOf(strChar) == -1)
{
blnResult = false;
}
}
return blnResult;
}

//Number Validation
function ValidateNumber(objElement)
// check for valid numeric strings 
{
var strString = GetElementValue(objElement);
var strValidChars = ".0123456789?; //decimal ok
var strChar;
var blnResult = true;
// test strString consists of valid characters listed above
for (i = 0; i < strString.length && blnResult == true; i++)
{
strChar = strString.charAt(i);
if (strValidChars.indexOf(strChar) == -1)
{
blnResult = false;
}
}
return blnResult;
}

//Email Validation
function ValidateEmail(objElement) {
 // Will check for @, period after @ and text in between
 var strValue = GetElementValue(objElement);
 var in_space = strValue.indexOf(" ");
 if (in_space != -1)
 { return false; }
 var len = strValue.length;
 var alpha = strValue.indexOf("@");
 var last_alpha = strValue.lastIndexOf("@");
 if (alpha != last_alpha)
{ return false; }
 // No @, in first position, or name too short
 if (alpha == -1 || alpha == 0 || len<6 )
{ return false; }
 var last_p = strValue.lastIndexOf(".");
// Be sure period at least two spaces after @, but not last char.
 if (last_p - alpha < 2 || last_p == (len - 1) )
{ return false; }
 }

 //Valid PhoneNumber
 function ValidatePhone(objElement){
 // non-digit characters which are allowed in phone numbers
 var phoneNumberDelimiters = "()- ";
 // characters which are allowed in international phone numbers
 // (a leading + is OK)
 var validWorldPhoneChars = phoneNumberDelimiters + "+";
 // Minimum no of digits in an international phone no.
 var minDigitsInIPhoneNumber = 10;
 var strValue = GetElementValue(objElement);
 s=stripCharsInBag(strValue,validWorldPhoneChars);
 return (ValidateInteger(s) && s.length >= minDigitsInIPhoneNumber);
 }

function GetElementValue(objElement) {
 var result="";
 switch (objElement.type) {
case "text":
case "hidden":
case "textarea":
case "password":
result = objElement.value;
break;
case "select-one":
case "select":
if (objElement.selectedIndex >= 0)
result = objElement.options[objElement.selectedIndex].value;
break;
case "radio":
case "checkbox":
for (var i=0; i<objElement.form.elements.length; i++) {
if (objElement.form.elements[i].name == objElement.name) {
if (objElement.form.elements[i].checked)
result += objElement.form.elements[i].value+",";
}
}
break;
 }
 return result;
}

function InsertError(element, strMessage) {
 if ((element.form.getAttribute("show_alert")) && (element.form.getAttribute("show_alert") != "0")) {
alert(strMessage);
return;
 }

 var strSpanID = element.name+"_val_error";
 var objSpan = document.getElementById(strSpanID);
 if (!objSpan) {
if ((element.type == "radio")||(element.type == "checkbox")) {
for (var i=0; i<element.form.elements.length; i++) {
if (element.form.elements[i].name == element.name) {
element = element.form.elements[i];
}
}
}
objSpan = document.createElement("span");
objSpan.id = strSpanID;
objSpan.className = "validation_error";
var nodeAfter=0;
var nodeParent = element.parentNode;
for (var i=0; i<nodeParent.childNodes.length; i++) {
if (nodeParent.childNodes[i] == element) {
if (i < (nodeParent.childNodes.length-1))
nodeAfter = nodeParent.childNodes[i+1];
break;
}
}
if ((!nodeAfter)&&(nodeParent.parentNode)) {
nodeParent = nodeParent.parentNode;
for (var i=0; i<nodeParent.childNodes.length; i++) {
if (nodeParent.childNodes[i] == element.parentNode) {
if (i < (nodeParent.childNodes.length-1))
nodeAfter = nodeParent.childNodes[i+1];
break;
}
}
}
if (nodeAfter)
nodeParent.insertBefore(objSpan, nodeAfter);
else
document.body.appendChild(objSpan);
 }
 objSpan.innerHTML = strMessage;
}

function ClearError(element) {
 var strSpanID = element.name+"_val_error";
 var objSpan = document.getElementById(strSpanID);
 if (objSpan) {
objSpan.innerHTML = "";
 }
}

function allTrim(cValue){
 var lDone=false;
 while (lDone==false){
if (cValue.length==0) {return cValue;}
if (cValue.indexOf(' ')==0){cValue=cValue.substring(1);lDone=false; continue;}
else {lDone=true;}
if (cValue.lastIndexOf(' ')==cValue.length-1){cValue=cValue.substring(0, cValue.length-1);lDone=false;continue;}
else {lDone=true;}
 }
 return cValue;
}

function stripCharsInBag(s, bag)
{ var i;
var returnString = "";
// Search through string’s characters one by one.
// If character is not in bag, append to returnString.
for (i = 0; i < s.length; i++)
{ 
// Check that current character isn’t whitespace.
var c = s.charAt(i);
if (bag.indexOf(c) == -1) returnString += c;
}
return returnString;
}

*/

