var Etch={buttons:{yes:{text:"Yes",cssclass:"etch-btn etch-btn-ok",id:"etch-btn-yes",callback:"onYes"},ok:{text:"Ok",cssclass:"etch-btn etch-btn-ok",id:"etch-btn-ok",callback:"onOk"},save:{text:"Save",cssclass:"etch-btn etch-btn-ok",id:"etch-btn-save",callback:"onSave"},no:{text:"No",cssclass:"etch-btn etch-btn-cancel",id:"etch-btn-no",callback:"onNo"},cancel:{text:"Cancel",cssclass:"etch-btn etch-btn-cancel",id:"etch-btn-cancel",callback:"onCancel"}},data:{focusEl:$(document)},timers:{},key:{UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,PAGEUP:33,PAGEDOWN:34,END:35,HOME:36},keys:{SUGGEST:[38,40,33,34]},defaults:{title:null,msg:null,url:null,data:null,callback:null,height:"auto",minWidth:200,modal:true,position:false,anchorTo:null,clickAwayToClose:true,delaySuggest:200,maxHeight:300,minChars:3},setDefaults:function(b){var c=b||{};var a;for(a in this.defaults){if(c[a]===undefined){c[a]=this.defaults[a]}}return c},init:function(){$(".etch-inline").remove();if(!$("#etch-dialog").html()){$('<div id="etch-modal" class="etch-modal" /><div id="etch-dialog" class="etch-dialog"><div id="etch-title" /><div id="etch-body" /><div id="etch-footer" /></div>').prependTo("body");$("#etch-modal,#etch-dialog").hide()}},attach:function(a){$(".etch-yesno").click(function(b){b.preventDefault();Etch.confirm((this.id&&a[this.id])?a[this.id]:{onYes:function(){document.location=b.target.href}})});$(".etch-selectable").each(function(){Etch.selectable(this,(this.id&&a[this.id])?a[this.id]:null)})},_button:function(c,a){c=c.text?c:this.buttons[c];var b='<input type="button" ';if(c.id){b+='id="'+c.id+'" '}if(c.cssclass){b+='class="'+c.cssclass+'" '}if(c.text){b+='value="'+c.text+'" '}b+="/>";b=$(b);b.click(c.onClick||function(d){Etch._closeDialog(this)});if(c.callback){if(a[c.callback]!==undefined){b.click(a[c.callback])}}return b},_closeDialog:function(a){$("#etch-modal,#etch-dialog").hide();if(Etch.timers.dialog){clearTimeout(Etch.timers.dialog)}},_centerDialog:function(){var a=$("#etch-dialog");a.css("top",($(window).height()/2)-(a.height()/2)+$(window).scrollTop()).css("left",($(window).width()/2)-(a.width()/2)).click(function(b){b.stopPropagation()})},_positionDialog:function(c){var b=$("#"+c.anchorTo);var e=b.position();var f=$("#etch-dialog");switch(c.position){case"topleft":f.css("top",e.top-f.outerHeight());f.css("left",e.left);break;case"topright":f.css("top",e.top-f.outerHeight());f.css("left",e.left+b.outerWidth()-f.outerWidth());break;case"bottomright":f.css("top",e.top+b.outerHeight(true));f.css("left",e.left+b.outerWidth()-f.outerWidth());break;case"bottomleft":default:f.css("top",e.top+b.outerHeight(true));f.css("left",e.left);break}},alert:function(a){var b=this.setDefaults(a);b.title=b.title||"Alert";b.msg=b.msg||"";b.buttons=[this.buttons.ok];b.height=null;b.width="auto";b.clickAwayToClose=false;this.dialog(b)},confirm:function(a){var b=this.setDefaults(a);b.title=b.title||"Confirm";b.msg=b.msg||"Are you sure you want to continue?";b.buttons=[this.buttons.yes,this.buttons.no];b.height="auto";b.width=null;this.dialog(b)},_dialog:function(){this.data._dialog=true;$(document).keyup(function(a){if(a.keyCode==Etch.key.ESC){$("#etch-dialog").find(".etch-btn-cancel:first").trigger("click")}})},dialog:function(a){this.init();var c=this.setDefaults(a);if(!c.buttons){c.buttons=[this.buttons.ok,this.buttons.cancel]}if(c.anchorTo){c.modal=false}$("#etch-dialog").show();$("#etch-title").html('<a class="etch-close" href="#">X</a>'+(c.title||"&nbsp;"));$("#etch-footer").html("");if(c.get){$("#etch-body").html('<div class="loading" />').load(c.get)}else{$("#etch-body").html(c.msg||"")}for(var b=0;b<c.buttons.length;b++){if(b>0){$("#etch-footer").append(" ")}$("#etch-footer").append(this._button(c.buttons[b],c))}if(c.width>0){$("#etch-dialog").width(c.width)}else{$("#etch-dialog").css("width","auto");if($("#etch-dialog").width()<c.minWidth){$("#etch-dialog").width(c.minWidth)}}if(c.height>0){$("#etch-dialog").height(c.height);var d=$("#etch-body").outerHeight(true)-$("#etch-body").height();$("#etch-body").height($("#etch-dialog").height()-$("#etch-title").outerHeight(true)-$("#etch-footer").outerHeight(true)-d)}else{$("#etch-dialog,#etch-body").css("height","auto")}$("#etch-modal").show();$(".etch-close").one("click",function(f){f.preventDefault();$("#etch-dialog").find(".etch-btn-cancel:first").trigger("click")});if(c.modal){$("#etch-modal").removeClass("etch-clear-modal")}else{$("#etch-modal").addClass("etch-clear-modal")}if($("#etch-footer .etch-btn").length>0){$("#etch-footer .etch-btn").last().focus()}if(!c.anchorTo){this._centerDialog()}else{this._positionDialog(c)}if(!this.data._dialog){this._dialog()}if(c.clickAwayToClose){$("#etch-modal").one("click",function(f){$("#etch-dialog").find(".etch-btn-cancel:first").trigger("click")})}if(c.action){if(typeof c.action.click=="function"){this.timers.dialog=setTimeout(c.action.click,c.action.after)}else{this.timers.dialog=setTimeout(function(){$("#etch-dialog").find(".etch-btn-"+c.action.click+":first").trigger("click")},c.action.after)}}},load:function(a){$(".etch-inline").remove();var b=this.setDefaults(a);var c=$('<div class="etch-inline" />');$("#"+b.anchorTo).after(c);c.html('<div class="loading" />').load(b.get)},widget:function(options){$(".etch-inline").remove();var opt=this.setDefaults(options);var inline=$('<div class="etch-inline" />');$("#"+opt.anchorTo).after(inline);inline.html('<div class="loading" />');$.get(opt.get,null,function(xml){inline.html($("html",xml)?$("html",xml).text():"");if($("script",xml)){eval($("script",xml).text())}},"xml")},_selectableKeyPressHandler:function(c){if($("#etch-dialog").is(":visible")){return}var b,a;if($(".etch-selected").length){b=$(".etch-selected:first");a=b.is("tr")?"tr":"li";if(c.keyCode==Etch.key.UP&&b.prev(a).length){b.removeClass("etch-selected").prev(a).addClass("etch-selected").trigger("hover")}else{if(c.keyCode==Etch.key.DOWN&&b.next(a).length){b.removeClass("etch-selected").next(a).addClass("etch-selected").trigger("hover")}else{if(c.keyCode==Etch.key.HOME&&b.parent().find(a+":first").length){b.removeClass("etch-selected").parent().find(a+":first").addClass("etch-selected").trigger("hover")}else{if(c.keyCode==Etch.key.END&&b.parent().find(a+":last").length){b.removeClass("etch-selected").parent().find(a+":last").addClass("etch-selected").trigger("hover")}else{if(c.keyCode==Etch.key.RETURN){c.preventDefault();b.trigger("hover").trigger("click")}}}}}}else{if(c.keyCode==Etch.key.DOWN||c.keyCode==Etch.key.UP||c.keyCode==Etch.key.END||c.keyCode==Etch.key.HOME){var d=(c.keyCode==Etch.key.UP||c.keyCode==Etch.key.END)?":last":":first";b=$(".etch-selectable"+d);a=b.is("table")?"tbody tr":"li";b.find(a+d).addClass("etch-selected").trigger("hover");$(document).focus()}}},_selectable:function(){this.data._selectable=true;$(document).keydown(this._selectableKeyPressHandler)},selectable:function(d,b){if(!this.data._selectable){this._selectable()}var c=this.setDefaults(b);d=$(d);var a=d.is("table")?"tbody tr":"li";if(c.onHover){d.find(a).each(function(e){$(this).bind("hover",{index:e},c.onHover)})}d.find(a).hover(function(){$(this).addClass("etch-hover").trigger("hover")},function(){$(this).removeClass("etch-hover")}).click(function(f){f.stopPropagation();$(".etch-selected").removeClass("etch-selected");$(this).addClass("etch-selected");if(c.onClick){c.onClick($(this))}});d.scroll(function(f){f.preventDefault()})},suggest:function(a){if(!Etch.data.suggest){Etch.data.suggest={cache:{},last:{}}}var b=this.setDefaults(a);if(!$("#etch-suggest").length){$('<div id="etch-suggest" />').prependTo($("body"))}var c=function(g,j,e){var d,k=$(g).position();var f=$('<ul class="etch-selectable" />');for(d=0;d<j.length;d++){f.append($("<li>"+e.onFormat(j[d])+"</li>").data("suggest",j[d]))}$("#etch-suggest").html("").append(f).css("height","auto").css("top",k.top+g.outerHeight(true)).css("left",k.left).show();if($("#etch-suggest").height()>e.maxHeight){$("#etch-suggest").height(e.maxHeight)}$(".etch-selected").removeClass("etch-selected");Etch.selectable($("#etch-suggest ul:first"),{onClick:function(h){e.onSelect(h.data("suggest"));g.trigger("focusout");Etch.data.suggest.last[g]=g.val();$("#etch-suggest").html("")},onHover:function(i){clearTimeout(Etch.timers.suggestHide);i.stopPropagation();var h=$(this).position();if(h.top+$(this).height()>=$("#etch-suggest").height()||h.top<0){$("#etch-suggest").scrollTop(h.top)}if(e.displayIndex){g.val(j[i.data.index][e.displayIndex]);if(Etch.timers.suggest){clearTimeout(Etch.timers.suggest)}}}})};$("#"+b.id).keyup(function(f){for(kc in Etch.key){if(f.keyCode==Etch.key[kc]){return}}if($(this).val().length>=b.minChars){var d=$(this);if(Etch.timers.suggest){clearTimeout(Etch.timers.suggest)}if(!Etch.data.suggest.cache[d.val()]){Etch.timers.suggest=setTimeout(function(){$("#etch-suggest").html('<div class="loading" />');$.get(b.get,{q:d.val()},function(e){Etch.data.suggest.cache[d.val()]=e;c(d,e,b)},"json")},b.delaySuggest)}else{Etch.timers.suggest=setTimeout(function(){c(d,Etch.data.suggest.cache[d.val()],b)},b.delaySuggest)}}}).focusin(function(){clearTimeout(Etch.timers.suggestHide);Etch.data.focusEl=$(this);if(!$("#etch-suggest ul").length){return}if(!$("#etch-suggest .etch-selected").length){$(".etch-selected").removeClass("etch-selected");$("#etch-suggest").show();if($(this).val().length==0){$("#etch-suggest").find("li:first").addClass("etch-selected").trigger("hover")}}else{if(!$("#etch-suggest").is(":visible")){$("#etch-suggest").show()}}}).focusout(function(f){var d=this;Etch.timers.suggestHide=setTimeout(function(){$("#etch-suggest").hide();if(Etch.data.suggest.last[$(d)]){$(d).val(Etch.data.suggest.last[$(d)])}else{$(d).val("");$("#etch-suggest").html("")}Etch.data.focusEl=$(document)},200)})}};
