﻿var $a;

function ASI_InputMask_OnInput(event, $b) {
    ASI_InputMask_ValidateContent($b);
    ASI_InputMask_PutCaretPos($b, ASI_InputMask_GetSelectionStart($b));
};

function ASI_InputMask_ValidateContent($b) {
    var $c = "";
    var $d = $b.value;
    var $e = $b.getAttribute("mask");
    var $f = $b.getAttribute("maskAlpha");
    var $g = $b.getAttribute("maskNumeric");
    var $h = $b.getAttribute("maskAlphaNumeric");
    var $i = $b.getAttribute("maskDisplay");
    for (i = 0;i < $e.length;i++) {
        if ($e.substring(i, (i + 1)) == $f) {
            while ($d.length > 0 && (!(($d.substring(0, 1).charCodeAt(0) >= 65 && $d.substring(0, 1).charCodeAt(0) <= 90) || ($d.substring(0, 1).charCodeAt(0) >= 97 && $d.substring(0, 1).charCodeAt(0) <= 122)))) {
                $d = $d.substring(1);
            };
            if ($d.length > 0) {
                $c += $d.substring(0, 1);
                $d = $d.substring(1);
            } else {
                $c += $i;
            } 
        } else if ($e.substring(i, (i + 1)) == $g) {
            while ($d.length > 0 && (!($d.substring(0, 1).charCodeAt(0) >= 48 && $d.substring(0, 1).charCodeAt(0) <= 57))) {
                $d = $d.substring(1);
            };
            if ($d.length > 0) {
                $c += $d.substring(0, 1);
                $d = $d.substring(1);
            } else {
                $c += $i;
            } 
        } else if ($e.substring(i, (i + 1)) == $h) {
            while ($d.length > 0 && (!(($d.substring(0, 1).charCodeAt(0) >= 65 && $d.substring(0, 1).charCodeAt(0) <= 90) || ($d.substring(0, 1).charCodeAt(0) >= 97 && $d.substring(0, 1).charCodeAt(0) <= 122) || ($d.substring(0, 1).charCodeAt(0) >= 48 && $d.substring(0, 1).charCodeAt(0) <= 57)))) {
                $d = $d.substring(1);
            };
            if ($d.length > 0) {
                $c += $d.substring(0, 1);
                $d = $d.substring(1);
            } else {
                $c += $i;
            } 
        } else {
            $c += $e.substring(i, (i + 1));
        } 
    };
    $b.value = $c;
};

function ASI_InputMask_ValidatePos($j, $b) {
    if ($b == null) {
        $b = $a;
    };
    ASI_InputMask_PutCaretPos($b, $j);
};

function ASI_InputMask_OnPaste($b) {
    var $d = window.clipboardData.getData("Text");
    var $j = ASI_InputMask_PlaceInMask($b, $d);
    $a = $b;
    window.setTimeout("ASI_InputMask_ValidatePos(" + $j + ")", 10);
    ASI_InputMask_StopEvent(event);
};

function ASI_InputMask_OnCut($b) {
    var $k = ASI_InputMask_GetSelectionStart($b);
    var $l = ASI_InputMask_GetSelectionEnd($b);
    if ($k + $l == $b.value.length) {
        window.clipboardData.setData("Text", $b.value);
        $b.value = "";
        ASI_InputMask_GotFocus($b);
    } else {
        var $i = $b.getAttribute("maskDisplay");
        window.clipboardData.setData("Text", $b.value.substring($k, ($k + 1)));
        ASI_InputMask_UpdateChar($b, $k, $i);
        ASI_InputMask_PutCaretPos($b, $k);
    };
    ASI_InputMask_StopEvent(event);
};

function ASI_InputMask_PlaceInMask($b, $d) {
    var $c = "";
    if ($d.length > 0) {
        var $e = $b.getAttribute("mask");
        var $f = $b.getAttribute("maskAlpha");
        var $g = $b.getAttribute("maskNumeric");
        var $h = $b.getAttribute("maskAlphaNumeric");
        var $i = $b.getAttribute("maskDisplay");
        var $m = ASI_InputMask_GetSelectionStart($b);
        $c += $b.value.substring(0, $m);
        for (i = $m; i < $e.length; i++) {
            if ($e.substring(i, (i + 1)) == $f) {
                while ($d.length > 0 && (!(($d.substring(0, 1).charCodeAt(0) >= 65 && $d.substring(0, 1).charCodeAt(0) <= 90) || ($d.substring(0, 1).charCodeAt(0) >= 97 && $d.substring(0, 1).charCodeAt(0) <= 122)))) {
                    $d = $d.substring(1);
                };
                if ($d.length > 0) {
                    $c += $d.substring(0, 1);
                    $d = $d.substring(1);
                } else {
                    break;
                } 
            } else if ($e.substring(i, (i + 1)) == $g) {
                while ($d.length > 0 && (!($d.substring(0, 1).charCodeAt(0) >= 48 && $d.substring(0, 1).charCodeAt(0) <= 57))) {
                    $d = $d.substring(1);
                };
                if ($d.length > 0) {
                    $c += $d.substring(0, 1);
                    $d = $d.substring(1);
                } else {
                    break;
                } 
            } else if ($e.substring(i, (i + 1)) == $h) {
                while ($d.length > 0 && (!(($d.substring(0, 1).charCodeAt(0) >= 65 && $d.substring(0, 1).charCodeAt(0) <= 90) || ($d.substring(0, 1).charCodeAt(0) >= 97 && $d.substring(0, 1).charCodeAt(0) <= 122) || ($d.substring(0, 1).charCodeAt(0) >= 48 && $d.substring(0, 1).charCodeAt(0) <= 57)))) {
                    $d = $d.substring(1);
                };
                if ($d.length > 0) {
                    $c += $d.substring(0, 1);
                    $d = $d.substring(1);
                } else {
                    break;
                } 
            } else {
                $c += $e.substring(i, (i + 1));
            } 
        };
        $c += $b.value.substring(i, $e.length);
    };
    $b.value = $c;
    return i;
};

function ASI_InputMask_LostFocus($b) {
    var $e = $b.getAttribute("mask");
    if ($e != null && $b.value == ASI_InputMask_GetDisplayMask($b, true)) {
        $b.value = "";
    } else {
        if ($b.value != null && $b.value.length > 0) {
            var $n = $b.getAttribute("RegexPattern");
            var $o = $b.getAttribute("OnRegexMatch");
            var $p = $b.getAttribute("OnRegexNoMatch");
            if ($n != null && $n.length > 0) {
                var re = new RegExp($n);
                if ($b.value.match(re)) {
                    if ($o != null && $o.length > 0) {
                        eval($o);
                    } 
                } else {
                    if ($p != null && $p.length > 0) {
                        eval($p);
                    } 
                } 
            } 
        } 
    }
};

function ASI_InputMask_KeyDown(event, $b) {
    var $e = $b.getAttribute("mask");
    if ($e != null && $e.length > 0) {
        var k = ASI_InputMask_GetKeyCode(event);
        if (k == 8 || (k >= 33 && k <= 40) || k == 46) {
            switch (k) {
                case 8: ASI_InputMask_KeyBackspace($b);
                    break;
                case 33: ASI_InputMask_PushPosBegin($b);
                    break;
                case 34: ASI_InputMask_PushPosEnd($b);
                    break;
                case 35: ASI_InputMask_PushPosEnd($b);
                    break;
                case 36: ASI_InputMask_PushPosBegin($b);
                    break;
                case 37: ASI_InputMask_PushPosLeft($b);
                    break;
                case 38: ASI_InputMask_PushPosLeft($b);
                    break;
                case 39: ASI_InputMask_PushPosRight($b);
                    break;
                case 40: ASI_InputMask_PushPosRight($b);
                    break;
                case 46: ASI_InputMask_KeyDelete($b);
                    break;
            };
            ASI_InputMask_StopEvent(event);
        } 
    }
};

function ASI_InputMask_KeyPress(event, $b) {
    var $e = $b.getAttribute("mask");
    if ($e != null && $e.length > 0) {
        var kc = ASI_InputMask_GetKeyCode(event);
        var ss = ASI_InputMask_GetSelectionStart($b);
        if (kc != 9) {
            if (ASI_InputMask_KeyIsValid($b, ss, kc)) {
                var ks = String.fromCharCode(kc);
                ASI_InputMask_UpdateChar($b, ss, ks);
                ASI_InputMask_PutCaretPos($b, ss + 1);
            } else {
                var $q = $b.getAttribute("OnWrongKeyPressed");
                if ($q != null && $q.length > 0) {
                    eval($q);
                } 
            };
            ASI_InputMask_StopEvent(event);
        } 
    }
};

function ASI_InputMask_StopEvent(event) {
    if (document.all) {
        event.returnValue = false;
    } else if (event.preventDefault) {
        event.preventDefault();
    }
};

function ASI_InputMask_StopEventPropagation(event) {
    event.cancelBubble = true;
    if (event.stopPropagation) {
        event.stopPropagation();
    }
};

function ASI_InputMask_GotFocus($b) {
    var $e = $b.getAttribute("mask");
    if ($e != null && $e.length > 0) {
        var $r = ASI_InputMask_GetSelectionStart($b);
        var $j = ASI_InputMask_GetValidPos($b, $r);
        if ($j != -1) {
            if ($b.value == null || $b.value.length == 0) {
                $b.value = ASI_InputMask_GetDisplayMask($b, true);
            };
            ASI_InputMask_PutCaretPos($b, $j);
        } else {
            $b.blur();
        } 
    }
};

function ASI_InputMask_OnClick(event, $b) {
    var $e = $b.getAttribute("mask");
    if ($e != null && $e.length > 0) {
        var $s = ASI_InputMask_GetSelectionStart($b);
        ASI_InputMask_PutCaretPos($b, $s);
    };
    ASI_InputMask_StopEventPropagation(event);
};

function ASI_InputMask_GetKeyCode(event) {
    return (event.keyCode ? event.keyCode : event.which ? event.which : event.charCode);
};

function ASI_InputMask_KeyDelete($b) {
    var $k = ASI_InputMask_GetSelectionStart($b);
    var $l = ASI_InputMask_GetSelectionEnd($b);
    if ($k == 0 && $l == $b.value.length) {
        $b.value = "";
        ASI_InputMask_GotFocus($b);
    } else {
        var $i = $b.getAttribute("maskDisplay");
        ASI_InputMask_UpdateChar($b, $k, $i);
        ASI_InputMask_PutCaretPos($b, $k + 1);
    }
};

function ASI_InputMask_KeyBackspace($b) {
    var $k = ASI_InputMask_GetSelectionStart($b);
    var $l = ASI_InputMask_GetSelectionEnd($b);
    if ($k == 0 && $l == $b.value.length) {
        $b.value = "";
        ASI_InputMask_GotFocus($b);
    } else {
        var $i = $b.getAttribute("maskDisplay");
        ASI_InputMask_UpdateChar($b, $k, $i);
        $j = ASI_InputMask_GetValidPos($b, $k - 1, true);
        ASI_InputMask_PutCaretPos($b, $j);
    }
};

function ASI_InputMask_PushPosLeft($b) {
    var k = ASI_InputMask_GetSelectionStart($b);
    if ((k - 1) >= 0) {
        ASI_InputMask_PutCaretPos($b, (k - 1), true);
    }
};

function ASI_InputMask_PushPosRight($b) {
    var k = ASI_InputMask_GetSelectionStart($b);
    if ((k + 1) < $b.value.length) {
        ASI_InputMask_PutCaretPos($b, (k + 1));
    }
};

function ASI_InputMask_PushPosBegin($b) {
    ASI_InputMask_PutCaretPos($b, 0);
};

function ASI_InputMask_PushPosEnd($b) {
    ASI_InputMask_PutCaretPos($b, $b.getAttribute("mask").length);
};

function ASI_InputMask_UpdateChar($b, $j, ks) {
    var x = $b.value;
    var $t = x.substring(0, $j);
    var $u = x.substring($j + 1, x.length);
    $b.value = $t + ks + $u;
};

function ASI_InputMask_PutCaretPos($b, $j, $v) {
    if ($j <= 0) {
        $j = 0;
    };
    if ($j >= $b.value.length - 1) { $j = $b.value.length - 1 };
    $j = ASI_InputMask_GetValidPos($b, $j, $v);
    if ($j != -1) {
        if ($b.createTextRange) {
            var $w = $b.createTextRange();
            $w.moveStart("character", $j);
            $w.moveEnd('character', $j + 1 - $b.value.length);
            $w.select();
        } else if ($b.setSelectionRange) {
            $b.focus();
            $b.setSelectionRange($j, $j + 1);
        } 
    } else {
        $b.blur();
    }
};

function ASI_InputMask_GetValidPos($b, $j, $v) {
    if ($v == null) {
        $v = false;
    };
    if (ASI_InputMask_PosIsValid($b, $j)) {
        return $j;
    } else {
        var $e = $b.getAttribute("mask");
        if ($v) {
            while ($j >= 0) {
                if (ASI_InputMask_PosIsValid($b, $j)) {
                    return $j;
                };
                $j--;
            };
            while ($j < $e.length - 1) {
                if (ASI_InputMask_PosIsValid($b, $j)) {
                    return $j;
                };
                $j++;
            } 
        } else {
            while ($j < $e.length - 1) {
                if (ASI_InputMask_PosIsValid($b, $j)) {
                    return $j;
                };
                $j++;
            };
            while ($j >= 0) {
                if (ASI_InputMask_PosIsValid($b, $j)) {
                    return $j;
                };
                $j--;
            } 
        };
        return -1;
    }
};

function ASI_InputMask_PosIsValid($b, $j) {
    var $e = $b.getAttribute("mask");
    var m = $e.split("");
    if (m.length > $j) {
        if (m[$j] != null) {
            var $f = $b.getAttribute("maskAlpha");
            var $g = $b.getAttribute("maskNumeric");
            var $h = $b.getAttribute("maskAlphaNumeric");
            if (m[$j] == $f || m[$j] == $g || m[$j] == $h) {
                return true;
            } else {
                return false;
            } 
        } else {
            return false;
        } 
    } else {
        return false;
    }
};

function ASI_InputMask_KeyIsValid($b, $j, $x) {
    var m = $b.getAttribute("mask").split("");
    if (m.length > $j) {
        var $y = m[$j];
        var $z = $b.getAttribute("maskAlpha");
        var $A = $b.getAttribute("maskNumeric");
        var $B = $b.getAttribute("maskAlphaNumeric");
        if ($y == $z) {
            if (($x >= 65 && $x <= 90) || ($x >= 97 && $x <= 122)) {
                return true;
            } else {
                return false;
            } 
        } else if ($y == $A) {
            if ($x >= 48 && $x <= 57) {
                return true;
            } else {
                return false;
            } 
        } else if ($y == $B) {
            if (($x >= 48 && $x <= 57) || ($x >= 65 && $x <= 90) || ($x >= 97 && $x <= 122)) {
                return true;
            } else {
                return false;
            } 
        } else {
            return false;
        } 
    } else {
        return false;
    }
};

function ASI_InputMask_GetSelectionStart($b) {
    if ($b.createTextRange) {
        $C = document.selection.createRange().duplicate();
        $C.moveEnd("character", $b.value.length);
        $j = $b.value.lastIndexOf($C.text);
        if ($C.text == "") $j = $b.value.length;
        return $j;
    } else {
        return $b.selectionStart;
    }
};

function ASI_InputMask_GetSelectionEnd($b) {
    if ($b.createTextRange) {
        $C = document.selection.createRange().duplicate();
        $C.moveStart("character", -$b.value.length);
        $j = $C.text.length;
        return $j;
    } else {
        return $b.selectionEnd;
    }
};

function ASI_InputMask_GetDisplayMask($b, $D) {
    var $e = $b.getAttribute("mask");
    if ($D == true) {
        var f = "";
        var $f = $b.getAttribute("maskAlpha");
        var $g = $b.getAttribute("maskNumeric");
        var $h = $b.getAttribute("maskAlphaNumeric");
        var $i = $b.getAttribute("maskDisplay");
        var m = $e.split("");
        for (mi = 0; mi < m.length; mi++) {
            if (m[mi] == $f || m[mi] == $g || m[mi] == $h) {
                f += $i;
            } else {
                f += m[mi];
            } 
        };
        return f;
    } else {
        return $e;
    } 
}
