/*
 * Author:   Metronet LTD (http://www.metronet.ie)
 * Requires: Mootools 1.3
 */
Mnet.Ajax={Loader:{init:function(){if(!this.initialized){var b=document.body;this.panel=new Element("div",{"class":"ajax-loader",styles:{position:"fixed","z-index":9999,left:0,top:0}}).inject(b);var a=new Element("img",{src:Mnet.rootUrl+"img/loader.gif"}).inject(this.panel);this.fx=new Fx.Tween(this.panel,{duration:Mnet.getDuration(500),link:"cancel"});this._positionBound=this._position.bind(this);this.initialized=true}},show:function(a){this.init();this.panel.setStyles({display:"block"});this.panel.set("opacity",1)},hide:function(){var a=this;this.fx.chain(function(){a.panel.setStyles({display:"none"})}).start("opacity",0)},_position:function(){this.panel.setStyles({left:window.getScrollLeft(),top:window.getScrollTop()})}},doRequest:function(c,e,d){var f=Mnet.String.urlArgReplace(c,{poutput:"ajax",aaction:d});var a=this.Loader;if(!this.request){this.request=new Request.HTML({evalScripts:false,evalResponse:false,noCache:true,onSuccess:this.doRequestOnSuccess.bind(this),onFailure:function(g){a.hide();alert("Unable to perform request")}})}else{this.request.cancel()}a.show();var b={url:f};if(e){b.method="post";b.data=$(e);this.request.onFailure=function(g){a.hide();alert("Unable to post form. Please try again")}}else{b.method="get";this.request.onFailure=function(g){a.hide();document.location.href=c}}new Fx.Scroll($(document.body)).start(0,0);this.request.send(b)},doRequestOnSuccess:function(h,g,j,b){var e=this;var k=this.Loader;var m=new Element("div",{html:j});k.hide();var c,d;var i=m.getElement(".ajax-meta");var a={};if(i){i.getChildren().each(function(n){a[n.className]=n.get("html").replace(/^\s+|\s+$/,"")})}if(!a.replaceNode){a.replaceNode=".ajax-content"}if(!a.replaceNodeId){a.replaceNodeId="ajax-holder-content"}c=m.getElement(a.replaceNode);d=$(a.replaceNodeId);if(c&&d){if(a.runUnload){this.unloadPage()}var l=function(){if(a.scanLinks){e.scanLinks(c)}if(a.scanFlashTitles){Mnet.Flash.Titles.scanPage(c)}if(a.scanSlimbox){Mnet.scanSlimbox(c)}};var f;if(a.transitionDirectionType){f=function(){Mnet.Page.makeTransition(d,c,a,e.unloadPage.bind(e),function(){l()},function(){Browser.exec(b)})}}else{f=function(){l();d.empty().grab(c);Browser.exec(b)}}if(a.backgroundUrl){elBgHolder=$("background");Mnet.Page.swapBackground(elBgHolder,a,f)}else{f.apply(f)}}else{alert("Unable to retrieve data")}},updatePageInfo:function(a,b){document.location.hash=a;document.title=b},linkTo:function(b,c,a){if(a!=null){b=Mnet.String.urlArgReplace(b,a)}this.doRequest(b,null,c);return false},linkOnClick:function(b,d,c){d.stop();var a=b.get("href");this.doRequest(a,null,c)},getRelAction:function(a){var b=a.match(/^ajax(-(\w+))?$/);if(b){return b.length>1?b[2]:"full"}else{return null}},scanLinks:function(a){if(Mnet.Testing.ajaxLinksOff){return}if(!a){a=document.body}a=$(a);var c=this;var b=a.getElements("a");b.each(function(f){var g=c.getRelAction(f.rel);if(g!=null){var e=f.get("href").toLowerCase();var d=(Mnet.domain+Mnet.rootUrl+"home/").toLowerCase();if(!e.match(/^http(s?):\/\/|^\w+:/)){if(e.match(/^\//)){e=Mnet.domain+e}else{e=Mnet.domain+Mnet.rootUrl+e}}else{e=e.replace(/^http(s?):\/\//,"")}if(e.substring(0,d.length)==d){f.addEvent("click",function(h){Mnet.Ajax.linkOnClick(f,h,g)})}}});var b=a.getElements("form");b.each(function(e){var f=c.getRelAction(e.className);if(f!=null){var d=e.onsubmit;e.onsubmit=function(){var g=d?d.apply(this):true;if(g){Mnet.Ajax.doRequest(this.action,$(this),f)}return false}}});if(!this.documentWriteOverridden){document.write=this.documentWrite;this.documentWriteOverridden=true}},javascript:function(a){if(!this.javascriptCount){this.javascriptCount=0}this.javascriptCount++;var b=this;Asset.javascript(a,{onload:function(){b.javascriptLoaded()}})},javascriptLoaded:function(b){if(!b){this.javascriptCount--}if(this.javascriptCount==null||this.javascriptCount==0){if(this.onReadyEvents){for(var a=0;a<this.onReadyEvents.length;a++){this.onReadyEvents[a].apply(this.onReadyEvents[a])}this.onReadyEvents=[]}}},addOnReady:function(a){if(!this.onReadyEvents){this.onReadyEvents=[]}this.onReadyEvents.push(a)},unescapeHtml:function(a){var b=document.createElement("DIV");b.innerHTML=a;if(b.innerText){return b.innerText}return b.textContent},documentWrite:function(b){if((matches=b.match(/<script.*? src="(.*?)"[^>]*><\/script>/))){var a=matches[1];Mnet.Ajax.javascript(Mnet.Ajax.unescapeHtml(a))}else{new Element("div",{html:b}).inject(document.body)}},addUnload:function(a){if(!this.unloadEvents){this.unloadEvents=[]}this.unloadEvents.push(a)},unloadPage:function(){if(this.unloadEvents){for(var a=0;a<this.unloadEvents.length;a++){this.unloadEvents[a].apply(this.unloadEvents[a])}this.unloadEvents=[]}}};Mnet.Page={fxOut:null,fxIn:null,elHolder:null,elOut:null,elIn:null,inProgress:false,chains:[],metaData:null,_setHolder:function(b,a){if(b){if(a=="left"||a=="right"){this.elHolder.setStyles({width:this.winSize.x,height:Math.max(this.winSize.y-this.holderPos.y,this.outSize.y),overflow:"hidden"})}else{this.elHolder.setStyles({position:"absolute",top:-this.holderPos.y,width:this.outSize.x,height:this.winScrollSize.y,overflow:"hidden"})}}else{if(a=="left"||a=="right"){this.elHolder.setStyles({width:"",height:"",overflow:""})}else{this.elHolder.setStyles({position:"",top:"",width:"",height:"",overflow:""})}}},_setOutContent:function(a){if(a){this.elOut.setStyles({position:"absolute"})}else{this.elHolder.removeChild(this.elOut);this.elOut=null}},_setInContent:function(b,a){if(b){this.elIn.setStyles({position:"absolute"})}else{if(a=="left"||a=="right"){this.elIn.setStyles({position:"",left:"",width:""})}else{this.elIn.setStyles({position:"",top:"",width:""})}}},_getFx:function(b,a){return new Fx.Tween(b,{duration:Mnet.getDuration(2000),transition:"pow:out",link:"cancel"})},_postTransition:function(){this._setHolder(false,this.direction);this._setOutContent(false);this._setInContent(false,this.direction);this.inProgress=false;if(this.onComplete){this.onComplete.apply(this.onComplete)}if(this.onChain){var a=this.onChain;this.onChain=null;Mnet.Ajax.addOnReady(a);Mnet.Ajax.javascriptLoaded(true)}},makeTransition:function(h,e,d,a,b,g){var i=this;if(this.inProgress){this.onChain=function(){i.makeTransition(h,e,d,a,b,g)};return}if(a){a.apply(a)}var k="next";if(this.metaData!=null&&this.metaData.menuIndex!=null&&d.menuIndex!=null){if(parseInt(this.metaData.menuIndex)>parseInt(d.menuIndex)){k="prev"}}if(k=="next"){this.direction=(d.transitionDirectionType=="horizontal")?"left":"up"}else{this.direction=(d.transitionDirectionType=="horizontal")?"right":"down"}this.metaData=d;this.inProgress=true;this.elHolder=h;this.elOut=h.getElement(".ajax-content");this.elIn=e;this.onComplete=g;this.holderPos=this.elHolder.getPosition();this.winSize=window.getRealSize();this.winScrollSize=window.getScrollSize();this.outSize=this.elOut.getSize();this.elIn.setStyle("visibility","hidden");this.elHolder.grab(this.elIn);this.inSize=this.elIn.getSize();this._setHolder(true,this.direction);this._setOutContent(true);this._setInContent(true);if(this.direction=="left"||this.direction=="right"){var f=(this.direction=="right")?-1:1;this.elOut.setStyles({width:this.winSize.x,left:0});this.elIn.setStyles({width:this.winSize.x,left:this.winSize.x*f});property="left";outEnd=-i.outSize.x*f;inEnd=0}else{if(this.direction=="up"||this.direction=="down"){var j,c;if(this.direction=="up"){j=this.winScrollSize.y+this.holderPos.y;outEnd=-i.outSize.y}else{j=-this.elIn.getSize().y;outEnd=Math.max(this.winScrollSize.y,this.holderPos.y+this.inSize.y);outEnd+=60}this.elOut.setStyles({top:this.holderPos.y});this.elIn.setStyles({top:j});property="top";inEnd=this.holderPos.y}}if(b){b.apply(b)}this.elIn.setStyle("visibility","inherit");this.fxOut=this._getFx(this.elOut,false);this.fxIn=this._getFx(this.elIn,true);this.fxIn.chain(this._postTransition.bind(this));(function(){i.fxOut.start(property,outEnd);i.fxIn.start(property,inEnd)}).delay(400)},swapBackground:function(j,b,a){var d=j.getElement("div");var g;var c=b.backgroundUrl.match(/\.swf$/);var h=null;if(!c){g=new Element("div",{styles:{"background-image":"url('"+b.backgroundUrl+"')",opacity:0}});g.inject(j);h=new Image();h.src=b.backgroundUrl}else{var i={opacity:0};if(b.backgroundAltUrl){i["background-image"]="url('"+b.backgroundAltUrl+"')"}var f=Mnet.Flash.getNewId();g=new Element("div",{id:f,styles:i});g.inject(j);if(!(Browser.firefox&&Browser.Platform.mac)){Mnet.Flash.object(f,b.backgroundUrl,"100%","100%",{wMode:"transparent"})}}fxOld=new Fx.Tween(d,{duration:Mnet.getDuration(1000)});fxNew=new Fx.Tween(g,{duration:Mnet.getDuration(1000)});var e=function(){fxOld.start("opacity",0);fxNew.start("opacity",1);fxOld.chain(function(){try{j.removeChild(d)}catch(k){}if(a){a.apply(a)}})};if(!c){if(h.complete){e.apply()}else{Mnet.Ajax.Loader.show();h.onload=function(){Mnet.Ajax.Loader.hide();e.apply()}}}else{e.apply()}}};Mnet.String={urlParseCache:"",urlParse:function(c){if(c==null){return this.urlParseCache}var h=c.split("?");var f=h.shift();var a=h.join("?");var b={};if(a!=""){var e=a.split("&");for(var d=0;d<e.length;d++){pair=e[d].split("=");name=pair.shift();b[name]=unescape(pair.join("="))}}var g={base:f,sep:a!=""?"&":"?",qs:a,args:b};this.urlParseCache=g;return g},urlCompile:function(d){var c="";var b="?";for(var a in d.args){c+=b+a+"="+encodeURIComponent(d.args[a]);if(b=="?"){b="&"}}this.urlParseCache=d;return d.base+c},urlArgReplace:function(c,b){purl=this.urlParse(c);for(var a in b){purl.args[a]=b[a]}return this.urlCompile(purl)},urlArgGet:function(b,a){purl=this.urlParse(b);return purl.args[a]}};
