/*
	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);
