function PCSMaskBox_LostFocus($a){
    if($a.mask!=null&&$a.value==PCSMaskBox_GetDisplayMask($a,true)){
		if($a.AlwaysShowMask.toLowerCase()=='false'){
			$a.value="";
		}
    }
    else{
        if($a.value!=null&&$a.value.length>0){
            if($a.RegexPattern!=null&&$a.RegexPattern.length>0){
                var re=new RegExp($a.RegexPattern);
                if($a.value.match(re)){
                    if($a.OnRegexMatch!=null&&$a.OnRegexMatch.length>0){
                        eval($a.OnRegexMatch);
                        
                    }
                    
                }
                else{
                    if($a.OnRegexNoMatch!=null&&$a.OnRegexNoMatch.length>0){
                        eval($a.OnRegexNoMatch);
                        
                    }
                    
                }
                
            }
            
        }
        
    }
    
}
;
function PCSMaskBox_KeyDown($a){
    if($a.mask!=null&&$a.mask.length>0){
        var k=PCSMaskBox_GetKeyCode();
        if(k==8||(k>=33&&k<=40)||k==46){
            switch(k){
                case 8:
					PCSMaskBox_KeyBackspace($a);
					if(typeof(setDirty)=='function') setDirty();
					break;
                case 33:PCSMaskBox_PushPosBegin($a);
                break;
                case 34:PCSMaskBox_PushPosEnd($a);
                break;
                case 35:PCSMaskBox_PushPosEnd($a);
                break;
                case 36:PCSMaskBox_PushPosBegin($a);
                break;
                case 37:PCSMaskBox_PushPosLeft($a);
                break;
                case 38:
					if(!eval($a.FormatAsDate.toLowerCase())){
						PCSMaskBox_PushPosLeft($a);
					}else{
						if(!PCSMaskBox_isDate($a.value)){
							$a.value = convertDate2(new Date(getTodaysDate()));
						}else{
							var d = new Date($a.value);
							d.setDate(d.getDate() + 1);
							$a.value = convertDate2(d);
						}
						PCSMaskBox_PushPosBegin($a)
						if(typeof(setDirty)=='function') setDirty();
					}
                break;
                case 39:PCSMaskBox_PushPosRight($a);
                break;
                case 40:
					if(!eval($a.FormatAsDate.toLowerCase())){
						PCSMaskBox_PushPosRight($a);
					}else{
						if(!PCSMaskBox_isDate($a.value)){
							$a.value = convertDate2(new Date(getTodaysDate()));
						}else{
							var d = new Date($a.value);
							d.setDate(d.getDate() - 1);
							$a.value = convertDate2(d);
						}
						PCSMaskBox_PushPosBegin($a)
						if(typeof(setDirty)=='function') setDirty();
					}
                break;
                case 46:
					PCSMaskBox_KeyDelete($a);
					if(typeof(setDirty)=='function') setDirty();
					break;
            }
            event.returnValue=false;
            
        }
        
    }
    
}
;
function PCSMaskBox_KeyPress($a){
    if($a.mask!=null&&$a.mask.length>0){
        var kc=PCSMaskBox_GetKeyCode();
        var ss=PCSMaskBox_GetSelectionStart($a);
        if(PCSMaskBox_KeyIsValid($a,ss,kc)){
            var ks=String.fromCharCode(kc);
            PCSMaskBox_UpdateChar($a,ss,ks);
            PCSMaskBox_PutCaretPos($a,ss+1);
            
        }
        else{
            var $b=$a.OnWrongKeyPressed;
            if($b!=null&&$b.length>0){
                eval($b);
                
            }
            
        }
        event.returnValue=false;
        
    }
    if(typeof(setDirty)=='function') setDirty();
}
;
function PCSMaskBox_GotFocus($a){
    if($a.mask!=null&&$a.mask.length>0){
        var $z=PCSMaskBox_GetValidPos($a,0);
        if($z!=-1){
            if($a.value==null||$a.value.length==0){
                $a.value=PCSMaskBox_GetDisplayMask($a,true);
            }
            PCSMaskBox_PutCaretPos($a,0);
            
        }
        else{
            $a.blur();
        }
        
    }
    
}
;
function PCSMaskBox_InitMask($a){
	if($a.mask!=null&&$a.mask.length>0){
        var $z=PCSMaskBox_GetValidPos($a,0);
        if($z!=-1){
			if($a.value==null||$a.value.length==0){
                $a.value=PCSMaskBox_GetDisplayMask($a,true);
                
            }
        }
    }
}
;
function PCSMaskBox_OnClick($a){
    if($a.mask!=null&&$a.mask.length>0){
        var $d=PCSMaskBox_GetSelectionStart($a);
        PCSMaskBox_PutCaretPos($a,$d);
        
    }
    
}
;
function PCSMaskBox_GetKeyCode(){
    var $e=(document.layers)?$f.which:event.keyCode;
    return $e;
    
}
;
function PCSMaskBox_KeyDelete($a){
	//IF the selection is the entire contents then clear the entire box
	/*
	if(PCSMaskBox_GetSelectionStart($a) + PCSMaskBox_GetSelectionEnd($a) == $a.value.length){
		$a.value='';
		PCSMaskBox_GotFocus($a);
		return;
	}*/
    var $z=PCSMaskBox_GetSelectionStart($a);
    PCSMaskBox_UpdateChar($a,$z,$a.maskDisplay);
    PCSMaskBox_PutCaretPos($a,$z+1);
    
}
;
function PCSMaskBox_KeyBackspace($a){
    var $z=PCSMaskBox_GetSelectionStart($a);
    $z=PCSMaskBox_GetValidPos($a,$z,true);
    PCSMaskBox_UpdateChar($a,$z,$a.maskDisplay);
    PCSMaskBox_PutCaretPos($a,--$z,true);
    
}
;
function PCSMaskBox_PushPosLeft($a){
    var k=PCSMaskBox_GetSelectionStart($a);
    if((k-1)>=0){
        PCSMaskBox_PutCaretPos($a,(k-1),true);
        
    }
    
}
;
function PCSMaskBox_PushPosRight($a){
    var k=PCSMaskBox_GetSelectionStart($a);
    if((k+1)<$a.value.length){
        PCSMaskBox_PutCaretPos($a,(k+1));
        
    }
    
}
;
function PCSMaskBox_PushPosBegin($a){
    PCSMaskBox_PutCaretPos($a,0);
    
}
;
function PCSMaskBox_PushPosEnd($a){
    PCSMaskBox_PutCaretPos($a,$a.mask.length);
    
}
;
function PCSMaskBox_UpdateChar($a,$z,ks){
    var x=$a.value;
    var $g=x.substring(0,$z);
    var $h=x.substring($z+1,x.length);
    $a.value=$g+ks+$h;
    
}
;
function PCSMaskBox_PutCaretPos($a,$z,$i){
    if($z<=0){
        $z=0;
        
    }
    ;
    if($z>=$a.value.length-1){
        $z=$a.value.length-1
    }
    ;
    $z=PCSMaskBox_GetValidPos($a,$z,$i);
    if($z!=-1){
        if($a.createTextRange){
            var r=$a.createTextRange();
            r.moveStart("character",$z);
            r.moveEnd('character',$z+1);
            r.moveEnd('character',$z+1-$a.value.length);
            r.select();
            
        }
        
    }
    else{
        $a.blur();
        
    }
    
}
;
function PCSMaskBox_GetValidPos($a,$z,$i){
    if($i==null){
        $i=false;
        
    }
    ;
    if(PCSMaskBox_PosIsValid($a,$z)){
        return $z;
        
    }
    else{
        if($i){
            while($z>=0){
                if(PCSMaskBox_PosIsValid($a,$z)){
                    return $z;
                    
                }
                ;
                $z--;
                
            }
            ;
            while($z<$a.mask.length-1){
                if(PCSMaskBox_PosIsValid($a,$z)){
                    return $z;
                    
                }
                ;
                $z++;
                
            }
            
        }
        else{
            while($z<$a.mask.length-1){
                if(PCSMaskBox_PosIsValid($a,$z)){
                    return $z;
                    
                }
                ;
                $z++;
                
            }
            ;
            while($z>=0){
                if(PCSMaskBox_PosIsValid($a,$z)){
                    return $z;
                    
                }
                ;
                $z--;
                
            }
            
        }
        ;
        return -1;
        
    }
    
}
;
function PCSMaskBox_PosIsValid($a,$z){
    var m=$a.mask.split("");
    if(m.length>$z){
        if(m[$z]!=null){
            if(m[$z]==$a.maskAlpha||m[$z]==$a.maskNumeric||m[$z]==$a.maskAlphaNumeric){
                return true;
                
            }
            else{
                return false;
                
            }
            
        }
        else{
            return false;
            
        }
        
    }
    else{
        return false;
        
    }
    
}
;
function PCSMaskBox_KeyIsValid($a,$z,$j){
    var m=$a.mask.split("");
    if(m.length>$z){
        var $k=m[$z];
        if($k==$a.maskAlpha){
            if(($j>=65&&$j<=90)||($j>=97&&$j<=122)){
                return true;
                
            }
            else{
                return false;
                
            }
            
        }
        else if($k==$a.maskNumeric){
            if($j>=48&&$j<=57){
                return true;
                
            }
            else{
                return false;
                
            }
            
        }
        else if($k==$a.maskAlphaNumeric){
            if(($j>=48&&$j<=57)||($j>=65&&$j<=90)||($j>=97&&$j<=122)){
                return true;
                
            }
            else{
                return false;
                
            }
            
        }
        else{
            return false;
            
        }
        
    }
    else{
        return false;
        
    }
    
}
;
function PCSMaskBox_GetSelectionStart($a){
    if($a.createTextRange){
        $l=document.selection.createRange().duplicate();
        $l.moveEnd("character",$a.value.length);
        $z=$a.value.lastIndexOf($l.text);
        if($l.text=="")$z=$a.value.length;
        return $z;
        
    }
    else{
        return $a.selectionStart;
        
    }
    
}
;
function PCSMaskBox_GetSelectionEnd($a){
    if($a.createTextRange){
        $l=document.selection.createRange().duplicate();
        $l.moveStart("character",-$a.value.length);
        $z=$l.text.length;
        return $z;
        
    }
    else{
        return $a.selectionEnd;
        
    }
    
}
;
function PCSMaskBox_GetDisplayMask($a,$m){
    if($m==true){
        var f="";
        var m=$a.mask.split("");
        for(mi=0;
        mi<m.length;
        mi++){
            if(m[mi]==$a.maskAlpha||m[mi]==$a.maskNumeric||m[mi]==$a.maskAlphaNumeric){
                f+=$a.maskDisplay;
                
            }
            else{
                f+=m[mi];
                
            }
            
        }
        ;
        return f;
        
    }
    else{
        return $a.mask;
        
    }
    
};
function PCSMaskBox_isDate(dateStr,showAlert) {

	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var matchArray = dateStr.match(datePat); // is the format ok?
	
	if(dateStr == '') return true;
	
	if (matchArray == null) {
		if(showAlert) alert("Please enter date using the mm/dd/yyyy format.");
		return false;
	}

	month = matchArray[1]; // p@rse date into variables
	day = matchArray[3];
	year = matchArray[5];

	if (month < 1 || month > 12) { // check month range
		if(showAlert) alert("Month must be between 1 and 12.");
		return false;
	}

	if (day < 1 || day > 31) {
		if(showAlert) alert("Day must be between 1 and 31.");
		return false;
	}

	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		if(showAlert) alert("Month "+month+" does not have 31 days!")
		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)) {
			if(showAlert) alert("February " + year + " does not have " + day + " days!");
			return false;
		}
	}
	return true;
}
