/**
  * @name: FD.lightbox 
  * @package: Fairfax Digital Javascript Framework 
  * @version: 1.3 
  * @author: Dave Elkan 
  * @copyright: Copyright 2007. Fairfax Digital. 
  * * * * * * * * * * * * * * * * * * * * * * * * * * 
  *             DO NOT ALTER THIS FILE. 
  * If your requirements are not met by this widget 
  * or this widget does not work please ask 
  * Dave Elkan <delkan@fairfaxdigital.com.au>. 
  * This widget is designed to to be used across 
  * the Fairfax Digital Network and contains no  
  * site specific code. 
  * Altering this file will render it unsupportable. 
  * * * * * * * * * * * * * * * * * * * * * * * * * *  
  **/
FD.LightBox=FD.Box.extend({displayed:false,changing:false,isLoaded:false,children:[],isRelative:false,isInlineContent:false,options:{duration:250,opacity:1,outOfBoundsPadding:5,noOverlay:false,openFunction:Class.empty,closeFunction:Class.empty,idSeparator:"#",className:"fdLightBox",lbOpenClass:"fdLBOpen",lbCloseClass:"fdLBClose",lbInnerClass:"fdLBInner",lbLoadingClass:"loading",extraParams:["width","height","top","left","position"],caching:false,evalScripts:false,useIframe:false},initialize:function(link,options){this.id="fdlb_"+link.id;options.id=this.id;this.setOptions(options);this.parent(this.options);this.box.onmousedown=this.bringToFront.bind(this);this.box.setStyle("overflow","auto");this.box.setStyle("display","none");this.link=link;this.url=this.link.href;this.link.href="javascript:void(0)";this.link.addEvent("click",this.display.bind(this));this.box.setOpacity(0);this.injectBox($$("body")[0]);if(this.options.extraParams){for(var a=0;a<this.options.extraParams.length;a++){if(this.options[this.options.extraParams[a]]){this.box.setStyle(this.options.extraParams[a],this.options[this.options.extraParams[a]])}}}if(this.options.useIframe){this.iframe=new Element("iframe");this.iframe.setProperty("frameBorder","0");this.iframe.setProperty("marginHeight","0");this.iframe.setProperty("marginWidth","0");this.iframe.setProperty("hspace","0");this.iframe.setProperty("vspace","0");this.iframe.width=this.box.getStyle("width").toInt();this.iframe.height=this.box.getStyle("height").toInt()-20;this.iframe.injectInside(this.box)}this.box.setStyle("display","block");if(this.box.getStyle("position")=="relative"){this.isRelative=true;this.origPos=[this.box.getStyle("top").toInt(),this.box.getStyle("left").toInt()];this.box.setStyle("position","absolute")}this.box.setStyle("display","none");var ajaxOpts={method:'get',onComplete:this.onComplete.bind(this),evalScripts:this.options.evalScripts};this.ajaxObj=new Ajax("",ajaxOpts)},display:function(){if(window.webkit){FDLBController.focus(this.id)}if(!this.options.noOverlay&&!FDLBController.overlay.displayed){FDLBController.overlay.display.call(FDLBController.overlay)}if((!this.isLoaded||!this.options.caching)&&!this.isInlineContent){this.getLBContents(this.url)}this.box.setStyle("display","block");this.link.addClass(this.options.lbOpenClass);if(this.isRelative){this.placeRelative()}FDLBController.resizeOverlay();var fxOpts={duration:this.options.duration,onComplete:this.setDisplayed.bind(this)};var thisOpacity=this.box.getStyle("opacity").toInt();if(thisOpacity==0){var fx=new Fx.Style(this.box,"opacity",fxOpts);fx.custom(0,this.options.opacity)}},placeRelative:function(){var linkPos=this.link.getPosition();var boxCoords=this.box.getCoordinates();var wProps=window.getSize();var relTop=linkPos.y+this.origPos[0].toInt();var relLeft=linkPos.x+this.origPos[1].toInt();if(this.options.alignCenterY){relTop=wProps.scroll.y+(wProps.size.y-boxCoords.height)/2}else{if((relTop+boxCoords.height)>(wProps.size.y+wProps.scroll.y)||relTop<0){relTop=(wProps.size.y-boxCoords.height-this.options.outOfBoundsPadding)}else if(relTop<wProps.scroll.y){relTop=wProps.scroll.y+this.options.outOfBoundsPadding}}if(this.options.alignCenterX){relLeft=wProps.scroll.x+(wProps.size.x-boxCoords.width)/2}else{if((relLeft+boxCoords.width)>(wProps.size.x+wProps.scroll.x)||relLeft<0){relLeft=this.options.outOfBoundsPadding}}this.box.setStyle("top",relTop+"px");this.box.setStyle("left",relLeft+"px")},setDisplayed:function(){this.changing=false;this.displayed=true},close:function(){this.displayed=false;var fxOpts={duration:(this.options.duration*2),onComplete:this.clear.bind(this)};var fx=new Fx.Style(this.box,"opacity",fxOpts);fx.custom(this.options.opacity,0);this.link.removeClass(this.options.lbOpenClass);this.children.each(function(thisChild){if(FDLBController.lbs[thisChild].displayed){FDLBController.lbs[thisChild].close()}});if(this.options.closeFunction){if($type(this.options.closeFunctionBind)=="object"){this.options.closeFunction.call(this.options.closeFunctionBind,this)}else{this.options.closeFunction(this)}}FDLBController.checkLbs();this.box.fireEvent("close")},bringToFront:function(){FDLBController.focus(this.id)},clear:function(){this.box.setStyle("display","none")},addChild:function(childId){this.children[this.children.length]=childId.toString()},getLBContents:function(url,innerLink){if(this.options.useIframe){this.iframe.setAttribute("src",url)}else{if(this.isLoaded==false||innerLink==true||!this.options.caching){this.box.addClass(this.options.lbLoadingClass);var thisId;if(url.indexOf(this.options.idSeparator)>-1){thisId=url.substr(url.indexOf(this.options.idSeparator)+this.options.idSeparator.length,url.length)}var thisEle;if(thisEle=$(thisId)){this.onComplete(thisEle.innerHTML);thisEle.remove();this.isInlineContent=true}else{var ajaxOpts={method:'get',onComplete:this.onComplete.bind(this)};this.ajaxObj.url=url;if(!this.options.caching){var thisDate=new Date();var operator="?";if(url.indexOf("?")>-1){operator="&"}this.ajaxObj.url+=operator+thisDate.getTime()}this.ajaxObj.request()}}else{this.display()}}},onComplete:function(thisResult){if(thisResult){this.box.setHTML(thisResult);this.isLoaded=true;if(lbAnchors=this.box.getElements("a")){for(var aC=0;aC<lbAnchors.length;aC++){thisAnchor=lbAnchors[aC];if(thisAnchor.hasClass(this.options.lbCloseClass)){thisAnchor.onclick=this.close.bind(this)}else if(thisAnchor.hasClass(this.options.lbInnerClass)){this.parseInnerLink(thisAnchor)}else if(thisAnchor.hasClass(this.options.className)){this.parseChildLink(thisAnchor)}}}this.box.removeClass(this.options.lbLoadingClass);var forms;if(forms=this.box.getElements("form")){if(forms.length>0){for(var fC=0;fC<forms.length;fC++){if(!forms[fC].getAttribute("target")){var inputs;var innerResp=false;if(inputs=forms[fC].getElementsByTagName("input")){for(var a=0;a<inputs.length;a++){if(inputs[a].type=="hidden"&&inputs[a].name==this.options.lbInnerClass){innerResp=true;break}}}if(innerResp){forms[fC].addEvent("submit",this.formSubmit.bindWithEvent(this,forms[fC]))}}}}}if(this.options.openFunction){if($type(this.options.openFunctionBind)=="object"){this.options.openFunction.call(this.options.openFunctionBind,this)}else{this.options.openFunction(this)}}this.initSubWidgets()}},initSubWidgets:function(){if(FD.CalendarController){if($type(FDCalendarController)=="object"){var cals=this.box.getElements("input.fdCalendar");if(this.box.getStyle("border-width").toInt()>0){var padding=this.box.getStyle("border-width").toInt();if(window.gecko){padding+=(this.box.getStyle("padding").toInt()/2)}var opts={attribPadding:padding}}for(var a=0;a<cals.length;a++){var cal=cals[a];cal.addEvent("focus",FDCalendarController.spawnCalendar.bind(FDCalendarController,[cal,opts]));this.box.addEvent("close",FDCalendarController.hideAll.bind(FDCalendarController))}}}},formSubmit:function(e,thisForm){if(thisForm){new Event(e).stop();if(this.options.validationFunction){if(!this.options.validationFunction.call(thisForm)){return false}}var aOpts={onComplete:this.onComplete.bind(this)};thisForm.send(aOpts)}},parseInnerLink:function(anchor){var link=anchor.href;anchor.setProperty("href","javascript:void(0)");anchor.onclick=this.getLBContents.bind(this,[link,true])},parseChildLink:function(){this.addChild("fdlb_"+thisAnchor.id);FDLBController[FDLBController.length]=thisAnchor;FDLBController.createLightBox(thisAnchor)}});FD.LightBox.implement(new Options);FD.Overlay=FD.Box.extend({options:{id:"overlay",duration:250,opacity:0.75,clickClose:true},initialize:function(options){this.setOptions(options);this.parent(this.options);this.resizeOverlay();this.box.setOpacity(0);this.box.setStyle("display","none");this.injectBox($$("body")[0]);this.sifrWidths=[];window.onresize=this.resizeOverlay.bind(this)},resizeOverlay:function(){this.box.setStyle("height",1);this.box.setStyle("width",1);var wWidth=window.getScrollWidth();var wHeight=window.getScrollHeight();if(wWidth>window.getWidth()){wWidth=window.getWidth()}if(wHeight==window.getHeight()+4){wHeight=window.getHeight()}this.box.setStyle("height",wHeight+"px");this.box.setStyle("width",wWidth+"px")},setSifr:function(state){var width=0;var sifrs=$$(".sIFR-flash");if(sifrs.length>0){for(var x=0;x<sifrs.length;x++){if(!this.elementInLB($(sifrs[x]))){if(state=="hidden"){this.sifrWidths[x]=sifrs[x].style.width}else{width=this.sifrWidths[x]}sifrs[x].style.width=width}}}},setSelect:function(state){var width=0;var selects=$$("select");if(selects.length>0){for(var x=0;x<selects.length;x++){if(!this.elementInLB(selects[x])){if(state=="hidden"){selects[x].setStyle("visibility","hidden")}else{selects[x].setStyle("visibility","visible")}}}}},elementInLB:function(item){if(item=$(item)){while(!item.className.test("fdLightBox")){item=$(item.parentNode);if(item.nodeName.toLowerCase()=="body"){return false}}return true}},display:function(){var fxOpts={duration:this.options.duration,onComplete:this.setDisplayed.bind(this)};if(window.ie){this.setSifr("hidden");this.setSelect("hidden")}var fx=new Fx.Style(this.box,"opacity",fxOpts);this.box.setStyle("display","block");fx.custom(0,this.options.opacity);this.changing=true},close:function(){var fxOpts={duration:this.options.duration,onComplete:this.clear.bind(this)};var fx=new Fx.Style(this.box,"opacity",fxOpts);fx.custom(this.options.opacity,0);this.displayed=false},closeAll:function(){if(!this.changing){FDLBController.closeAll()}},setDisplayed:function(){this.changing=false;this.displayed=true;if(this.options.clickClose){this.box.addEvent("click",this.closeAll.bind(this))}},clear:function(){this.changing=false;this.displayed=false;if(window.ie){this.setSifr("visible");this.setSelect("visible")}this.box.setStyle("display","none")}});FD.Overlay.implement(new Options);FD.LightBoxController=new Class({initialize:function(){this.lbLookUp=[];this.lbs=[];this.onSubmits=[];var overlayOpts={};if(eval("typeof(FDOverlay_options)")!="undefined"){overlayOpts=FDOverlay_options}this.overlay=new FD.Overlay(overlayOpts);var lightBoxAnchors=$$("a.fdLightBox");for(var x=0;x<lightBoxAnchors.length;x++){this.createLightBox(lightBoxAnchors[x])}},createLightBox:function(a,zIndex){if(a.id){var optsId="fdlb_"+a.id+"_options";var lbOpts={};if(eval("typeof("+optsId+")")!="undefined"){lbOpts=eval(optsId)}if(a.getAttribute("options")){var inlineOpts=Json.evaluate(a.getAttribute("options"));if(inlineOpts){$extend(lbOpts,inlineOpts)}}if(!isNaN(zIndex)){lOpts.zindex=zIndex}var thisId="fdlb_"+a.id;this.lbLookUp[this.lbLookUp.length]=thisId;this.lbs[thisId]=new FD.LightBox(a,lbOpts)}else{alert('Error: Lightbox link requires an ID')}},checkLbs:function(){if(this.overlay.displayed){var x=0;var displayCount=0;var lb;while(lb=this.lbLookUp[x]){if(this.lbs[lb].displayed&&!this.lbs[lb].options.noOverlay){displayCount++}x++}if(displayCount==0){this.overlay.close()}}},focus:function(id){if(id){var x=0;var lb;var highestInd=FDLBController.overlay.getZIndex();var thisInd;while(lb=this.lbLookUp[x]){thisInd=this.lbs[lb].getZIndex();if(thisInd>highestInd){highestInd=thisInd}x++}this.lbs[id].setZIndex((highestInd+1))}},close:function(id){if(id){if(this.lbs[id]){this.lbs[id].close()}}},closeAll:function(){var x=0;var lb;while(lb=this.lbLookUp[x]){if(this.lbs[lb].changing){return false}x++}x=0;while(lb=this.lbLookUp[x]){if(this.lbs[lb].displayed&&!this.lbs[lb].options.noOverlay){this.lbs[lb].close()}x++}},resizeOverlay:function(){this.overlay.resizeOverlay()}});var FDLBController;function initFDLightBoxController(){FDLBController=new FD.LightBoxController()}if(FD){FD.register("FD.LightBoxController","initFDLightBoxController")}