jQuery.fn.boxy=function(A){A=jQuery.extend({single:true},A||{});this.each(function(){var C=this.nodeName.toLowerCase(),B=this;if(C=="a"){jQuery(this).click(function(){var E=this,D=this.getAttribute("href"),F=jQuery.extend(A,{title:this.title});var H=function(I){if(Boxy.cache[D]){I(Boxy.cache[D].clone())}else{if(D.indexOf("#")>=0){D=D.substr(D.indexOf("#"));Boxy.cache[D]=jQuery(D).remove();I(Boxy.cache[D].clone())}else{jQuery.ajax({url:E.href,method:A.method||"GET",dataType:"html",data:{__math__:Math.random()},success:function(J){J=jQuery(J);if(A.cache){Boxy.cache[D]=J;J=J.clone()}I(J)}})}}};var G;if(A.single&&(G=jQuery.data(this,"active.boxy"))){H(function(I){G.setContent(I).center().show()})}else{H(function(I){jQuery.data(E,"active.boxy",new Boxy(I,F))})}return false})}else{if(C=="form"){jQuery(this).bind("submit.boxy",function(){Boxy.ask(A.message||"Please confirm:",["OK","Cancel"],function(D){if(D=="OK"){jQuery(B).unbind("submit.boxy").submit()}},{modal:true,closeable:false});return false})}}})};function Boxy(B,A){this.boxy=jQuery(this.WRAPPER);jQuery.data(this.boxy[0],"boxy",this);this.visible=false;this.options=jQuery.extend({title:null,closeable:true,draggable:true,clone:false,center:true,show:true,modal:false,fixed:true},A||{});if(this.options.modal){this.options=jQuery.extend(this.options,{center:true,draggable:false})}this.setContent(B||"<div></div>");this._setupTitleBar();this._setupBehaviours();this.boxy.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.addClass("fixed")}}if(this.options.center&&typeof this.options.x=="undefined"&&typeof this.options.y=="undefined"){this.center()}else{this.moveTo(this.options.x||Boxy.DEFAULT_X,this.options.y||Boxy.DEFAULT_Y)}if(this.options.show){this.show()}}jQuery.extend(Boxy,{DEFAULT_X:50,DEFAULT_Y:50,cache:{},zIndex:1337,dragConfigured:false,dragging:null,get:function(A){var B=jQuery(A).parents(".boxy-wrapper");return B.length?jQuery.data(B[0],"boxy"):null},ask:function(C,F,I,J){J=jQuery.extend({modal:true,closeable:false},J,{show:true});var E=jQuery("<div></div>").append(jQuery('<div class="question"></div>').html(C));var A={},H=[];if(F instanceof Array){for(var D=0;D<F.length;D++){A[F[D]]=F[D];H.push(F[D])}}else{for(var B in F){A[F[B]]=B;H.push(F[B])}}var G=jQuery('<form class="answers"></form>');G.html(jQuery.map(H,function(K){return"<input type='button' value='"+K+"' />"}).join(" "));jQuery("input[type=button]",G).click(function(){var K=this;Boxy.get(this).hide(function(){if(I){I(A[K.value])}})});E.append(G);new Boxy(E,J)},_handleDrag:function(A){var B;if(B=Boxy.dragging){B[0].boxy.css({left:A.pageX-B[1],top:A.pageY-B[2]})}},_nextZ:function(){return Boxy.zIndex++}});Boxy.prototype={WRAPPER:"<table cellspacing='0' cellpadding='0' border='0' class='boxy-wrapper'><tr><td class='top-left'></td><td class='top'></td><td class='top-right'></td></tr><tr><td class='left'></td><td class='boxy-inner'></td><td class='right'></td></tr><tr><td class='bottom-left'></td><td class='top'></td><td class='bottom-right'></td></tr></table>",estimateSize:function(){this.boxy.css("display","none").css({top:0,left:0,visibility:"hidden"}).css("display","block");var A=this.getSize();this.boxy.css("display","none").css("visibility","visible");return A},getSize:function(){return[this.boxy.width(),this.boxy.height()]},getContentSize:function(){var A=this.getContent();return[A.width(),A.height()]},getPosition:function(){var A=this.boxy[0];return[A.offsetLeft,A.offsetTop]},getCenter:function(){var B=this.getPosition();var A=this.getSize();return[Math.floor(B[0]+A[0]/2),Math.floor(B[1]+A[1]/2)]},getInner:function(){return jQuery(".boxy-inner",this.boxy)},getContent:function(){return jQuery(".boxy-content",this.boxy)},setContent:function(A){A=jQuery(A).css({display:"block"}).addClass("boxy-content");if(this.options.clone){A=A.clone()}var B=this.getContent();if(B.length){B.replaceWith(A)}else{this.getInner().append(A)}return this},moveTo:function(A,B){this.boxy.css({left:A,top:B});return this},centerAt:function(A,C){if(this.visible){var B=this.getSize()}else{var B=this.estimateSize()}this.moveTo(A-B[0]/2,C-B[1]/2);return this},center:function(){if(this.options.fixed){var B=[0,0]}else{var B=jQuery.browser.msie?[document.documentElement.scrollLeft,document.documentElement.scrollTop]:[window.pageXOffset,window.pageYOffset]}var A=[B[0],B[1],jQuery(window).width(),jQuery(window).height()];this.centerAt((A[0]+A[2]/2),(A[1]+A[3]/2));return this},resize:function(B,A,D){if(!this.visible){return }var C=this._getBoundsForResize(B,A);this.boxy.css({left:C[0],top:C[1]});this.getContent().css({width:C[2],height:C[3]});if(D){D(this)}return this},tween:function(C,A,E){if(!this.visible){return }var D=this._getBoundsForResize(C,A);var B=this;this.boxy.stop().animate({left:D[0],top:D[1]});this.getContent().stop().animate({width:D[2],height:D[3]},function(){if(E){E(B)}});return this},isVisible:function(){return this.visible},show:function(){if(this.visible){return }if(this.options.modal){jQuery('<div class="boxy-modal-blackout"></div>').css({zIndex:Boxy._nextZ(),width:jQuery(document).width(),height:jQuery(document).height()}).appendTo(document.body);this.toTop()}this.boxy.stop().css({opacity:1,display:"block"});this.visible=true;if(document.all&&!window.XMLHttpRequest){$("select").css({visibility:"hidden"});$(".boxy-content select").css({visibility:"visible"})}return this},hide:function(B){if(!this.visible){return }var A=this;if(this.options.modal){jQuery(".boxy-modal-blackout").animate({opacity:0},function(){jQuery(this).remove()})}this.boxy.stop().animate({opacity:0},300,function(){A.boxy.css({display:"none"});A.visible=false;if(B){B(A)}});if(document.all&&!window.XMLHttpRequest){$("select").css({visibility:"visible"})}return this},toTop:function(){this.boxy.css({zIndex:Boxy._nextZ()});return this},_getBoundsForResize:function(C,A){var B=this.getContentSize();var E=[C-B[0],A-B[1]];var D=this.getPosition();return[Math.max(D[0]-E[0]/2,0),Math.max(D[1]-E[1]/2,0),C,A]},_setupTitleBar:function(){if(this.options.title){var B=this;var A=jQuery("<div class='title-bar'></div>").html(this.options.title);if(this.options.closeable){A.append(jQuery("<a href='#' class='close'></a>").html("Close [x]"))}if(this.options.draggable){if(!Boxy.dragConfigured){jQuery(document).mousemove(Boxy._handleDrag);Boxy.dragConfigured=true}A.mousedown(function(C){B.toTop();Boxy.dragging=[B,C.pageX-B.boxy[0].offsetLeft,C.pageY-B.boxy[0].offsetTop];jQuery(this).addClass("dragging")});A.mouseup(function(){jQuery(this).removeClass("dragging");Boxy.dragging=null})}this.getInner().prepend(A)}},_setupBehaviours:function(){var A=this;jQuery(".close",this.boxy).click(function(){A.hide();return false}).mousedown(function(B){B.stopPropagation()})}};
