﻿// JScript File

String.prototype.isArgument=function()
{
	return /^([a-zA-Z]){1,}=([0-9]){1,}$/.test(this);
}




/*
call this function just work like window.open(url,name,feature);
however, for IE5.0+, it will open a showModelessDialog window;
and For Gecko(Mozilla or Netscape), the child window will stay on top focus untill user close it.
programmed by hedger
hedger@yahoo-inc.com
*/
 
 
function showDialog(url,name,feature,isModal)
{
 if(url==null){return false;}
 url = url
 if(name==null){name=""}
 if(feature==null){feature="resizable=1, height=300, width=300"};
 if(window.showModelessDialog)
 {
  	var WindowFeature = new Object();
	WindowFeature["width"] = 400;
	WindowFeature["height"]  =400;
	WindowFeature["left"]  = "";
	WindowFeature["top"]  =  "";
	WindowFeature["resizable"]  = "yes";

	if(feature !=null && feature!="")
	{
      feature = ( feature.toLowerCase()).split(",");
	
      for(var i=0;i< feature.length;i++)
		{
          if( feature[i].isArgument())
			{
               var featureName = feature[i].split("=")[0];
			   var featureValue = feature[i].split("=")[1];
			  
			   if(WindowFeature[featureName]!=null){WindowFeature[featureName] = featureValue; }
			}
		}
	}
 
  if(WindowFeature["resizable"]==1 || WindowFeature["resizable"]=="1" || WindowFeature["resizable"].toString().toLowerCase()=="yes"){WindowFeature["resizable"] = "resizable:1;minimize:1;maximize:1;"}
  if(WindowFeature["left"]!=""){WindowFeature["left"] ="dialogLeft:" +  WindowFeature["left"] +"px;";}
  if(WindowFeature["top"]!=""){WindowFeature["top"] ="dialogTop:" +  WindowFeature["Top"] +"px;"; }
  if(window.ModelessDialog ==null){window.ModelessDialog = new Object() ; };
  if(name!="")
  {
   if(window.ModelessDialog[name]!=null && !window.ModelessDialog[name].closed )
   {
     window.ModelessDialog[name].focus();
	 return window.ModelessDialog[name];
   }
  }
	var F = WindowFeature["left"] +WindowFeature["top"] +  "dialogWidth:"+WindowFeature["width"] +" px;dialogHeight:"+WindowFeature["height"]+"px;center:1;help:0;" + WindowFeature["resizable"] +"status:0;unadorned:0;edge: raised; ;border:thick;"
	if(isModal)
	{
		return window.showModalDialog(url,self,F);
		//return false;
	}
	else
	{
		window.ModelessDialog[name] = window.showModelessDialog(url,self,F);
		return window.ModelessDialog[name];
	}	
 }
 else
 {
   if(document.getBoxObjectFor)
   {
	if(isModal)
	 {		 
		 var Modal = window.open(url,name,"modal=1," + feature);
		 var ModalFocus = function()
		 {
			if(!Modal.closed){Modal.focus();}
			else{Modal =null;window.removeEventListener(ModalFocus,"focus");ModalFocus = null; };					
		 }
		 window.addEventListener( "focus",ModalFocus, false ); 
		 return Modal.returnValue;
	 }
	 else
	 {
		return window.open(url,name,"modal=1," + feature);
	 }	 
   }
   else
   { 
     return window.open(url,name,feature);
   }
   //
 }
 return null;
}

   
function showModal(url,feature)
{
	return showDialog(url,"",feature,true);
	
}

function NameValueCollection()
	{
		this.Keys		= new Array();
		this.Values		= new Array();
		this.Type		= "NameValueCollection";

		this.Add = function( Key, Value )
		{
			if( arguments.length == 2 )
			{
				var KeyIndex = this.IndexOfKey( Key );
				if( KeyIndex == -1 ) //The Key Doesn't exist
				{
					this.Keys.push		( Key	);
					this.Values.push	( Value	);
				}
				else
				{
					this.Values[KeyIndex] = this.Values[KeyIndex] + "," + Value;
				}
			}
			else if ( arguments.length != 2 )
			{
				throw( "Incorrect Number of arguments in " + this.GetType() + ":Add( Key, Value )" );
			}
			return;
		}
	
		this.Set = function( Key, Value )
		{
			if( arguments.length == 2 )
			{
				var KeyIndex = this.IndexOfKey( Key );
				if( KeyIndex == -1 ) //if Key does not already exist
				{
					this.Keys.push	( Key   );
					this.Values.push( Value );
				}
				else
				{
					this.Values[KeyIndex] = Value
				}
			}
			else if ( arguments.length != 2 )
			{
				throw( "Incorrect Number of arguments in " + this.GetType() + ":Add( Key, Value )" );
			}
			return;
		}
		
		this.GetValues = function( Key )
		{
			if( this.ContainsKey( Key ) )
			{			
				return this.Values[this.IndexOfKey( Key )].split(',');
			}
			else
			{
				return null;
			}
		}
		
		this.Get = function( Key )
		{
			var PairIndex = this.IndexOfKey( Key );
			if( PairIndex > -1 )			
			{
				return this.Values[PairIndex];
			}
			else
			{
				return null;
			}
		}
		
		this.GetKeys	= function()		{ return this.Keys;	}
		this.GetValue	= function( Key )	{ return this.Get( Key ); }
		this.GetKeyAt	= function( Index )	{ return this.Keys[Index]; }
		this.GetValueAt	= function( Index ) { return this.Values[Index]; }
		this.GetType	= function()		{ return this.Type; }
		
		this.URLEncode = function()
		{
			var QueryString = new String();
			for( var i = 0; i < this.Keys.length; i++ )
			{
				QueryString = QueryString + escape( this.GetKeyAt( i ) ) + "=" + escape( this.GetValueAt( i ) );
				if( (i+1) != this.Keys.length )
				{
					QueryString = QueryString + "&";
				}
			}
			return QueryString;
		}
		
		this.ToString = function()
		{
			var myKeys = this.GetKeys();
			var Result = new String();
			for( var i = 0; i < myKeys.length; i++ )
			{
				Result = Result + myKeys[i] + " : " + this.Get( myKeys[i] ) + "\n";
			}
			return Result;
		}
		
		this.ContainsKey = function( Key )		
		{
			for( var i = 0; i < this.Keys.length; i++ )
			{
				if( this.Keys[i] == Key )
				{
					return true;
				}
			}
			return false;
		}
		
		this.IndexOfKey = function( Key )
		{
			for( var i = 0; i < this.Keys.length; i++ )
			{
				if( this.Keys[i] == Key )
				{
					return i;
				}
			}
			return -1;
		}
	}//End Class: NameValueCollection
	
	/* Static Methods */
	NameValueCollection.PrintNVC = function( pNVC )
	{
		var myKeys = pNVC.GetKeys();
		for( var i = 0; i < myKeys.length; i++ )
		{
			document.write( myKeys[i] + " = " + pNVC.Get( myKeys[i] ) + "<br />" );
		}
	}
	
	NameValueCollection.CreateFromQueryString = function( QueryString )
		{
			var outNVC				= new NameValueCollection();
			var arrQueryString	= QueryString.split( '&' );
			for( var i = 0; i < arrQueryString.length; i++ )
			{
				var arrPair	= arrQueryString[i].split('=');
				var Name		= Trim(arrPair[0]);
				var Value	= arrPair[1];			
				outNVC.Add( unescape(Name), unescape(Value) );
			}
			return outNVC;
		}
	
	NameValueCollection.CreateFromString = function(pairString, deliminator)
	{
	    if(deliminator==null || deliminator=="")
	    {
	        deliminator=",";
	    }
	    var outNVC				= new NameValueCollection();
		var arrPairString	= pairString.split( deliminator );
		for( var i = 0; i < arrPairString.length; i++ )
		{
			if(arrPairString[i].length>1 && arrPairString[i].indexOf("=")>0)
			{
			    var arrPair	= arrPairString[i].split('=');
			    var Name		= Trim(arrPair[0]);
			    var Value	= arrPair[1];	
			    outNVC.Add( Name, Value );
			}
		}
		return outNVC;
	}
	
    function ParseArgument(arguments, defaultArguments)
    {
        var argNVC=null;
        var defaultArgNVC =null;
        if(arguments!=null && arguments!="")
        {
            argNVC = NameValueCollection.CreateFromString(arguments);
        }
        if(defaultArguments!=null && defaultArguments!="")
        {
            defaultArgNVC = NameValueCollection.CreateFromString(defaultArguments);
        }
        if(argNVC!=null && defaultArgNVC!=null)
        {
            for(var m=0; m<defaultArgNVC.Keys.length; m++)
            {
                if(!argNVC.ContainsKey(defaultArgNVC.Keys[m]))
                    argNVC.Set(defaultArgNVC.Keys[m], defaultArgNVC.Get(defaultArgNVC.Keys[m]));
            }
            return argNVC;
        }
        else if(argNVC!=null)
            return argNVC;
        else
            return defaultArgNVC;
    }
    
    
    function DateClickModal(selObj) //Creator Unknown, Date Unknown
	{
		var sFeatures="scroll:no;dialogHeight:400px;dialogWidth:400px;";
		Args = selObj.value;
		CheckVal = window.showModalDialog('/scripts/calendar2.htm', Args, sFeatures);
		if(CheckVal === undefined)
		{
			//nothing to do
		}
		else
		{
			selObj.value = CheckVal;
			selObj.focus();
			selObj.blur();
		}
	}
	
	function PickDate() 
	{
		var EventSource = Event.element(event);
		var elementToUpdate;
		
		if(EventSource.getAttribute("id")!=null && EventSource.getAttribute("id")!="")
		    elementToUpdate = $(EventSource.getAttribute("id").replace(/_cal/i, ""));
		else
		{
		    if(EventSource.previousSibling!=null)
		        elementToUpdate = EventSource.previousSibling;
		}
		var dateValue = $F(elementToUpdate);
		pickedDate = showModal("scripts/calendar.htm?PrePickedDate="+dateValue, "width=300,height=300");
		if(pickedDate !=null)
		{
		    $(elementToUpdate).value = pickedDate;
		    $(elementToUpdate).fireEvent("onblur");
		}
		
	}
    
    
    
    
    function ValidateInput( )
	{
		var inputsNVC = NameValueCollection.CreateFromQueryString(Form.serialize("form1"));
		this.errorMsgNVC = new NameValueCollection();
		var isValidInput = true;
		if( $("RequiredFields"))
		{
		    var requiredFields = $F("RequiredFields").split(",");
		    
		    for(var m=0; m<requiredFields.length; m++)
		    {
		        if(Trim(requiredFields[m])!="")
		        {
		            if(inputsNVC.Get(Trim(requiredFields[m]))==null || inputsNVC.Get(Trim(requiredFields[m]))=="")
		            {
		                isValidInput = false;
		                errorMsgNVC.Add(Trim(requiredFields[m]), Trim(requiredFields[m]) +" is required.");
		            }
		        }
		    }
	    }
	    if($("FieldDataTypes"))
	    {
	        var fieldsDataTypeNVC = NameValueCollection.CreateFromString($F("FieldDataTypes"));
	        var keys = fieldsDataTypeNVC.GetKeys();
	        for(var m=0; m<keys.length; m++)
	        {
	            if(inputsNVC.Get(keys[m])!=null && inputsNVC.Get(keys[m])!="")
	            {
	                switch(fieldsDataTypeNVC.Get(keys[m]).toLowerCase())
	                {
	                    case "nonfuturedate":
	                        if(!IsValidDate(inputsNVC.Get(keys[m])))
						    {
						        isValidInput = false;
						        errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is invalid date.");
						    }
						    if(IsFutureDate(inputsNVC.Get(keys[m])))
						    {
						        isValidInput = false;
						        errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is not date ealier than today.");
						    }
	                        break;
	                    case "nonpreviousdate":
	                        if(!IsValidDate(inputsNVC.Get(keys[m])))
						    {
						        isValidInput = false;
						        errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is invalid date.");
						    }
						    if(IsPreviousDate(inputsNVC.Get(keys[m])))
						    {
						        isValidInput = false;
						        errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is not date later than today.");
						    }
	                        break;
	                    case "futuredate":
	                        if(!IsValidDate(inputsNVC.Get(keys[m])))
						    {
						        isValidInput = false;
						        errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is invalid date.");
						    }
						    if(!IsFutureDate(inputsNVC.Get(keys[m])))
						    {
						        isValidInput = false;
						        errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is not Future date.");
						    }
	                        break;
	                    case "previousdate":
	                        if(!IsValidDate(inputsNVC.Get(keys[m])))
						    {
						        isValidInput = false;
						        errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is invalid date.");
						    }
						    if(!IsPreviousDate(inputsNVC.Get(keys[m])))
						    {
						        isValidInput = false;
						        errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is not Previous date.");
						    }
	                        break;
	                    case "datetime":
						case "smalldatetime":
						    if(!IsValidDate(inputsNVC.Get(keys[m])))
						    {
						        isValidInput = false;
						        errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is invalid date.");
						    }
	                        break;
	                        
	                    case "int":
	                    case "long":
	                        if(!IsIntegerValue(inputsNVC.Get(keys[m])))
						    {
						        isValidInput = false;
						        errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is not valid Integer number.");
						    }
	                        break;   
	                    case "double":
						case "single":
						case "float":
						case "decimal":
						    if(!IsNumericValue(inputsNVC.Get(keys[m])))
						    {
						        isValidInput = false;
						        errorMsgNVC.add(keys[m], inputsNVC.Get(keys[m]) +" is not valid numeric number.");
						    }
	                        break;    
	                    case "phone":
	                       
	                        if(!IsValidPhone(inputsNVC.Get(keys[m])))
						    {
						        isValidInput = false;
						         errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is invalid phone number. Area code is required.");
						        //errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is invalid phone number. ");
						    }
						   
	                        break;
	                           
	                    case "sin":
	                    case "ssn":
	                        if(!IsValidSINSSN(inputsNVC.Get(keys[m])))
						    {
						        isValidInput = false;
						        errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is invalid SIN number.");
						    }
						   
	                        break;
	                    case "money":
	                        if(!IsNumericValue(inputsNVC.Get(keys[m])))
						    {
						        isValidInput = false;
						        errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is not valid money amount.");
						    }
	                        break; 
	                    case "email":
	                        if(!IsValidEmail(inputsNVC.Get(keys[m])))
						    {
						        isValidInput = false;
						        errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is invalid Email address.");
						    }
	                        break;
	                    case "digit":
	                        if(!IsDigitNumber(inputsNVC.Get(keys[m])))
	                        {
	                            isValidInput = false;
						        errorMsgNVC.Add(keys[m], inputsNVC.Get(keys[m]) +" is invalid digit number.");
	                        }
	                        break;
	                 
	                } //end switch
	            } //end if 
	        }//end for
	    }//end if
	   
	    return isValidInput;
		
	}
	
	
	
	function ShowErrorMessage()
	{
	    alert(this.errorMsgNVC.ToString());
	    if($(errorMsgNVC.GetKeyAt(0)))    
	        $(errorMsgNVC.GetKeyAt(0)).focus();
	}
	
	
	function IsValidDate(dateString)
	{
	    var inputDate = dateString;
	    if(inputDate==null || inputDate=="") return true; 
	    
        var regDate = new RegExp("^(([1-9])|([0][1-9])|([1][0-2]))/(([1-9])|([0][1-9])|([1-2][0-9])|([3][0-1]))/((19|20|21|22)[0-9]{2})$");
        if(!regDate.test(inputDate))
        {
	        return false;
        }
        else
        {
	        var month, day, year;
	        var dateSplits=inputDate.split("/");
	        month=parseInt(dateSplits[0],10);
	        day=parseInt(dateSplits[1],10);
	        year=parseInt(dateSplits[2],10);
	        var objInputDate=new Date(inputDate);
	        if(objInputDate.getDate() == day)
	        {
		        if((objInputDate.getMonth()+1)==month)
		        {
			        if(objInputDate.getFullYear()==year)
			        {
				        return true;
			        }
		//	        else alert("Invalid Year entry");
		        }
		//        else
		//	        alert("Invalid Month entry");
	        }
	    //    else
		//        alert("Invalid Date entry");
	        return false;
        }
	}
	function IsDigitNumber(digitNumbers)
	{
	    if(!(/^[\d]*$/.test(digitNumbers)))
	        return false;
	    else return true;
	}
	function IsNumericValue(numericValue)
	{
	    if(parseFloat(numericValue.replace(/,/g, ''))!=numericValue.replace(/,/g, ''))
	        return false;
	    else
	        return true;
    }

    function IsIntegerValue(integerValue)
    {
        if(parseInt(integerValue.replace(/,/g, ''))!=integerValue)
        {
            return false;
        }
        else 
            return true;
    }
	
	
	function IsValidEmail(emailString)
	{
        if(emailString!=null && emailString!="")
        {
            var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
            if (filter.test(emailString))
                return true;
            else
                return false;
        }
	    return true;
	}
	
	function IsValidPhone(phoneString)
	{
	    if(phoneString!=null && phoneString!="")
	    {
	        if(StripNonNumber(phoneString).length==7 || StripNonNumber(phoneString).length==10)
	        //if(StripNonNumber(phoneString).length==10)
	            return true;
	        else
	            return false;
	    }
	    return true;
	}
	
	function IsValidSINSSN(sinString)
	{
	   if(sinString!=null && sinString!="")
	    {
	        if(StripNonNumber(sinString).length==9)
	            return true;
	        else
	            return false;
	    }
	    return true;
	}  
	
	function IsFutureDate(dateString)
	{
	    try{
	        var dateChecked = new Date(dateString);
	        var TodayDate = new Date();
	        if(dateChecked>TodayDate)
	            return true;
	        else
	            return false;
	    }
	    catch(e)
	    {}
	}
	
	function IsPreviousDate(dateString)
	{
	    try{
	        var dateChecked = new Date(dateString);
	        var TodayDate = new Date();
	        if(dateChecked < TodayDate)
	            return true;
	        else
	            return false;
	    }
	    catch(e)
	    {}
	}
	
	function StripNonNumber(stringValue)
	{
	    if(stringValue!=null && stringValue!="")
	    {
	        var stripptedString="";
	        for(var m=0; m<stringValue.length; m++)
	        {
	            if(stringValue.charAt(m).match(/\d/))
	                stripptedString += stringValue.charAt(m);
	        }
	        return stripptedString;
	    }
	    return "";
	}
	
	function FormatIntegerValue(integerValue)
	{
	    if(integerValue.indexOf(".")>-1)
	    {
	        return FormatNumberValue(integerValue.substr(0, integerValue.indexOf(".")));
	    }
	    else return FormatNumberValue(integerValue);
	}
	
	function FormatNumberValue(numberValue)
	{
	    if(numberValue!=null && numberValue!="")
	    {
	        var signPart="";
	        var integerPart="";
	        var fractionPart="";
	        if(numberValue.charAt(0)=="-")
	            signPart="-";
	        if(numberValue.lastIndexOf(".")>-1)
	        {
	            fractionPart = StripNonNumber(numberValue.substr(numberValue.lastIndexOf("."), numberValue.length-numberValue.lastIndexOf(".")));
	            integerPart = StripNonNumber(numberValue.substr(0, numberValue.lastIndexOf(".")));
	        }
	        else integerPart= StripNonNumber(numberValue);
	        
	        if(integerPart.length>0)
	        {
    	        while(integerPart.charAt(0)=="0" && integerPart.length>1)
                    integerPart = integerPart.replace(integerPart.charAt(0),"");
            }
	        
	        var topNumberPart = integerPart;
	        var endNumberPart ="";
	        while(topNumberPart.length>3)
	        {
	            endNumberPart  =  topNumberPart.substr(topNumberPart.length-3, 3) + endNumberPart;
	            topNumberPart = topNumberPart.substring(0, topNumberPart.length-3);
	        }
	        if(fractionPart=="")
	            return signPart+topNumberPart+endNumberPart;
	        else
	            return signPart+topNumberPart+endNumberPart+"."+fractionPart;
	    }
	    return numberValue;
	}
	
	function FormatPhoneValue(phoneValue)
	{
	    if(phoneValue!="" && IsValidPhone(phoneValue))
	    {
	        phoneNumber =  StripNonNumber(phoneValue);
	        if(phoneNumber.length==10)
	            return "("+phoneNumber.substr(0, 3)+") "+phoneNumber.substr(3, 3)+"-"+phoneNumber.substr(6, 4);
	        else if(phoneNumber.length==7)
	        {
	            //return phoneNumber.substr(0, 3)+"-"+phoneNumber.substr(3, 4);
	            return "(705) "+phoneNumber.substr(0, 3)+"-"+phoneNumber.substr(3, 4);
	        }
	        else
	            return phoneValue;
	    }
	    else
	    return phoneValue;
	}
	
	function FormatSINSSNValue(ssnsinValue)
	{
	    if(ssnsinValue!="" && IsValidSINSSN(ssnsinValue))
	    {
	        sinNumber =  StripNonNumber(ssnsinValue);
	        if(sinNumber.length==9)
	            return sinNumber.substr(0, 3)+"-"+sinNumber.substr(3, 2)+"-"+sinNumber.substr(5, 4);
	        else
	            return ssnsinValue;
	    }
	    else
	    return ssnsinValue;
	}

	function FormatDateValue(dateInput)
	{
	    var regDate = new RegExp("^(([1-9])|([0][1-9])|([1][0-2]))/(([1-9])|([0][1-9])|([1-2][0-9])|([3][0-1]))/((19|20|21|22)[0-9]{2})$");
        if(regDate.test(dateInput))
        {
	       return dateInput;
        }
        strippedDate = StripNonNumber(dateInput);
        var formattedDate="";
        if(strippedDate.length==8)
        {
            if(strippedDate.substr(0,2)>'17')
                formattedDate = strippedDate.substr(4,2)+"/"+strippedDate.substr(6,2)+"/"+strippedDate.substr(0,4);
            else
                formattedDate = strippedDate.substr(0,2)+"/"+strippedDate.substr(2,2)+"/"+strippedDate.substr(4,4);
        }
        else if(strippedDate.length==6)
        {
            if(strippedDate.substr(4,2)>'50')
                formattedDate = strippedDate.substr(0,2)+"/"+strippedDate.substr(2,2)+"/19"+strippedDate.substr(4,2);
            else
                formattedDate = strippedDate.substr(0,2)+"/"+strippedDate.substr(2,2)+"/20"+strippedDate.substr(4,2);
        }
        return formattedDate;
	}
	
	function FormatInteger()
	{
	    var elementToFormat;
        if(arguments.length>0)
        {
            if(arguments[0]!=null && arguments[0].length>0)
            {
                elementToFormat = $(arguments[0]);
            }
        }
        if(elementToFormat==null)
            elementToFormat = event.srcElement;
       
        elementToFormat.value = FormatIntegerValue(elementToFormat.value);
	}
	
	function FormatNumber()
    {
       var elementToFormat;
        if(arguments.length>0)
        {
            if(arguments[0]!=null && arguments[0].length>0)
            {
                elementToFormat = $(arguments[0]);
            }
        }
        if(elementToFormat==null)
            elementToFormat = event.srcElement;
       
        elementToFormat.value = FormatNumberValue(elementToFormat.value);
    }

    function FormatPhone()
    {
        var elementToFormat;
        if(arguments.length>0)
        {
            if(arguments[0]!=null && arguments[0].length>0)
            {
                elementToFormat = $(arguments[0]);
            }
        }
        if(elementToFormat==null)
            elementToFormat = event.srcElement;
       
        elementToFormat.value = FormatPhoneValue(elementToFormat.value);
    }
	
	function FormatSINSSN()
    {
        var elementToFormat;
        if(arguments.length>0)
        {
            if(arguments[0]!=null && arguments[0].length>0)
            {
                elementToFormat = $(arguments[0]);
            }
        }
        if(elementToFormat==null)
            elementToFormat = event.srcElement;
       
        elementToFormat.value = FormatSINSSNValue(elementToFormat.value);
    }

    function FormatDate()
    {
        var elementToFormat;
        if(arguments.length>0)
        {
            if(arguments[0]!=null && arguments[0].length>0)
            {
                elementToFormat = $(arguments[0]);
            }
        }
        if(elementToFormat==null)
            elementToFormat = event.srcElement;
       
        elementToFormat.value = FormatDateValue(elementToFormat.value);
    }
    
    function AttachFieldAutoFormat()
    {
            if($("FieldDataTypes")==null) return;
            var fieldsDataTypeNVC = NameValueCollection.CreateFromString($F("FieldDataTypes"));
	        var keys = fieldsDataTypeNVC.GetKeys();
	        for(var m=0; m<keys.length; m++)
	        {
	            if($(keys[m])!=null)
	            {
	                switch(fieldsDataTypeNVC.Get(keys[m]).toLowerCase())
	                {
	                    case "datetime":
						case "smalldatetime":
						     Event.observe($(keys[m]), 'blur', FormatDate,false);
	                        break;
	                        
	                    case "int":
	                    case "long":
						      Event.observe($(keys[m]), 'blur', FormatNumber,false);
	                        break;
	                         
	                    case "double":
						case "single":
						case "float":
						case "decimal":
						      Event.observe($(keys[m]), 'blur', FormatNumber,false);
	                        break;  
	                    case "phone":
						      FormatPhone(keys[m]);
						      Event.observe($(keys[m]), 'blur', FormatPhone,false);
	                        break;
	                    case "sin":
	                    case "ssn":
	                          FormatSINSSN(keys[m]);
						      Event.observe($(keys[m]), 'blur', FormatSINSSN,false);
	                        break;
	                    case "money":
						      Event.observe($(keys[m]), 'blur', FormatNumber,false);
	                        break;  
	                   
	                    case "digit":
						      Event.observe($(keys[m]), 'blur', FormatNumber,false);
	                        break;  
	                 
	                } //end switch
	            } //end if 
	        }//end for
	}
	
	function IsNull(ITEM)
	{
        if(ITEM == null || ITEM == undefined)
        {
            return true;
        }
        return false;
    }
    
    function Trim(stringValue)
    {
        stringValue= LTrim(stringValue);
        stringValue = RTrim(stringValue);
        return stringValue;
    }
    function RTrim(stringValue)
    {
       if(stringValue.length>0)
	    {
    	    while(stringValue.charAt(stringValue.length-1)==" ")
                stringValue = stringValue.substring(0, stringValue.length-1);
        }
        return  stringValue;	
    }

    function LTrim(stringValue)
    {
	    if(stringValue.length>0)
	    {
    	    while(stringValue.charAt(0)==" ")
               stringValue = stringValue.replace(stringValue.charAt(0),"");
        }
        return stringValue;   
    }
    
    //FieldID=value1^showid1,showid2 || value2^showid3,showid4 $ FieldID2=value^showid
    function ToggleDisplayInit()
	{
	    this.toggleFieldsNVC = new NameValueCollection();
	    if($("ToggleFields")!=null)
	    {
	        toggleFieldsNVC = NameValueCollection.CreateFromString($F("ToggleFields"), "$");
	    }
	    var EventHandler = new Function('Caller', 'ToggleDisplay(this)');
	    if(toggleFieldsNVC.GetKeys().length>0)
	    {
	        for(var i=0; i<toggleFieldsNVC.GetKeys().length; i++)
	        {
	            var fieldID = Trim(toggleFieldsNVC.GetKeyAt(0));
	            if($(fieldID)!=null)
	            {
	                var fieldElement = $(fieldID);
	                switch(fieldElement.tagName.toLowerCase())
	                {
	                    case "select":
	                        //Form.Element.EventObserver(fieldElement, ToggleDisplay());
	                        fieldElement.attachEvent("onchange", EventHandler);
	                        fieldElement.fireEvent("onchange");
	                        break;
	                    case "input":
	                        var inputType = fieldElement.getAttribute("type").toLowerCase();
						    switch(inputType)
						    {
							    case "radio":
							    case "checkbox":
								    var radioElementName = fieldElement.getAttribute( "name" );
								    var radioElements = document.getElementsByName(radioElementName);
								    
								    for(var m=0; m<radioElements.length; m++)
								    {
									  //  if (radioElements[m].addEventListener) {
                                      //       radioElements[m].addEventListener("onclick", EventHandler);
                                      //      } else if (element.attachEvent) {
                                      //         radioElements[m].attachEvent('onclick', EventHandler);
                                      //      }
									    
									    radioElements[m].attachEvent("onclick", EventHandler);
									    if(m==0)
										    radioElements[m].fireEvent("onclick");
								    }
								    break;
						    }
	                        break;
	                }//end switch
	            }
	        }//end for
	    }
	}
	
	function ToggleDisplay( objXmlNode )
	{
		if( objXmlNode == null || typeof(objXmlNode) == "undefined" || objXmlNode.length == 0 || $(objXmlNode) == null )
		{
			objXmlNode = event.srcElement
		}
		var valueToggleNVC = new NameValueCollection();
		
		if(this.toggleFieldsNVC != null && this.toggleFieldsNVC.GetKeys().length>0)
		{
		    var fieldName =  objXmlNode.getAttribute( "name" );
		    if(this.toggleFieldsNVC.GetValue(fieldName)!=null)
		    {
		        var valueToggle =this.toggleFieldsNVC.GetValue(fieldName).replace(/\^/g, "=");
		        //alert(valueToggle);
		        valueToggleNVC = NameValueCollection.CreateFromString(valueToggle, "||");
		    }
		}
		
		if(valueToggleNVC.GetKeys().length>0)
		{
		    if( objXmlNode.getAttribute( "type" ) != null && (objXmlNode.getAttribute( "type" ) == "radio" || objXmlNode.getAttribute( "type" ) == "checkbox") )
		    {
			    var RadioGroup =  document.getElementsByName(objXmlNode.getAttribute( "name" ));
			    for( var i = 0; i < RadioGroup.length; i++ )
			    {
				    if(!RadioGroup[i].checked) 
					    ShowHideNodes( valueToggleNVC, RadioGroup[i].getAttribute("value"), false );
			    }
			    for( var i = 0; i < RadioGroup.length; i++ )
			    {
				    if(RadioGroup[i].checked) 
					    ShowHideNodes( valueToggleNVC, RadioGroup[i].getAttribute("value"), true );
			    }
		    }
		    else
		    {
			    EvaluateToggleNodes( valueToggleNVC, objXmlNode );
		    }
		}
	}

    function ShowHideNodes(valueToggleNVC, nodeValue, showNode)
    {
        for( var i = 0; i < valueToggleNVC.Keys.length; i++ )
		{
			if( valueToggleNVC.GetKeyAt(i) == nodeValue )
			{
				var idArray = valueToggleNVC.GetValues( valueToggleNVC.GetKeyAt( i ) );
				for( var j = 0; j < idArray.length; j++ )
				{
					if($(Trim(idArray[j]))!=null)
					{
					    if(true==showNode)
					        Element.show($(Trim(idArray[j])));
					    else
					        Element.hide($(Trim(idArray[j])));
					}
				}
			}
		}
    }
	
	function EvaluateToggleNodes( valueToggleNVC, objXmlNode )
	{
		for( var i = 0; i < valueToggleNVC.Keys.length; i++ )
		{
			if ( valueToggleNVC.GetKeyAt(i) != objXmlNode.getAttribute( "value" ) && valueToggleNVC.GetKeyAt(i) != "" )
			{
				var idArray = valueToggleNVC.GetValues( valueToggleNVC.GetKeyAt( i ) );
				for( var j = 0; j < idArray.length; j++ )
				{
				
					if($(Trim(idArray[j]))!=null)
					    Element.hide($(Trim(idArray[j])));
				}
			}
		}
		for( var i = 0; i < valueToggleNVC.Keys.length; i++ )
		{
			if( valueToggleNVC.GetKeyAt(i) == objXmlNode.getAttribute( "value" ) )
			{
				var idArray = valueToggleNVC.GetValues( valueToggleNVC.GetKeyAt( i ) );
				for( var j = 0; j < idArray.length; j++ )
				{
					if($(Trim(idArray[j]))!=null)
				        Element.show($(Trim(idArray[j])));
				}
			}
		}
	}
	
	 function ReloadList(arguments)
     {
        var argNVC = ParseArgument(arguments, "ListID=,URL=,Action=,SortColumn=,Goto=");
        argNVC.Add("ActionType", "Reload"+argNVC.Get("ListID"));
        var myAjax = new Ajax.Updater(
            {success: argNVC.Get("ListID")+"Area"},
            argNVC.Get("URL"), 
            {
                method:'Post',
                parameters:argNVC.URLEncode()
            });
    }
    
    function NoEalierThan()
    {
        if(arguments.length>1)
        {
            var curElement = $(arguments[0]);
            if($F(curElement)!="")
            {
                for(var m=1; m<arguments.length; m++)
                {
                    var compareElement = $(arguments[m]);       
                    if($F(compareElement) !="")
                    {
                       try{
                        var curElementDate = new Date( $F(curElement));
                        var compareElementDate = new  Date( $F(compareElement));
                        if(curElementDate < compareElementDate)
                        {
                            curElement.value = "";
                            alert(curElement.id +" can not be ealier than "+compareElement.id);
                            curElement.focus();
                        }
                        }catch(e){}
                    }
                }
            
            }
        }
    }
   
    function NoLaterThan()
    {
        if(arguments.length>1)
        {
            var curElement = $(arguments[0]);
            if($F(curElement)!="")
            {
                for(var m=1; m<arguments.length; m++)
                {
                    var compareElement = $(arguments[m]);
                    
                    if($F(compareElement) !="")
                    {
                       try{
                        var curElementDate = new Date( $F(curElement));
                        var compareElementDate = new  Date( $F(compareElement));
                        if(curElementDate > compareElementDate)
                        {
                            curElement.value = "";
                            alert(curElement.id +" can not be later than "+compareElement.id);
                            curElement.focus();
                        }
                        }catch(e){}
                    }
                }
            
            }
        }
    }
