Abl.UI.Overlay=function(a){return(function(r){var k={},l=$("<div></div>"),c=$("<div></div>"),e=$("<a href='#close'></a>"),b=false,d=null;k.params=$.extend(true,{},Abl.UI.Overlay.defaults,r);function g(){if(d){clearTimeout(d);d=null;}}function o(s){if(s){$(window).bind("resize.abl-ui-overlay",function(){l.css({width:$(window).width()+"px",height:$(window).height()+"px"});k.moveTo(null,((k.isOpen())&&(k.params.animateOnWindowResize)));});}else{$(window).unbind("resize.abl-ui-overlay");}}k.getContent=function(){return c.children().not(e);};k.onDispose=function(){};function n(){k.onDispose();k.jobBag=null;e.unbind().remove();c.empty().remove();l.unbind().remove();}k.onClose=function(){};function j(){if(typeof k.params.onClose==="function"){k.params.onClose();}k.onClose();o(false);c.hide();l.hide();n();}k.onResize=function(s,t){if(!k.params.resizeContent){return;}s=(typeof s==="object")?s:{width:k.params.position.width,height:k.params.position.height};t=(typeof t==="number")?t:0;if(t>0){k.getContent().animate({width:s.width+"px",height:s.height+"px"},k.params.animationSpeed||500);}else{k.getContent().css({width:s.width+"px",height:s.height+"px"});}};k.onBuildHtml=function(s){if(typeof s!=="function"){throw"Abl.UI.Overlay.onBuildHtml() must provide callback method";}s();};function q(s){if(typeof k.params.onBuildHtml==="function"){k.params.onBuildHtml.call(c,function(){k.onBuildHtml.call(c,s);});}else{k.onBuildHtml.call(c,s);}}k.onOpen=function(s){if(typeof s==="function"){s();}};function f(s){if(typeof k.params.onOpen==="function"){k.params.onOpen(function(){if(typeof s==="function"){s();}});}k.onOpen(function(){if(typeof s==="function"){s();}});}k.isOpen=function(){return c.is(":visible");};k.isAnimating=function(){return b;};k.getFrame=function(){return c;};k.getFrameSize=function(){return{width:c.width(),height:c.height()};};function p(u,s,x,t){var v=-1,y=0;if(typeof t==="string"){t=t.toLowerCase();switch(t){case"center":v=0.5;break;case"left":case"top":return 10;case"right":case"bottom":v=0.9;break;default:v=(u==="horizontal")?0.5:0.3;break;}}else{if(typeof t==="number"){if(t>1){return parseInt(t,10);}v=t;}}if(v<0){v=0.5;}if(v>1){v=0.9;}y=parseInt((s-x)*v,10);return(y<0)?0:y;}function m(){var s={width:$(window).width(),height:$(window).height()},u=p("horizontal",s.width,k.params.position.width,k.params.position.left),t=p("vertical",s.height,k.params.position.height,k.params.position.top);return{left:u,top:t};}function h(s){if(s){if(s.left){k.params.position.left=s.left;}if(s.top){k.params.position.top=s.top;}if(s.width){k.params.position.width=s.width;}if(s.height){k.params.position.height=s.height;}}}function i(t,s){l.css({position:"fixed",left:"0",top:"0","background-color":k.params.overlay.color||"#000000"}).addClass(k.params.cssClass+" overlay").hide().appendTo("body");if(k.params.autoClose){l.click(function(u){u.preventDefault();k.close();});}c.css({position:"fixed",left:"0",top:"0"}).addClass(k.params.cssClass+" frame").hide().appendTo("body");if(k.params.closeButton.show){e.addClass(k.params.closeButton.cssClass||"close-button").text(k.params.closeButton.text||"close").attr("title",k.params.closeButton.title||"close").appendTo(c).click(function(u){u.preventDefault();k.close();});}l.css({width:$(window).width()+"px",height:$(window).height()+"px"}).fadeTo(1,k.params.overlay.opacity).show();k.moveTo(t);c.show();q.call(c,function(){e.appendTo(c);k.onResize();s();});}k.moveTo=function(v,s){var u,t;h(v);u=m();t={width:k.params.position.width,height:k.params.position.height};if(b){c.stop();b=false;g();d=setTimeout(function(){k.moveTo(null,true);},k.params.animationDelay||100);return;}if(s){b=true;c.animate({left:u.left+"px",top:u.top+"px",width:t.width+"px",height:t.height+"px"},k.params.animationSpeed||500,function(){b=false;});k.onResize(t,k.params.animationSpeed||500);}else{c.css({left:u.left+"px",top:u.top+"px",width:t.width+"px",height:t.height+"px"});k.onResize(t,0);}};k.close=function(){j();};k.open=function(u,s,t){if(s){k.jobBag=s;}o(true);i(u,function(){f(function(){if(typeof t==="function"){t();}});});};return k;}(a));};Abl.UI.Overlay.defaults={cssClass:"ui-overlay",autoClose:true,resizeContent:false,animationSpeed:500,animationDelay:100,animateOnWindowResize:false,overlay:{color:"#000000",opacity:0.5},closeButton:{show:true,cssClass:"close-button",text:"close",title:"close window"},position:{width:200,height:150,left:"default",top:"default"},onBuildHtml:null,onOpen:null,onClose:null,onDispose:null};
