/*
    jquery.constrain plugin
    * You may distribute this code under the same license as jQuery (BSD or GPL)
    Rev:$090709$
*/
(function(a){a.fn.constrain=function(f){f=a.extend(true,{},{limit:{},prohibit:{chars:"",regex:false},allow:{chars:"",regex:false}},f);function b(g,i){var h=false;a.each(f.limit,function(l,k){var j=this;if(l.charCodeAt(0)==i.which){h=j<0?false:j<a(g).val().split(l).length;return false}});return h}function d(g){return g.chars.length>0||(g.regex&&g.regex.length>0)}function c(m,h,n){var g=m.chars.split("");for(var k in g){var j=g[k];if(j.charCodeAt(0)==n.which){return true}}if(m.regex){var l=new RegExp(m.regex);if(l.test(String.fromCharCode(n.which))){return true}}return false}function e(g,k){if(k.which==0||k.which==8||k.which==27){return false}var j=d(f.prohibit)?c(f.prohibit,g,k):false;var i=d(f.allow)?c(f.allow,g,k):true;var h=b(g,k);return j||!i||h}return this.each(function(){a(this).keypress(function(g){if(e(this,g)){g.preventDefault()}})})};a.fn.onlyDate=function(){return this.each(function(){var b={allow:{regex:"[0-9/]"},limit:{"/":2}};a(this).constrain(b)})};a.fn.onlyNumeric=function(c){c=a.extend(true,{},{onblur:true,format:""},c);var d=c.format.split(".");var b=d.length>1?d[1].length:false;return this.each(function(){var f="\\d";if(c.format.indexOf(".")>-1){f+="\\."}if(c.format.indexOf(",")>-1){f+=","}var g={allow:{regex:"["+f+"]"},limit:{".":1}};a(this).constrain(g);if(b){a(this).blur(function(h){var j=parseFloat(a(this).val());if(!isNaN(j)){var i=a(this).val();a(this).val(a.formatNumber(i,c.format))}});if(!c.onblur){var e=new RegExp("\\d+\\.*\\d{0,"+b+"}");a(this).keyup(function(h){if((h.which<48&&h.which>57)||(h.which<96&&h.which>105)){return}var i=a(this).val();a(this).val(i.match(e))})}}})}})(jQuery);(function($){$.numericFormat=$.numericFormat||{};$.numericFormat.formats=$.numericFormat.formats||new Array();$.extend({formatNumber:function(num,format){function _numberFormat(num,format,context){function createNewFormat(format,formatName){var code="var "+formatName+" = function(num){\n";code+="num = num.replace(/,/,'');";var formats=format.split(";");switch(formats.length){case 1:code+=createTerminalFormat(format);break;case 2:code+='return (num < 0) ? _numberFormat(num,"'+escape(formats[1])+'", 1) : _numberFormat(num,"'+escape(formats[0])+'", 2);';break;case 3:code+='return (num < 0) ? _numberFormat(num,"'+escape(formats[1])+'", 1) : ((num == 0) ? _numberFormat(num,"'+escape(formats[2])+'", 2) : _numberFormat(num,"'+escape(formats[0])+'", 3));';break;default:code+="throw 'Too many semicolons in format string';";break}return code+"};"}function createTerminalFormat(format){if(format.length>0&&format.search(/[0#?]/)==-1){return"return '"+escape(format)+"';\n"}var code="var val = (context == null) ? new Number(num) : Math.abs(num);\n";var thousands=false;var lodp=format;var rodp="";var ldigits=0;var rdigits=0;var scidigits=0;var scishowsign=false;var sciletter="";m=format.match(/\..*(e)([+-]?)(0+)/i);if(m){sciletter=m[1];scishowsign=(m[2]=="+");scidigits=m[3].length;format=format.replace(/(e)([+-]?)(0+)/i,"")}var m=format.match(/^([^.]*)\.(.*)$/);if(m){lodp=m[1].replace(/\./g,"");rodp=m[2].replace(/\./g,"")}if(format.indexOf("%")>=0){code+="val *= 100;\n"}m=lodp.match(/(,+)(?:$|[^0#?,])/);if(m){code+="val /= "+Math.pow(1000,m[1].length)+"\n;"}if(lodp.search(/[0#?],[0#?]/)>=0){thousands=true}if((m)||thousands){lodp=lodp.replace(/,/g,"")}m=lodp.match(/0[0#?]*/);if(m){ldigits=m[0].length}m=rodp.match(/[0#?]*/);if(m){rdigits=m[0].length}if(scidigits>0){code+="var sci = toScientific(num,val,"+ldigits+", "+rdigits+", "+scidigits+", "+scishowsign+");\nvar arr = [sci.l, sci.r];\n"}else{if(format.indexOf(".")<0){code+="val = (val > 0) ? Math.ceil(val) : Math.floor(val);\n"}code+="var arr = round(val,"+rdigits+").toFixed("+rdigits+").split('.');\n";code+="arr[0] = (val < 0 ? '-' : '') + leftPad((val < 0 ? arr[0].substring(1) : arr[0]), "+ldigits+", '0');\n"}if(thousands){code+="arr[0] = addSeparators(arr[0]);\n"}code+="arr[0] = reverse(injectIntoFormat(reverse(arr[0]), '"+escape(reverse(lodp))+"', true));\n";if(rdigits>0){code+="arr[1] = injectIntoFormat(arr[1], '"+escape(rodp)+"', false);\n"}if(scidigits>0){code+="arr[1] = arr[1].replace(/(\\d{"+rdigits+"})/, '$1"+sciletter+"' + sci.s);\n"}return code+"return arr.join('.');\n"}function toScientific(num,val,ldigits,rdigits,scidigits,showsign){var result={l:"",r:"",s:""};var ex="";var before=Math.abs(val).toFixed(ldigits+rdigits+1).trim("0");var after=Math.round(num,new Number(before.replace(".","").replace(new RegExp("(\\d{"+(ldigits+rdigits)+"})(.*)"),"$1.$2"))).toFixed(0);if(after.length>=ldigits){after=after.substring(0,ldigits)+"."+after.substring(ldigits)}else{after+="."}result.s=(before.indexOf(".")-before.search(/[1-9]/))-after.indexOf(".");if(result.s<0){result.s++}result.l=(val<0?"-":"")+leftPad(after.substring(0,after.indexOf(".")),ldigits,"0");result.r=after.substring(after.indexOf(".")+1);if(result.s<0){ex="-"}else{if(showsign){ex="+"}}result.s=ex+leftPad(Math.abs(result.s).toFixed(0),scidigits,"0");return result}function reverse(str){var res="";for(var i=str.length;i>0;--i){res+=str.charAt(i-1)}return res}function escape(string){return string.replace(/('|\\)/g,"\\$1")}function leftPad(val,size,ch){var result=new String(val);if(ch==null){ch=" "}while(result.length<size){result=ch+result}return result}function round(num,decimals){if(decimals>0){var m=num.toFixed(decimals+1).match(new RegExp("(-?\\d*).(\\d{"+decimals+"})(\\d)\\d*$"));if(m&&m.length){return new Number(m[1]+"."+leftPad(Math.round(m[2]+"."+m[3]),decimals,"0"))}}return num}function addSeparators(val){var s=reverse(val).replace(/(\d{3})/g,"$1,");return reverse(s).replace(/^(-)?,/,"$1")}function injectIntoFormat(val,format,stuffExtras){var i=0;var j=0;var result="";var revneg=val.charAt(val.length-1)=="-";if(revneg){val=val.substring(0,val.length-1)}while(i<format.length&&j<val.length&&format.substring(i).search(/[0#?]/)>=0){if(format.charAt(i).match(/[0#?]/)){if(val.charAt(j)!="-"){result+=val.charAt(j)}else{result+="0"}j++}else{result+=format.charAt(i)}++i}if(revneg&&j==val.length){result+="-"}if(j<val.length){if(stuffExtras){result+=val.substring(j)}if(revneg){result+="-"}}if(i<format.length){result+=format.substring(i)}return result.replace(/#/g,"").replace(/\?/g," ")}var formatName="numFormat"+$.numericFormat.formats.length++;eval(createNewFormat(format,formatName));return eval(formatName)}if(!$.numericFormat.formats[format]){$.numericFormat.formats[format]=_numberFormat(num,format)}return $.numericFormat.formats[format](num)}})})(jQuery);