/**
 * 
 *
 * @author Alec Hill
 */
var England={};England.Storage={};England.Effects={};England.Effects.ToggleEffect=new Class({Implements:[Chain,Events,Options,Ah.DetachableEvents],id:null,effects:null,toggled:false,setStart:function(){if(this.options.startOpen){this.setOpen();}else{this.setClosed();}},toggle:function(){if(this.toggled){this.close();}else{this.open();}return this;},onComplete:function(){if(this.toggled){this.onOpen();}else{this.onClose();}this.fireEvent("onComplete");this.callChain();},onOpen:function(){this.fireEvent("onOpen");},onClose:function(){this.fireEvent("onClose");},onStart:function(){this.fireEvent("onStart");},onCancel:function(){this.fireEvent("onCancel");}});England.Effects.Wipe=new Class({Extends:England.Effects.ToggleEffect,name:"Wipe",from:null,to:null,options:{id:null,duration:1000,transition:Fx.Transitions.Quint.easeInOut,morphStart:".wipe_morph_start",morphEnd:".wipe_morph_end",width:{start:800,end:800},height:{start:0,end:700},link:"cancel"},initialize:function(B,C,A){this.from=$(B);this.to=$(C);this.setOptions(A);this.id=this.options.id||this.name;this.applyEffects();this.fireEvent("onInitialize");},applyEffects:function(){this.effects=new Fx.Elements($$(this.from,this.to),{duration:this.options.duration,transition:this.options.transition,link:this.options.link});this.effects.addEvent("onStart",this.onStart.bind(this));this.effects.addEvent("onComplete",this.onComplete.bind(this));this.effects.addEvent("onCancel",this.onCancel.bind(this));},open:function(){this.toggled=true;this.effects.start({"0":{width:[this.from.getStyle("width").toInt(),this.options.width.start],height:[this.from.getStyle("height").toInt(),this.options.height.start]},"1":{width:[this.to.getStyle("width").toInt(),this.options.width.end],height:[this.to.getStyle("height").toInt(),this.options.height.end]}});return this;},close:function(){this.toggled=false;this.effects.start({"0":{width:[this.from.getStyle("width").toInt(),this.options.width.end],height:[this.from.getStyle("height").toInt(),this.options.height.end]},"1":{width:[this.to.getStyle("width").toInt(),this.options.width.start],height:[this.to.getStyle("height").toInt(),this.options.height.start]}});return this;}});England.Effects.Double=new Class({Extends:England.Effects.ToggleEffect,name:"Double",id:null,el:null,sprite1:null,sprite2:null,effects2:null,options:{id:null,sprite1Selector:".sprite1",sprite2Selector:".sprite2",duration:1000,transition:Fx.Transitions.Quint.easeOut,morphStart1:".double_morph_start_1",morphEnd1:".double_morph_end_1",morphStart2:".double_morph_start_2",morphEnd2:".double_morph_end_2",zindex:{inactive:1},link:"cancel",startOpen:false},initialize:function(B,A){this.el=$(B);this.setOptions(A);this.id=this.options.id||this.el.id||this.name;this.sprite1=this.el.getElement(this.options.sprite1Selector);this.sprite2=this.el.getElement(this.options.sprite2Selector);this.applyEffects();this.setStart();this.fireEvent("onInitialize");},applyEffects:function(){var A={duration:this.options.duration,transition:this.options.transition,link:this.options.link};this.effects=new Fx.Morph(this.sprite1,A);this.effects2=new Fx.Morph(this.sprite2,A);this.effects.addEvent("onStart",this.onStart.bind(this));this.effects.addEvent("onComplete",this.onComplete.bind(this));this.effects.addEvent("onCancel",this.onCancel.bind(this));},open:function(){this.toggled=true;England.Effects.Double.depth++;this.el.setStyle("z-index",England.Effects.Double.depth);this.effects.start(this.options.morphEnd1,this.options.morphStart1);this.effects2.start(this.options.morphEnd2,this.options.morphStart2);return this;},close:function(){this.toggled=false;this.el.setStyle("z-index",this.options.zindex.inactive);this.effects.start(this.options.morphStart1,this.options.morphEnd1);this.effects2.start(this.options.morphStart2,this.options.morphEnd2);return this;},setOpen:function(){this.toggled=true;England.Effects.Double.depth++;this.effects.set(this.options.morphEnd1);this.effects2.set(this.options.morphEnd2);return this;},setClosed:function(){this.toggled=false;this.el.setStyle("z-index",this.options.zindex.inactive);this.effects.set(this.options.morphStart1);this.effects2.set(this.options.morphStart2);return this;}});England.Effects.Double.depth=2;England.Effects.Fade=new Class({Extends:England.Effects.ToggleEffect,name:"Fade",el:null,options:{id:null,duration:1000,transition:Fx.Transitions.linear,morphStart:".fade_morph_start",morphEnd:".fade_morph_end",link:"cancel",startOpen:false},initialize:function(B,A){this.el=$(B);this.setOptions(A);this.id=this.options.id||this.name;this.applyEffects();this.setStart();this.fireEvent("onInitialize");},applyEffects:function(){this.effects=new Fx.Morph(this.el,{duration:this.options.duration,transition:this.options.transition,link:this.options.link});this.effects.addEvent("onStart",this.onStart.bind(this));this.effects.addEvent("onComplete",this.onComplete.bind(this));this.effects.addEvent("onCancel",this.onCancel.bind(this));},open:function(){this.toggled=true;this.effects.start({opacity:[this.el.getStyle("opacity").toInt(),1]});return this;},close:function(){this.toggled=false;this.effects.start({opacity:[this.el.getStyle("opacity").toInt(),0]});return this;},setOpen:function(){this.toggled=true;this.effects.set({opacity:1});return this;},setClosed:function(){this.toggled=false;this.effects.set({opacity:0});return this;}});England.Effects.FadeSlideshow=new Class({Implements:[Events,Chain,Options,Ah.DetachableEvents],name:"FadeSlideshow",el:null,srcs:[],firstAsset:null,assets:null,usedAssets:[],slide1:null,slide2:null,fade1:null,fade2:null,periodical:null,currentSlideNumber:null,playing:false,options:{id:null,random:false,duration:10000,slide1Selector:".slide1",slide2Selector:".slide2",effectOptions:{duration:1000,transition:Fx.Transitions.Quad.easeOut},morphStart:".fade_slideshow_morph_start",morphEnd:".fade_slideshow_morph_end",link:"cancel"},initialize:function(B,C,A){this.el=$(B);this.slide1=this.el.getElement(this.options.slide1Selector);this.slide2=this.el.getElement(this.options.slide2Selector);this.srcs=C||this.srcs;this.setOptions(A);this.id=this.options.id||this.name;this.fade1=new England.Effects.Fade(this.slide1,this.options.effectOptions);this.fade2=new England.Effects.Fade(this.slide2,this.options.effectOptions);this.addDetachableEvent("on_first_complete",this.fade1,"onOpen",this.onFirstComplete.bind(this));this.switchSlides();this.loadFirst();this.fireEvent("onInitialize");},switchSlides:function(){if(this.currentSlideNumber!=1){this.slide1.setStyle("z-index",2);this.slide2.setStyle("z-index",1);this.currentSlideNumber=1;}else{this.slide1.setStyle("z-index",1);this.slide2.setStyle("z-index",2);this.currentSlideNumber=2;}this["fade"+this.currentSlideNumber].setClosed();},loadFirst:function(){var A=(this.options.random)?$random(0,this.srcs.length-1):0;this.firstAsset=new Asset.image(this.srcs[A],{onload:this.onFirstLoaded.bind(this)});this.srcs.splice(A,1);},onFirstLoaded:function(){var A=this["slide"+this.currentSlideNumber];if(Browser.Engine.trident4){A.adopt(this.ie6HackCreateElWithBgImg(this.firstAsset));}else{A.adopt(this.firstAsset);}this["fade"+this.currentSlideNumber].open();this.usedAssets.push(this.firstAsset);if(this.srcs.length>0){this.assets=new Asset.images(this.srcs,{onComplete:this.onAllLoaded.bind(this)});}this.fireEvent("onFirstLoad");},onAllLoaded:function(){this.start();this.fireEvent("onAllLoad");},start:function(){this.periodical=this.next.periodical(this.options.duration,this);this.playing=true;},stop:function(){$clear(this.periodical);this.playing=false;},next:function(){this.switchSlides();var C=(this.options.random)?$random(0,this.assets.length-1):0;var B=this.assets.splice(C,1)[0];this.usedAssets.push(B);var A=this["slide"+this.currentSlideNumber];A.empty();if(Browser.Engine.trident4){A.adopt(this.ie6HackCreateElWithBgImg(B));}else{A.adopt(B);}this["fade"+this.currentSlideNumber].open();if(this.assets.length==0){this.assets=this.usedAssets;this.usedAssets=[];}this.fireEvent("onChange");},onFirstComplete:function(){this.detachEvent("on_first_complete");this.fireEvent("onFirstComplete");},ie6HackCreateElWithBgImg:function(B){var A=$(document.createElement("div"));A.setStyle("height",B.height);A.setStyle("width",B.width);A.setStyle("background-image","url("+B.src+")");return A;}});England.Effects.ToggleEffect.Collection=new Class({Extends:Ah.Collection,Implements:[Chain,Events,Options],name:"ToggleEffectCollection",closeAll:function(){var A=[];this.items.each(function(D,C){if(D.toggled){A.push(D);}});var B=new Group(A);B.addEvent("onComplete",this.onClose.bind(this));A.each(function(C){C.close();});return this;},onClose:function(){this.fireEvent("onClose");this.fireEvent("onComplete");this.callChain();},openNext:function(){if($defined(this.next())){this.next().open();}},openPrevious:function(){if($defined(this.next())){this.previous().open();}},closeCurrent:function(){this.current().close();}});England.ContentLoader=new Class({Implements:[Events,Chain,Options,Ah.DetachableEvents],el:null,swf:null,asset:null,xhr:null,fade:null,url:null,options:{},initialize:function(A){this.el=$(A);this.fade=new England.Effects.Fade(this.el);this.fireEvent("onInitialize");return this;},clear:function(){if(this.xhr){this.xhr.cancel();}if(this.fade.toggled){this.fade.close();this.addDetachableEvent("on_fade_close",this.fade,"onClose",this.clearEl.bind(this));}else{this.el.empty();this.onClear();}return this;},clearEl:function(){this.el.empty();this.detachEvent("on_fade_close");this.onClear();},load:function(A,B){if(this.xhr){this.xhr.cancel();}this.url=A;this.extras=B||{};if(this.fade.toggled){this.clear();this.addDetachableEvent("on_clear_for_content",this,"onClear",this.onClearForContent.bind(this));}else{this.loadContent();}},onClearForContent:function(){this.detachEvent("on_clear_for_content");this.loadContent();},loadContent:function(){switch(true){case this.url.test(/.swf$/):this.loadSwf();break;case this.url.test(/.jpg$/):case this.url.test(/.png$/):case this.url.test(/.gif$/):this.loadImage();break;default:this.loadXhr();}return this;},loadSwf:function(){this.swf=new Swiff(this.url,{width:this.extras.w,height:this.extras.h,container:this.el,events:{}});this.onSwfLoad();},loadImage:function(){this.asset=new Asset.image(this.url,{onload:this.onImageLoad.bind(this)});},loadXhr:function(){this.xhr=new Request.HTML({url:this.url,update:this.el,onSuccess:this.onXhrLoad.bind(this)}).send();},onImageLoad:function(){this.fireEvent("onImageLoad");if(Browser.Engine.trident4){this.el.adopt(this.ie6HackCreateElWithBgImg(this.asset));}else{this.el.adopt(this.asset);}this.onLoad();},onSwfLoad:function(){this.fireEvent("onSwfLoad");this.onLoad();},onXhrLoad:function(){this.fireEvent("onXhrLoad");this.onLoad();},onLoad:function(){this.fade.open();this.fireEvent("onLoad");this.callChain();},onClear:function(){this.fireEvent("onClear");this.callChain();},clearChain:function(){this.chain.clearChain();return this;},ie6HackCreateElWithBgImg:function(B){var A=$(document.createElement("div"));A.setStyle("height",B.height);A.setStyle("width",B.width);A.setStyle("background-image","url("+B.src+")");return A;}});England.Effects.Mover=new Class({Extends:England.Effects.ToggleEffect,name:"Mover",el:null,options:{id:null,duration:1000,transition:Fx.Transitions.Quint.easeOut,morphStart:".mover_morph_start",morphEnd:".mover_morph_end",link:"cancel",startOpen:false},initialize:function(B,A){this.el=$(B);this.setOptions(A);this.id=this.options.id||this.name;this.applyEffects();this.setStart();this.fireEvent("onInitialize");},applyEffects:function(){this.effects=new Fx.Morph(this.el,{duration:this.options.duration,transition:this.options.transition,link:this.options.link});this.effects.addEvent("onStart",this.onStart.bind(this));this.effects.addEvent("onComplete",this.onComplete.bind(this));this.effects.addEvent("onCancel",this.onCancel.bind(this));},open:function(){this.toggled=true;this.effects.start(this.options.morphEnd,this.options.morphStart);return this;},close:function(){this.toggled=false;this.effects.start(this.options.morphStart,this.options.morphEnd);return this;},setOpen:function(){this.toggled=true;this.effects.set(this.options.morphEnd);return this;},setClosed:function(){this.toggled=false;this.effects.set(this.options.morphStart);return this;}});
