/*
jQuery UI Virtual Keyboard
Version 1.8.4 minified

Author: Jeremy Satterfield
Modified: Rob Garrison (Mottie on github)
-----------------------------------------
Creative Commons Attribution-Share Alike 3.0 Unported License
http://creativecommons.org/licenses/by-sa/3.0/

Caret code from jquery.caret.1.02.js
Licensed under the MIT License:
http://www.opensource.org/licenses/mit-license.php
-----------------------------------------
*/

(function(e){e.keyboard=function(c,l){var a=this;a.$el=e(c);a.el=c;a.$el.data("keyboard",a);a.init=function(){a.options=e.extend(!0,{},e.keyboard.defaultOptions,l);a.shiftActive=a.altActive=a.metaActive=a.sets=!1;a.rows=["ui-keyboard-keyset-default","ui-keyboard-keyset-shift","ui-keyboard-keyset-alt","ui-keyboard-keyset-alt-shift"];a.acceptedKeys=[];a.mappedKeys={};a.msie=e.browser.msie;a.opera=e.browser.opera;a.inPlaceholder=a.$el.attr("placeholder")||"";a.watermark=typeof document.createElement("input").placeholder!== "undefined"&&a.inPlaceholder!=="";a.regex=e.keyboard.comboRegex;a.decimal=/^\./.test(a.options.display.dec)?!0:!1;a.checkCaret=a.options.lockInput||a.msie||a.opera?!0:!1;e.each("initialized visible change hidden canceled accepted beforeClose".split(" "),function(b,j){e.isFunction(a.options[j])&&a.$el.bind(j+".keyboard",a.options[j])});a.options.stayOpen||e(document).bind("mousedown.keyboard keyup.keyboard",function(b){a.isVisible&&(b.type==="mousedown"||b.type==="keyup"&&b.which===27)&&a.escClose(b)}); a.$el.addClass("ui-keyboard-input ui-widget-content ui-corner-all").attr({"aria-haspopup":"true",role:"textbox"});(a.$el.is(":disabled")||a.$el.attr("readonly"))&&a.$el.addClass("ui-keyboard-nokeyboard");a.options.openOn&&a.$el.bind(a.options.openOn+".keyboard",function(){a.focusOn()});!a.watermark&&a.$el.val()===""&&a.$el.attr("placeholder")!==""&&a.$el.addClass("placeholder").val(a.inPlaceholder);a.$el.trigger("initialized.keyboard",[a,a.el])};a.focusOn=function(){a.isVisible||(a.reveal(),a.options.usePreview|| setTimeout(function(){a.preview.focus()},100))};a.reveal=function(){e(".ui-keyboard").hide();if(a.$el.is(":disabled")||a.$el.attr("readonly"))a.$el.addClass("ui-keyboard-nokeyboard");else{a.$el.removeClass("ui-keyboard-nokeyboard");a.options.usePreview||a.$el.unbind(a.options.openOn?a.options.openOn+".keyboard":"");typeof a.$keyboard==="undefined"&&a.startup();!a.watermark&&a.el.value===a.inPlaceholder&&a.$el.removeClass("placeholder").val("");a.originalContent=a.$el.val();a.$preview.val(a.originalContent); var b;b=a.options.position;b.of=b.of||a.$el.data("keyboardPosition")||a.$el;b.collision=a.options.usePreview?b.collision||"fit fit":"flip flip";a.$keyboard.css({position:"absolute",left:0,top:0}).show().position(b);a.options.usePreview&&a.$preview.css("width",a.$keyboard.width());a.preview.focus();a.isVisible=!0;a.checkDecimal();a.lineHeight=parseInt(a.$preview.css("lineHeight"),10)||parseInt(a.$preview.css("font-size"),10)+4;if(a.msie||a.opera){b=a.originalContent.length;b={start:b,end:b};if(!a.lastCaret)a.lastCaret= b;if(a.lastCaret.end===0&&a.lastCaret.start>0)a.lastCaret.end=a.lastCaret.start;if(a.lastCaret.start<0)a.lastCaret=b;a.$preview.caret(a.lastCaret.start,a.lastCaret.end);e('<div class="ui-keyboard-overlay"></div>').click(function(){e(this).remove();a.close();return!1}).appendTo("body");a.options.usePreview||a.$el.addClass("ui-keyboard-overlay-input")}a.$el.trigger("visible.keyboard",[a,a.el]);return a}};a.startup=function(){a.$keyboard=a.buildKeyboard();a.$allKeys=a.$keyboard.find(".ui-keyboard-button"); a.$preview=a.options.usePreview?a.$keyboard.find(".ui-keyboard-preview"):a.$el;a.preview=a.$preview[0];a.$decBtn=a.$keyboard.find(".ui-keyboard-dec");a.wheel=e.isFunction(e.fn.mousewheel);a.alwaysAllowed=[33,34,35,36,37,38,39,40,45,46];a.lastCaret={start:0,end:0};a.$preview.bind("keypress.keyboard",function(b){var j=String.fromCharCode(b.charCode||b.which);if(a.checkCaret)a.lastCaret=a.$preview.caret();if(a.options.restrictInput){if((b.which===8||b.which===0)&&e.inArray(b.keyCode,a.alwaysAllowed))return; e.inArray(j,a.acceptedKeys)===-1&&b.preventDefault()}else if((b.ctrlKey||b.metaKey)&&(b.which===97||b.which===99||b.which===118||b.which===120))return;a.hasMappedKeys&&a.mappedKeys.hasOwnProperty(j)&&(a.insertText(a.mappedKeys[j]),b.preventDefault());a.checkMaxLength()}).bind("keyup.keyboard",function(b){switch(b.which){case 9:if(a.tab&&!a.options.lockInput)e.keyboard.keyaction.tab(a),a.tab=!1;break;case 27:return a.close(),!1}clearTimeout(a.throttled);a.throttled=setTimeout(function(){a.checkCombos()}, 100);a.checkMaxLength();a.$el.trigger("change.keyboard",[a,a.el])}).bind("keydown.keyboard",function(b){switch(b.which){case 9:a.tab=!0;b.preventDefault();break;case 13:if(b.shiftKey)return a.close(!0),!1;break;case 86:if(b.ctrlKey||b.metaKey){if(a.options.preventPaste){b.preventDefault();break}a.checkCombos()}}}).bind("mouseup.keyboard",function(){if(a.checkCaret)a.lastCaret=a.$preview.caret()});a.options.preventPaste&&(a.$preview.bind("contextmenu.keyboard",function(a){a.preventDefault()}),a.$el.bind("contextmenu.keyboard", function(a){a.preventDefault()}));a.$keyboard.appendTo("body");a.$allKeys.bind(a.options.keyBinding+".keyboard",function(b){var j;j=e.data(this,"key");var f=j.action.split(":")[0];a.preview.focus();a.checkCaret&&a.$preview.caret(a.lastCaret.start,a.lastCaret.end);f.match("meta")&&(f="meta");if(e.keyboard.keyaction.hasOwnProperty(f)&&e(this).is(".ui-keyboard-actionkey")){if(e.keyboard.keyaction[f](a,this)===!1)return}else typeof j.action!=="undefined"&&(j=a.wheel&&!e(this).is(".ui-keyboard-actionkey")? j.curTxt:j.action,a.insertText(j));a.checkCombos();a.checkMaxLength();a.$el.trigger("change.keyboard",[a,a.el]);a.options.usePreview&&a.preview.focus();b.preventDefault()}).bind("mouseenter.keyboard mouseleave.keyboard",function(b){var j=e(this),f=e.data(this,"key");b.type==="mouseenter"&&a.el.type!=="password"&&j.addClass("ui-state-hover").attr("title",function(b,d){return a.wheel&&d===""&&a.sets?a.options.wheelMessage:d});if(b.type==="mouseleave")f.curTxt=f.original,f.curNum=0,e.data(this,"key", f),j.removeClass(a.el.type==="password"?"":"ui-state-hover").attr("title",function(b,d){return d===a.options.wheelMessage?"":d}).find("span").text(f.original)}).bind("mousewheel.keyboard",function(b,j){if(a.wheel){var f,c=e(this),d=e.data(this,"key");f=d.layers||a.getLayers(c);d.curNum+=j>0?-1:1;if(d.curNum>f.length-1)d.curNum=0;if(d.curNum<0)d.curNum=f.length-1;d.layers=f;d.curTxt=f[d.curNum];e.data(this,"key",d);c.find("span").text(f[d.curNum]);return!1}}).bind("mouseup.keyboard",function(){a.preview.focus()})}; a.insertText=function(b){var j,f,e=a.$preview.val(),d=a.$preview.caret(),c=a.$preview.scrollLeft();j=a.$preview.scrollTop();f=e.length;if(d.end<d.start)d.end=d.start;if(d.start>f)d.end=d.start=f;if(a.preview.tagName==="TEXTAREA"){a.msie&&e.substr(d.start,1)==="\n"&&(d.start+=1,d.end+=1);if((a.msie||a.opera)&&e.substr(0,d.start).split("\n").length-1>0)f=e.substr(0,d.start).split("\n").length-1,d.start+=f,d.end+=f;f=e.split("\n").length-1;a.preview.scrollTop=f>0?a.lineHeight*f:j}j=b==="bksp"&&d.start=== d.end?!0:!1;b=b==="bksp"?"":b;f=d.start+(j?-1:b.length);c+=parseInt(a.$preview.css("fontSize"),10)*(b==="bksp"?-1:1);a.$preview.val(e.substr(0,d.start-(j?1:0))+b+e.substr(d.end)).caret(f,f).scrollLeft(c);if(a.checkCaret)a.lastCaret={start:f,end:f}};a.checkMaxLength=function(){var b,e=a.$preview.val();if(a.options.maxLength!==!1&&e.length>a.options.maxLength)b=Math.min(a.$preview.caret().start,a.options.maxLength),a.$preview.val(e.substring(0,a.options.maxLength)),a.$preview.caret(b,b),a.lastCaret= {start:b,end:b};a.$decBtn.length&&a.checkDecimal()};a.showKeySet=function(b){a.$keyboard.find(".ui-keyboard-actionkey[name*=key_meta]").removeClass(a.options.actionClass);a.metaActive?(b=b.name.split("_")[1],a.$keyboard.find(".ui-keyboard-keyset-"+b).length&&a.$keyboard.find(".ui-keyboard-alt, .ui-keyboard-shift, .ui-keyboard-actionkey[class*=meta]").removeClass(a.options.actionClass).end().find(".ui-keyboard-actionkey.ui-keyboard-"+b).addClass(a.options.actionClass).end().find(".ui-keyboard-keyset").hide().end().find(".ui-keyboard-keyset-"+ b).show()):(b=a.shiftActive?1:0,b+=a.altActive?2:0,a.$keyboard.find("."+a.rows[b]).length&&a.$keyboard.find(".ui-keyboard-alt")[a.altActive?"addClass":"removeClass"](a.options.actionClass).end().find(".ui-keyboard-shift")[a.shiftActive?"addClass":"removeClass"](a.options.actionClass).end().find(".ui-keyboard-keyset").hide().end().find("."+a.rows[b]).show())};a.checkCombos=function(){var b,c,f,g=a.$preview.val(),d=a.$preview.caret(),h=g.length;if(d.end<d.start)d.end=d.start;if(d.start>h)d.end=d.start= h;a.msie&&g.substr(d.start,1)==="\n"&&(d.start+=1,d.end+=1);if((a.msie||a.opera)&&g.substr(0,d.start).split("\n").length-1>0)f=g.substr(0,d.start).split("\n").length-1,d.start+=f,d.end+=f;a.options.useCombos&&(g=g.replace(a.regex,function(b,d,e){return a.options.combos.hasOwnProperty(d)?a.options.combos[d][e]||b:b}));if(a.options.restrictInput){f=g.split("");c=f.length;for(b=0;b<c;b++)e.inArray(f[b],a.acceptedKeys)<0&&(g=g.replace(f[b],""))}d.start+=g.length-h;d.end+=g.length-h;a.$preview.val(g); a.$preview.caret(d.start,d.end);a.preview.scrollTop=a.lineHeight*(g.substring(0,d.start).split("\n").length-1);a.lastCaret={start:d.start,end:d.end};return g};a.checkDecimal=function(){a.decimal&&/\./g.test(a.preview.value)||!a.decimal&&/\,/g.test(a.preview.value)?a.$decBtn.attr({disabled:"disabled","aria-disabled":"true"}).removeClass("ui-state-default ui-state-hover").addClass("ui-state-disabled"):a.$decBtn.removeAttr("disabled").attr({"aria-disabled":"false"}).addClass("ui-state-default").removeClass("ui-state-disabled")}; a.getLayers=function(a){var c;c=a.attr("name");return a.closest(".ui-keyboard").find("button[name="+c+"]").map(function(){return e(this).find("span").text()}).get()};a.close=function(b){if(a.$keyboard.is(":visible"))clearTimeout(a.throttled),a.$el.trigger("beforeClose.keyboard",[a,a.el,b||!1]).val(b?a.checkCombos():a.originalContent).scrollTop(a.el.scrollHeight).trigger(b?"accepted.keyboard":"canceled.keyboard",[a,a.el]).trigger("hidden.keyboard",[a,a.el]).removeClass("ui-keyboard-overlay-input").blur(), !a.options.usePreview&&a.options.openOn!==""&&a.$el.blur().bind(a.options.openOn+".keyboard",function(){a.focusOn()}),a.$keyboard.hide(),e(".ui-keyboard-overlay").remove(),a.isVisible=!1,!a.watermark&&a.el.value===""&&a.$el.addClass("placeholder").val(a.inPlaceholder);return!1};a.accept=function(){a.close(!0)};a.escClose=function(b){b.target!==a.el&&(e(b.target).closest(".ui-keyboard").length||a.close(a.options.autoAccept?!0:!1),a.msie&&b.preventDefault())};a.keyBtn=e("<button />").attr({role:"button", "aria-disabled":"false"}).addClass("ui-keyboard-button ui-state-default ui-corner-all");a.addKey=function(b,c,f,g){var d,h,i,c=g===!0?b:a.options.display[c]||b;/\(.+\)/.test(c)&&(h=c.replace(/\(([^()]+)\)/,""),d=c.match(/\(([^()]+)\)/)[1],c=h,i=h.split(":"),h=i[0]!==""&&i.length>1?i[0]:h,a.mappedKeys[d]=h);i=c.split(":");i[0]===""&&i[1]===""&&(c=":");c=i[0]!==""&&i.length>1?e.trim(i[0]):c;d=i.length>1?e.trim(i[1]).replace(/_/g," ")||"":"";h=c.length>1?" ui-keyboard-widekey":"";h+=g?"":" ui-keyboard-actionkey"; return a.keyBtn.clone().attr({"data-value":c,name:"key_"+b,title:d}).data("key",{action:b,original:c,curTxt:c,curNum:0}).addClass("ui-keyboard-"+(g===!0?b.charCodeAt(0):b)+h).html("<span>"+c+"</span>").appendTo(f)};a.buildKeyboard=function(){var b,c,f,g,d,h,i,k=0,l=e("<div />").addClass("ui-keyboard ui-widget-content ui-widget ui-corner-all ui-helper-clearfix").attr({role:"textbox"}).hide();a.options.usePreview?a.$preview=a.$el.clone(!1).removeAttr("id").removeAttr("placeholder").removeClass("placeholder").addClass("ui-widget-content ui-keyboard-preview ui-corner-all").show(): (a.$preview=a.$el,a.options.position.at=a.options.position.at2);a.$preview.attr(a.options.lockInput?{readonly:"readonly"}:{});a.options.usePreview&&e("<div />").append(a.$preview).appendTo(l);if(a.options.layout==="custom"||!e.keyboard.layouts.hasOwnProperty(a.options.layout))a.options.layout="custom",e.keyboard.layouts.custom=a.options.customLayout||{"default":["{cancel}"]};e.each(e.keyboard.layouts[a.options.layout],function(m,n){if(m!==""){k++;f=e("<div />").attr("name",m).addClass("ui-keyboard-keyset ui-keyboard-keyset-"+ m).appendTo(l)[m==="default"?"show":"hide"]();for(c=0;c<n.length;c++){g=e.trim(n[c]).replace(/\{(\.?)[\s+]?:[\s+]?(\.?)\}/g,"{$1:$2}");h=g.split(/\s+/);for(d=0;d<h.length;d++)if(h[d].length!==0)if(/^\{\S+\}$/.test(h[d]))if(b=h[d].match(/^\{(\S+)\}$/)[1].toLowerCase(),/^sp:(\.?\d+)$/.test(b)&&(i=b.match(/^sp:(\.?\d+)$/)[1]||0,e("<span>&nbsp;</span>").css("margin","0 "+i+"em").appendTo(f)),/^meta\d+\:?(\w+)?/.test(b))a.addKey(b,b,f);else switch(b){case "a":case "accept":a.addKey("accept",b,f).addClass(a.options.actionClass); break;case "alt":case "altgr":a.addKey("alt","alt",f);break;case "b":case "bksp":a.addKey("bksp",b,f);break;case "c":case "cancel":a.addKey("cancel",b,f).addClass(a.options.actionClass);break;case "combo":a.addKey("combo","combo",f).addClass(a.options.actionClass);break;case "dec":a.acceptedKeys.push(a.decimal?".":",");a.addKey("dec","dec",f);break;case "e":case "enter":a.addKey("enter",b,f).addClass(a.options.actionClass);break;case "s":case "shift":a.addKey("shift",b,f);break;case "sign":a.acceptedKeys.push("-"); a.addKey("sign","sign",f);break;case "space":a.acceptedKeys.push(" ");a.addKey("space","&nbsp;",f);break;case "t":case "tab":a.addKey("tab",b,f);break;default:e.keyboard.keyaction.hasOwnProperty(b)&&a.addKey(b,b,f)}else a.acceptedKeys.push(h[d].split(":")[0]),a.addKey(h[d],h[d],f,!0).attr("name","key_"+c+"_"+d);f.find(".ui-keyboard-button:last").after('<br class="ui-keyboard-button-endrow">')}}});if(k>1)a.sets=!0;a.hasMappedKeys=!e.isEmptyObject(a.mappedKeys);return l};a.destroy=function(){e(document).unbind("mousedown.keyboard keyup.keyboard", a.escClose);a.$keyboard&&a.$keyboard.remove();a.$el.removeClass("ui-keyboard-input ui-widget-content ui-corner-all placeholder ui-keyboard-notallowed").removeAttr("aria-haspopup").removeAttr("role").unbind(a.options.openOn+".keyboard accepted.keyboard canceled.keyboard beforeClose.keyboard hidden.keyboard visible.keyboard keydown.keyboard keypress.keyboard keyup.keyboard contextmenu.keyboard initialized.keyboard").removeData("keyboard")};a.init()};e.keyboard.keyaction={accept:function(c){c.close(!0); return!1},alt:function(c,e){c.altActive=!c.altActive;c.metaActive=!1;c.showKeySet(e)},bksp:function(c){c.insertText("bksp")},cancel:function(c){c.close();return!1},clear:function(c){c.$preview.val("")},combo:function(c){var e=!c.options.useCombos;c.options.useCombos=e;c.$keyboard.find(".ui-keyboard-combo")[e?"addClass":"removeClass"](c.options.actionClass);e&&c.checkCombos();return!1},dec:function(c){c.insertText(c.decimal?".":",")},enter:function(c){c.el.tagName!=="INPUT"&&c.insertText("\r\n")}, meta:function(c,l){c.metaActive=e(l).is("."+c.options.actionClass)?!1:!0;c.showKeySet(l)},shift:function(c,e){c.shiftActive=!c.shiftActive;c.metaActive=!1;c.showKeySet(e)},sign:function(c){/^\-?\d*\.?\d*$/.test(c.$preview.val())&&c.$preview.val(c.$preview.val()*-1)},space:function(c){c.insertText(" ")},tab:function(c){c.el.tagName!=="INPUT"&&c.insertText("\t")}};e.keyboard.layouts={alpha:{"default":["` 1 2 3 4 5 6 7 8 9 0 - = {bksp}","{tab} a b c d e f g h i j [ ] \\","k l m n o p q r s ; ' {enter}", "{shift} t u v w x y z , . / {shift}","{accept} {space} {cancel}"],shift:["~ ! @ # $ % ^ & * ( ) _ + {bksp}","{tab} A B C D E F G H I J { } |",'K L M N O P Q R S : " {enter}',"{shift} T U V W X Y Z < > ? {shift}","{accept} {space} {cancel}"]},qwerty:{"default":["` 1 2 3 4 5 6 7 8 9 0 - = {bksp}","{tab} q w e r t y u i o p [ ] \\","a s d f g h j k l ; ' {enter}","{shift} z x c v b n m , . / {shift}","{accept} {space} {cancel}"],shift:["~ ! @ # $ % ^ & * ( ) _ + {bksp}","{tab} Q W E R T Y U I O P { } |", 'A S D F G H J K L : " {enter}',"{shift} Z X C V B N M < > ? {shift}","{accept} {space} {cancel}"]},international:{"default":["` 1 2 3 4 5 6 7 8 9 0 - = {bksp}","{tab} q w e r t y u i o p [ ] \\","a s d f g h j k l ; ' {enter}","{shift} z x c v b n m , . / {shift}","{accept} {alt} {space} {alt} {cancel}"],shift:["~ ! @ # $ % ^ & * ( ) _ + {bksp}","{tab} Q W E R T Y U I O P { } |",'A S D F G H J K L : " {enter}',"{shift} Z X C V B N M < > ? {shift}","{accept} {alt} {space} {alt} {cancel}"],alt:["~ \u00a1 \u00b2 \u00b3 \u00a4 \u20ac \u00bc \u00bd \u00be \u2018 \u2019 \u00a5 \u00d7 {bksp}", "{tab} \u00e4 \u00e5 \u00e9 \u00ae \u00fe \u00fc \u00fa \u00ed \u00f3 \u00f6 \u00ab \u00bb \u00ac","\u00e1 \u00df \u00f0 f g h j k \u00f8 \u00b6 \u00b4 {enter}","{shift} \u00e6 x \u00a9 v b \u00f1 \u00b5 \u00e7 > \u00bf {shift}","{accept} {alt} {space} {alt} {cancel}"],"alt-shift":["~ \u00b9 \u00b2 \u00b3 \u00a3 \u20ac \u00bc \u00bd \u00be \u2018 \u2019 \u00a5 \u00f7 {bksp}","{tab} \u00c4 \u00c5 \u00c9 \u00ae \u00de \u00dc \u00da \u00cd \u00d3 \u00d6 \u00ab \u00bb \u00a6","\u00c4 \u00a7 \u00d0 F G H J K \u00d8 \u00b0 \u00a8 {enter}", "{shift} \u00c6 X \u00a2 V B \u00d1 \u00b5 \u00c7 . \u00bf {shift}","{accept} {alt} {space} {alt} {cancel}"]},dvorak:{"default":["` 1 2 3 4 5 6 7 8 9 0 [ ] {bksp}","{tab} ' , . p y f g c r l / = \\","a o e u i d h t n s - {enter}","{shift} ; q j k x b m w v z {shift}","{accept} {space} {cancel}"],shift:["~ ! @ # $ % ^ & * ( ) { } {bksp}",'{tab} " < > P Y F G C R L ? + |',"A O E U I D H T N S _ {enter}","{shift} : Q J K X B M W V Z {shift}","{accept} {space} {cancel}"]},num:{"default":["= ( ) {b}", "{clear} / * -","7 8 9 +","4 5 6 {sign}","1 2 3 %","0 . {a} {c}"]}};e.keyboard.defaultOptions={layout:"qwerty",customLayout:null,position:{of:null,my:"center top",at:"center top",at2:"center bottom"},usePreview:!0,stayOpen:!1,display:{a:"\u2714:Accept (Shift-Enter)",accept:"Accept:Accept (Shift-Enter)",alt:"AltGr:Alternate Graphemes",b:"\u2190:Backspace",bksp:"Bksp:Backspace",c:"\u2716:Cancel (Esc)",cancel:"Cancel:Cancel (Esc)",clear:"C:Clear",combo:"\u00f6:Toggle Combo Keys",dec:".:Decimal",e:"\u21b5:Enter", enter:"Enter:Enter",s:"\u21e7:Shift",shift:"Shift:Shift",sign:"\u00b1:Change Sign",space:" :Space",t:"\u21e5:Tab",tab:"\u21e5 Tab:Tab"},wheelMessage:"Use mousewheel to see other keys",actionClass:"ui-state-active",autoAccept:!1,lockInput:!1,restrictInput:!1,preventPaste:!1,maxLength:!1,openOn:"focus",keyBinding:"mousedown",useCombos:!0,combos:{"`":{a:"\u00e0",A:"\u00c0",e:"\u00e8",E:"\u00c8",i:"\u00ec",I:"\u00cc",o:"\u00f2",O:"\u00d2",u:"\u00f9",U:"\u00d9",y:"\u1ef3",Y:"\u1ef2"},"'":{a:"\u00e1",A:"\u00c1", e:"\u00e9",E:"\u00c9",i:"\u00ed",I:"\u00cd",o:"\u00f3",O:"\u00d3",u:"\u00fa",U:"\u00da",y:"\u00fd",Y:"\u00dd",c:"\u00e7",C:"\u00c7"},'"':{a:"\u00e4",A:"\u00c4",e:"\u00eb",E:"\u00cb",i:"\u00ef",I:"\u00cf",o:"\u00f6",O:"\u00d6",u:"\u00fc",U:"\u00dc",y:"\u00ff",Y:"\u0178"},"^":{a:"\u00e2",A:"\u00c2",e:"\u00ea",E:"\u00ca",i:"\u00ee",I:"\u00ce",o:"\u00f4",O:"\u00d4",u:"\u00fb",U:"\u00db",y:"\u0177",Y:"\u0176"},"~":{a:"\u00e3",A:"\u00c3",e:"\u1ebd",E:"\u1ebc",i:"\u0129",I:"\u0128",o:"\u00f5",O:"\u00d5", u:"\u0169",U:"\u0168",y:"\u1ef9",Y:"\u1ef8",n:"\u00f1",N:"\u00d1"},a:{e:"\u00e6"},A:{E:"\u00c6"},o:{e:"\u0153"},O:{E:"\u0152"}},initialized:null,accepted:null,canceled:null,hidden:null,visible:null,beforeClose:null};e.keyboard.comboRegex=/([`\'~\^\"ao])([a-z])/mig;e.fn.keyboard=function(c){return this.each(function(){new e.keyboard(this,c)})};e.fn.getkeyboard=function(){return this.data("keyboard")}})(jQuery);

(function(e,c,l,a){e.fn.caret=function(b,j){var f,g,d,h,i;i=document.selection;var k=this[0],o=k.scrollTop,m=e.browser.msie;if(typeof k!=="undefined")return typeof b==="number"&&typeof j==="number"&&(g=b,h=j),typeof g!=="undefined"?(m?(i=k.createTextRange(),i.collapse(!0),i.moveStart("character",g),i.moveEnd("character",h-g),i.select()):(k.selectionStart=g,k.selectionEnd=h),k.focus(),k.scrollTop=o,this):(m?k.tagName.toLowerCase()!=="textarea"?(h=this.val(),g=i[l]()[a](),g.moveEnd("character",h[c]), f=g.text===""?h[c]:h.lastIndexOf(g.text),g=i[l]()[a](),g.moveStart("character",-h[c]),d=g.text[c]):(g=i[l](),i=g[a](),i.moveToElementText(k),i.setEndPoint("EndToEnd",g),f=i.text[c]-g.text[c],d=f+g.text[c]):(f=k.selectionStart,d=k.selectionEnd),i=k.value.substring(f,d),{start:f,end:d,text:i,replace:function(a){return k.value.substring(0,f)+a+k.value.substring(d,k.value[c])}})}})(jQuery,"length","createRange","duplicate");
