/*
	author: Metronet LTD (http://www.metronet.ie)
	requires: mootools 1.3
*/
Mnet.Ajax={allowSameUrlLink:false,Loader:{init:function(){if(!this.initialized){var a=document.body;this.panel=new Element("div",{"class":"ajax-loader",styles:{position:"fixed","z-index":9999,left:0,top:0}}).inject(a);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}}Mnet.windowScroll(0,0);this.request.send(b)},clone:function(d){if(null==d||"object"!=typeof d){return d}if(d instanceof Date){var e=new Date();e.setTime(d.getTime());return e}if(d instanceof Array){var e=[];var b=d.length;for(var c=0;c<b;c++){e[c]=this.clone(d[c])}return e}if(d instanceof Object){var e={};for(var a in d){if(d.hasOwnProperty(a)){e[a]=this.clone(d[a])}}return e}throw new Error("Unable to copy obj! Its type isn't supported.")},doRequestOnSuccess:function(k,b,h,f){var n=this;var g=this.Loader;var m=new Element("div",{html:h});g.hide();var a,j;var r=m.getElement(".ajax-meta");var o={};if(r){r.getChildren().each(function(i){o[i.className]=i.get("html").replace(/^\s+|\s+$/,"")})}if(!o.replaceNode){o.replaceNode=".ajax-content"}var e=m.getElements(o.replaceNode+"-meta");var c=m.getElements(o.replaceNode);if(o.runUnload){this.unloadPage()}var q=0;var u=[];for(var p=0;p<e.length;p++){var t=this.clone(o);var r=e[p];if(r){r.getChildren().each(function(i){t[i.className]=i.get("html").replace(/^\s+|\s+$/,"")})}var a=c[p];var j=$(t.replaceNodeId);var s=this._addTransition(a,j,t);if(u){u.push(s)}else{q++}}if(q==p){alert("Unable to retrieve data")}else{var l=true;for(var p=0;p<u.length;p++){var d=u[p];l=l&&!d.transition.inProgress}if(l){this.unloadPage();for(var p=0;p<u.length;p++){var d=u[p];d.transition.replace(d.el,d.metaData);d.onAppend()}this._transitionsLeft=u.length;this._transitionsComplete=function(){if(f!=null){Browser.exec(f)}};for(var p=0;p<u.length;p++){var d=u[p];d.transition.start()}}}},_transactionComplete:function(){if(--this._transitionsLeft==0){this._transitionsComplete()}},_addTransition:function(f,d,b){if(f&&d){var h=this;var a=function(){if(b.scanLinks){h.scanLinks(f)}if(b.scanFlashTitles){Mnet.Flash.Titles.scanPage(f)}if(b.scanSlimbox){Mnet.scanSlimbox(f)}if(b.scanCufon){Mnet.scanCufon(f)}};var c=Mnet.getContentTransition(b.replaceNodeId,d);if(!c){return null}if(!c.metaData&&Mnet.Ajax.pageMetaData){c.metaData=Mnet.Ajax.pageMetaData}try{c.removeEvents("complete")}catch(g){}c.addEvent("complete",this._transactionComplete.bind(this));return{el:f,transition:c,metaData:b,onAppend:a}}else{return null}},updatePageInfo:function(a,b){document.location.hash=a;if(b!=null){document.title=b}this.currentPage=a},linkTo:function(c,d,b){if(b!=null){c=Mnet.String.urlArgReplace(c,b)}if(!this.allowSameUrlLink){var e=document.location.href;var a=c;if(!a.match(/^http(s?):\/\/|^\w+:/)){if(a.match(/^\//)){a=Mnet.domain+a}else{a=Mnet.domain+Mnet.rootUrl+a}}else{a=a.replace(/^http(s?):\/\//,"")}e=e.replace(/^http(s?):\/\//,"");if(null!=(matches=e.match(/#page-(.*)$/))){e=Mnet.domain+Mnet.rootUrl+"home/";if(matches[1]!="index"){e+=matches[1].replace(/\./,"/")+"/"}}if(a==e){return}}this.doRequest(c,null,d);return false},linkOnClick:function(b,d,c){if(!this.linkPreClick||this.linkPreClick.apply(this,[b,d,c])){d.stop();var a=b.get("href");this.linkTo(a,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.onloadCleared){window.onload=function(){};this.onloadCleared=true}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>0){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=[]}if(window.onload){window.onload()}window.onload=function(){}}},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.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]},startsWith:function(a,b){return a.substring(0,b.length)==b}};
