jQuery.fn.boxy_green=function(options){options=options||{};return this.each(function(){var node=this.nodeName.toLowerCase(),self=this;if(node=="a")jQuery(this).click(function(){var active=Boxy_green.linkedTo(this),href=this.getAttribute("href"),localOptions=jQuery.extend({actuator:this,title:this.title},options);if(active)active.show();else if(href.indexOf("#")>=0){var content=jQuery(href.substr(href.indexOf("#"))),newContent=content.clone(true);content.remove();localOptions.unloadOnHide=false;new Boxy_green(newContent,
localOptions)}else{if(!localOptions.cache)localOptions.unloadOnHide=true;Boxy_green.load(this.href,localOptions)}return false});else if(node=="form")jQuery(this).bind("submit.boxy_green",function(){Boxy_green.confirm(options.message||"Please confirm:",function(){jQuery(self).unbind("submit.boxy_green").submit()});return false})})};
function Boxy_green(element,options){this.boxy_green=jQuery(Boxy_green.WRAPPER);jQuery.data(this.boxy_green[0],"boxy_green",this);this.visible=false;this.options=jQuery.extend({},Boxy_green.DEFAULTS,options||{});if(this.options.modal)this.options=jQuery.extend(this.options,{center:true,draggable:false});if(this.options.actuator)jQuery.data(this.options.actuator,"active.boxy_green",this);this.setContent(element||"<div></div>");this._setupTitleBar();this.boxy_green.css("display","none").appendTo(document.body);
this.toTop();if(this.options.fixed)if(jQuery.browser.msie&&jQuery.browser.version<7)this.options.fixed=false;else this.boxy_green.addClass("fixed");if(this.options.center&&Boxy_green._u(this.options.x,this.options.y))this.center();else this.moveTo(Boxy_green._u(this.options.x)?this.options.x:Boxy_green.DEFAULT_X,Boxy_green._u(this.options.y)?this.options.y:Boxy_green.DEFAULT_Y);if(this.options.show)this.show()}Boxy_green.EF=function(){};
jQuery.extend(Boxy_green,{WRAPPER:"<table cellspacing='0' cellpadding='0' border='0' class='boxy_green-wrapper'>"+"<tr><td colspan='3'><span class='green_top_t'><b></b></span></td></tr>"+"<tr><td colspan='3' class='boxy_green-inner'></td></tr>"+"<tr><td colspan='3'><span class='green_bot_t'><b></b></span></td></tr>"+"</table>",DEFAULTS:{title:null,closeable:true,draggable:true,clone:false,actuator:null,center:true,show:true,modal:false,fixed:true,closeText:"[close]",unloadOnHide:false,clickToFront:false,
behaviours:Boxy_green.EF,afterDrop:Boxy_green.EF,afterShow:Boxy_green.EF,afterHide:Boxy_green.EF,beforeUnload:Boxy_green.EF},DEFAULT_X:50,DEFAULT_Y:50,zIndex:1337,dragConfigured:false,resizeConfigured:false,dragging:null,load:function(url,options){options=options||{};var ajax={url:url,type:"GET",dataType:"html",cache:false,success:function(html){html=jQuery(html);if(options.filter)html=jQuery(options.filter,html);new Boxy_green(html,options)}};jQuery.each(["type","cache"],function(){if(this in options){ajax[this]=
options[this];delete options[this]}});jQuery.ajax(ajax)},get:function(ele){var p=jQuery(ele).parents(".boxy_green-wrapper");return p.length?jQuery.data(p[0],"boxy_green"):null},linkedTo:function(ele){return jQuery.data(ele,"active.boxy_green")},alert:function(message,callback,options){return Boxy_green.ask(message,["OK"],callback,options)},confirm:function(message,after,options){return Boxy_green.ask(message,["OK","Cancel"],function(response){if(response=="OK")after()},options)},ask:function(question,
answers,callback,options){options=jQuery.extend({modal:true,closeable:false},options||{},{show:true,unloadOnHide:true});var body=jQuery("<div></div>").append(jQuery('<div class="question" style="margin:0;"></div>').html(question));var map={},answerStrings=[];if(answers instanceof Array)for(var i=0;i<answers.length;i++){map[answers[i]]=answers[i];answerStrings.push(answers[i])}else for(var k in answers){map[answers[k]]=k;answerStrings.push(answers[k])}var buttons=jQuery('<form class="answers"></form>');
buttons.html(jQuery.map(answerStrings,function(v){return"<input type='button' value='"+v+"' />"}).join(" "));jQuery("input[type=button]",buttons).click(function(){var clicked=this;Boxy_green.get(this).hide(function(){if(callback)callback(map[clicked.value])})});body.append('<div style="clear:both;"></div>');body.append(buttons);new Boxy_green(body,options)},isModalVisible:function(){return jQuery(".boxy_green-modal-blackout").length>0},_u:function(){for(var i=0;i<arguments.length;i++)if(typeof arguments[i]!=
"undefined")return false;return true},_handleResize:function(evt){var d=jQuery(document);jQuery(".boxy_green-modal-blackout").css("display","none").css({width:d.width(),height:d.height()}).css("display","block")},_handleDrag:function(evt){var d;if(d=Boxy_green.dragging)d[0].boxy_green.css({left:evt.pageX-d[1],top:evt.pageY-d[2]})},_nextZ:function(){return Boxy_green.zIndex++},_viewport:function(){var d=document.documentElement,b=document.body,w=window;return jQuery.extend(jQuery.browser.msie?{left:b.scrollLeft||
d.scrollLeft,top:b.scrollTop||d.scrollTop}:{left:w.pageXOffset,top:w.pageYOffset},!Boxy_green._u(w.innerWidth)?{width:w.innerWidth,height:w.innerHeight}:!Boxy_green._u(d)&&!Boxy_green._u(d.clientWidth)&&d.clientWidth!=0?{width:d.clientWidth,height:d.clientHeight}:{width:b.clientWidth,height:b.clientHeight})}});
Boxy_green.prototype={estimateSize:function(){this.boxy_green.css({visibility:"hidden",display:"block"});var dims=this.getSize();this.boxy_green.css("display","none").css("visibility","visible");return dims},getSize:function(){return[this.boxy_green.width(),this.boxy_green.height()]},getContentSize:function(){var c=this.getContent();return[c.width(),c.height()]},getPosition:function(){var b=this.boxy_green[0];return[b.offsetLeft,b.offsetTop]},getCenter:function(){var p=this.getPosition();var s=this.getSize();
return[Math.floor(p[0]+s[0]/2),Math.floor(p[1]+s[1]/2)]},getInner:function(){return jQuery(".boxy_green-inner",this.boxy_green)},getContent:function(){return jQuery(".boxy_green-content",this.boxy_green)},setContent:function(newContent){newContent=jQuery(newContent).css({display:"block"}).addClass("boxy_green-content");if(this.options.clone)newContent=newContent.clone(true);this.getContent().remove();this.getInner().append(newContent);this._setupDefaultBehaviours(newContent);this.options.behaviours.call(this,
newContent);return this},moveTo:function(x,y){this.moveToX(x).moveToY(y);return this},moveToX:function(x){if(typeof x=="number")this.boxy_green.css({left:x});else this.centerX();return this},moveToY:function(y){if(typeof y=="number")this.boxy_green.css({top:y});else this.centerY();return this},centerAt:function(x,y){var s=this[this.visible?"getSize":"estimateSize"]();if(typeof x=="number")this.moveToX(x-s[0]/2);if(typeof y=="number")this.moveToY(y-s[1]/2);return this},centerAtX:function(x){return this.centerAt(x,
null)},centerAtY:function(y){return this.centerAt(null,y)},center:function(axis){var v=Boxy_green._viewport();var o=this.options.fixed?[0,0]:[v.left,v.top];if(!axis||axis=="x")this.centerAt(o[0]+v.width/2,null);if(!axis||axis=="y")this.centerAt(null,o[1]+v.height/2);return this},centerX:function(){return this.center("x")},centerY:function(){return this.center("y")},resize:function(width,height,after){if(!this.visible)return;var bounds=this._getBoundsForResize(width,height);this.boxy_green.css({left:bounds[0],
top:bounds[1]});this.getContent().css({width:bounds[2],height:bounds[3]});if(after)after(this);return this},tween:function(width,height,after){if(!this.visible)return;var bounds=this._getBoundsForResize(width,height);var self=this;this.boxy_green.stop().animate({left:bounds[0],top:bounds[1]});this.getContent().stop().animate({width:bounds[2],height:bounds[3]},function(){if(after)after(self)});return this},isVisible:function(){return this.visible},show:function(){if(this.visible)return;if(this.options.modal){var self=
this;if(!Boxy_green.resizeConfigured){Boxy_green.resizeConfigured=true;jQuery(window).resize(function(){Boxy_green._handleResize()})}this.modalBlackout=jQuery('<div class="boxy_green-modal-blackout"></div>').css({zIndex:Boxy_green._nextZ(),opacity:0.7,width:jQuery(document).width(),height:jQuery(document).height()}).appendTo(document.body);this.toTop();if(this.options.closeable)jQuery(document.body).bind("keypress.boxy_green",function(evt){var key=evt.which||evt.keyCode;if(key==27){self.hide();jQuery(document.body).unbind("keypress.boxy_green")}})}this.boxy_green.stop().css({opacity:1}).show();
this.visible=true;this._fire("afterShow");return this},hide:function(after){if(!this.visible)return;var self=this;if(this.options.modal){jQuery(document.body).unbind("keypress.boxy_green");this.modalBlackout.animate({opacity:0},function(){jQuery(this).remove()})}this.boxy_green.stop().animate({opacity:0},300,function(){self.boxy_green.css({display:"none"});self.visible=false;self._fire("afterHide");if(after)after(self);if(self.options.unloadOnHide)self.unload()});return this},toggle:function(){this[this.visible?
"hide":"show"]();return this},hideAndUnload:function(after){this.options.unloadOnHide=true;this.hide(after);return this},unload:function(){this._fire("beforeUnload");this.boxy_green.remove();if(this.options.actuator)jQuery.data(this.options.actuator,"active.boxy_green",false)},toTop:function(){this.boxy_green.css({zIndex:Boxy_green._nextZ()});return this},getTitle:function(){return jQuery("> .title-bar h2",this.getInner()).html()},setTitle:function(t){jQuery("> .title-bar h2",this.getInner()).html(t);
return this},_getBoundsForResize:function(width,height){var csize=this.getContentSize();var delta=[width-csize[0],height-csize[1]];var p=this.getPosition();return[Math.max(p[0]-delta[0]/2,0),Math.max(p[1]-delta[1]/2,0),width,height]},_setupTitleBar:function(){if(this.options.title){var self=this;var tb=jQuery("<div class='title-bar'></div>").html("<h2>"+this.options.title+"</h2>");if(this.options.closeable)tb.append(jQuery("<a href='#' class='close'></a>").html(this.options.closeText));if(this.options.draggable){tb[0].onselectstart=
function(){return false};tb[0].unselectable="on";tb[0].style.MozUserSelect="none";if(!Boxy_green.dragConfigured){jQuery(document).mousemove(Boxy_green._handleDrag);Boxy_green.dragConfigured=true}tb.mousedown(function(evt){self.toTop();Boxy_green.dragging=[self,evt.pageX-self.boxy_green[0].offsetLeft,evt.pageY-self.boxy_green[0].offsetTop];jQuery(this).addClass("dragging")}).mouseup(function(){jQuery(this).removeClass("dragging");Boxy_green.dragging=null;self._fire("afterDrop")})}this.getInner().prepend(tb);
this._setupDefaultBehaviours(tb)}},_setupDefaultBehaviours:function(root){var self=this;if(this.options.clickToFront)root.click(function(){self.toTop()});jQuery(".close",root).click(function(){self.hide();return false}).mousedown(function(evt){evt.stopPropagation()})},_fire:function(event){this.options[event].call(this)}};
