/**

Author			: Fabio Bonacina
Version			: 1.1.11
Created			: 21/08/2008
Last Modified	: 06/05/2009
Description		: extension of the jQuery Object
Modifications	: 
	- added select chains management
	- fixed select chains (child select now fires event change after options remake)
	- fixed attachValidator (opt is now declared in the right way !!)
	- fixed detachValidator
	- added include on demand plugin
	- added enabled/disabled state to the activityBar
	- added $.string() prototype functions
	- added str_random(l): returns a random string of l characters
	- fixed visualization of the activityBar
	- modified function activityRemoveMessage(id): it is now possible to clear all messages (id='all')
	- deleted functions activityHide() and activityShow()
	- added masked input plugin
	- modified validation of dates (now 00/00/0000 dates are accepted)
	- added onParentChange parameter to selectChain()
ToDo			: 

**/

jQuery.extend({
	curtainDown: function(params){
		var options={
			 color: "#000"
			,speed: 500
			,opacity: 0.8
			,z_index: 999
			,callback: null
		}
		op = jQuery.extend(options, params);
		var obj=$("#ph_curtain");
		if(obj.length==0){
	        obj=jQuery("<div class='select-free'><!--[if lte IE 6.5]><iframe></iframe><![endif]--></div>").attr({
	                id: "ph_curtain"
	                ,speed: op.speed
	            }).css({
	             background: op.color
	            ,position: "absolute"
	            ,left: "0"
	            ,top: "0"
	            ,opacity: op.opacity
	            ,width: $(window).width()/*"100%"*/
	            ,height: $(window).height()/*+"px"*/
	            ,zIndex: op.z_index
	         });
			obj.appendTo(document.body)
		}
		return obj.show(op.callback);
	}
	,curtainUp: function(callback){
        var curtain = $("#ph_curtain");
		if(curtain.length==0)return false;		
        curtain.hide(callback);
	}
	,curtainToggle:function(params){
		var curtain=$("#ph_curtain");
		if(curtain.length==0)return false;
		curtain.toggle(params.callback);
	}
});

jQuery.extend({
	 _aB : $("#ph_activity_bar")
	,_aM : $("#ph_activity_message")
	,_aMC : 0

	,activityAddMessage: function(message){
		$._aMC++;
		if($._aMC==1){
			$.curtainDown({
				 opacity:0.5
				,color:"#fcfcfc"
				,speed:0
				,z_index:6000
			});
			if($._aB.length==0){
				$._aB=jQuery("<div></div>").attr({id: "ph_activity_bar"});
				$._aM=jQuery("<div></div>").attr({id: "ph_activity_message"});
				$._aM.appendTo($._aB);
				$._aB.appendTo(document.body);
			}
			$._aB.center({vertical:true,horizontal:false}).show();
		}
		var ID=str_random();		
		$("<span></span>").attr({id:ID}).html(message).appendTo($._aM);
		//alert("ADDED: "+ID+'\n'+message);
		return ID;
	}
	,activityRemoveMessage: function(id){	
		if(id=="all"){
			$._aM.empty();
			$._aMC=0;
		}else{
			$("#"+id,$._aM).remove();
			$._aMC--;
		}
		//alert("REMOVED: "+id+'\n'+$._aMC);
		if($._aMC==0){$.curtainUp();$._aB.hide();return true;}
	}
});

jQuery.fn.center = function(params) {
	var options = {
		 vertical: true
		,horizontal: true
		,body:true
	}
	op = jQuery.extend(options, params);

	return this.each(function(){
		var _parent=(op.body)?$(window):$(this).parent().get(0);
		var _parentP=(op.body)?{top:0,left:0}:_parent.position();
		var _parentDH=_parent.height()/2;
		var _parentDW=_parent.width()/2;
		var _thisDH=$(this).height()/2;
		var _thisDW=$(this).width()/2;
		$(this).css({position:"absolute"});
		if(op.vertical)$(this).css({top:_parentP.top+_parentDH-_thisDH+"px"});
		if(op.horizontal)$(this).css({left:_parentP.left+_parentDW-_thisDW+"px"});
	})
};
jQuery.fn.detachValidator=function(){
	if(this.attr("validator")=="attached"){
			this.attr({"validator":""});
	}
	this.each(function(){
	}).unbind();
	return this;
}
jQuery.fn.attachValidator=function(params){
	var options={
		 returnedvalue:null
		,noerrors_callback:null
		,noerrors_class:null
		,errors_callback:null
		,errors_class:null
	}
	// controllo che non sia già bindato il validatore
	if(this.attr("validator")=="attached"){
		return this;
	}
	// mi segno che il validatore è stato bindato
	this.attr({validator:"attached"});
	
	var op=jQuery.extend(options,params);
	// settaggio classi di default
	if(op.errors_class==null){
		op.errors_class="errors";
	}
	if(op.noerrors_class==null){
		op.errors_class="";
	}

	function validateField(field) {
		try{
			var error = false;
			// required fields
			switch(field.tagName.toLowerCase()){
				case "select":
					if(!$(field).hasClass("required")) return true;
					if(!field.value.length) error =true;
					break;
				case "textarea":
					if(!$(field).hasClass("required")) return true;
					if(field.value.toLowerCase()=="<br>" || !field.value.length) error =true;
					//alert(field.value+"\n\n"+field.innerHTML);
					break;
				default:
					if ($(field).hasClass("required")) {
						if (!$(field).val().length)
							error = true;
					}
					// numeric fields
					if ($(field).hasClass("numeric")) {
						if (!/^[0-9]*$/.test($(field).val()))
							error = true;
					}
					// numeric_id fields (>0)
					if ($(field).hasClass("numeric_id")) {
						if (!/^[0-9]*$/.test($(field).val())){
							error = true;
						}else{
							if(!($(field).val()>0))
								error = true;
						}
					}
					// characters (letters)
					if ($(field).hasClass("character")) {
						if (!/^[a-zA-ZöÖäÄåÅ]*$/.test($(field).val()))
							error = true;
					}
					// emails
					if ($(field).hasClass("email")) {
						if (!/^[a-zA-Z0-9]{1}([\._a-zA-Z0-9-]+)(\.[_a-zA-Z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+){1,3}$/.test($(field).val()))
							error = true;
					}
					// dates
					if ($(field).hasClass("date")){	
						var isDate = function(y, m, d){if(typeof y == "string" && m instanceof RegExp && d){if(!m.test(y)) return 1;y=RegExp["$" + d.y],m=RegExp["$" + d.m],d=RegExp["$" + d.d];}d=Math.abs(d)||0,m=Math.abs(m)||0,y=Math.abs(y)||0;return arguments.length!=3?1:d<1||d>31?2:m<1||m>12?3:/4|6|9|11/.test(m)&&d==31?4:m==2&&(d>((y=!(y%4)&&(y%1e2)||!(y%4e2))?29:28))?5+!!y:0;};
						var isDateErrors=function(x){return x==0?"":x==1?"Formato della data errato":x==2?"Giorno non valido":x==3?"Mese non valido":x==4?"Il mese inserito ha solo 30 giorni":x==5?"Febbraio ha solo 28 giorni":x==6?"29giorni":"";}
						if(!$(field).hasClass("required") && $(field).val().substr(0,8)=="00000000"){
							error = false
						}else{
							error = (isDate($(field).val().substr(0,8), /^([0-9]{1,4})([0-9]{1,2})([0-9]{1,2})$/, {d: 3, m: 2, y: 1})!=0);
							$(field).parents("fieldset").attr("err_text",isDateErrors(error));
						}
					}
			}
			if (error) {
				$(field).parents("fieldset").addClass(op.errors_class);
				$(field).parents("fieldset").removeClass(op.noerrors_class);
			} else {
				$(field).parents("fieldset").removeClass(op.errors_class);
				$(field).parents("fieldset").addClass(op.noerrors_class);
			}
			
			return !error;
		}catch(e){
			alert("ERRORS\nvalidateField(): "+$(field).attr("id"));
			return false
		}
	}

	return this.each(function(){
		this.params=op;
		//-- checking form's submit()
		$(this).submit(function (e) {
			var validationError = false;
			$("fieldset input, fieldset select, fieldset textarea", this).each( function() {
				if ($(this).attr("class")) {
					if (!validateField(this))
						validationError = true;
				}
			});
			if(!validationError){
				if(typeof this.params.noerrors_callback=="function") this.params.noerrors_callback(e);
				return (this.params.returnedvalue!=null)?this.params.returnedvalue:!validationError;
			}else{
				if(typeof this.params.errors_callback=="function") this.params.errors_callback(e);
				return false;
			}
		});
	
		//-- check every field as the user leaves the field
		$("fieldset input, fieldset select, fieldset textarea", this).each( function() {
			if ($(this).attr("class")) {
				$(this).blur( function() { validateField(this) } );
    			}
		});		
	});	
};

/*	Funzionalità per le checkbox	*/
jQuery.fn.extend({
	 check:function(){
		return this.each(function(){ 
			if($(this).attr("checked")==false)$(this).trigger("click",["triggered"])
		});
	}
	,uncheck:function(){
		return this.each(function(){
			if($(this).attr("checked")==true)$(this).trigger("click",["triggered"])
		});
	}
	,toggleCheck:function(){
		return this.each(function(){
			$(this).trigger("click",["triggered"])
		});
	}
});
/*	Visualizza le scelte di una select(child) sulla base della scelta fatta in un'altra select(parent)	*/
/*
	params.parentId: id della select padre
	params.parentattribute: l'attributo che contiene il riferimento al valore della select padre
	params.childattribute: l'atttributo che contiene il valore selezionato
	params.onParentChange: funzione eseguita al posto di quella di default sulla modifica della selezione della select padre
	
	alla fine della modifica della child_select viene inviato l'evento phChained
*/
(function ($) {
	$.fn.selectChain = function(params){
		var defaults = {
			 parentAttribute : "parent"
			,childAttribute :  "value"
			,onParentChange : null
		}
		var opt = $.extend(defaults, params);
		return this.each(function(){
			var $$that = $(this);
			var optionsArray = new Array();
			
			if(typeof opt.onParentChange != 'function'){
				$$that.children('option').each(function(){
					var parentid = $(this).attr(opt.parentAttribute);
					if(!optionsArray[parentid])optionsArray[parentid] = new Array();
					optionsArray[parentid][$(this).attr(opt.childAttribute)] = $(this).html();
				});
			}
			
			$('#' + opt.parentId).bind('change keypress', function() {
				$$that.empty();
				var value = $(this).val();
				if(typeof opt.onParentChange != 'function'){
					if(optionsArray[value])
						for(var i in optionsArray[value]){
							$('<option></option>')
							.attr({
								value : i
							})
							.html(optionsArray[value][i])
							.appendTo($$that);
						}
					$(this).trigger('phChained');
					$$that.trigger('change');
				}else{
					opt.onParentChange($(this), $$that);
				}
			});
			
			$('#' + opt.parentId).trigger('change');
		});
	};
})(jQuery);	

/*
Include on demand plug-in

Usage:	$.include(String | Array url, Function callback);
Examples:

$.include(['file01.js','file02.js']);

$.ImportBasePath = '/foo/test/';

$.include(['file01.js','file02.css']);

http://plugins.jquery.com/project/includedemand
*/
(function($){$.extend({ImportBasePath:'',fileinfo:function(data){data=data.replace(/^\s|\s$/g,"");var m;if(/\.\w+$/.test(data)){m=data.match(/([^\/\\]+)\.(\w+)$/);if(m){if(m[2]=='js'){return{filename:m[1],ext:m[2],tag:'script'}}else if(m[2]=='css'){return{filename:m[1],ext:m[2],tag:'link'}}else{return{filename:m[1],ext:m[2],tag:null}}}else{return{filename:null,ext:null}}}else{m=data.match(/([^\/\\]+)$/);if(m){return{filename:m[1],ext:null,tag:null}}else{return{filename:null,ext:null,tag:null}}}},fileExist:function(filename,filetype,attrCheck){var elementsArray=document.getElementsByTagName(filetype);for(var i=0;i<elementsArray.length;i++){if(elementsArray[i].getAttribute(attrCheck)==$.ImportBasePath+filename){return true}}return false},createElement:function(filename,filetype){switch(filetype){case'script':if(!$.fileExist(filename,filetype,'src')){var scriptTag=document.createElement(filetype);scriptTag.setAttribute('language','javascript');scriptTag.setAttribute('type','text/javascript');scriptTag.setAttribute('src',$.ImportBasePath+filename);return scriptTag}else{return false}break;case'link':if(!$.fileExist(filename,filetype,'href')){var styleTag=document.createElement(filetype);styleTag.setAttribute('type','text/css');styleTag.setAttribute('rel','stylesheet');styleTag.setAttribute('href',$.ImportBasePath+filename);return styleTag}else{return false}break;default:return false;break}},cssReady:function(index,callback){function check(){if(document.styleSheets[index]){if(typeof callback=='function'){callback()}window.clearInterval(checkInterval)}}var checkInterval=window.setInterval(check,200)},include:function(file,callback){var headerTag=document.getElementsByTagName('head')[0];var fileArray=[];typeof file=='string'?fileArray[0]=file:fileArray=file;for(var i=0;i<fileArray.length;i++){var elementTag=$.fileinfo(fileArray[i]).tag;var el=[];if(elementTag!==null){el[i]=$.createElement(fileArray[i],elementTag);if(el[i]){headerTag.appendChild(el[i]);if($.browser.msie){el[i].onreadystatechange=function(){if(this.readyState==='loaded'||this.readyState==='complete'){if(typeof callback=='function'){callback()}}}}else{if(elementTag=='link'){$.cssReady(i,callback)}else{el[i].onload=function(){if(typeof callback=='function'){callback()}}}}}}else{return false}}}})})(jQuery);
/**
 * jquery.string - Prototype string functions for jQuery
 * (c) 2008 David E. Still (http://stilldesigning.com/dotstring)
 * Original Prototype extensions (c) 2005-2008 Sam Stephenson (http://prototypejs.org)
 */
jQuery.__stringPrototype={JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,ScriptFragment:"<script[^>]*>([\\S\\s]*?)<\/script>",specialChar:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r","\\":"\\\\"},blank:function(A){return/^\s*$/.test(this.s(A)||" ")},camelize:function(C){var A=this.s(C).split("-"),B;C=[A[0]];for(B=1;B<A.length;B++){C.push(A[B].charAt(0).toUpperCase()+A[B].substring(1))}C=C.join("");return this.r(arguments,0,C)},capitalize:function(A){A=this.s(A);A=A.charAt(0).toUpperCase()+A.substring(1).toLowerCase();return this.r(arguments,0,A)},dasherize:function(A){A=this.s(A).split("_").join("-");return this.r(arguments,0,A)},empty:function(A){return this.s(A)===""},endsWith:function(B,A){A=this.s(A);var C=A.length-B.length;return C>=0&&A.lastIndexOf(B)===C},escapeHTML:function(A){A=this.s(A).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");return this.r(arguments,0,A)},evalJSON:function(sanitize,s){s=this.s(s);var json=this.unfilterJSON(false,s);try{if(!sanitize||this.isJSON(json)){return eval("("+json+")")}}catch(e){}throw new SyntaxError("Badly formed JSON string: "+s)},evalScripts:function(s){var scriptTags=this.extractScripts(this.s(s)),results=[];if(scriptTags.length>0){for(var i=0;i<scriptTags.length;i++){results.push(eval(scriptTags[i]))}}return results},extractScripts:function(C){var E=new RegExp(this.ScriptFragment,"img"),D=new RegExp(this.ScriptFragment,"im"),A=this.s(C).match(E)||[],F=[];if(A.length>0){for(var B=0;B<A.length;B++){F.push(A[B].match(D)[1]||"")}}return F},gsub:function(C,B,A){A=this.s(A);if(jQuery.isFunction(B)){A=this.sub(C,B,-1,A)}else{A=A.split(C).join(B)}return this.r(arguments,2,A)},include:function(B,A){return this.s(A).indexOf(B)>-1},inspect:function(B,C){C=this.s(C);var A;try{A=this.sub(/[\x00-\x1f\\]/,function(E){var F=jQuery.__stringPrototype.specialChar[E[0]];return F?F:"\\u00"+E[0].charCodeAt().toPaddedString(2,16)},-1,C)}catch(D){A=C}C=(B)?'"'+A.replace(/"/g,'\\"')+'"':"'"+A.replace(/'/g,"\\'")+"'";return this.r(arguments,1,C)},interpolate:function(F,E,C){C=this.s(C);if(!E){E=/(\#\{\s*(\w+)\s*\})/}var A=new RegExp(E.source,"g");var D=C.match(A),B;for(B=0;B<D.length;B++){C=C.replace(D[B],F[D[B].match(E)[2]])}return this.r(arguments,2,C)},isJSON:function(A){A=this.s(A);if(this.blank(A)){return false}A=A.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,"");return(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(A)},scan:function(C,B,A){A=this.s(A);this.sub(C,B,-1,A);return this.r(arguments,2,A)},startsWith:function(B,A){return this.s(A).indexOf(B)===0},strip:function(A){A=jQuery.trim(this.s(A));return this.r(arguments,0,A)},stripScripts:function(A){A=this.s(A).replace(new RegExp(this.ScriptFragment,"img"),"");return this.r(arguments,0,A)},stripTags:function(A){A=this.s(A).replace(/<\/?[^>]+>/gi,"");return this.r(arguments,0,A)},sub:function(H,D,E,C){C=this.s(C);if(H.source&&!H.global){var A=(H.ignoreCase)?"ig":"g";A+=(H.multiline)?"m":"";H=new RegExp(H.source,A)}var G=C.split(H),F=C.match(H);if(jQuery.browser.msie){if(C.indexOf(F[0])==0){G.unshift("")}if(C.lastIndexOf(F[F.length-1])==C.length-F[F.length-1].length){G.push("")}}E=(E<0)?(G.length-1):E||1;C=G[0];for(var B=1;B<G.length;B++){if(B<=E){if(jQuery.isFunction(D)){C+=D(F[B-1]||F)+G[B]}else{C+=D+G[B]}}else{C+=(F[B-1]||F)+G[B]}}return this.r(arguments,3,C)},succ:function(A){A=this.s(A);A=A.slice(0,A.length-1)+String.fromCharCode(A.charCodeAt(A.length-1)+1);return this.r(arguments,0,A)},times:function(D,C){C=this.s(C);var A="";for(var B=0;B<D;B++){A+=C}return this.r(arguments,1,A)},toJSON:function(A){return this.r(arguments,0,this.inspect(true,this.s(A)))},toQueryParams:function(F,C){C=this.s(C);var E=C.substring(C.indexOf("?")+1).split("#")[0].split(F||"&"),H={},B,A,D,G;for(B=0;B<E.length;B++){G=E[B].split("=");A=decodeURIComponent(G[0]);D=(G[1])?decodeURIComponent(G[1]):undefined;if(H[A]){if(typeof H[A]=="string"){H[A]=[H[A]]}H[A].push(D)}else{H[A]=D}}return H},truncate:function(C,A,B){B=this.s(B);C=C||30;A=(!A)?"...":A;B=(B.length>C)?B.slice(0,C-A.length)+A:String(B);return this.r(arguments,2,B)},underscore:function(A){A=this.sub(/[A-Z]/,function(B){return"_"+B.toLowerCase()},-1,this.s(A));if(A.charAt(0)=="_"){A=A.substring(1)}return this.r(arguments,0,A)},unescapeHTML:function(A){A=this.stripTags(this.s(A)).replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">");return this.r(arguments,0,A)},unfilterJSON:function(C,B){B=this.s(B);C=C||this.JSONFilter;var A=B.match(C);B=(A!==null)?A[1]:B;return this.r(arguments,1,jQuery.trim(B))},r:function(A,B,C){if(A.length>B||this.str===undefined){return C}else{this.str=""+C;return this}},s:function(A){if(A===""||A){return A}if(this.str===""||this.str){return this.str}return this}};jQuery.__stringPrototype.parseQuery=jQuery.__stringPrototype.toQueryParams;jQuery.string=function(A){if(A===String.prototype){jQuery.extend(String.prototype,jQuery.__stringPrototype)}else{return jQuery.extend({str:A},jQuery.__stringPrototype)}}
$.string(String.prototype);
function str_random(l){var c="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";l=(l==null)?8:l;var rs='';for(var i=0;i<l;i++){var rn=Math.floor(Math.random()*c.length);rs+=c.substring(rn,rn+1);}return rs;}

/*
	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()}r.trigger("masked.blur",r.val());}).bind("keydown.mask",l).bind("keypress.mask",o).bind(c,function(){setTimeout(function(){r.caret(p(true))},0)})}p()})}})})(jQuery);

