Abl.UI.Overlay=function(a){return(function(f){var t={},o=false,l=false,e=null,r=Abl.createIFrame({src:"about:blank"}),i=$("<div></div>"),b=$("<div></div>"),n=[r,i,b],c=$("<a></a>"),k=null,s=Abl.Browser.isIE6();t.params=$.extend(true,{},Abl.UI.Overlay.defaults,f);function g(){if(e){clearTimeout(e);e=null;}}t.isOpen=function(){return o;};t.isAnimating=function(){return l;};t.getCanvass=function(){return i;};t.getFrame=function(){return b;};t.getPage=function(){return k;};t.setPageSource=function(v){if(k){k.attr("src",v);}};t.setPageData=function(v){k.get(0).data=v;};t.getPageData=function(){return k.get(0).data;};t.clearPageData=function(){k.get(0).data=null;};t.onBuildFrame=function(){if(typeof t.params.onBuildFrame==="function"){t.params.onBuildFrame.call(b);}};t.onOpen=function(v){if(typeof v==="function"){v.call(t);}if(typeof t.params.onOpen==="function"){t.params.onOpen.call(t);}};t.onClose=function(v){if(typeof v==="function"){v.call(t);}if(typeof t.params.onClose==="function"){t.params.onClose.call(t);}};t.onRequestClose=function(){return(typeof t.params.onRequestClose==="function")?t.params.onRequestClose():true;};t.getFrameMetrics=function(){var v={inner:{width:b.width(),height:b.height()},outer:{width:b.outerWidth(),height:b.outerHeight()}};v.deltaX=v.outer.width-v.inner.width;v.deltaY=v.outer.height-v.inner.height;return v;};function m(){var w,v=Abl.UI.getWindowMetrics();for(w=0;w<2;w++){n[w].css({left:(v.scroll.left)+"px",top:(v.scroll.top)+"px",width:(v.size.width)+"px",height:(v.size.height)+"px"});}}function h(y,x,v,B){var D=Abl.UI.getWindowMetrics(),A=t.getFrameMetrics(),z=t.params.frame.hPos,E=t.params.frame.vPos;i.height(Math.max($(document).height(),$(window).height()));if(typeof x==="number"){A.inner.width=x;A.outer.width=A.inner.width+A.deltaX;}if(typeof v==="number"){A.inner.height=v;A.outer.height=A.inner.height+A.deltaY;}function C(I,H){var G,F;if(typeof I==="string"){G=I.toLowerCase();if(G==="default"){I=(H==="horizontal")?"center":"defVert";}if((G==="center")&&(H==="vertical")){I="middle";}}if(typeof I==="string"){G=I.toLowerCase();switch(G){case"center":F=parseInt((D.size.width-A.outer.width)/2,10);G=(F<0)?0:F+"px";break;case"middle":F=parseInt((D.size.height-A.outer.height)/2,10);G=(F<0)?0:F+"px";break;case"defvert":F=parseInt((D.size.height-A.outer.height)/4,10);G=(F<0)?0:F+"px";break;default:throw"Abl.UI.Overlay.setFramePosition() - unrecognised frame position '"+G+"'!";}}else{if(I<1){G=parseInt(I*100,10)+"%";}else{G=parseInt(I,10)+"px";}}return G;}function w(){l=false;if(typeof B==="function"){B();}}l=true;if((k)&&(k.length>0)){k.css({width:A.inner.width,height:A.inner.height});}if(y){b.animate({left:C(z,"horizontal"),top:C(E,"vertical"),width:A.inner.width,height:A.inner.height},t.params.repositionSpeed,function(){w();});}else{b.css({left:C(z,"horizontal"),top:C(E,"vertical"),width:A.inner.width,height:A.inner.height});w();}}t.close=function(x){if((l)||(!o)){return;}if(!t.onRequestClose()){return;}function w(){var y,z;for(y=0;y<n.length;y++){z=n[y].get(0);if(z.parentNode){z.parentNode.removeChild(z);}}}function v(){w();l=false;t.onClose(x);}o=false;l=true;if(t.params.fadeOutSpeed>0){b.frameOut(parseInt(t.params.fadeOutSpeed*t.params.fadeOutAccelerator,10));i.fadeTo(t.params.fadeOutSpeed,0,function(){v();});}else{b.frameOut();i.css({opacity:0});v();}};t.open=function(){var A=$("body"),y,x,z,w=((typeof arguments[0]==="object")?arguments[0]:null)||{},B=(typeof arguments[0]==="function")?arguments[0]:(arguments.length>1)?arguments[1]:null;if((l)||(o)){return;}o=true;b.hide().frameOut();for(y=0;y<n.length;y++){n[y].appendTo(A);}h(false,w.width,w.height);function v(){l=false;t.onOpen(B);}l=true;if(t.params.fadeInSpeed>0){z=parseInt(t.params.fadeInSpeed*t.params.fadeInAccelerator,10);x=t.params.fadeInSpeed-z;setTimeout(function(){b.frameIn(z);},x);i.fadeTo(t.params.fadeInSpeed,t.params.opacity,function(){v();});}else{b.frameIn();i.css({opacity:t.params.opacity});v();}};t.setAnimation=function(v){switch(v.toLowerCase()){case"show":$.fn.frameIn=$.fn.show;$.fn.frameOut=$.fn.hide;break;case"fadein":$.fn.frameIn=$.fn.fadeIn;$.fn.frameOut=$.fn.fadeOut;break;case"slidedown":$.fn.frameIn=$.fn.slideDown;$.fn.frameOut=$.fn.slideUp;break;default:throw"Abl.UI.Overlay.setAnimation() - unrecognised animation effect '"+v+"'!";}};t.setFrameSize=function(v,x,y){h(o,v,x,y);};function d(){i.click(function(v){v.preventDefault();if(t.params.autoClose){t.close();}});if(t.params.frame.closeLink.render){c.click(function(v){v.preventDefault();t.close();});}$(window).bind("resize.ablOverlay",function(){g();if(o){if(s){m();}e=setTimeout(function(){h(true);},t.params.repositionDelay);}});$(window).bind("scroll.ablOverlay",function(){if(o){if(s){m();}}});}function j(){i.addClass(t.params.canvass.cssClass).css({"background-color":t.params.color}).height(Math.max($(document).height(),$(window).height()));}function u(){var v=t.params.frame;b.addClass(v.cssClass).css(v.css).css({opacity:"1.0",width:t.params.frame.width,height:t.params.frame.height});}function p(){var v=t.params.frame.closeLink;c.addClass(v.cssClass).css(v.css).attr("href","#close").text(v.text);}function q(){var v;for(v=0;v<n.length;v++){n[v].addClass(t.params.cssClass).css({position:(s)?"absolute":t.params.defaultPositioning,left:"0",top:"0",opacity:"0.0","z-index":t.params.baseZ+v,width:"100%",height:"100%"});}j();u();if(s){m();}if(t.params.frame.closeLink.render){c.prependTo(b);p();}if(t.params.createIFrame){k=Abl.createIFrame({width:t.params.frame.width,height:t.params.frame.height}).appendTo(b);k.get(0).overlay=t;}t.onBuildFrame();}t.dispose=function(){if(o){t.close();}if(k){t.clearPageData();}g();$(window).unbind(".ablOverlay");i.unbind();c.unbind();n.length=0;c=b=i=r=null;};t.setAnimation(t.params.animationEffect);q();d();return t;}(a));};Abl.UI.Overlay.defaults={cssClass:"ablOverlay",baseZ:10000,defaultPositioning:"fixed",autoClose:true,createIFrame:false,animationEffect:"fadeIn",fadeInSpeed:200,fadeOutSpeed:400,fadeInAccelerator:0.3,fadeOutAccelerator:0.5,repositionDelay:300,repositionSpeed:500,color:"#000",opacity:0.6,canvass:{cssClass:"canvass"},frame:{width:300,height:200,hPos:"default",vPos:"default",cssClass:"frame",css:{},closeLink:{render:true,text:"close",cssClass:"close",css:{}}},onBuildFrame:null,onOpen:null,onRequestClose:null,onClose:null};
