/*
	Masked Input plugin for jQuery
	Copyright (c) 2007-2009 Josh Bush (digitalbush.com)
	Licensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license) 
	Version: 1.2.2 (03/09/2009 22:39:06)
*/
(function(a){
    var c=(a.browser.msie?"paste":"input")+".mask";
    var b=(window.orientation!=undefined);
    a.mask={
        definitions:{
            "9":"[0-9]",
            a:"[A-Za-z]",
            "*":"[A-Za-z0-9]"
        }
    };

a.fn.extend({
    caret:function(e,f){
        if(this.length==0){
            return
        }
        if(typeof e=="number"){
            f=(typeof f=="number")?f:e;
            return this.each(function(){
                if(this.setSelectionRange){
                    this.focus();
                    this.setSelectionRange(e,f)
                    }else{
                    if(this.createTextRange){
                        var g=this.createTextRange();
                        g.collapse(true);
                        g.moveEnd("character",f);
                        g.moveStart("character",e);
                        g.select()
                        }
                    }
            })
    }else{
    if(this[0].setSelectionRange){
        e=this[0].selectionStart;
        f=this[0].selectionEnd
        }else{
        if(document.selection&&document.selection.createRange){
            var d=document.selection.createRange();
            e=0-d.duplicate().moveStart("character",-100000);
            f=e+d.text.length
            }
        }
    return{
    begin:e,
    end:f
}
}
},
unmask:function(){
    return this.trigger("unmask")
    },
mask:function(j,d){
    if(!j&&this.length>0){
        var f=a(this[0]);
        var g=f.data("tests");
        return a.map(f.data("buffer"),function(l,m){
            return g[m]?l:null
            }).join("")
        }
        d=a.extend({
        placeholder:"_",
        completed:null
    },d);
    var k=a.mask.definitions;
    var g=[];
    var e=j.length;
    var i=null;
    var h=j.length;
    a.each(j.split(""),function(m,l){
        if(l=="?"){
            h--;
            e=m
            }else{
            if(k[l]){
                g.push(new RegExp(k[l]));
                if(i==null){
                    i=g.length-1
                    }
                }else{
            g.push(null)
            }
        }
    });
return this.each(function(){
    var r=a(this);
    var m=a.map(j.split(""),function(x,y){
        if(x!="?"){
            return k[x]?d.placeholder:x
            }
        });
var n=false;
var q=r.val();
    r.data("buffer",m).data("tests",g);
    function v(x){
    while(++x<=h&&!g[x]){}
    return x
    }
    function t(x){
    while(!g[x]&&--x>=0){}
    for(var y=x;y<h;y++){
        if(g[y]){
            m[y]=d.placeholder;
            var z=v(y);
            if(z<h&&g[y].test(m[z])){
                m[y]=m[z]
                }else{
                break
            }
        }
    }
    s();
r.caret(Math.max(i,x))
}
function u(y){
    for(var A=y,z=d.placeholder;A<h;A++){
        if(g[A]){
            var B=v(A);
            var x=m[A];
            m[A]=z;
            if(B<h&&g[B].test(x)){
                z=x
                }else{
                break
            }
        }
    }
}
function l(y){
    var x=a(this).caret();
    var z=y.keyCode;
    n=(z<16||(z>16&&z<32)||(z>32&&z<41));
    if((x.begin-x.end)!=0&&(!n||z==8||z==46)){
        w(x.begin,x.end)
        }
        if(z==8||z==46||(b&&z==127)){
        t(x.begin+(z==46?0:-1));
        return false
        }else{
        if(z==27){
            r.val(q);
            r.caret(0,p());
            return false
            }
        }
}
function o(B){
    if(n){
        n=false;
        return(B.keyCode==8)?false:null
        }
        B=B||window.event;
    var C=B.charCode||B.keyCode||B.which;
    var z=a(this).caret();
    if(B.ctrlKey||B.altKey||B.metaKey){
        return true
        }else{
        if((C>=32&&C<=125)||C>186){
            var x=v(z.begin-1);
            if(x<h){
                var A=String.fromCharCode(C);
                if(g[x].test(A)){
                    u(x);
                    m[x]=A;
                    s();
                    var y=v(x);
                    a(this).caret(y);
                    if(d.completed&&y==h){
                        d.completed.call(r)
                        }
                    }
            }
    }
}
return false
}
function w(x,y){
    for(var z=x;z<y&&z<h;z++){
        if(g[z]){
            m[z]=d.placeholder
            }
        }
    }
function s(){
    return r.val(m.join("")).val()
    }
    function p(y){
    var z=r.val();
    var C=-1;
    for(var B=0,x=0;B<h;B++){
        if(g[B]){
            m[B]=d.placeholder;
            while(x++<z.length){
                var A=z.charAt(x-1);
                if(g[B].test(A)){
                    m[B]=A;
                    C=B;
                    break
                }
            }
            if(x>z.length){
            break
        }
    }else{
        if(m[B]==z[x]&&B!=e){
            x++;
            C=B
            }
        }
}
if(!y&&C+1<e){
    r.val("");
    w(0,h)
    }else{
    if(y||C+1>=e){
        s();
        if(!y){
            r.val(r.val().substring(0,C+1))
            }
        }
}
return(e?B:i)
}
if(!r.attr("readonly")){
    r.one("unmask",function(){
        r.unbind(".mask").removeData("buffer").removeData("tests")
        }).bind("focus.mask",function(){
        q=r.val();
        var x=p();
        s();
        setTimeout(function(){
            if(x==j.length){
                r.caret(0,x)
                }else{
                r.caret(x)
                }
            },0)
    }).bind("blur.mask",function(){
    p();
    if(r.val()!=q){
        r.change()
        }
    }).bind("keydown.mask",l).bind("keypress.mask",o).bind(c,function(){
    setTimeout(function(){
        r.caret(p(true))
        },0)
    })
}
p()
})
}
})
})(jQuery);
