/*
Copyright (c) 2008, Bubbling Library Team. All rights reserved.
Portions Copyright (c) 2008, Yahoo!, Inc. All rights reserved.
Code licensed under the BSD License:
http://www.bubbling-library.com/eng/licence
version: 2.0
*/
YAHOO.namespace("plugin");(function(){var I=YAHOO.util.Connect,D=YAHOO.lang,F=YAHOO.util.Event,H=YAHOO.util.Dom,E=YAHOO.util.Dom.get;var N={LOADING:1,DISPATCHED:2,ERROR:3,EMPTY:4,proxy:"/dispatcher.php?uri=",CSSNODE:1,JSNODE:2};var L=/<script([^>]*)>([\s\S]*?)<\/script>/igm,A=/src=(['"]?)([^"']*)\1/i,M=/rel=(['"]?)([^"']*)\1/i,C=/<link([^>]*)(>[\s]*<\/link>|>)/igm,K=/href=(['"]?)([^"']*)\1/i,O=/<style([^>]*)>([\s\S]*?)<\/style>/igm,B=new RegExp("([\\w-.]+)\\s*=\\s*(\".*?\"|'.*?'|\\w+)*","im");var J=new RegExp("url\\s*\\(([^\\)]*)","igm");var G=new RegExp("^((?:http|https)://)((?:\\w+[.|-]?)*\\w+)(/.*)$","i");YAHOO.plugin.Dispatcher=function(){var V={},S={},f=[],P={relative:false,baseURI:document.location},Z="loading",a="yui-dispatchable";function c(q,l){var p={key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},j=p.parser[l?"strict":"loose"].exec(q),n={},k=14;while(k--){n[p.key[k]]=j[k]||""}n[p.q.name]={};n[p.key[12]].replace(p.q.parser,function(m,i,o){if(i){n[p.q.name][i]=o}});return n}function X(i){if(D.isString(i)){i=i.replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1");i=i.replace(/^(['|"])*(\S*(?:\s+\S+)*)\1$/,"$2")}return i}function Q(l,i){var k=null,j={};i=i||{};if(D.isString(l)){while(k=B.exec(l)){k[2]=(i.hasOwnProperty(k[1])?i[k[1]]:k[2]);if(k[2]){j[k[1]]=X(k[2])}l=l.replace(B,"")}}return j}function T(i){i=((D.isString(i)&&(i.indexOf("/")>-1))?i:P.baseURI)+"";return i.substr(0,i.lastIndexOf("/")+1)}function h(j,i){if(i&&!G.test(i)&&(i.indexOf("/")!==0)){i=j+i}return i}function R(i){if(i.element&&i.element.setAttribute){i.element.setAttribute("aria-live","polite");i.element.setAttribute("aria-atomic","true");i.element.setAttribute("aria-relevant","all");i.element.setAttribute("aria-busy","true")}i.onStart=i.before||i.onStart;if(D.isFunction(i.onStart)){i.onStart.apply(i,[i.element]);i.onStart=null}if(!i.underground&&YAHOO.Bubbling){YAHOO.Bubbling.fire("onAsyncRequestStart",{element:i.element})}}function e(i,j){if(D.isFunction(i.onChange)){j=j||i.element;i.onChange.apply(i,[j])}}function U(i){i.onLoad=i.after||i.onLoad;if(D.isFunction(i.onLoad)){i.onLoad.apply(i,[i.element])}if(!i.underground&&YAHOO.Bubbling){YAHOO.Bubbling.fire("onAsyncRequestEnd",{element:i.element})}if(i.element&&i.element.setAttribute){i.element.setAttribute("aria-busy","false")}}function g(o,k){var p=null,j=true,n=null,m="",l=0;k=k||{};if(V.isAlive(o)){n=S[o].chunks.shift();if(D.isObject(n)&&n.src){k.hash=f.length;for(l=0;l<f.length;l++){if(f[l].uri==n.src){if((f[l].status==N.DISPATCHED)&&!k.override){j=false}else{}k.hash=l;break}}if(j){m=V.firewall(n.src,k,true);if(D.isString(m)&&(m!=="")){f[k.hash]={uri:n.src,proxy:m,status:N.LOADING};if(n.type===N.JSNODE){V.area=o;V.destroyer=S[o].destroyer;k.handle=YAHOO.util.Get.script(m,{onSuccess:function(){f[k.hash].status=N.DISPATCHED;if(k.rel&&YAHOO.Bubbling){YAHOO.Bubbling.fire("onScriptReady",{module:n.rel,src:n.src,uri:m,hash:k.hash})}k.hash=null;g(o,k)},onFailure:function(){g(o,k)},scope:V,data:k})}else{if(n.type===N.CSSNODE){YAHOO.util.Get.css(m,{});f[k.hash].status=N.DISPATCHED;g(o,k)}}}}else{g(o,k)}}else{k.hash=null;Y(o,n.content,k)}}else{V.kill(o);U(k)}}function Y(l,m,j){var i=N.EMPTY;if(m&&(m!=="")){j.scope=(j.scope?j.scope:window);try{i=N.DISPATCHED;this.scriptScope=null;if(!j.hash||(f[j.hash].status!=N.DISPATCHED)){V.area=l;V.destroyer=S[l].destroyer;if(D.isFunction(j.evalRoutine)){this.scriptScope=j.evalRoutine(m,j)}else{this.scriptScope=new (new Function("_container_",m+"; return this;"))(j.scope)}}}catch(k){i=N.ERROR;if(D.isFunction(j.error)){j.error.apply(j,[l,m,f,k])}else{throw new Error("Dispacher: Script Execution Error ("+k+")")}}}if(D.isNumber(j.hash)){f[j.hash].status=i;j.hash=null}g(l,j)}function b(j,n,i){i.action=(i.action?i.action:"replace");switch(i.action){case"tabview":d(j.get("contentEl"),i);try{j.set("content",n)}catch(m){return false}e(i,j.get("contentEl"));break;case"update":n=j.innerHTML+n;try{j.innerHTML=n}catch(l){return false}e(i,j);break;case"replace":case"layout":default:d(j,i);try{j.innerHTML=n}catch(k){return false}e(i,j);break}return true}function d(l,j){var m=j.guid,k=0;if(D.isObject(S[m].destroyer)){S[m].destroyer.fire(l,j)}if(H.inDocument(l)){for(k=0;k<l.childNodes.length;k++){F.purgeElement(l.childNodes[k],true)}H.addClass(l,a)}S[m].destroyer=new YAHOO.util.CustomEvent("destroyer");if(D.isFunction(j.onDestroy)){S[m].destroyer.subscribe(j.onDestroy)}}function W(o,l,k){k=k||{};k.uri=k.uri||null;k.relative=k.relative||P.relative;var j=true,i=false,n=T(k.uri);l=l.replace(O,function(t,r,p,q,m){if(p){V.applyCSS(p,Q(r),k)}return""});l=l.replace(C,function(t,r,p,q,m){if(r){i=r.match(K);if(i){if(k.relative){i[2]=h(n,i[2])}S[o].chunks.push({src:i[2],content:"",type:N.CSSNODE,params:Q(r)})}}return""});l=l.replace(L,function(u,t,q,r,p){if(t){i=t.match(A);if(i){var m=t.match(M);m=(m?m[2]:null);if(k.relative){i[2]=h(n,i[2])}S[o].chunks.push({src:i[2],content:"",type:N.JSNODE,rel:m,params:Q(t)})}}if(q){S[o].chunks.push({src:null,content:q,type:N.JSNODE,params:Q(t)})}return""});return l}if(YAHOO.Bubbling){YAHOO.Bubbling.on("onScriptReady",function(){if(this.src&&!this.hash){f[this.hash].status=N.DISPATCHED}})}V.area=null;V.strictMode=true;V.destroyer=null;V.fetch=function(k,l,j){j=j||{};j.uri=l;var n=null,i=null,m={success:function(p){if(p.responseText!="undefined"){V.process(k,p.responseText,j,true)}H.removeClass(k,Z)},failure:function(p){if(D.isFunction(j.onError)){j.onError.apply(j,[j.element,p])}H.removeClass(k,Z)}};if((D.isObject(k)||(k=E(k)))&&l){i=V.firewall(l,j);H.addClass(k,Z);j.handle=I.asyncRequest("GET",i,m);j.element=k;R(j);if(YAHOO.Bubbling){n=j.guid||F.generateId(k);YAHOO.Bubbling.fire("onNavigate",{state:n+escape(l),control:"dispatcher",element:k,uri:l,config:j,restore:function(){V.fetch(k,l,j)}})}return j.handle}return null};V.process=function(k,l,j,i){var m=null;j=j||{};if(D.isObject(k)||(k=E(k))){m=j.guid||F.generateId(k);this.kill(m);j.element=k;j.content=l;j.guid=m;if(!i){R(j)}if(b(k,W(m,l,j),j)){g(m,j)}}return m};V.delegate=function(j,k,i){i=i||{};i.action="tabview";i.uri=j.get("dataSrc")||null;i.tab=j;j.loadHandler.success=function(m){var l=j.get("contentEl");i.tab=l;i.underground=true;V.process(j,m.responseText,i);if(YAHOO.Bubbling){YAHOO.Bubbling.fire("onAsyncRequestEnd",{element:l})}};j.on("activeChange",function(){if(YAHOO.Bubbling&&this.get("active")&&j.get("dataSrc")&&!this.get("cacheData")){YAHOO.Bubbling.fire("onAsyncRequestStart",{element:this.get("contentEl")})}});if(D.isObject(k)){k.addTab(j)}};V.addUnit=function(l,k,i){var m=i||{},j;m.action="layout";if(!l||!k){return false}if(D.isString(l)){l=k.getUnitByPosition(l)}else{if(l.position&&!k.getUnitByPosition(l.position)){l=k.addUnit(l)}}if(m.uri){l.set("dataSrc",m.uri)}if((m.unit=l)&&(m.uri=m.unit.get("dataSrc"))&&(j=m.unit.body)){m.underground=true;m._dispatcherConfig=m;m.unit.loadHandler.success=function(n){V.process(this.body,n.responseText,this._dispatcherConfig);if(YAHOO.Bubbling){YAHOO.Bubbling.fire("onAsyncRequestEnd",{element:this.body})}};if(m.unit.loadContent()&&YAHOO.Bubbling){YAHOO.Bubbling.fire("onAsyncRequestStart",{element:j})}}return m.unit};V.applyCSS=function(j,o,k){o=o||{};var i=document.createElement("style"),m=o.href||"";k=k||{};var l=k.uri||P.baseURI;k.relative=k.relative||P.relative;if(k.relative){l=V.firewall(l,k,true);m=T(l);m=h(m,o.href)}m=T(m);j=j.replace(J,function(t,r,q,p){r=X(r);r="url("+h(m,r);return r});i.type="text/css";if(D.isObject(i.styleSheet)){i.styleSheet.cssText=j}else{i.appendChild(document.createTextNode(j))}try{document.getElementsByTagName("head")[0].appendChild(i)}catch(n){throw new Error("Dispacher: CSS Processing Error ("+n+")");return false}return true};V.jsLoader=function(j,i){if(D.isString(j)&&(j!=="")){i=i||{};F.generateId(i);V.kill(i.id);S[i.id].chunks=[{src:j,content:"",type:N.JSNODE,params:{href:j}}];i.underground=true;R(i);g(i.id,i);return i.id}return null};V.cssLoader=function(j,i){if(D.isString(j)&&(j!=="")){i=i||{};F.generateId(i);V.kill(i.id);S[i.id].chunks=[{src:j,content:"",type:N.CSSNODE,params:{href:j}}];i.underground=true;R(i);g(i.id,i);return i.id}return null};V.isAlive=function(i){return(i&&D.isObject(S[i])&&(S[i].chunks.length>0))};V.kill=function(i){if(i&&!D.isObject(S[i])){S[i]={chunks:[],destroyer:null}}else{if(this.isAlive(i)){S[i].chunks=[]}}};V.destroy=function(i){this.kill(i);if(i&&!D.isObject(S[i])){S[i].destroyer.fire(E(i),{})}};V.onDestroy=function(k,i,j){var l=(j?[i,j,true]:[i]);if(D.isObject(S[k])&&D.isObject(S[k].destroyer)){if(D.isObject(j)){S[k].destroyer.subscribe(i,j,true)}else{S[k].destroyer.subscribe(i)}return true}return false};V.init=function(i){i=i||{};i.relative=i.relative||false;P=i};V.firewall=function(l,k,o){var j=null,n=null,i=null;while(l.indexOf("&amp;")>-1){l=l.replace("&amp;","&")}k.proxy=k.proxy||N.proxy;if(D.isFunction(k.firewall)){l=k.firewall.apply(k,[l])}else{if(!k.monolithic&&!o&&k.proxy){i=l.match(G);if(i&&(i[2]!==document.domain)){l=k.proxy+escape(l)}}}return l};V.obj2query=function(k){var i="",j;if(D.isObject(k)){for(key in k){if(k.hasOwnProperty(key)){i+=(i==""?"":"&");i+=key+"="+k[key]}}}return i};V.augmentURI=function(k,i){i=i||{};var l=c(k,this.strictMode),j="";l.queryKey=l.queryKey||{};D.augmentObject(l.queryKey,i,true);if(l.protocol){j+=l.protocol+":"}if(this.strictMode){if(/^(?:[^:\/?#]+:)?\/\//.test(l.source)){j+="//"}}else{if(/^(?:(?![^:@]+:[^:@\/]*@)[^:\/?#.]+:)?\/\//.test(l.source)){j+="//"}}if(l.authority){if(l.userInfo){if(l.user){j+=l.user}if(l.userInfo.indexOf(":")>-1){j+=":"}if(l.password){j+=l.password}j+="@"}if(l.host){j+=l.host}if(l.port){j+=":"+l.port}}if(l.relative){if(l.path){if(l.directory){j+=l.directory}if(l.file){j+=l.file}}j+="?";for(sName in l.queryKey){if(l.queryKey.hasOwnProperty(sName)){j+=sName+"="+l.queryKey[sName]+"&"}}if(l.anchor){j+="#"+l.anchor}}return j};V.toString=function(){return("YUI Dispatcher Plugin")};return V}()})();YAHOO.util.Dispatcher=YAHOO.plugin.Dispatcher;YAHOO.register("dispatcher",YAHOO.plugin.Dispatcher,{version:"2.0",build:"234"});