/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 3.0.0b1
build: 1163
*/
(function(){var I={},B=new Date().getTime(),A,E,H=function(){if(window.addEventListener){return function(M,L,K,J){M.addEventListener(L,K,(!!J));};}else{if(window.attachEvent){return function(L,K,J){L.attachEvent("on"+K,J);};}else{return function(){};}}}(),F=function(){if(window.removeEventListener){return function(M,L,K,J){M.removeEventListener(L,K,!!J);};}else{if(window.detachEvent){return function(L,K,J){L.detachEvent("on"+K,J);};}else{return function(){};}}}(),D=function(){YUI.Env.windowLoaded=true;YUI.Env.DOMReady=true;F(window,"load",D);},C={"io.xdrReady":1,"io.start":1,"io.success":1,"io.failure":1},G=Array.prototype.slice;if(typeof YUI==="undefined"||!YUI){YUI=function(K){var J=this;if(!(J instanceof YUI)){return new YUI(K);}else{J._init(K);J._setup();return J;}};}YUI.prototype={_init:function(L){L=L||{};var J="3.0.0b1",K=this;L.win=L.win||window||{};L.win=L.win.contentWindow||L.win;L.doc=L.win.document;L.debug=("debug" in L)?L.debug:true;L.useBrowserConsole=("useBrowserConsole" in L)?L.useBrowserConsole:true;L.throwFail=("throwFail" in L)?L.throwFail:true;K.config=L;K.Env={mods:{},_idx:0,_used:{},_attached:{},_yidx:0,_uidx:0,_loaded:{}};if(J.indexOf("@")>-1){J="test";}K.version=J;K.Env._loaded[J]={};if(YUI.Env){K.Env._yidx=(++YUI.Env._yidx);K.Env._guidp=("yui_"+this.version+"-"+K.Env._yidx+"-"+B).replace(/\./g,"_");K.id=K.stamp(K);I[K.id]=K;}K.constructor=YUI;},_setup:function(J){this.use("yui-base");this.config=this.merge(this.config);},applyTo:function(P,O,L){if(!(O in C)){this.error(O+": applyTo not allowed");return null;}var K=I[P],N,J,M;if(K){N=O.split(".");J=K;for(M=0;M<N.length;M=M+1){J=J[N[M]];if(!J){this.error("applyTo not found: "+O);}}return J.apply(K,L);}return null;},add:function(L,N,K,M){var J={name:L,fn:N,version:K,details:M||{}};YUI.Env.mods[L]=J;return this;},_attach:function(K,O){var T=YUI.Env.mods,L=this.Env._attached,Q,P=K.length,M,N,R,S,J;for(Q=0;Q<P;Q=Q+1){M=K[Q];N=T[M];if(!L[M]&&N){L[M]=true;R=N.details;S=R.requires;J=R.use;if(S){this._attach(this.Array(S));}if(N.fn){N.fn(this);}if(J){this._attach(this.Array(J));}}}},use:function(){if(this._loading){this._useQueue.add(G.call(arguments,0));return this;}var K=this,T=G.call(arguments,0),W=YUI.Env.mods,X=K.Env._used,U,O=T[0],M=false,V=T[T.length-1],P,R,N,Q=[],J=[],S=function(b){if(X[b]){return;}var Y=W[b],a,c,Z;if(Y){X[b]=true;c=Y.details.requires;Z=Y.details.use;}else{if(!YUI.Env._loaded[K.version][b]){Q.push(b);}else{X[b]=true;}}if(c){if(K.Lang.isString(c)){S(c);}else{for(a=0;a<c.length;a=a+1){S(c[a]);}}}J.push(b);},L=function(Z){Z=Z||{success:true,msg:"not dynamic"};if(K.Env._callback){var Y=K.Env._callback;K.Env._callback=null;Y(K,Z);}if(K.fire){K.fire("yui:load",K,Z);}this._loading=false;while(this._useQueue&&this._useQueue.size()&&!this._loading){K.use.apply(K,this._useQueue.next());}};if(typeof V==="function"){T.pop();K.Env._callback=V;}else{V=null;}if(O==="*"){T=[];for(P in W){if(W.hasOwnProperty(P)){T.push(P);}}return K.use.apply(K,T);}if(K.Loader){M=true;this._useQueue=this._useQueue||new K.Queue();U=new K.Loader(K.config);U.require(T);U.ignoreRegistered=true;U.allowRollup=false;U.calculate();T=U.sorted;}N=T.length;for(R=0;R<N;R=R+1){S(T[R]);}if(K.Loader&&Q.length){this._loading=true;U=new K.Loader(K.config);U.onSuccess=L;U.onFailure=L;U.onTimeout=L;U.attaching=T;U.require(Q);U.insert();}else{K._attach(J);L();}return K;},namespace:function(){var J=arguments,N=null,L,K,M;for(L=0;L<J.length;L=L+1){M=(""+J[L]).split(".");N=this;for(K=(M[0]=="YAHOO")?1:0;K<M.length;K=K+1){N[M[K]]=N[M[K]]||{};N=N[M[K]];}}return N;},log:function(){},error:function(K,J){if(this.config.throwFail){throw (J||new Error(K));}else{this.message(K,"error");}return this;},guid:function(J){var K=this.Env._guidp+(++this.Env._uidx);return(J)?(J+K):K;},stamp:function(L,M){if(!L){return L;}var J=(typeof L==="string")?L:L._yuid;if(!J){J=this.guid();if(!M){try{L._yuid=J;}catch(K){J=null;}}}return J;}};A=YUI.prototype;for(E in A){if(true){YUI[E]=A[E];}}YUI._init();H(window,"load",D);YUI.Env.add=H;YUI.Env.remove=F;})();YUI.add("yui-base",function(A){(function(){var B=A,D="yui:log",C;B.log=function(G,N,E,L){var F=B,M=F.config,J=false,O,I,H,K;if(M.debug){if(E){O=M.logExclude;I=M.logInclude;if(I&&!(E in I)){J=true;}else{if(O&&(E in O)){J=true;}}}if(!J){if(M.useBrowserConsole){H=(E)?E+": "+G:G;if(typeof console!="undefined"){K=(N&&console[N])?N:"log";console[K](H);}else{if(typeof opera!="undefined"){opera.postError(H);}}}if(F.fire&&!J&&!L){if(!C){F.publish(D,{broadcast:2,emitFacade:true});C=true;}F.fire(D,{msg:G,cat:N,src:E});}}}return F;};B.message=function(){return B.log.apply(B,arguments);};})();(function(){A.Lang=A.Lang||{};var Q=A.Lang,F="array",H="boolean",C="date",K="error",R="function",G="number",J="null",E="object",N="regexp",M="string",B=Object.prototype.toString,O="undefined",D={"undefined":O,"number":G,"boolean":H,"string":M,"[object Function]":R,"[object RegExp]":N,"[object Array]":F,"[object Date]":C,"[object Error]":K},I=/^\s+|\s+$/g,P="";Q.isArray=function(L){return Q.type(L)===F;};Q.isBoolean=function(L){return typeof L===H;};Q.isFunction=function(L){return Q.type(L)===R;};Q.isDate=function(L){return Q.type(L)===C;};Q.isNull=function(L){return L===null;};Q.isNumber=function(L){return typeof L===G&&isFinite(L);};Q.isObject=function(S,L){return(S&&(typeof S===E||(!L&&Q.isFunction(S))))||false;};Q.isString=function(L){return typeof L===M;};Q.isUndefined=function(L){return typeof L===O;};Q.trim=function(L){try{return L.replace(I,P);}catch(S){return L;}};Q.isValue=function(S){var L=Q.type(S);switch(L){case G:return isFinite(S);case J:case O:return false;default:return !!(L);}};Q.type=function(L){return D[typeof L]||D[B.call(L)]||(L?E:J);};})();(function(){var B=A.Lang,C=Array.prototype,D=function(L,I,K){var H=(K)?2:A.Array.test(L),G,F,E;if(H){try{return C.slice.call(L,I||0);}catch(J){E=[];for(G=0,F=L.length;G<F;G=G+1){E.push(L[G]);}return E;}}else{return[L];}};A.Array=D;D.test=function(G){var E=0;if(B.isObject(G)){if(B.isArray(G)){E=1;
}else{try{if("length" in G&&!("tagName" in G)&&!("alert" in G)&&(!A.Lang.isFunction(G.size)||G.size()>1)){E=2;}}catch(F){}}}return E;};D.each=(C.forEach)?function(E,F,G){C.forEach.call(E||[],F,G||A);return A;}:function(F,H,I){var E=(F&&F.length)||0,G;for(G=0;G<E;G=G+1){H.call(I||A,F[G],G,F);}return A;};D.hash=function(G,F){var J={},E=G.length,I=F&&F.length,H;for(H=0;H<E;H=H+1){J[G[H]]=(I&&I>H)?F[H]:true;}return J;};D.indexOf=(C.indexOf)?function(E,F){return E.indexOf(F);}:function(E,G){for(var F=0;F<E.length;F=F+1){if(E[F]===G){return F;}}return -1;};D.numericSort=function(F,E){return(F-E);};D.some=(C.some)?function(E,F,G){return C.some.call(E,F,G);}:function(F,H,I){var E=F.length,G;for(G=0;G<E;G=G+1){if(H.call(I,F[G],G,F)){return true;}}return false;};})();(function(){var C=A.Lang,B="__",D=function(G,F){var E=F.toString;if(C.isFunction(E)&&E!=Object.prototype.toString){G.toString=E;}};A.merge=function(){var F=arguments,H={},G,E=F.length;for(G=0;G<E;G=G+1){A.mix(H,F[G],true);}return H;};A.mix=function(E,N,G,M,K,L){if(!N||!E){return E||A;}if(K){switch(K){case 1:return A.mix(E.prototype,N.prototype);case 2:A.mix(E.prototype,N.prototype);break;case 3:return A.mix(E,N.prototype);case 4:return A.mix(E.prototype,N);default:}}var J=L&&C.isArray(E),I,H,F;if(M&&M.length){for(I=0,H=M.length;I<H;++I){F=M[I];if(F in N){if(L&&C.isObject(E[F],true)){A.mix(E[F],N[F]);}else{if(!J&&(G||!(F in E))){E[F]=N[F];}else{if(J){E.push(N[F]);}}}}}}else{for(I in N){if(L&&C.isObject(E[I],true)){A.mix(E[I],N[I]);}else{if(!J&&(G||!(I in E))){E[I]=N[I];}else{if(J){E.push(N[I]);}}}}if(A.UA.ie){D(E,N);}}return E;};A.cached=function(G,E){E=E||{};return function F(I,H){var J=(H)?Array.prototype.join.call(arguments,B):I;if(!(J in E)){E[J]=G.apply(G,arguments);}return E[J];};};})();(function(){A.Object=function(G){var E=function(){};E.prototype=G;return new E();};var D=A.Object,C=undefined,B=function(I,H){var G=(H===2),E=(G)?0:[],F;for(F in I){if(G){E++;}else{if(I.hasOwnProperty(F)){E.push((H)?I[F]:F);}}}return E;};D.keys=function(E){return B(E);};D.values=function(E){return B(E,1);};D.size=function(E){return B(E,2);};D.hasKey=function(F,E){return(E in F);};D.hasValue=function(F,E){return(A.Array.indexOf(D.values(F),E)>-1);};D.owns=function(F,E){return(F.hasOwnProperty(E));};D.each=function(I,H,J,G){var F=J||A,E;for(E in I){if(G||I.hasOwnProperty(E)){H.call(F,I[E],E,I);}}return A;};D.getValue=function(I,H){var G=A.Array(H),E=G.length,F;for(F=0;I!==C&&F<E;F=F+1){I=I[G[F]];}return I;};D.setValue=function(K,I,J){var H=A.Array(I),G=H.length-1,E,F=K;if(G>=0){for(E=0;F!==C&&E<G;E=E+1){F=F[H[E]];}if(F!==C){F[H[E]]=J;}else{return C;}}return K;};})();A.UA=function(){var G=navigator,F={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:G.cajaVersion,secure:false,os:null},D=G&&G.userAgent,E=A.config.win.location,C=E&&E.href,B;F.secure=C&&(C.toLowerCase().indexOf("https")===0);if(D){if((/windows|win32/).test(D)){F.os="windows";}else{if((/macintosh/).test(D)){F.os="macintosh";}}if((/KHTML/).test(D)){F.webkit=1;}B=D.match(/AppleWebKit\/([^\s]*)/);if(B&&B[1]){F.webkit=parseFloat(B[1]);if(/ Mobile\//.test(D)){F.mobile="Apple";}else{B=D.match(/NokiaN[^\/]*/);if(B){F.mobile=B[0];}}B=D.match(/AdobeAIR\/([^\s]*)/);if(B){F.air=B[0];}}if(!F.webkit){B=D.match(/Opera[\s\/]([^\s]*)/);if(B&&B[1]){F.opera=parseFloat(B[1]);B=D.match(/Opera Mini[^;]*/);if(B){F.mobile=B[0];}}else{B=D.match(/MSIE\s([^;]*)/);if(B&&B[1]){F.ie=parseFloat(B[1]);}else{B=D.match(/Gecko\/([^\s]*)/);if(B){F.gecko=1;B=D.match(/rv:([^\s\)]*)/);if(B&&B[1]){F.gecko=parseFloat(B[1]);}}}}}}return F;}();(function(){var B=A.Lang,C=function(K,E,L,G,H){K=K||0;E=E||{};var F=L,J=G,I,D;if(B.isString(L)){F=E[L];}if(!F){A.error("method undefined");}if(!B.isArray(J)){J=[G];}I=function(){F.apply(E,J);};D=(H)?setInterval(I,K):setTimeout(I,K);return{id:D,interval:H,cancel:function(){if(this.interval){clearInterval(D);}else{clearTimeout(D);}}};};A.later=C;B.later=C;})();(function(){var D=["yui-base"],B,E=A.config;A.use.apply(A,D);if(E.core){B=E.core;}else{B=["queue-base","get","loader"];}A.use.apply(A,B);})();},"3.0.0b1");YUI.add("queue-base",function(B){function A(){this._init();this.add.apply(this,arguments);}A.prototype={_init:function(){this._q=[];},next:function(){return this._q.shift();},add:function(){B.Array.each(B.Array(arguments,0,true),function(C){this._q.push(C);},this);return this;},size:function(){return this._q.length;}};B.Queue=A;},"3.0.0b1");YUI.add("get",function(A){(function(){var C=A.UA,B=A.Lang,E="text/javascript",F="text/css",D="stylesheet";A.Get=function(){var M={},K=0,U=false,W=function(a,X,b){var Y=b||A.config.win,c=Y.document,e=c.createElement(a),Z;for(Z in X){if(X[Z]&&X.hasOwnProperty(Z)){e.setAttribute(Z,X[Z]);}}return e;},T=function(Y,Z,X){var a={id:A.guid(),type:F,rel:D,href:Y};if(X){A.mix(a,X);}return W("link",a,Z);},S=function(Y,Z,X){var a={id:A.guid(),type:E,src:Y};if(X){A.mix(a,X);}return W("script",a,Z);},N=function(f){var b=M[f],e,X,c,a,Z,Y;if(b){e=b.nodes;X=e.length;c=b.win.document;a=c.getElementsByTagName("head")[0];if(b.insertBefore){Z=L(b.insertBefore,f);if(Z){a=Z.parentNode;}}for(Y=0;Y<X;Y=Y+1){a.removeChild(e[Y]);}}b.nodes=[];},P=function(Y,Z,X){return{tId:Y.tId,win:Y.win,data:Y.data,nodes:Y.nodes,msg:Z,statusText:X,purge:function(){N(this.tId);}};},O=function(b,a,X){var Y=M[b],Z;if(Y&&Y.onEnd){Z=Y.context||Y;Y.onEnd.call(Z,P(Y,a,X));}},V=function(a,Z){var X=M[a],Y;if(X.timer){X.timer.cancel();}if(X.onFailure){Y=X.context||X;X.onFailure.call(Y,P(X,Z));}O(a,Z,"failure");},L=function(X,a){var Y=M[a],Z=(B.isString(X))?Y.win.document.getElementById(X):X;if(!Z){V(a,"target node not found: "+X);}return Z;},I=function(a){var X=M[a],Z,Y;if(X.timer){X.timer.cancel();}X.finished=true;if(X.aborted){Z="transaction "+a+" was aborted";V(a,Z);return;}if(X.onSuccess){Y=X.context||X;X.onSuccess.call(Y,P(X));}O(a,Z,"OK");},Q=function(Z){var X=M[Z],Y;if(X.onTimeout){Y=X.context||X;X.onTimeout.call(Y,P(X));}O(Z,"timeout","timeout");},H=function(Z,c){var Y=M[Z],b,g,f,e,a,X,i;
if(Y.timer){Y.timer.cancel();}if(Y.aborted){b="transaction "+Z+" was aborted";V(Z,b);return;}if(c){Y.url.shift();if(Y.varName){Y.varName.shift();}}else{Y.url=(B.isString(Y.url))?[Y.url]:Y.url;if(Y.varName){Y.varName=(B.isString(Y.varName))?[Y.varName]:Y.varName;}}g=Y.win;f=g.document;e=f.getElementsByTagName("head")[0];if(Y.url.length===0){I(Z);return;}X=Y.url[0];if(!X){Y.url.shift();return H(Z);}if(Y.timeout){Y.timer=B.later(Y.timeout,Y,Q,Z);}if(Y.type==="script"){a=S(X,g,Y.attributes);}else{a=T(X,g,Y.attributes);}J(Y.type,a,Z,X,g,Y.url.length);Y.nodes.push(a);if(Y.insertBefore){i=L(Y.insertBefore,Z);if(i){i.parentNode.insertBefore(a,i);}}else{e.appendChild(a);}if((C.webkit||C.gecko)&&Y.type==="css"){H(Z,X);}},G=function(){if(U){return;}U=true;var X,Y;for(X in M){if(M.hasOwnProperty(X)){Y=M[X];if(Y.autopurge&&Y.finished){N(Y.tId);delete M[X];}}}U=false;},R=function(Y,X,Z){Z=Z||{};var c="q"+(K++),a,b=Z.purgethreshold||A.Get.PURGE_THRESH;if(K%b===0){G();}M[c]=A.merge(Z,{tId:c,type:Y,url:X,finished:false,nodes:[]});a=M[c];a.win=a.win||A.config.win;a.context=a.context||a;a.autopurge=("autopurge" in a)?a.autopurge:(Y==="script")?true:false;if(Z.charset){a.attributes=a.attributes||{};a.attributes.charset=Z.charset;}B.later(0,a,H,c);return{tId:c};},J=function(Z,e,d,Y,c,b,X){var a=X||H;if(C.ie){e.onreadystatechange=function(){var f=this.readyState;if("loaded"===f||"complete"===f){e.onreadystatechange=null;a(d,Y);}};}else{if(C.webkit){if(Z==="script"){e.addEventListener("load",function(){a(d,Y);});}}else{e.onload=function(){a(d,Y);};e.onerror=function(f){V(d,f+": "+Y);};}}};return{PURGE_THRESH:20,_finalize:function(X){B.later(0,null,I,X);},abort:function(Y){var Z=(B.isString(Y))?Y:Y.tId,X=M[Z];if(X){X.aborted=true;}},script:function(X,Y){return R("script",X,Y);},css:function(X,Y){return R("css",X,Y);}};}();})();},"3.0.0b1");YUI.add("loader",function(A){(function(){YUI.Env._loaderQueue=YUI.Env._loaderQueue||new A.Queue();var o=YUI.Env,v,h="base",S="css",u="js",J="cssreset",Q="cssfonts",w="cssgrids",B="cssbase",I=[J,Q,w,"cssreset-context","cssfonts-context","cssgrids-context"],U=["reset","fonts","grids",h],V=A.version,p=V+"/build/",Y="-context",d="anim-base",r="dd-drag",c="dom",D="dataschema-base",l="datasource-local",e="dom-base",K="dom-style",G="dump",T="get",E="event",j="event-custom",m="io-base",t="node",R="node-base",P="oop",F="selector-css2",g="substitute",O="widget",H="widget-position",n="yui-base",a="plugin",Z={version:V,root:p,base:"http://yui.yahooapis.com/"+p,comboBase:"http://yui.yahooapis.com/combo?",skin:{defaultSkin:"sam",base:"assets/skins/",path:"skin.css",after:I},modules:{dom:{requires:[P],submodules:{"dom-base":{requires:[P]},"dom-style":{requires:[e]},"dom-screen":{requires:[e,K]},"selector-native":{requires:[e]},"selector-css2":{requires:["selector-native"]},"selector":{requires:[e]}},plugins:{"selector-css3":{requires:[F]}}},node:{requires:[c,h],expound:E,submodules:{"node-base":{requires:[e,h,F]},"node-style":{requires:[K,R]},"node-screen":{requires:["dom-screen",R]}},plugins:{"node-event-simulate":{requires:[R,"event-simulate"]}}},anim:{requires:[h,t],submodules:{"anim-base":{requires:[h,"node-style"]},"anim-color":{requires:[d]},"anim-curve":{requires:["anim-xy"]},"anim-easing":{requires:[d]},"anim-scroll":{requires:[d]},"anim-xy":{requires:[d,"node-screen"]},"anim-node-plugin":{requires:[t,d]}}},attribute:{requires:[j]},base:{submodules:{"base-base":{requires:["attribute"]},"base-build":{requires:["base-base"]}}},cache:{requires:[a]},compat:{requires:[t,G,g]},classnamemanager:{requires:[n]},collection:{requires:[P]},console:{requires:[O,g],skinnable:true,plugins:{"console-filters":{requires:[a],skinnable:true}}},cookie:{requires:[n]},dataschema:{submodules:{"dataschema-base":{requires:[h]},"dataschema-array":{requires:[D]},"dataschema-json":{requires:[D,"json"]},"dataschema-text":{requires:[D]},"dataschema-xml":{requires:[D]}}},datasource:{submodules:{"datasource-local":{requires:[h]},"datasource-arrayschema":{requires:[l,a,"dataschema-array"]},"datasource-cache":{requires:[l,"cache"]},"datasource-function":{requires:[l]},"datasource-jsonschema":{requires:[l,a,"dataschema-json"]},"datasource-polling":{requires:[l]},"datasource-get":{requires:[l,T]},"datasource-textschema":{requires:[l,a,"dataschema-text"]},"datasource-io":{requires:[l,m]},"datasource-xmlschema":{requires:[l,a,"dataschema-xml"]}}},datatype:{submodules:{"datatype-date":{requires:[n]},"datatype-number":{requires:[n]},"datatype-xml":{requires:[n]}}},dd:{submodules:{"dd-ddm-base":{requires:[t,h]},"dd-ddm":{requires:["dd-ddm-base"]},"dd-ddm-drop":{requires:["dd-ddm"]},"dd-drag":{requires:["dd-ddm-base"]},"dd-drop":{requires:["dd-ddm-drop"]},"dd-proxy":{requires:[r]},"dd-constrain":{requires:[r]},"dd-scroll":{requires:[r]},"dd-plugin":{requires:[r],optional:["dd-constrain","dd-proxy"]},"dd-drop-plugin":{requires:["dd-drop"]}}},dump:{requires:[n]},event:{requires:[j,t]},"event-custom":{requires:[P]},"event-simulate":{requires:[E]},"node-focusmanager":{requires:[t,a]},get:{requires:[n]},history:{requires:[t]},imageloader:{requires:[t]},io:{submodules:{"io-base":{requires:[j]},"io-xdr":{requires:[m]},"io-form":{requires:[m,t]},"io-upload-iframe":{requires:[m,t]},"io-queue":{requires:[m,"queue-promote"]}}},json:{submodules:{"json-parse":{requires:[n]},"json-stringify":{requires:[n]}}},loader:{requires:[T]},"node-menunav":{requires:[t,"classnamemanager",a,"node-focusmanager"],skinnable:true},oop:{requires:[n]},overlay:{requires:[O,H,"widget-position-ext","widget-stack","widget-stdmod"],skinnable:true},plugin:{requires:[h]},profiler:{requires:[n]},queue:{submodules:{"queue-base":{requires:[n]},"queue-run":{requires:["queue-base",j]}},plugins:{"queue-promote":{}}},slider:{requires:[O,"dd-constrain"],skinnable:true},stylesheet:{requires:[n]},substitute:{optional:[G]},widget:{requires:[h,t,"classnamemanager"],plugins:{"widget-position":{},"widget-position-ext":{requires:[H]},"widget-stack":{skinnable:true},"widget-stdmod":{}},skinnable:true},yui:{supersedes:[n,T,"loader","queue-base"]},"yui-base":{},test:{requires:[g,t,"json","event-simulate"]}}},k=function(L,i,x){return L+"/"+i+"-min."+(x||S);
},N=YUI.Env._loaderQueue,C=Z.modules,q,X,W,s,M=A.Lang,f="_provides",b="_supersedes";for(q=0;q<U.length;q=q+1){X=U[q];W=S+X;C[W]={type:S,path:k(W,X)};s=W+Y;X=X+Y;C[s]={type:S,path:k(W,X)};if(W==w){C[W].requires=[Q];C[W].optional=[J];C[s].requires=[Q+Y];C[s].optional=[J+Y];}else{if(W==B){C[W].after=I;C[s].after=I;}}}A.Env.meta=Z;v=o._loaded;A.Loader=function(y){this._internalCallback=null;this._useYahooListener=false;this.onSuccess=null;this.onFailure=null;this.onCSS=null;this.onProgress=null;this.onTimeout=null;this.context=A;this.data=null;this.insertBefore=null;this.charset=null;this.cssAttributes=null;this.jsAttributes=null;this.base=A.Env.meta.base;this.comboBase=A.Env.meta.comboBase;this.combine=(!(h in y));this.ignoreRegistered=false;this.root=A.Env.meta.root;this.timeout=0;this.ignore=null;this.force=null;this.forceMap={};this.allowRollup=true;this.filter=null;this.filters={};this.required={};this.moduleInfo={};this.skin=A.merge(A.Env.meta.skin);var x=A.Env.meta.modules,L;for(L in x){if(x.hasOwnProperty(L)){this._internal=true;this.addModule(x[L],L);this._internal=false;}}this.rollups=null;this.loadOptional=false;this.sorted=[];this.loaded=v[V];this.attaching=null;this.dirty=true;this.inserted={};this.skipped={};this._config(y);};A.Loader.prototype={FILTER_DEFS:{RAW:{"searchExp":"-min\\.js","replaceStr":".js"},DEBUG:{"searchExp":"-min\\.js","replaceStr":"-debug.js"}},SKIN_PREFIX:"skin-",_config:function(AA){var x,L,z,y;if(AA){for(x in AA){if(AA.hasOwnProperty(x)){z=AA[x];if(x=="require"){this.require(z);}else{if(x=="modules"){for(L in z){if(z.hasOwnProperty(L)){this.addModule(z[L],L);}}}else{this[x]=z;}}}}}y=this.filter;if(M.isString(y)){y=y.toUpperCase();this.filterName=y;this.filter=this.FILTER_DEFS[y];}},formatSkin:function(x,L){var i=this.SKIN_PREFIX+x;if(L){i=i+"-"+L;}return i;},_addSkin:function(AD,AB,AC){var L=this.formatSkin(AD),y=this.moduleInfo,i=this.skin,x=y[AB]&&y[AB].ext,AA,z;if(AB){L=this.formatSkin(AD,AB);if(!y[L]){AA=y[AB];z=AA.pkg||AB;this.addModule({"name":L,"type":"css","after":i.after,"path":(AC||z)+"/"+i.base+AD+"/"+AB+".css","ext":x});}}return L;},addModule:function(y,x){x=x||y.name;y.name=x;if(!y||!y.name){return false;}if(!y.type){y.type=u;}if(!y.path&&!y.fullpath){y.path=k(x,x,y.type);}y.ext=("ext" in y)?y.ext:(this._internal)?false:true;y.requires=y.requires||[];this.moduleInfo[x]=y;var AB=y.submodules,AC,z,AD,AF,AE,AA,L;if(AB){AD=[];z=0;for(AC in AB){if(AB.hasOwnProperty(AC)){AF=AB[AC];AF.path=k(x,AC,y.type);this.addModule(AF,AC);AD.push(AC);if(y.skinnable){AE=this._addSkin(this.skin.defaultSkin,AC,x);AD.push(AE.name);}z++;}}y.supersedes=AD;y.rollup=Math.min(z-1,4);}AA=y.plugins;if(AA){for(AC in AA){if(AA.hasOwnProperty(AC)){L=AA[AC];L.path=k(x,AC,y.type);L.requires=L.requires||[];L.requires.push(x);this.addModule(L,AC);if(y.skinnable){this._addSkin(this.skin.defaultSkin,AC,x);}}}}this.dirty=true;return y;},require:function(i){var L=(typeof i==="string")?arguments:i;this.dirty=true;A.mix(this.required,A.Array.hash(L));},getRequires:function(AD){if(!AD){return[];}if(!this.dirty&&AD.expanded){return AD.expanded;}var AB,AC=[],L=AD.requires,x=AD.optional,y=this.moduleInfo,z,AA,AE;for(AB=0;AB<L.length;AB=AB+1){AC.push(L[AB]);z=this.getModule(L[AB]);AE=this.getRequires(z);for(AA=0;AA<AE.length;AA=AA+1){AC.push(AE[AA]);}}L=AD.supersedes;if(L){for(AB=0;AB<L.length;AB=AB+1){AC.push(L[AB]);z=this.getModule(L[AB]);AE=this.getRequires(z);for(AA=0;AA<AE.length;AA=AA+1){AC.push(AE[AA]);}}}if(x&&this.loadOptional){for(AB=0;AB<x.length;AB=AB+1){AC.push(x[AB]);AE=this.getRequires(y[x[AB]]);for(AA=0;AA<AE.length;AA=AA+1){AC.push(AE[AA]);}}}AD.expanded=A.Object.keys(A.Array.hash(AC));return AD.expanded;},getProvides:function(y,AD){var x=!(AD),L=(x)?f:b,AA=this.getModule(y),z={},AG,AB,AE,AC,AF=function(i){if(!AB[i]){AB[i]=true;A.mix(z,AE.getProvides(i));}};if(!AA){return z;}if(AA[L]){return AA[L];}AG=AA.supersedes;AB={};AE=this;if(AG){for(AC=0;AC<AG.length;AC=AC+1){AF(AG[AC]);}}AA[b]=z;AA[f]=A.merge(z);AA[f][y]=true;return AA[L];},calculate:function(L){if(L||this.dirty){this._config(L);this._setup();this._explode();if(this.allowRollup&&!this.combine){this._rollup();}this._reduce();this._sort();this.dirty=false;}},_setup:function(){var AC=this.moduleInfo,AA,AB,z,x,AD,y,L;for(AA in AC){if(AC.hasOwnProperty(AA)){x=AC[AA];if(x&&x.skinnable){AD=this.skin.overrides;if(AD&&AD[AA]){for(AB=0;AB<AD[AA].length;AB=AB+1){L=this._addSkin(AD[AA][AB],AA);}}else{L=this._addSkin(this.skin.defaultSkin,AA);}x.requires.push(L);}}}y=A.merge(this.inserted);if(!this.ignoreRegistered){A.mix(y,o.mods);}if(this.ignore){A.mix(y,A.Array.hash(this.ignore));}for(z in y){if(y.hasOwnProperty(z)){A.mix(y,this.getProvides(z));}}if(this.force){for(AB=0;AB<this.force.length;AB=AB+1){if(this.force[AB] in y){delete y[this.force[AB]];}}}A.mix(this.loaded,y);},_explode:function(){var AA=this.required,x,L,z,y=this,AB=function(i){L=y.getModule(i);var AC=L&&L.expound;if(L){if(AC){AA[AC]=y.getModule(AC);z=y.getRequires(AA[AC]);A.mix(AA,A.Array.hash(z));}z=y.getRequires(L);A.mix(AA,A.Array.hash(z));}};for(x in AA){if(AA.hasOwnProperty(x)){AB(x);}}},getModule:function(i){var L=this.moduleInfo[i];return L;},_rollup:function(){var AC,AB,AA,AF,AE={},L=this.required,y,z=this.moduleInfo,x,AD;if(this.dirty||!this.rollups){for(AC in z){if(z.hasOwnProperty(AC)){AA=this.getModule(AC);if(AA&&AA.rollup){AE[AC]=AA;}}}this.rollups=AE;this.forceMap=(this.force)?A.Array.hash(this.force):{};}for(;;){x=false;for(AC in AE){if(AE.hasOwnProperty(AC)){if(!L[AC]&&((!this.loaded[AC])||this.forceMap[AC])){AA=this.getModule(AC);AF=AA.supersedes||[];y=false;if(!AA.rollup){continue;}AD=0;for(AB=0;AB<AF.length;AB=AB+1){if(this.loaded[AF[AB]]&&!this.forceMap[AF[AB]]){y=false;break;}else{if(L[AF[AB]]){AD++;y=(AD>=AA.rollup);if(y){break;}}}}if(y){L[AC]=true;x=true;this.getRequires(AA);}}}}if(!x){break;}}},_reduce:function(){var y,x,z,L,AA=this.required;for(y in AA){if(AA.hasOwnProperty(y)){if(this.loaded[y]&&(!this.forceMap[y])&&!this.ignoreRegistered){delete AA[y];
}else{L=this.getModule(y);z=L&&L.supersedes;if(z){for(x=0;x<z.length;x=x+1){if(z[x] in AA){delete AA[z[x]];}}}}}}},_attach:function(){if(this.attaching){A._attach(this.attaching);}else{A._attach(this.sorted);}},_finish:function(){N.running=false;this._continue();},_onSuccess:function(){this._attach();var L=this.skipped,x,y;for(x in L){if(L.hasOwnProperty(x)){delete this.inserted[x];}}this.skipped={};y=this.onSuccess;if(y){y.call(this.context,{msg:"success",data:this.data,success:true});}this._finish();},_onFailure:function(i){this._attach();var L=this.onFailure;if(L){L.call(this.context,{msg:"failure: "+i.msg,data:this.data,success:false});}this._finish();},_onTimeout:function(){this._attach();var L=this.onTimeout;if(L){L.call(this.context,{msg:"timeout",data:this.data,success:false});}this._finish();},_sort:function(){var AF=A.Object.keys(this.required),i=this.moduleInfo,AA=this.loaded,L,x,AD,AC,z,y,AB,AE=function(AK,AN){var AM=i[AK],AJ,AH,AL,AG,AI;if(AA[AN]||!AM){return false;}AH=AM.expanded;AL=AM.after;AG=i[AN];if(AH&&A.Array.indexOf(AH,AN)>-1){return true;}if(AL&&A.Array.indexOf(AL,AN)>-1){return true;}AI=i[AN]&&i[AN].supersedes;if(AI){for(AJ=0;AJ<AI.length;AJ=AJ+1){if(AE(AK,AI[AJ])){return true;}}}if(AM.ext&&AM.type==S&&!AG.ext&&AG.type==S){return true;}return false;};L=0;for(;;){x=AF.length;AB=false;for(z=L;z<x;z=z+1){AD=AF[z];for(y=z+1;y<x;y=y+1){if(AE(AD,AF[y])){AC=AF.splice(y,1);AF.splice(z,0,AC[0]);AB=true;break;}}if(AB){break;}else{L=L+1;}}if(!AB){break;}}this.sorted=AF;},_insert:function(x,y,i){if(x){this._config(x);}this.calculate(y);if(!i){var L=this;this._internalCallback=function(){var z=L.onCSS;if(z){z.call(L.context,A);}L._internalCallback=null;L._insert(null,null,u);};this._insert(null,null,S);return;}this._loading=true;this._combineComplete={};this.loadType=i;this.loadNext();},_continue:function(){if(!(N.running)&&N.size()>0){N.running=true;N.next()();}},insert:function(x,i){var L=this,y;y=A.merge(this,true);delete y.require;delete y.dirty;N.add(function(){L._insert(y,x,i);});this._continue();},loadNext:function(AC){if(!this._loading){return;}var AI,AA,z,y,L,AH=this,AD=this.loadType,AE,x,AB,AF=function(AL){this._combineComplete[AD]=true;var AM=this._combining,AJ=AM.length,AK;for(AK=0;AK<AJ;AK=AK+1){this.inserted[AM[AK]]=true;}this.loadNext(AL.data);},AG=function(i){AH.loadNext(i.data);};if(this.combine&&(!this._combineComplete[AD])){this._combining=[];AI=this.sorted;AA=AI.length;L=this.comboBase;for(z=0;z<AA;z=z+1){y=this.getModule(AI[z]);if(y&&y.type===this.loadType&&!y.ext){L+=this.root+y.path;if(z<AA-1){L+="&";}this._combining.push(AI[z]);}}if(this._combining.length){if(this.loadType===S){AE=A.Get.css;AB=this.cssAttributes;}else{AE=A.Get.script;AB=this.jsAttributes;}AE(this._filter(L),{data:this._loading,onSuccess:AF,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,attributes:AB,timeout:this.timeout,autopurge:false,context:AH});return;}else{this._combineComplete[AD]=true;}}if(AC){if(AC!==this._loading){return;}this.inserted[AC]=true;this.loaded[AC]=true;if(this.onProgress){this.onProgress.call(this.context,{name:AC,data:this.data});}}AI=this.sorted;AA=AI.length;for(z=0;z<AA;z=z+1){if(AI[z] in this.inserted){continue;}if(AI[z]===this._loading){return;}y=this.getModule(AI[z]);if(!y){x="Undefined module "+AI[z]+" skipped";this.inserted[AI[z]]=true;this.skipped[AI[z]]=true;continue;}if(!AD||AD===y.type){this._loading=AI[z];if(y.type===S){AE=A.Get.css;AB=this.cssAttributes;}else{AE=A.Get.script;AB=this.jsAttributes;}L=(y.fullpath)?this._filter(y.fullpath,AI[z]):this._url(y.path,AI[z]);AE(L,{data:AI[z],onSuccess:AG,insertBefore:this.insertBefore,charset:this.charset,attributes:AB,onFailure:this._onFailure,onTimeout:this._onTimeout,timeout:this.timeout,autopurge:false,context:AH});return;}}this._loading=null;AE=this._internalCallback;if(AE){this._internalCallback=null;AE.call(this);}else{this._onSuccess();}},_filter:function(x,i){var z=this.filter,L=i&&(i in this.filters),y=L&&this.filters[i];if(x){if(L){z=(M.isString(y))?this.FILTER_DEFS[y.toUpperCase()]||null:y;}if(z){x=x.replace(new RegExp(z.searchExp,"g"),z.replaceStr);}}return x;},_url:function(i,L){return this._filter((this.base||"")+i,L);}};})();},"3.0.0b1",{requires:["queue-base"]});YUI.add("yui",function(A){},"3.0.0b1",{use:["yui-base","queue-base","get","loader"]});/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 3.0.0b1
build: 1163
*/
YUI.add("oop",function(E){var D=E.Lang,C=E.Array,B=Object.prototype;E.augment=function(A,S,H,Q,M){var K=S.prototype,O=null,R=S,N=(M)?E.Array(M):[],G=A.prototype,L=G||A,P=false,F,I,J;if(G&&R){F={};I={};O={};E.each(K,function(U,T){I[T]=function(){for(J in F){if(F.hasOwnProperty(J)&&(this[J]===I[J])){this[J]=F[J];}}R.apply(this,N);return F[T].apply(this,arguments);};if((!Q||(T in Q))&&(H||!(T in this))){if(D.isFunction(U)){F[T]=U;this[T]=I[T];}else{this[T]=U;}}},O,true);}else{P=true;}E.mix(L,O||K,H,Q);if(P){S.apply(L,N);}return A;};E.aggregate=function(G,F,A,H){return E.mix(G,F,A,H,0,true);};E.extend=function(H,G,A,J){if(!G||!H){E.error("extend failed, verify dependencies");}var I=G.prototype,F=E.Object(I);H.prototype=F;F.constructor=H;H.superclass=I;if(G!=Object&&I.constructor==B.constructor){I.constructor=G;}if(A){E.mix(F,A,true);}if(J){E.mix(H,J,true);}return H;};E.each=function(G,F,H,A){if(G.each&&G.item){return G.each.call(G,F,H);}else{switch(C.test(G)){case 1:return C.each(G,F,H);case 2:return C.each(E.Array(G,0,true),F,H);default:return E.Object.each(G,F,H,A);}}};E.clone=function(I,H,G,J,A){if(!D.isObject(I)){return I;}var F;switch(D.type(I)){case"date":return new Date(I);case"regexp":return new RegExp(I.source);case"function":F=E.bind(I,A);break;case"array":F=[];break;default:F=(H)?{}:E.Object(I);}E.each(I,function(L,K){if(!G||(G.call(J||this,L,K,this,I)!==false)){this[K]=E.clone(L,H,G,J,this);}},F);return F;};E.bind=function(A,G){var F=arguments.length>2?E.Array(arguments,2,true):null;return function(){var I=D.isString(A)?G[A]:A,H=(F)?F.concat(E.Array(arguments,0,true)):arguments;return I.apply(G||I,H);};};E.rbind=function(A,G){var F=arguments.length>2?E.Array(arguments,2,true):null;return function(){var I=D.isString(A)?G[A]:A,H=(F)?E.Array(arguments,0,true).concat(F):arguments;return I.apply(G||I,H);};};},"3.0.0b1");/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 3.0.0b1
build: 1163
*/
YUI.add("event-custom",function(G){G.Env.evt={handles:{},plugins:{}};(function(){var H=0,I=1;G.Do={objs:{},before:function(K,M,N,O){var L=K,J;if(O){J=[K,O].concat(G.Array(arguments,4,true));L=G.rbind.apply(G,J);}return this._inject(H,L,M,N);},after:function(K,M,N,O){var L=K,J;if(O){J=[K,O].concat(G.Array(arguments,4,true));L=G.rbind.apply(G,J);}return this._inject(I,L,M,N);},_inject:function(J,L,M,O){var P=G.stamp(M),N,K;if(!this.objs[P]){this.objs[P]={};}N=this.objs[P];if(!N[O]){N[O]=new G.Do.Method(M,O);M[O]=function(){return N[O].exec.apply(N[O],arguments);};}K=P+G.stamp(L)+O;N[O].register(K,L,J);return new G.EventHandle(N[O],K);},detach:function(J){if(J.detach){J.detach();}},_unload:function(K,J){}};G.Do.Method=function(J,K){this.obj=J;this.methodName=K;this.method=J[K];this.before={};this.after={};};G.Do.Method.prototype.register=function(K,L,J){if(J){this.after[K]=L;}else{this.before[K]=L;}};G.Do.Method.prototype._delete=function(J){delete this.before[J];delete this.after[J];};G.Do.Method.prototype.exec=function(){var L=G.Array(arguments,0,true),M,K,P,N=this.before,J=this.after,O=false;for(M in N){if(N.hasOwnProperty(M)){K=N[M].apply(this.obj,L);if(K){switch(K.constructor){case G.Do.Halt:return K.retVal;case G.Do.AlterArgs:L=K.newArgs;break;case G.Do.Prevent:O=true;break;default:}}}}if(!O){K=this.method.apply(this.obj,L);}for(M in J){if(J.hasOwnProperty(M)){P=J[M].apply(this.obj,L);if(P&&P.constructor==G.Do.Halt){return P.retVal;}else{if(P&&P.constructor==G.Do.AlterReturn){K=P.newRetVal;}}}}return K;};G.Do.AlterArgs=function(K,J){this.msg=K;this.newArgs=J;};G.Do.AlterReturn=function(K,J){this.msg=K;this.newRetVal=J;};G.Do.Halt=function(K,J){this.msg=K;this.retVal=J;};G.Do.Prevent=function(J){this.msg=J;};G.Do.Error=G.Do.Halt;})();(function(){G.EventFacade=function(I,H){I=I||{};this.details=I.details;this.type=I.type;this.target=I.target;this.currentTarget=H;this.relatedTarget=I.relatedTarget;this.stopPropagation=function(){I.stopPropagation();};this.stopImmediatePropagation=function(){I.stopImmediatePropagation();};this.preventDefault=function(){I.preventDefault();};this.halt=function(J){I.halt(J);};};})();var F="after",C=["broadcast","bubbles","context","contextFn","configured","currentTarget","defaultFn","details","emitFacade","fireOnce","host","preventable","preventedFn","queuable","silent","stoppedFn","target","type"],A=new G.EventFacade(),D=G.Object.keys(A),E=9,B="yui:log";G.EventHandle=function(H,I){this.evt=H;this.sub=I;};G.EventHandle.prototype={detach:function(){if(this.evt){this.evt._delete(this.sub);}}};G.CustomEvent=function(H,I){I=I||{};this.id=G.stamp(this);this.type=H;this.context=G;this.logSystem=(H==B);this.silent=this.logSystem;this.subscribers={};this.afters={};this.preventable=true;this.bubbles=true;this.signature=E;this.applyConfig(I,true);};G.CustomEvent.prototype={_YUI_EVENT:true,applyConfig:function(I,H){if(I){G.mix(this,I,H,C);}},_on:function(L,J,I,H){if(!L){G.error("Invalid callback for CE: "+this.type);}var K=new G.Subscriber(L,J,I,H);if(this.fireOnce&&this.fired){G.later(0,this,this._notify,K);}if(H==F){this.afters[K.id]=K;this.hasAfters=true;}else{this.subscribers[K.id]=K;this.hasSubscribers=true;}return new G.EventHandle(this,K);},subscribe:function(J,I){var H=(arguments.length>2)?G.Array(arguments,2,true):null;return this._on(J,I,H,true);},on:function(J,I){var H=(arguments.length>2)?G.Array(arguments,2,true):null;return this._on(J,I,H,true);},after:function(J,I){var H=(arguments.length>2)?G.Array(arguments,2,true):null;return this._on(J,I,H,F);},detach:function(L,J){if(L&&L.detach){return L.detach();}if(!L){return this.unsubscribeAll();}var M=false,I=this.subscribers,H,K;for(H in I){if(I.hasOwnProperty(H)){K=I[H];if(K&&K.contains(L,J)){this._delete(K);M=true;}}}return M;},unsubscribe:function(){return this.detach.apply(this,arguments);},_getFacade:function(){var H=this._facade,K,I=this.details,J;if(!H){H=new G.EventFacade(this,this.currentTarget);}K=I&&I[0];if(G.Lang.isObject(K,true)){J={};G.mix(J,H,true,D);G.mix(H,K,true);G.mix(H,J,true,D);}H.details=this.details;H.target=this.target;H.currentTarget=this.currentTarget;H.stopped=0;H.prevented=0;this._facade=H;return this._facade;},_notify:function(K,J,H){this.log(this.type+"->"+": "+K);var I;if(this.emitFacade){if(!H){H=this._getFacade(J);if(G.Lang.isObject(J[0])){J[0]=H;}else{J.unshift(H);}}}I=K.notify(J,this);if(false===I||this.stopped>1){this.log(this.type+" cancelled by subscriber");return false;}return true;},log:function(I,H){if(!this.silent){}},fire:function(){var Q=G.Env._eventstack,J,S,P,K,L,H,M,I,N,O=true,R;if(Q){if(this.queuable&&this.type!=Q.next.type){this.log("queue "+this.type);Q.queue.push([this,arguments]);return true;}}else{G.Env._eventstack={id:this.id,next:this,silent:this.silent,logging:(this.type===B),stopped:0,prevented:0,queue:[]};Q=G.Env._eventstack;}if(this.fireOnce&&this.fired){this.log("fireOnce event: "+this.type+" already fired");}else{P=G.Array(arguments,0,true);this.stopped=0;this.prevented=0;this.target=this.target||this.host;R=new G.EventTarget({fireOnce:true,context:this.host});this.events=R;if(this.preventedFn){R.on("prevented",this.preventedFn);}if(this.stoppedFn){R.on("stopped",this.stoppedFn);}this.currentTarget=this.host||this.currentTarget;this.fired=true;this.details=P.slice();this.log("Firing "+this.type);N=false;Q.lastLogState=Q.logging;L=null;if(this.emitFacade){this._facade=null;L=this._getFacade(P);if(G.Lang.isObject(P[0])){P[0]=L;}else{P.unshift(L);}}if(this.hasSubscribers){J=G.merge(this.subscribers);for(K in J){if(J.hasOwnProperty(K)){if(!N){Q.logging=(Q.logging||(this.type===B));N=true;}if(this.stopped==2){break;}S=J[K];if(S&&S.fn){O=this._notify(S,P,L);if(false===O){this.stopped=2;}}}}}Q.logging=(Q.lastLogState);if(this.bubbles&&this.host&&!this.stopped){Q.stopped=0;Q.prevented=0;O=this.host.bubble(this);this.stopped=Math.max(this.stopped,Q.stopped);this.prevented=Math.max(this.prevented,Q.prevented);}if(this.defaultFn&&!this.prevented){this.defaultFn.apply(this.host||this,P);
}if(!this.stopped&&this.broadcast){if(this.host!==G){G.fire.apply(G,P);}if(this.broadcast==2){G.Global.fire.apply(G.Global,P);}}if(this.hasAfters&&!this.prevented&&this.stopped<2){J=G.merge(this.afters);for(K in J){if(J.hasOwnProperty(K)){if(!N){Q.logging=(Q.logging||(this.type===B));N=true;}if(this.stopped==2){break;}S=J[K];if(S&&S.fn){O=this._notify(S,P,L);if(false===O){this.stopped=2;}}}}}}if(Q.id===this.id){M=Q.queue;while(M.length){H=M.pop();I=H[0];Q.stopped=0;Q.prevented=0;Q.next=I;O=I.fire.apply(I,H[1]);}G.Env._eventstack=null;}return(O!==false);},unsubscribeAll:function(){return this.detachAll.apply(this,arguments);},detachAll:function(){var J=this.subscribers,I,H=0;for(I in J){if(J.hasOwnProperty(I)){this._delete(J[I]);H++;}}this.subscribers={};return H;},_delete:function(H){if(H){delete H.fn;delete H.context;delete this.subscribers[H.id];delete this.afters[H.id];}},toString:function(){return this.type;},stopPropagation:function(){this.stopped=1;G.Env._eventstack.stopped=1;this.events.fire("stopped",this);},stopImmediatePropagation:function(){this.stopped=2;G.Env._eventstack.stopped=2;this.events.fire("stopped",this);},preventDefault:function(){if(this.preventable){this.prevented=1;G.Env._eventstack.prevented=1;this.events.fire("prevented",this);}},halt:function(H){if(H){this.stopImmediatePropagation();}else{this.stopPropagation();}this.preventDefault();}};G.Subscriber=function(J,I,H){this.fn=J;this.context=I;this.id=G.stamp(this);this.args=H;this.events=null;};G.Subscriber.prototype={_notify:function(L,J,K){var H=this.args,I;switch(K.signature){case 0:I=this.fn.call(L,K.type,J,L);break;case 1:I=this.fn.call(L,J[0]||null,L);break;default:if(H||J){J=J||[];H=(H)?J.concat(H):J;I=this.fn.apply(L,H);}else{I=this.fn.call(L);}}return I;},notify:function(I,K){var L=this.context,H=true;if(!L){L=(K.contextFn)?K.contextFn():K.context;}if(G.config.throwFail){H=this._notify(L,I,K);}else{try{H=this._notify(L,I,K);}catch(J){G.error(this+" failed: "+J.message,J);}}return H;},contains:function(I,H){if(H){return((this.fn==I)&&this.context==H);}else{return(this.fn==I);}},toString:function(){return"Subscriber "+this.id;}};(function(){var H=G.Lang,J=":",K="|",M="~AFTER~",N=G.cached(function(L,P){if(!P||!H.isString(L)||L.indexOf(J)>-1){return L;}return P+J+L;}),I=G.cached(function(Q,T){var P=Q,R,U,L,S;if(!H.isString(P)){return P;}L=P.indexOf(M);if(L>-1){U=true;P=P.substr(M.length);}L=P.indexOf(K);if(L>-1){R=P.substr(0,(L));P=P.substr(L+1);if(P=="*"){P=null;}}S=N(P,T);return[R,S,U,P];}),O=function(L){var P=(H.isObject(L))?L:{};this._yuievt={id:G.guid(),events:{},targets:{},config:P,chain:("chain" in P)?P.chain:G.config.chain,defaults:{context:P.context||this,host:this,emitFacade:P.emitFacade,fireOnce:P.fireOnce,queuable:P.queuable,broadcast:P.broadcast,bubbles:("bubbles" in P)?P.bubbles:true}};};O.prototype={on:function(S,V,Q,W){var a=I(S,this._yuievt.config.prefix),b,d,P,h,Y,X,e,T=G.Env.evt.handles,R,L,U,g=G.Node,Z;if(H.isObject(S,true)){b=V;d=Q;P=G.Array(arguments,0,true);h={};R=S._after;delete S._after;G.each(S,function(f,c){if(f){b=f.fn||((G.Lang.isFunction(f))?f:b);d=f.context||d;}P[0]=(R)?M+c:c;P[1]=b;P[2]=d;h[c]=this.on.apply(this,P);},this);return(this._yuievt.chain)?this:h;}else{if(H.isFunction(S)){return G.Do.before.apply(G.Do,arguments);}}X=a[0];R=a[2];U=a[3];if(g&&(this instanceof g)&&(U in g.DOM_EVENTS)){P=G.Array(arguments,0,true);P.splice(2,0,g.getDOMNode(this));return G.on.apply(G,P);}S=a[1];if(this instanceof YUI){L=G.Env.evt.plugins[S];P=G.Array(arguments,0,true);P[0]=U;if(L&&L.on){Z=P[2];if(g&&Z&&(Z instanceof g)){P[2]=g.getDOMNode(Z);}e=L.on.apply(G,P);}else{if((!S)||(!L&&g&&(U in g.DOM_EVENTS))){e=G.Event._attach(P);}}}if(!e){Y=this._yuievt.events[S]||this.publish(S);e=Y._on(V,Q,(arguments.length>3)?G.Array(arguments,3,true):null,(R)?"after":true);}if(X){T[X]=T[X]||{};T[X][S]=T[X][S]||[];T[X][S].push(e);}return(this._yuievt.chain)?this:e;},subscribe:function(){return this.on.apply(this,arguments);},detach:function(Y,a,L){var R=I(Y,this._yuievt.config.prefix),X=H.isArray(R)?R[0]:null,d=(R)?R[3]:null,T,U,b=G.Env.evt.handles,Z,W,c=this._yuievt.events,Q,S,V=true,P=function(g,f){var e=g[f];if(e){while(e.length){T=e.pop();T.detach();}}};if(X){Z=b[X];Y=R[1];if(Z){if(Y){P(Z,Y);}else{for(S in Z){if(Z.hasOwnProperty(S)){P(Z,S);}}}return(this._yuievt.chain)?this:true;}}else{if(H.isObject(Y)&&Y.detach){V=Y.detach();return(this._yuievt.chain)?this:true;}else{if(G.Node&&(this instanceof G.Node)&&((!d)||(d in G.Node.DOM_EVENTS))){W=G.Array(arguments,0,true);W[2]=G.Node.getDOMNode(this);return G.detach.apply(G,W);}}}U=G.Env.evt.plugins[d];if(this instanceof YUI){W=G.Array(arguments,0,true);if(U&&U.detach){return U.detach.apply(G,W);}else{if(!Y||(!U&&Y.indexOf(":")==-1)){W[0]=Y;return G.Event.detach.apply(G.Event,W);}}}if(Y){Q=c[Y];if(Q){return Q.detach(a,L);}}else{for(S in c){if(c.hasOwnProperty(S)){V=V&&c[S].detach(a,L);}}return V;}return(this._yuievt.chain)?this:false;},unsubscribe:function(){return this.detach.apply(this,arguments);},detachAll:function(L){L=N(L,this._yuievt.config.prefix);return this.detach(L);},unsubscribeAll:function(){return this.detachAll.apply(this,arguments);},publish:function(Q,R){Q=N(Q,this._yuievt.config.prefix);var P,S,L,T;if(H.isObject(Q)){L={};G.each(Q,function(V,U){L[U]=this.publish(U,V||R);},this);return L;}P=this._yuievt.events;S=P[Q];if(S){if(R){S.applyConfig(R,true);}}else{T=(R)?G.mix(R,this._yuievt.defaults):this._yuievt.defaults;S=new G.CustomEvent(Q,T);P[Q]=S;}if(R instanceof G.CustomEvent){P[Q].broadcast=false;}return P[Q];},addTarget:function(L){this._yuievt.targets[G.stamp(L)]=L;this._yuievt.hasTargets=true;},removeTarget:function(L){delete this._yuievt.targets[G.stamp(L)];},fire:function(R){var T=H.isString(R),Q=(T)?R:(R&&R.type),S,L,P;Q=N(Q,this._yuievt.config.prefix);S=this.getEvent(Q);if(!S){if(this._yuievt.hasTargets){L=(T)?arguments:G.Array(arguments,0,true).unshift(Q);return this.bubble(null,L,this);}P=true;}else{L=G.Array(arguments,(T)?1:0,true);P=S.fire.apply(S,L);
S.target=null;}return(this._yuievt.chain)?this:P;},getEvent:function(L){L=N(L,this._yuievt.config.prefix);var P=this._yuievt.events;return(P&&L in P)?P[L]:null;},bubble:function(V,T,R){var Q=this._yuievt.targets,S=true,W,U,L,P;if(!V||((!V.stopped)&&Q)){for(P in Q){if(Q.hasOwnProperty(P)){W=Q[P];U=V&&V.type;L=W.getEvent(U);if(!L){if(W._yuievt.hasTargets){W.bubble.call(W,V,T,R);}}else{L.target=R||(V&&V.target)||this;L.currentTarget=W;S=S&&L.fire.apply(L,T||V.details);if(L.stopped){break;}}}}}return S;},after:function(Q,P){var L=G.Array(arguments,0,true);switch(H.type(Q)){case"function":return G.Do.after.apply(G.Do,arguments);case"object":L[0]._after=true;break;default:L[0]=M+Q;}return this.on.apply(this,L);},before:function(){return this.on.apply(this,arguments);}};G.EventTarget=O;G.mix(G,O.prototype,false,false,{bubbles:false});O.call(G);YUI.Env.globalEvents=YUI.Env.globalEvents||new O();G.Global=YUI.Env.globalEvents;})();},"3.0.0b1",{requires:["oop"]});/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 3.0.0b1
build: 1163
*/
YUI.add("attribute",function(C){C.State=function(){this.data={};};C.State.prototype={add:function(O,Y,b){var a=this.data;a[Y]=a[Y]||{};a[Y][O]=b;},addAll:function(O,a){var Y;for(Y in a){if(a.hasOwnProperty(Y)){this.add(O,Y,a[Y]);}}},remove:function(O,Y){var a=this.data;if(a[Y]&&(O in a[Y])){delete a[Y][O];}},removeAll:function(O,a){var Y=this.data;C.each(a||Y,function(c,b){if(C.Lang.isString(b)){this.remove(O,b);}else{this.remove(O,c);}},this);},get:function(O,Y){var a=this.data;return(a[Y]&&O in a[Y])?a[Y][O]:undefined;},getAll:function(O){var a=this.data,Y;C.each(a,function(c,b){if(O in a[b]){Y=Y||{};Y[b]=c[O];}},this);return Y;}};var I=C.Object,J=C.EventTarget,U=".",S="Change",L="getter",K="setter",M="readOnly",V="writeOnce",Z="validator",G="value",N="valueFn",E="broadcast",Q="lazyAdd",X="added",B="initializing",H="initValue",T="published",R="defaultValue",A="lazy",P="isLazyAdd",F,W={};W[M]=1;W[V]=1;W[L]=1;W[E]=1;function D(){this._ATTR_E_FACADE={};J.call(this,{emitFacade:true});this._conf=new C.State();}D.INVALID_VALUE={};F=D.INVALID_VALUE;D._ATTR_CFG=[K,L,Z,G,N,V,M,Q,E];D.prototype={addAttr:function(a,Y,c){var O=this._conf;c=(Q in Y)?Y[Q]:c;if(c&&!this.attrAdded(a)){O.add(a,A,Y||{});O.add(a,X,true);}else{if(!this.attrAdded(a)||O.get(a,P)){Y=Y||{};var d,b=(G in Y);if(b){d=Y.value;delete Y.value;}Y.added=true;Y.initializing=true;O.addAll(a,Y);if(b){this.set(a,d);}O.remove(a,B);}}return this;},attrAdded:function(O){return !!this._conf.get(O,X);},modifyAttr:function(a,Y){if(this.attrAdded(a)){if(this._isLazyAttr(a)){this._addLazyAttr(a);}var b,O=this._conf;for(b in Y){if(W[b]&&Y.hasOwnProperty(b)){O.add(a,b,Y[b]);if(b===E){O.remove(a,T);}}}}},removeAttr:function(O){this._conf.removeAll(O);},get:function(b){var e=b,a=this._conf,c,O,d;if(b.indexOf(U)!==-1){c=b.split(U);b=c.shift();}if(this._tCfgs&&this._tCfgs[b]){var Y={};Y[b]=this._tCfgs[b];delete this._tCfgs[b];this._addAttrs(Y,this._tVals);}if(this._isLazyAttr(b)){this._addLazyAttr(b);}d=a.get(b,G);O=a.get(b,L);d=(O)?O.call(this,d,e):d;d=(c)?I.getValue(d,c):d;return d;},_isLazyAttr:function(O){return this._conf.get(O,A);},_addLazyAttr:function(a){var Y=this._conf;var O=Y.get(a,A);Y.add(a,P,true);Y.remove(a,A);this.addAttr(a,O);},set:function(O,a,Y){return this._setAttr(O,a,Y);},reset:function(O){if(O){if(this._isLazyAttr(O)){this._addLazyAttr(O);}this.set(O,this._conf.get(O,H));}else{var Y=this._conf.data.added;C.each(Y,function(a,b){this.reset(b);},this);}return this;},_set:function(O,a,Y){return this._setAttr(O,a,Y,true);},_setAttr:function(Y,c,O,a){var e=true,h=this._conf,f=h.data,d,g,i,b;if(Y.indexOf(U)!==-1){g=Y;i=Y.split(U);Y=i.shift();}if(this._isLazyAttr(Y)){this._addLazyAttr(Y);}d=(!f.value||!(Y in f.value));if(!this.attrAdded(Y)){}else{if(!d&&!a){if(h.get(Y,V)){e=false;}if(h.get(Y,M)){e=false;}}if(e){b=this.get(Y);if(i){c=I.setValue(C.clone(b),i,c);if(c===undefined){e=false;}}if(e){if(h.get(Y,B)){this._setAttrVal(Y,g,b,c);}else{this._fireAttrChange(Y,g,b,c,O);}}}}return this;},_fireAttrChange:function(b,f,e,a,d){var O=b+S,Y=this._conf,c;if(!Y.get(b,T)){this.publish(O,{queuable:false,defaultFn:this._defAttrChangeFn,silent:true,broadcast:Y.get(b,E)});Y.add(b,T,true);}c=(d)?C.merge(d):this._ATTR_E_FACADE;c.type=O;c.attrName=b;c.subAttrName=f;c.prevVal=e;c.newVal=a;this.fire(c);},_defAttrChangeFn:function(O){if(!this._setAttrVal(O.attrName,O.subAttrName,O.prevVal,O.newVal)){O.stopImmediatePropagation();}else{O.newVal=this._conf.get(O.attrName,G);}},_setAttrVal:function(j,i,d,c){var f=true,h=this._conf,a=h.get(j,Z),e=h.get(j,K),g=h.get(j,B),Y=i||j,b;if(a){var O=a.call(this,c,Y);if(!O&&g){c=h.get(j,R);O=true;}}if(!a||O){if(e){b=e.call(this,c,Y);if(b===F){f=false;}else{if(b!==undefined){c=b;}}}if(f){if(!i&&c===d){f=false;}else{if(h.get(j,H)===undefined){h.add(j,H,c);}h.add(j,G,c);}}}else{f=false;}return f;},setAttrs:function(Y){for(var O in Y){if(Y.hasOwnProperty(O)){this.set(O,Y[O]);}}return this;},getAttrs:function(b){var e={},c,Y,O,d,a=(b===true);b=(b&&!a)?b:I.keys(this._conf.data.added);for(c=0,Y=b.length;c<Y;c++){O=b[c];d=this.get(O);if(!a||this._conf.get(O,G)!=this._conf.get(O,H)){e[O]=this.get(O);}}return e;},addAttrs:function(O,Y,a){if(O){this._tCfgs=O;this._tVals=this._splitAttrVals(Y);this._addAttrs(O,this._tVals,a);this._tCfgs=this._tVals=null;}return this;},_addAttrs:function(Y,a,b){var O,c,d;for(O in Y){if(Y.hasOwnProperty(O)){c=Y[O];c.defaultValue=c.value;d=this._getAttrInitVal(O,c,this._tVals);if(d!==undefined){c.value=d;}if(this._tCfgs[O]){delete this._tCfgs[O];}this.addAttr(O,c,b);}}},_splitAttrVals:function(b){var d={},c={},e,O,a,Y;if(b){for(Y in b){if(b.hasOwnProperty(Y)){if(Y.indexOf(U)!==-1){e=Y.split(U);O=e.shift();a=c[O]=c[O]||[];a[a.length]={path:e,value:b[Y]};}else{d[Y]=b[Y];}}}return{simple:d,complex:c};}else{return null;}},_getAttrInitVal:function(f,d,h){var Y=(d.valueFn)?d.valueFn.call(this):d.value,O,a,c,b,j,g,e;if(!d.readOnly&&h){O=h.simple;if(O&&O.hasOwnProperty(f)){Y=O[f];}a=h.complex;if(a&&a.hasOwnProperty(f)){e=a[f];for(c=0,b=e.length;c<b;++c){j=e[c].path;g=e[c].value;I.setValue(Y,j,g);}}}return Y;}};C.mix(D,J,false,null,1);C.Attribute=D;},"3.0.0b1",{requires:["event-custom"]});/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 3.0.0b1
build: 1163
*/
YUI.add("base-base",function(A){var K=A.Lang;function D(L){this._plugins={};}D.prototype={plug:function(T,L){if(T){if(K.isFunction(T)){this._plug(T,L);}else{if(K.isArray(T)){for(var O=0,S=T.length;O<S;O++){this.plug(T[O]);}}else{this._plug(T.fn,T.cfg);}}}return this;},unplug:function(O){if(O){this._unplug(O);}else{var L;for(L in this._plugins){if(this._plugins.hasOwnProperty(L)){this._unplug(L);}}}return this;},hasPlugin:function(L){return(this._plugins[L]&&this[L]);},_initPlugins:function(O){var T=this._getClasses(),L=[],U={},S,V,X,Y,W;for(V=T.length-1;V>=0;V--){S=T[V];Y=S._UNPLUG;if(Y){A.mix(U,Y,true);}X=S._PLUG;if(X){A.mix(L,X,true);}}for(W in L){if(L.hasOwnProperty(W)){if(!U[W]){this.plug(L[W]);}}}if(O&&O.plugins){this.plug(O.plugins);}},_destroyPlugins:function(){this._unplug();},_plug:function(S,L){if(S&&S.NS){var O=S.NS;L=L||{};L.host=this;if(this.hasPlugin(O)){this[O].setAttrs(L);}else{this[O]=new S(L);this._plugins[O]=S;}}},_unplug:function(S){var O=S,L=this._plugins;if(K.isFunction(S)){O=S.NS;if(O&&(!L[O]||L[O]!==S)){O=null;}}if(O){if(this[O]){this[O].destroy();delete this[O];}if(L[O]){delete L[O];}}}};D.plug=function(O,V,T){var W,U,L,S;if(O!==A.Base){O._PLUG=O._PLUG||{};if(!K.isArray(V)){if(T){V={fn:V,cfg:T};}V=[V];}for(U=0,L=V.length;U<L;U++){W=V[U];S=W.NAME||W.fn.NAME;O._PLUG[S]=W;}}};D.unplug=function(O,U){var V,T,L,S;if(O!==A.Base){O._UNPLUG=O._UNPLUG||{};if(!K.isArray(U)){U=[U];}for(T=0,L=U.length;T<L;T++){V=U[T];S=V.NAME;if(!O._PLUG[S]){O._UNPLUG[S]=V;}else{delete O._PLUG[S];}}}};A.namespace("Plugin").Host=D;var I=A.Object,J=".",F="destroy",Q="init",P="initialized",H="destroyed",C="initializer",B=Object.prototype.constructor,M="deep",R="shallow",G="value",N="destructor";function E(){A.Attribute.call(this);A.Plugin.Host.call(this);this._silentInit=this._silentInit||false;if(this._lazyAddAttrs!==false){this._lazyAddAttrs=true;}this.init.apply(this,arguments);}E._ATTR_CFG=A.Attribute._ATTR_CFG.concat("cloneDefaultValue");E.NAME="base";E.ATTRS={initialized:{readOnly:true,value:false},destroyed:{readOnly:true,value:false}};E.prototype={init:function(L){this._yuievt.config.prefix=this.name=this.constructor.NAME;if(!this._silentInit){this.publish(Q,{queuable:false,defaultFn:this._defInitFn});}if(L){if(L.on){this.on(L.on);}if(L.after){this.after(L.after);}}if(!this._silentInit){this.fire(Q,{cfg:L});}else{this._defInitFn({cfg:L});}return this;},destroy:function(){this.publish(F,{queuable:false,defaultFn:this._defDestroyFn});this.fire(F);return this;},_defInitFn:function(L){this._initHierarchy(L.cfg);this._initPlugins(L.cfg);if(!this._silentInit){this._set(P,true);}else{this._conf.add(P,G,true);}},_defDestroyFn:function(L){this._destroyHierarchy();this._destroyPlugins();this._set(H,true);},_getClasses:function(){if(!this._classes){this._initHierarchyData();}return this._classes;},_getAttrCfgs:function(){if(!this._attrs){this._initHierarchyData();}return this._attrs;},_filterAttrCfgs:function(U,O){var S=null,L,T=U.ATTRS;if(T){for(L in T){if(T.hasOwnProperty(L)&&O[L]){S=S||{};S[L]=O[L];delete O[L];}}}return S;},_initHierarchyData:function(){var S=this.constructor,O=[],L=[];while(S){O[O.length]=S;if(S.ATTRS){L[L.length]=S.ATTRS;}S=S.superclass?S.superclass.constructor:null;}this._classes=O;this._attrs=this._aggregateAttrs(L);},_aggregateAttrs:function(X){var U,Y,T,L,Z,O,W,S=E._ATTR_CFG,V={};if(X){for(O=X.length-1;O>=0;--O){Y=X[O];for(U in Y){if(Y.hasOwnProperty(U)){T=A.mix({},Y[U],true,S);L=T.value;W=T.cloneDefaultValue;if(L){if((W===undefined&&(B===L.constructor||K.isArray(L)))||W===M||W===true){T.value=A.clone(L);}else{if(W===R){T.value=A.merge(L);}}}Z=null;if(U.indexOf(J)!==-1){Z=U.split(J);U=Z.shift();}if(Z&&V[U]&&V[U].value){I.setValue(V[U].value,Z,L);}else{if(!Z){if(!V[U]){V[U]=T;}else{A.mix(V[U],T,true,S);}}}}}}}return V;},_initHierarchy:function(V){var S=this._lazyAddAttrs,W,X,Y,T,O,U=this._getClasses(),L=this._getAttrCfgs();for(Y=U.length-1;Y>=0;Y--){W=U[Y];X=W.prototype;if(W._yuibuild&&W._yuibuild.exts&&!W._yuibuild.dynamic){for(T=0,O=W._yuibuild.exts.length;T<O;T++){W._yuibuild.exts[T].apply(this,arguments);}}this.addAttrs(this._filterAttrCfgs(W,L),V,S);if(X.hasOwnProperty(C)){X.initializer.apply(this,arguments);}}},_destroyHierarchy:function(){var U,O,T,L,S=this._getClasses();for(T=0,L=S.length;T<L;T++){U=S[T];O=U.prototype;if(O.hasOwnProperty(N)){O.destructor.apply(this,arguments);}}},toString:function(){return this.constructor.NAME+"["+A.stamp(this)+"]";}};A.mix(E,A.Attribute,false,null,1);A.mix(E,D,false,null,1);E.plug=D.plug;E.unplug=D.unplug;E.prototype.constructor=E;A.Base=E;},"3.0.0b1",{requires:["attribute"]});YUI.add("base-build",function(C){var B=C.Base,A=C.Lang;B._buildCfg={aggregates:["ATTRS","_PLUG","_UNPLUG"]};B.build=function(D,I,M,L){var O=B.build,E=O._getClass(I,L),K=O._getAggregates(I,L),G=E._yuibuild.dynamic,J,H,F,N;if(G){if(K){for(J=0,H=K.length;J<H;++J){F=K[J];if(I.hasOwnProperty(F)){E[F]=A.isArray(I[F])?[]:{};}}C.aggregate(E,I,true,K);}}for(J=0,H=M.length;J<H;J++){N=M[J];if(K){C.aggregate(E,N,true,K);}C.mix(E,N,true,null,1);E._yuibuild.exts.push(N);}E.prototype.hasImpl=O._hasImpl;if(G){E.NAME=D;E.prototype.constructor=E;}return E;};C.mix(B.build,{_template:function(D){function E(){E.superclass.constructor.apply(this,arguments);var H=E._yuibuild.exts,F=H.length,G;for(G=0;G<F;G++){H[G].apply(this,arguments);}return this;}C.extend(E,D);return E;},_hasImpl:function(E){if(this.constructor._yuibuild){var G=this.constructor._yuibuild.exts,D=G.length,F;for(F=0;F<D;F++){if(G[F]===E){return true;}}}return false;},_getClass:function(D,E){var F=(E&&false===E.dynamic)?false:true,G=(F)?B.build._template(D):D;G._yuibuild={id:null,exts:[],dynamic:F};return G;},_getAggregates:function(D,E){var F=[],H=(E&&E.aggregates),I=D,G;while(I&&I.prototype){G=I._buildCfg&&I._buildCfg.aggregates;if(G){F=F.concat(G);}I=I.superclass?I.superclass.constructor:null;}if(H){F=F.concat(H);}return F;}});},"3.0.0b1",{requires:["base-base"]});YUI.add("base",function(A){},"3.0.0b1",{use:["base-base","base-build"]});
/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 3.0.0b1
build: 1163
*/
YUI.add("dom-base",function(A){(function(F){var O="nodeType",D="ownerDocument",C="documentElement",B="defaultView",H="parentWindow",K="tagName",L="parentNode",N="firstChild",P="lastChild",J="previousSibling",M="nextSibling",I="contains",E="compareDocumentPosition",G=/<([a-z]+)/i;F.DOM={byId:function(R,Q){Q=Q||F.config.doc;return Q.getElementById(R);},getText:(document.documentElement.textContent!==undefined)?function(R){var Q="";if(R){Q=R.textContent;}return Q||"";}:function(R){var Q="";if(R){Q=R.innerText;}return Q||"";},setText:(document.documentElement.textContent!==undefined)?function(Q,R){if(Q){Q.textContent=R;}}:function(Q,R){if(Q){Q.innerText=R;}},firstChild:function(Q,R){return F.DOM._childBy(Q,null,R);},firstChildByTag:function(R,Q,S){return F.DOM._childBy(R,Q,S);},lastChild:function(Q,R){return F.DOM._childBy(Q,null,R,true);},lastChildByTag:function(R,Q,S){return F.DOM._childBy(R,Q,S,true);},_childrenByTag:function(){if(document[C].children){return function(T,R,U,S){R=(R&&R!=="*")?R.toUpperCase():null;var V=[],Q=U;if(T){if(R&&!F.UA.webkit){V=T.children.tags(R);}else{V=T.children;if(R){Q=function(W){return W[K].toUpperCase()===R&&(!U||U(W));};}}V=F.DOM.filterElementsBy(V,Q);}return V;};}else{return function(S,R,T){R=(R&&R!=="*")?R.toUpperCase():null;var U=[],Q=T;if(S){U=S.childNodes;if(R){Q=function(V){return V[K].toUpperCase()===R&&(!T||T(V));};}U=F.DOM.filterElementsBy(U,Q);}return U;};}}(),children:function(Q,R){return F.DOM._childrenByTag(Q,null,R);},previous:function(Q,S,R){return F.DOM.elementByAxis(Q,J,S,R);},next:function(Q,S,R){return F.DOM.elementByAxis(Q,M,S,R);},ancestor:function(Q,S,R){return F.DOM.elementByAxis(Q,L,S,R);},elementByAxis:function(Q,T,S,R){while(Q&&(Q=Q[T])){if((R||Q[K])&&(!S||S(Q))){return Q;}}return null;},byTag:function(R,S,V){S=S||F.config.doc;var W=S.getElementsByTagName(R),U=[],T,Q;for(T=0,Q=W.length;T<Q;++T){if(!V||V(W[T])){U[U.length]=W[T];}}return U;},firstByTag:function(R,S,V){S=S||F.config.doc;var W=S.getElementsByTagName(R),T=null,U,Q;for(U=0,Q=W.length;U<Q;++U){if(!V||V(W[U])){T=W[U];break;}}return T;},filterElementsBy:function(V,U,T){var R=(T)?null:[],S,Q;for(S=0,Q=V.length;S<Q;++S){if(V[S][K]&&(!U||U(V[S]))){if(T){R=V[S];break;}else{R[R.length]=V[S];}}}return R;},contains:function(R,S){var Q=false;if(!S||!R||!S[O]||!R[O]){Q=false;}else{if(R[I]){if(F.UA.opera||S[O]===1){Q=R[I](S);}else{Q=F.DOM._bruteContains(R,S);}}else{if(R[E]){if(R===S||!!(R[E](S)&16)){Q=true;}}}}return Q;},inDoc:function(Q,R){R=R||Q[D];var S=Q.id;if(!S){S=Q.id=F.guid();}return !!(R.getElementById(S));},insertBefore:function(S,Q){var R=null,T;if(S&&Q&&(T=Q.parentNode)){if(typeof S==="string"){S=F.DOM.create(S);}R=T.insertBefore(S,Q);}else{}return R;},insertAfter:function(R,Q){if(!R||!Q||!Q[L]){return null;}if(typeof R==="string"){R=F.DOM.create(R);}if(Q[M]){return Q[L].insertBefore(R,Q[M]);}else{return Q[L].appendChild(R);}},create:function(V,X){V=F.Lang.trim(V);if(!X&&F.DOM._cloneCache[V]){return F.DOM._cloneCache[V].cloneNode(true);}X=X||F.config.doc;var R=G.exec(V),U=F.DOM._create,W=F.DOM.creators,T=null,Q,S;if(R&&W[R[1]]){if(typeof W[R[1]]==="function"){U=W[R[1]];}else{Q=W[R[1]];}}S=U(V,X,Q).childNodes;if(S.length===1){T=S[0].parentNode.removeChild(S[0]);}else{T=X.createDocumentFragment();while(S.length){T.appendChild(S[0]);}}F.DOM._cloneCache[V]=T.cloneNode(true);return T;},CUSTOM_ATTRIBUTES:(!document.documentElement.hasAttribute)?{"for":"htmlFor","class":"className"}:{"htmlFor":"for","className":"class"},setAttribute:function(R,Q,S){if(R&&R.setAttribute){Q=F.DOM.CUSTOM_ATTRIBUTES[Q]||Q;R.setAttribute(Q,S);}},getAttribute:function(S,Q){var R="";if(S&&S.getAttribute){Q=F.DOM.CUSTOM_ATTRIBUTES[Q]||Q;R=S.getAttribute(Q,2);if(R===null){R="";}}return R;},srcIndex:(document.documentElement.sourceIndex)?function(Q){return(Q&&Q.sourceIndex)?Q.sourceIndex:null;}:function(Q){return(Q&&Q[D])?[].indexOf.call(Q[D].getElementsByTagName("*"),Q):null;},isWindow:function(Q){return Q.alert&&Q.document;},_fragClones:{div:document.createElement("div")},_create:function(R,S,Q){Q=Q||"div";var T=F.DOM._fragClones[Q];if(T){T=T.cloneNode(false);}else{T=F.DOM._fragClones[Q]=S.createElement(Q);}T.innerHTML=R;return T;},_removeChildNodes:function(Q){while(Q.firstChild){Q.removeChild(Q.firstChild);}},_cloneCache:{},addHTML:function(T,S,Q){if(typeof S==="string"){S=F.Lang.trim(S);}var R=F.DOM._cloneCache[S];if(R){R=R.cloneNode(true);}else{if(S.nodeType){R=S;}else{R=F.DOM.create(S);}}if(Q){if(Q.nodeType){Q.parentNode.insertBefore(R,Q);}else{switch(Q){case"replace":while(T.firstChild){T.removeChild(T.firstChild);}T.appendChild(R);break;case"before":T.parentNode.insertBefore(R,T);break;case"after":if(T.nextSibling){T.parentNode.insertBefore(R,T.nextSibling);}else{T.parentNode.appendChild(R);}break;default:T.appendChild(R);}}}else{T.appendChild(R);}return R;},VALUE_SETTERS:{},VALUE_GETTERS:{},getValue:function(S){var R="",Q;if(S&&S[K]){Q=F.DOM.VALUE_GETTERS[S[K].toLowerCase()];if(Q){R=Q(S);}else{R=S.value;}}return(typeof R==="string")?R:"";},setValue:function(Q,R){var S;if(Q&&Q[K]){S=F.DOM.VALUE_SETTERS[Q[K].toLowerCase()];if(S){S(Q,R);}else{Q.value=R;}}},_stripScripts:function(T){var Q=T.getElementsByTagName("script"),S,R;for(S=0,R;R=Q[S++];){R.parentNode.removeChild(R);}},_execScripts:function(Q,U){var S,T,R;U=U||0;for(T=U,R;R=Q[T++];){S=R.ownerDocument.createElement("script");R.parentNode.replaceChild(S,R);if(R.text){S.text=R.text;}else{if(R.src){S.src=R.src;if(typeof S.onreadystatechange!=="undefined"){S.onreadystatechange=function(){if(/loaded|complete/.test(R.readyState)){event.srcElement.onreadystatechange=null;setTimeout(function(){F.DOM._execScripts(Q,T++);},0);}};}else{S.onload=function(V){V.target.onload=null;F.DOM._execScripts(Q,T++);};}return;}}}},_bruteContains:function(Q,R){while(R){if(Q===R){return true;}R=R.parentNode;}return false;},_getRegExp:function(R,Q){Q=Q||"";F.DOM._regexCache=F.DOM._regexCache||{};if(!F.DOM._regexCache[R+Q]){F.DOM._regexCache[R+Q]=new RegExp(R,Q);}return F.DOM._regexCache[R+Q];
},_getDoc:function(Q){Q=Q||{};return(Q[O]===9)?Q:Q[D]||Q.document||F.config.doc;},_getWin:function(Q){var R=F.DOM._getDoc(Q);return R[B]||R[H]||F.config.win;},_childBy:function(U,Q,W,S){var T=null,R,V;if(U){if(S){R=U[P];V=J;}else{R=U[N];V=M;}if(F.DOM._testElement(R,Q,W)){T=R;}else{T=F.DOM.elementByAxis(R,V,W);}}return T;},_batch:function(T,X,W,S,R,V){X=(typeof name==="string")?F.DOM[X]:X;var Q,U=[];if(X&&T){F.each(T,function(Y){if((Q=X.call(F.DOM,Y,W,S,R,V))!==undefined){U[U.length]=Q;}});}return U.length?U:T;},_testElement:function(R,Q,S){Q=(Q&&Q!=="*")?Q.toUpperCase():null;return(R&&R[K]&&(!Q||R[K].toUpperCase()===Q)&&(!S||S(R)));},creators:{},_IESimpleCreate:function(Q,R){R=R||F.config.doc;return R.createElement(Q);}};(function(U){var V=U.DOM.creators,Q=U.DOM.create,T=/(?:\/(?:thead|tfoot|tbody|caption|col|colgroup)>)+\s*<tbody/,S="<table>",R="</table>";if(U.UA.gecko||U.UA.ie){U.mix(V,{option:function(W,X){return Q("<select>"+W+"</select>",X);},tr:function(W,X){return Q("<tbody>"+W+"</tbody>",X);},td:function(W,X){return Q("<tr>"+W+"</tr>",X);},tbody:function(W,X){return Q(S+W+R,X);},legend:"fieldset"});V.col=V.tbody;}if(U.UA.ie){U.mix(V,{tbody:function(X,Y){var Z=Q(S+X+R,Y),W=Z.children.tags("tbody")[0];if(Z.children.length>1&&W&&!T.test(X)){W[L].removeChild(W);}return Z;},script:function(W,X){var Y=X.createElement("div");Y.innerHTML="-"+W;Y.removeChild(Y[N]);return Y;}},true);U.mix(U.DOM.VALUE_GETTERS,{button:function(W){return(W.attributes&&W.attributes.value)?W.attributes.value.value:"";}});U.mix(U.DOM.VALUE_SETTERS,{button:function(X,Y){var W=X.attributes.value;if(!W){W=X[D].createAttribute("value");X.setAttributeNode(W);}W.value=Y;}});}if(U.UA.gecko||U.UA.ie){U.mix(V,{th:V.td,thead:V.tbody,tfoot:V.tbody,caption:V.tbody,colgroup:V.tbody,col:V.tbody,optgroup:V.option});}U.mix(U.DOM.VALUE_GETTERS,{option:function(X){var W=X.attributes;return(W.value&&W.value.specified)?X.value:X.text;},select:function(X){var Y=X.value,W=X.options;if(W&&Y===""){if(X.multiple){}else{Y=U.DOM.getValue(W[X.selectedIndex],"value");}}return Y;}});})(F);})(A);A.mix(A.DOM,{hasClass:function(D,C){var B=A.DOM._getRegExp("(?:^|\\s+)"+C+"(?:\\s+|$)");return B.test(D.className);},addClass:function(C,B){if(!A.DOM.hasClass(C,B)){C.className=A.Lang.trim([C.className,B].join(" "));}},removeClass:function(C,B){if(B&&A.DOM.hasClass(C,B)){C.className=A.Lang.trim(C.className.replace(A.DOM._getRegExp("(?:^|\\s+)"+B+"(?:\\s+|$)")," "));if(A.DOM.hasClass(C,B)){A.DOM.removeClass(C,B);}}},replaceClass:function(C,B,D){A.DOM.addClass(C,D);A.DOM.removeClass(C,B);},toggleClass:function(C,B){if(A.DOM.hasClass(C,B)){A.DOM.removeClass(C,B);}else{A.DOM.addClass(C,B);}}});},"3.0.0b1",{requires:["event"],skinnable:false});YUI.add("dom-style",function(A){(function(E){var C="documentElement",B="defaultView",D="ownerDocument",L="style",N="float",F="cssFloat",G="styleFloat",J="transparent",H="getComputedStyle",M=E.config.doc,I=undefined,K=/color$/i;E.mix(E.DOM,{CUSTOM_STYLES:{},setStyle:function(R,O,S,Q){Q=Q||R.style;var P=E.DOM.CUSTOM_STYLES;if(Q){if(S===null){S="";}if(O in P){if(P[O].set){P[O].set(R,S,Q);return;}else{if(typeof P[O]==="string"){O=P[O];}}}Q[O]=S;}},getStyle:function(R,O){var Q=R[L],P=E.DOM.CUSTOM_STYLES,S="";if(Q){if(O in P){if(P[O].get){return P[O].get(R,O,Q);}else{if(typeof P[O]==="string"){O=P[O];}}}S=Q[O];if(S===""){S=E.DOM[H](R,O);}}return S;},setStyles:function(P,Q){var O=P.style;E.each(Q,function(R,S){E.DOM.setStyle(P,S,R,O);},E.DOM);},getComputedStyle:function(P,O){var R="",Q=P[D];if(P[L]){R=Q[B][H](P,null)[O];}return R;}});if(M[C][L][F]!==I){E.DOM.CUSTOM_STYLES[N]=F;}else{if(M[C][L][G]!==I){E.DOM.CUSTOM_STYLES[N]=G;}}if(E.UA.opera){E.DOM[H]=function(Q,P){var O=Q[D][B],R=O[H](Q,"")[P];if(K.test(P)){R=E.Color.toRGB(R);}return R;};}if(E.UA.webkit){E.DOM[H]=function(Q,P){var O=Q[D][B],R=O[H](Q,"")[P];if(R==="rgba(0, 0, 0, 0)"){R=J;}return R;};}})(A);(function(E){var D="toString",B=parseInt,C=RegExp;E.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy:"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(F){if(!E.Color.re_RGB.test(F)){F=E.Color.toHex(F);}if(E.Color.re_hex.exec(F)){F="rgb("+[B(C.$1,16),B(C.$2,16),B(C.$3,16)].join(", ")+")";}return F;},toHex:function(I){I=E.Color.KEYWORDS[I]||I;if(E.Color.re_RGB.exec(I)){var H=(C.$1.length===1)?"0"+C.$1:Number(C.$1),G=(C.$2.length===1)?"0"+C.$2:Number(C.$2),F=(C.$3.length===1)?"0"+C.$3:Number(C.$3);I=[H[D](16),G[D](16),F[D](16)].join("");}if(I.length<6){I=I.replace(E.Color.re_hex3,"$1$1");}if(I!=="transparent"&&I.indexOf("#")<0){I="#"+I;}return I.toLowerCase();}};})(A);(function(E){var C="clientTop",J="clientLeft",Z="hasLayout",L="px",M="filter",B="filters",V="opacity",N="auto",K="borderTopWidth",R="borderRightWidth",X="borderBottomWidth",H="borderLeftWidth",I="width",P="height",S="transparent",U="visible",D="getComputedStyle",b=undefined,a=document.documentElement,T=/^width|height$/,Q=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,F=function(Y){return Y.currentStyle||Y.style;},O={CUSTOM_STYLES:{},get:function(Y,d){var c="",e;if(Y){e=F(Y)[d];if(d===V){c=E.DOM.CUSTOM_STYLES[V].get(Y);}else{if(!e||(e.indexOf&&e.indexOf(L)>-1)){c=e;}else{if(E.DOM.IE.COMPUTED[d]){c=E.DOM.IE.COMPUTED[d](Y,d);}else{if(Q.test(e)){c=O.getPixel(Y,d)+L;}else{c=e;}}}}}return c;},getOffset:function(d,i){var f=F(d)[i],Y=i.charAt(0).toUpperCase()+i.substr(1),g="offset"+Y,c="pixel"+Y,h,e="";if(f===N){h=d[g];if(h===b){e=0;}e=h;if(T.test(i)){d.style[i]=h;if(d[g]>h){e=h-(d[g]-h);}d.style[i]=N;}}else{if(f.indexOf("%")>-1){f=d.clientWidth-O.getPixel(d,"paddingRight")-O.getPixel(d,"paddingLeft");}if(!d.style[c]&&!d.style[i]){d.style[i]=f;}e=d.style[c];}return e+L;},getBorderWidth:function(Y,d){var c=null;
if(!Y.currentStyle||!Y.currentStyle[Z]){Y.style.zoom=1;}switch(d){case K:c=Y[C];break;case X:c=Y.offsetHeight-Y.clientHeight-Y[C];break;case H:c=Y[J];break;case R:c=Y.offsetWidth-Y.clientWidth-Y[J];break;}return c+L;},getPixel:function(d,Y){var f=null,c=F(d),g=c.right,e=c[Y];d.style.right=e;f=d.style.pixelRight;d.style.right=g;return f;},getMargin:function(d,Y){var e,c=F(d);if(c[Y]==N){e=0;}else{e=O.getPixel(d,Y);}return e+L;},getVisibility:function(c,Y){var d;while((d=c.currentStyle)&&d[Y]=="inherit"){c=c.parentNode;}return(d)?d[Y]:U;},getColor:function(c,Y){var d=F(c)[Y];if(!d||d===S){E.DOM.elementByAxis(c,"parentNode",null,function(e){d=F(e)[Y];if(d&&d!==S){c=e;return true;}});}return E.Color.toRGB(d);},getBorderColor:function(c,Y){var d=F(c),e=d[Y]||d.color;return E.Color.toRGB(E.Color.toHex(e));}},G={};if(a.style[V]===b&&a[B]){E.DOM.CUSTOM_STYLES[V]={get:function(c){var f=100;try{f=c[B]["DXImageTransform.Microsoft.Alpha"][V];}catch(d){try{f=c[B]("alpha")[V];}catch(Y){}}return f/100;},set:function(c,f,Y){var e,d;if(f===""){d=F(c);e=(V in d)?d[V]:1;f=e;}if(typeof Y[M]=="string"){Y[M]="alpha("+V+"="+f*100+")";if(!c.currentStyle||!c.currentStyle[Z]){Y.zoom=1;}}}};}try{document.createElement("div").style.height="-1px";}catch(W){E.DOM.CUSTOM_STYLES.height={set:function(c,d,Y){if(parseInt(d,10)>=0){Y.height=d;}else{}}};E.DOM.CUSTOM_STYLES.width={set:function(c,d,Y){if(parseInt(d,10)>=0){Y.width=d;}else{}}};}G[I]=G[P]=O.getOffset;G.color=G.backgroundColor=O.getColor;G[K]=G[R]=G[X]=G[H]=O.getBorderWidth;G.marginTop=G.marginRight=G.marginBottom=G.marginLeft=O.getMargin;G.visibility=O.getVisibility;G.borderColor=G.borderTopColor=G.borderRightColor=G.borderBottomColor=G.borderLeftColor=O.getBorderColor;if(!E.config.win[D]){E.DOM[D]=O.get;}E.namespace("DOM.IE");E.DOM.IE.COMPUTED=G;E.DOM.IE.ComputedStyle=O;})(A);},"3.0.0b1",{skinnable:false,requires:["dom-base"]});YUI.add("dom-screen",function(A){(function(F){var D="documentElement",O="compatMode",M="position",C="fixed",K="relative",G="left",H="top",I="BackCompat",N="medium",E="borderLeftWidth",B="borderTopWidth",P="getBoundingClientRect",J="getComputedStyle",L=/^t(?:able|d|h)$/i;F.mix(F.DOM,{winHeight:function(R){var Q=F.DOM._getWinSize(R).height;return Q;},winWidth:function(R){var Q=F.DOM._getWinSize(R).width;return Q;},docHeight:function(R){var Q=F.DOM._getDocSize(R).height;return Math.max(Q,F.DOM._getWinSize(R).height);},docWidth:function(R){var Q=F.DOM._getDocSize(R).width;return Math.max(Q,F.DOM._getWinSize(R).width);},docScrollX:function(Q){var R=F.DOM._getDoc(Q);return Math.max(R[D].scrollLeft,R.body.scrollLeft);},docScrollY:function(Q){var R=F.DOM._getDoc(Q);return Math.max(R[D].scrollTop,R.body.scrollTop);},getXY:function(){if(document[D][P]){return function(T){var a=null,U,R,V,Y,X,Q,S,W,Z;if(T){if(F.DOM.inDoc(T)){U=F.DOM.docScrollX(T);R=F.DOM.docScrollY(T);V=T[P]();Z=F.DOM._getDoc(T);a=[V.left,V.top];if(F.UA.ie){Y=2;X=2;W=Z[O];Q=F.DOM[J](Z[D],E);S=F.DOM[J](Z[D],B);if(F.UA.ie===6){if(W!==I){Y=0;X=0;}}if((W==I)){if(Q!==N){Y=parseInt(Q,10);}if(S!==N){X=parseInt(S,10);}}a[0]-=Y;a[1]-=X;}if((R||U)){a[0]+=U;a[1]+=R;}}else{a=F.DOM._getOffset(T);}}return a;};}else{return function(R){var T=null,Q,V,S,U;if(R){if(F.DOM.inDoc(R)){T=[R.offsetLeft,R.offsetTop];Q=R;V=((F.UA.gecko||F.UA.webkit>519)?true:false);while((Q=Q.offsetParent)){T[0]+=Q.offsetLeft;T[1]+=Q.offsetTop;if(V){T=F.DOM._calcBorders(Q,T);}}if(F.DOM.getStyle(R,M)!=C){Q=R;while((Q=Q.parentNode)){S=Q.scrollTop;U=Q.scrollLeft;if(F.UA.gecko&&(F.DOM.getStyle(Q,"overflow")!=="visible")){T=F.DOM._calcBorders(Q,T);}if(S||U){T[0]-=U;T[1]-=S;}}T[0]+=F.DOM.docScrollX(R);T[1]+=F.DOM.docScrollY(R);}else{T[0]+=F.DOM.docScrollX(R);T[1]+=F.DOM.docScrollY(R);}}else{T=F.DOM._getOffset(R);}}return T;};}}(),_getOffset:function(Q){var S,R=null;if(Q){S=F.DOM.getStyle(Q,M);R=[parseInt(F.DOM[J](Q,G),10),parseInt(F.DOM[J](Q,H),10)];if(isNaN(R[0])){R[0]=parseInt(F.DOM.getStyle(Q,G),10);if(isNaN(R[0])){R[0]=(S===K)?0:Q.offsetLeft||0;}}if(isNaN(R[1])){R[1]=parseInt(F.DOM.getStyle(Q,H),10);if(isNaN(R[1])){R[1]=(S===K)?0:Q.offsetTop||0;}}}return R;},getX:function(Q){return F.DOM.getXY(Q)[0];},getY:function(Q){return F.DOM.getXY(Q)[1];},setXY:function(R,U,X){var S=F.DOM.setStyle,W,V,Q,T;if(R&&U){W=F.DOM.getStyle(R,M);V=F.DOM._getOffset(R);if(W=="static"){W=K;S(R,M,W);}T=F.DOM.getXY(R);if(U[0]!==null){S(R,G,U[0]-T[0]+V[0]+"px");}if(U[1]!==null){S(R,H,U[1]-T[1]+V[1]+"px");}if(!X){Q=F.DOM.getXY(R);if(Q[0]!==U[0]||Q[1]!==U[1]){F.DOM.setXY(R,U,true);}}}else{}},setX:function(R,Q){return F.DOM.setXY(R,[Q,null]);},setY:function(Q,R){return F.DOM.setXY(Q,[null,R]);},_calcBorders:function(S,T){var R=parseInt(F.DOM[J](S,B),10)||0,Q=parseInt(F.DOM[J](S,E),10)||0;if(F.UA.gecko){if(L.test(S.tagName)){R=0;Q=0;}}T[0]+=Q;T[1]+=R;return T;},_getWinSize:function(T){var V=F.DOM._getDoc(),U=V.defaultView||V.parentWindow,W=V[O],S=U.innerHeight,R=U.innerWidth,Q=V[D];if(W&&!F.UA.opera){if(W!="CSS1Compat"){Q=V.body;}S=Q.clientHeight;R=Q.clientWidth;}return{height:S,width:R};},_getDocSize:function(R){var S=F.DOM._getDoc(),Q=S[D];if(S[O]!="CSS1Compat"){Q=S.body;}return{height:Q.scrollHeight,width:Q.scrollWidth};}});})(A);(function(G){var D="top",C="right",H="bottom",B="left",F=function(L,K){var N=Math.max(L[D],K[D]),O=Math.min(L[C],K[C]),I=Math.min(L[H],K[H]),J=Math.max(L[B],K[B]),M={};M[D]=N;M[C]=O;M[H]=I;M[B]=J;return M;},E=G.DOM;G.mix(E,{region:function(J){var K=E.getXY(J),I=false;if(J&&K){I=E._getRegion(K[1],K[0]+J.offsetWidth,K[1]+J.offsetHeight,K[0]);}return I;},intersect:function(K,I,M){var J=M||E.region(K),L={},O=I,N;if(O.tagName){L=E.region(O);}else{if(G.Lang.isObject(I)){L=I;}else{return false;}}N=F(L,J);return{top:N[D],right:N[C],bottom:N[H],left:N[B],area:((N[H]-N[D])*(N[C]-N[B])),yoff:((N[H]-N[D])),xoff:(N[C]-N[B]),inRegion:E.inRegion(K,I,false,M)};},inRegion:function(L,I,J,N){var M={},K=N||E.region(L),P=I,O;if(P.tagName){M=E.region(P);}else{if(G.Lang.isObject(I)){M=I;}else{return false;}}if(J){return(K[B]>=M[B]&&K[C]<=M[C]&&K[D]>=M[D]&&K[H]<=M[H]);
}else{O=F(M,K);if(O[H]>=O[D]&&O[C]>=O[B]){return true;}else{return false;}}},inViewportRegion:function(J,I,K){return E.inRegion(J,E.viewportRegion(J),I,K);},_getRegion:function(K,L,I,J){var M={};M[D]=M[1]=K;M[B]=M[0]=J;M[H]=I;M[C]=L;M.width=M[C]-M[B];M.height=M[H]-M[D];return M;},viewportRegion:function(J){J=J||G.config.doc.documentElement;var I=false,L,K;if(J){L=E.docScrollX(J);K=E.docScrollY(J);I=E._getRegion(K,E.winWidth(J)+L,K+E.winHeight(J),L);}return I;}});})(A);},"3.0.0b1",{requires:["dom-base","dom-style"],skinnable:false});YUI.add("selector-native",function(A){(function(C){C.namespace("Selector");var B={_reLead:/^\s*([>+~]|:self)/,_reUnSupported:/!./,_foundCache:[],_supportsNative:function(){return((C.UA.ie>=8||C.UA.webkit>525)&&document.querySelectorAll);},_toArray:function(E){var F=E,G,D;if(!E.slice){try{F=Array.prototype.slice.call(E);}catch(H){F=[];for(G=0,D=E.length;G<D;++G){F[G]=E[G];}}}return F;},_clearFoundCache:function(){var G=B._foundCache,E,D;for(E=0,D=G.length;E<D;++E){try{delete G[E]._found;}catch(F){G[E].removeAttribute("_found");}}G=[];},_sort:function(D){if(D){D=B._toArray(D);if(D.sort){D.sort(function(F,E){return C.DOM.srcIndex(F)-C.DOM.srcIndex(E);});}}return D;},_deDupe:function(E){var F=[],D=B._foundCache,G,H;for(G=0,H;H=E[G++];){if(!H._found){F[F.length]=D[D.length]=H;H._found=true;}}B._clearFoundCache();return F;},_prepQuery:function(G,F){var E=F.split(","),H=[],J=(G&&G.nodeType===9),I,D;if(G){if(!J){G.id=G.id||C.guid();for(I=0,D=E.length;I<D;++I){F="#"+G.id+" "+E[I];H.push({root:G.ownerDocument,selector:F});}}else{H.push({root:G,selector:F});}}return H;},_query:function(D,K,L){if(B._reUnSupported.test(D)){return C.Selector._brute.query(D,K,L);}var H=L?null:[],I=L?"querySelector":"querySelectorAll",M,F,E,J;K=K||C.config.doc;if(D){F=B._prepQuery(K,D);H=[];for(E=0,J;J=F[E++];){try{M=J.root[I](J.selector);if(I==="querySelectorAll"){M=B._toArray(M);}H=H.concat(M);}catch(G){}}if(F.length>1){H=B._sort(B._deDupe(H));}H=(!L)?H:H[0]||null;}return H;},_filter:function(E,D){var F=[],G,H;if(E&&D){for(G=0,H;(H=E[G++]);){if(C.Selector._test(H,D)){F[F.length]=H;}}}else{}return F;},_test:function(I,E){var F=false,D=E.split(","),H,G,J;if(I&&I.tagName){I.id=I.id||C.guid();for(G=0,J;J=D[G++];){J+="#"+I.id;H=C.Selector.query(J,null,true);F=(H===I);if(F){break;}}}return F;}};if(C.UA.ie&&C.UA.ie<=8){B._reUnSupported=/:(?:nth|not|root|only|checked|first|last|empty)/;}C.mix(C.Selector,B,true);if(B._supportsNative()){C.Selector.query=B._query;}C.Selector.test=B._test;C.Selector.filter=B._filter;})(A);},"3.0.0b1",{requires:["dom-base"],skinnable:false});YUI.add("selector-css2",function(C){var J="parentNode",I="tagName",E="attributes",F="combinator",D="pseudos",G="previous",H="previousSibling",B=[],A=C.Selector,K={SORT_RESULTS:true,_children:function(N){var L=N.children,M,O;if(!L&&N[I]){L=[];for(M=0,O;O=N.childNodes[M++];){if(O.tagName){L[L.length]=O;}}B[B.length]=N;N.children=L;}return L||[];},_regexCache:{},_re:{attr:/(\[.*\])/g,urls:/^(?:href|src)/},shorthand:{"\\#(-?[_a-z]+[-\\w]*)":"[id=$1]","\\.(-?[_a-z]+[-\\w]*)":"[className~=$1]"},operators:{"":function(M,L){return C.DOM.getAttribute(M,L[0])!=="";},"=":"^{val}$","~=":"(?:^|\\s+){val}(?:\\s+|$)","|=":"^{val}-?"},pseudos:{"first-child":function(L){return C.Selector._children(L[J])[0]===L;}},_brute:{query:function(L,M,O){var N=[];if(L){N=A._query(L,M,O);}A._cleanup();return(O)?(N[0]||null):N;}},_cleanup:function(){for(var L=0,M;M=B[L++];){delete M.children;}B=[];},_query:function(P,U,V,N){var S=[],M=P.split(","),L=[],T,O,Q,R;if(M.length>1){for(Q=0,R=M.length;Q<R;++Q){S=S.concat(arguments.callee(M[Q],U,V,true));}S=A.SORT_RESULTS?A._sort(S):S;A._clearFoundCache();}else{U=U||C.config.doc;if(U.nodeType!==9){if(!U.id){U.id=C.guid();}if(U.ownerDocument.getElementById(U.id)){P="#"+U.id+" "+P;U=U.ownerDocument;}}T=A._tokenize(P,U);O=T.pop();if(O){if(N){O.deDupe=true;}if(T[0]&&T[0].id&&U.nodeType===9&&U.getElementById(T[0].id)){U=U.getElementById(T[0].id);}if(U&&!L.length&&O.prefilter){L=O.prefilter(U,O);}if(L.length){if(V){C.Array.some(L,A._testToken,O);}else{C.Array.each(L,A._testToken,O);}}S=O.result;}}return S;},_testToken:function(M,Q,L,N){N=N||this;var U=N.tag,P=N[G],V=N.result,O=0,T=P&&P[F]?A.combinators[P[F]]:null,S,R;if((U==="*"||U===M[I])&&!(N.last&&M._found)){while((R=N.tests[O])){O++;S=R.test;if(S.test){if(!S.test(C.DOM.getAttribute(M,R.name))){return false;}}else{if(!S(M,R.match)){return false;}}}if(T&&!T(M,N)){return false;}if(N.root&&N.root.nodeType!==9&&!C.DOM.contains(N.root,M)){return false;}V[V.length]=M;if(N.deDupe&&N.last){M._found=true;A._foundCache.push(M);}return true;}return false;},_getRegExp:function(N,L){var M=A._regexCache;L=L||"";if(!M[N+L]){M[N+L]=new RegExp(N,L);}return M[N+L];},combinators:{" ":function(N,L){var O=A._testToken,M=L[G];while((N=N[J])){if(O(N,null,null,M)){return true;}}return false;},">":function(M,L){return A._testToken(M[J],null,null,L[G]);},"+":function(N,M){var L=N[H];while(L&&L.nodeType!==1){L=L[H];}if(L&&C.Selector._testToken(L,null,null,M[G])){return true;}return false;}},_parsers:[{name:I,re:/^((?:-?[_a-z]+[\w-]*)|\*)/i,fn:function(M,L){M.tag=L[1].toUpperCase();M.prefilter=function(N){return N.getElementsByTagName(M.tag);};return true;}},{name:E,re:/^\[([a-z]+\w*)+([~\|\^\$\*!=]=?)?['"]?([^\]]*?)['"]?\]/i,fn:function(N,M){var O=M[3],L=!(M[2]&&O)?"":M[2],P=A.operators[L];if(typeof P==="string"){P=A._getRegExp(P.replace("{val}",O));}if(M[1]==="id"&&O){N.id=O;N.prefilter=function(Q){var S=Q.nodeType===9?Q:Q.ownerDocument,R=S.getElementById(O);return R?[R]:[];};}else{if(document.documentElement.getElementsByClassName&&M[1].indexOf("class")===0){if(!N.prefilter){N.prefilter=function(Q){return Q.getElementsByClassName(O);};P=true;}}}return P;}},{name:F,re:/^\s*([>+~]|\s)\s*/,fn:function(M,L){M[F]=L[1];return !!A.combinators[M[F]];}},{name:D,re:/^:([\-\w]+)(?:\(['"]?(.+)['"]?\))*/i,fn:function(M,L){return A[D][L[1]];}}],_getToken:function(L){return{previous:L,combinator:" ",tag:"*",prefilter:function(M){return M.getElementsByTagName("*");
},tests:[],result:[]};},_tokenize:function(N,T){N=N||"";N=A._replaceShorthand(C.Lang.trim(N));var M=A._getToken(),S=N,R=[],U=false,Q,P,O,L;outer:do{U=false;for(O=0,L;L=A._parsers[O++];){if((P=L.re.exec(N))){Q=L.fn(M,P);if(Q){if(Q!==true){M.tests.push({name:P[1],test:Q,match:P.slice(1)});}U=true;N=N.replace(P[0],"");if(!N.length||L.name===F){M.root=T;R.push(M);M=A._getToken(M);}}else{U=false;break outer;}}}}while(U&&N.length);if(!U||N.length){R=[];}else{if(R.length){R[R.length-1].last=true;}}return R;},_replaceShorthand:function(M){var N=A.shorthand,O=M.match(A._re.attr),Q,P,L;if(O){M=M.replace(A._re.attr,"REPLACED_ATTRIBUTE");}for(Q in N){if(N.hasOwnProperty(Q)){M=M.replace(A._getRegExp(Q,"gi"),N[Q]);}}if(O){for(P=0,L=O.length;P<L;++P){M=M.replace("REPLACED_ATTRIBUTE",O[P]);}}return M;}};C.mix(C.Selector,K,true);if(!C.Selector._supportsNative()){C.Selector.query=A._brute.query;}},"3.0.0b1",{requires:["dom-base","selector-native"],skinnable:false});YUI.add("dom",function(A){},"3.0.0b1",{skinnable:false,use:["dom-base","dom-style","dom-screen","selector-native","selector-css2"]});/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 3.0.0b1
build: 1163
*/
YUI.add("node-base",function(E){var P={},M={},H={},K=Array.prototype.slice,J=".",F="nodeName",N="nodeType",B="ownerDocument",L="tagName",D="_yuid",G=E.Base,C=E.Base.prototype,I=function(S,Q){var R=null;this[D]=E.stamp(S);if(!this[D]){this[D]=E.guid();}P[this[D]]=S;I._instances[this[D]]=this;if(Q){R={restricted:Q};H[this[D]]=true;}this._lazyAttrInit=true;this._silentInit=true;G.call(this,R);},O=function(R){var Q=null;if(R){Q=(typeof R==="string")?function(S){return E.Selector.test(S,R);}:function(S){return R(I.get(S));};}return Q;};I.NAME="Node";I.DOM_EVENTS={abort:true,blur:true,change:true,click:true,close:true,command:true,contextmenu:true,drag:true,dragstart:true,dragenter:true,dragover:true,dragleave:true,dragend:true,drop:true,dblclick:true,error:true,focus:true,keydown:true,keypress:true,keyup:true,load:true,mousedown:true,mousemove:true,mouseout:true,mouseover:true,mouseup:true,mousemultiwheel:true,mousewheel:true,submit:true,mouseenter:true,mouseleave:true,scroll:true,reset:true,resize:true,select:true,textInput:true,unload:true};E.mix(I.DOM_EVENTS,E.Env.evt.plugins);I._instances={};I.plug=function(){var Q=K.call(arguments,0);Q.unshift(I);E.Base.plug.apply(E.Base,Q);return I;};I.unplug=function(){var Q=K.call(arguments,0);Q.unshift(I);E.Base.unplug.apply(E.Base,Q);return I;};I.getDOMNode=function(Q){if(Q){if(Q instanceof I){Q=P[Q[D]];}else{if(!Q[F]||E.DOM.isWindow(Q)){Q=null;}}}return Q||null;};I.scrubVal=function(T,R,S){if(R&&T){if(typeof T==="object"||typeof T==="function"){if(N in T||E.DOM.isWindow(T)){if(H[R[D]]&&!R.contains(T)){T=null;}else{T=I.get(T);}}else{if(T.item||(T[0]&&T[0][N])){T=E.all(T);}else{S=(S===undefined)?4:S;if(S>0){for(var Q in T){if(T.hasOwnProperty&&T.hasOwnProperty(Q)){T[Q]=I.scrubVal(T[Q],R,--S);}}}}}}}else{if(T===undefined){T=R;}}return T;};I.addMethod=function(Q,S,R){if(Q&&S&&typeof S==="function"){I.prototype[Q]=function(){R=R||this;var U=K.call(arguments),T;if(U[0]&&U[0] instanceof I){U[0]=I.getDOMNode(U[0]);}if(U[1]&&U[1] instanceof I){U[1]=I.getDOMNode(U[1]);}U.unshift(P[this[D]]);T=I.scrubVal(S.apply(R,U),this);return T;};}else{}};I.importMethod=function(S,Q,R){if(typeof Q==="string"){R=R||Q;I.addMethod(R,S[Q],S);}else{E.each(Q,function(T){I.importMethod(S,T);});}};I.get=function(S,T,R){var Q=null;if(typeof S==="string"){if(S.indexOf("doc")===0){S=E.config.doc;}else{if(S.indexOf("win")===0){S=E.config.win;}else{S=E.Selector.query(S,T,true);}}}if(S){Q=I._instances[S[D]];if(!Q){Q=new I(S,R);}else{if(R){H[Q[D]]=true;Q._set("restricted",true);}}}return Q;};I.create=function(){return I.get(E.DOM.create.apply(E.DOM,arguments));};I.ATTRS={text:{getter:function(){return E.DOM.getText(P[this[D]]);},setter:function(Q){E.DOM.setText(P[this[D]],Q);return Q;}},"options":{getter:function(){return this.getElementsByTagName("option");}},"children":{getter:function(){var T=P[this[D]],S=T.children,U,R,Q;if(S===undefined){U=T.childNodes;S=[];for(R=0,Q=U.length;R<Q;++R){if(U[R][L]){S[S.length]=U[R];}}}return E.all(S);}},value:{getter:function(){return E.DOM.getValue(P[this[D]]);},setter:function(Q){E.DOM.setValue(P[this[D]],Q);return Q;}},restricted:{writeOnce:true,value:false}};I.DEFAULT_SETTER=function(Q,S){var R=P[this[D]],T;if(Q.indexOf(J)>-1){T=Q;Q=Q.split(J);E.Object.setValue(R,Q,S);}else{if(R[Q]!==undefined){R[Q]=S;}}return S;};I.DEFAULT_GETTER=function(Q){var R=P[this[D]],S;if(Q.indexOf&&Q.indexOf(J)>-1){S=E.Object.getValue(R,Q.split(J));}else{S=R[Q];}return S?E.Node.scrubVal(S,this):S;};E.extend(I,E.Base);E.mix(I.prototype,{toString:function(){var S="",R=this[D]+": not bound to a node",Q=P[this[D]];if(Q){S+=Q[F];if(Q.id){S+="#"+Q.id;}if(Q.className){S+="."+Q.className.replace(" ",".");}S+=" "+this[D];}return S||R;},_addDOMAttr:function(Q){var R=P[this[D]];if(R&&R[Q]!==undefined){this.addAttr(Q,{getter:function(){return I.DEFAULT_GETTER.call(this,Q);},setter:function(S){return I.DEFAULT_SETTER.call(this,Q,S);}});}else{}},get:function(Q){if(!this.attrAdded(Q)){if(I.re_aria&&I.re_aria.test(Q)){this._addAriaAttr(Q);}else{return I.DEFAULT_GETTER.apply(this,arguments);}}return C.get.apply(this,arguments);},set:function(Q,R){if(!this.attrAdded(Q)){if(I.re_aria&&I.re_aria.test(Q)){this._addAriaAttr(Q);}else{if(Q.indexOf(J)<0&&this._yuievt.events["Node:"+Q+"Change"]){this._addDOMAttr(Q);}else{I.DEFAULT_SETTER.call(this,Q,R);return this;}}}C.set.apply(this,arguments);return this;},create:I.create,compareTo:function(Q){var R=P[this[D]];if(Q instanceof E.Node){Q=E.Node.getDOMNode(Q);}return R===Q;},inDoc:function(R){var Q=P[this[D]];R=(R)?I.getDOMNode(R):Q[B];if(R.documentElement){return E.DOM.contains(R.documentElement,Q);}},getById:function(S){var R=P[this[D]],Q=E.DOM.byId(S,R[B]);if(Q&&E.DOM.contains(R,Q)){Q=E.get(Q);}else{Q=null;}return Q;},ancestor:function(Q){return I.get(E.DOM.elementByAxis(P[this[D]],"parentNode",O(Q)));},previous:function(R,Q){return I.get(E.DOM.elementByAxis(P[this[D]],"previousSibling",O(R),Q));},next:function(S,R,Q){return I.get(E.DOM.elementByAxis(P[this[D]],"nextSibling",O(R),Q));},query:function(Q){return E.get(E.Selector.query(Q,P[this[D]],true));},queryAll:function(Q){return E.all(E.Selector.query(Q,P[this[D]]));},test:function(Q){return E.Selector.test(P[this[D]],Q);},remove:function(){var Q=P[this[D]];Q.parentNode.removeChild(Q);return this;},invoke:function(X,R,Q,W,V,U){var T=P[this[D]],S;if(R&&R instanceof E.Node){R=I.getDOMNode(R);}if(Q&&Q instanceof E.Node){Q=I.getDOMNode(Q);}S=T[X](R,Q,W,V,U);return E.Node.scrubVal(S,this);},destructor:function(){},each:function(R,Q){Q=Q||this;return R.call(Q,this);},item:function(Q){return this;},size:function(){return P[this[D]]?1:0;},insert:function(R,Q){if(R){if(typeof Q==="number"){Q=P[this[D]].childNodes[Q];}if(typeof R!=="string"){R=E.Node.getDOMNode(R);}if(!Q||(!H[this[D]]||(typeof Q!=="string"&&this.contains(Q)))){E.DOM.addHTML(P[this[D]],R,Q);}}return this;},prepend:function(Q){return this.insert(Q,0);},append:function(Q){return this.insert(Q,null);},setContent:function(Q){E.DOM.addHTML(P[this[D]],Q,"replace");
return this;},hasMethod:function(R){var Q=P[this[D]];return(Q&&(typeof Q==="function"));}},true);E.Node=I;E.get=E.Node.get;E.Array._diff=function(R,Q){var V=[],X=false,T,S,W,U;outer:for(T=0,W=R.length;T<W;T++){X=false;for(S=0,U=Q.length;S<U;S++){if(R[T]===Q[S]){X=true;continue outer;}}if(!X){V[V.length]=R[T];}}return V;};E.Array.diff=function(R,Q){return{added:E.Array._diff(Q,R),removed:E.Array._diff(R,Q)};};var A=function(R){var S=R.doc||E.config.doc,Q=R.nodes||[];if(typeof Q==="string"){this._query=Q;Q=E.Selector.query(Q,S);}E.stamp(this);A._instances[this[D]]=this;M[this[D]]=Q;if(R.restricted){H=this[D];}};A.NAME="NodeList";A.getDOMNodes=function(Q){return M[Q[D]];};A._instances=[];A.each=function(Q,T,S){var R=M[Q[D]];if(R&&R.length){E.Array.each(R,T,S||Q);}else{}};A.addMethod=function(Q,T,S){var R=A._getTempNode();if(Q&&T){A.prototype[Q]=function(){var V=[],U=arguments;E.Array.each(M[this[D]],function(a){var Z="_yuid",X=E.Node._instances[a[Z]],Y,W;if(!X){P[R[Z]]=a;X=R;}Y=S||X;W=T.apply(Y,U);if(W!==undefined&&W!==X){V[V.length]=W;}});return V.length?V:this;};}else{}};A.importMethod=function(S,Q,R){if(typeof Q==="string"){R=R||Q;A.addMethod(Q,S[Q]);}else{E.each(Q,function(T){A.importMethod(S,T);});}};A._getTempNode=function(){var Q=A._tempNode;if(!Q){Q=E.Node.create("<div></div>");A._tempNode=Q;}return Q;};E.mix(A.prototype,{item:function(Q){return E.get((M[this[D]]||[])[Q]);},each:function(S,R){var Q=this;E.Array.each(M[this[D]],function(U,T){U=E.get(U);return S.call(R||U,U,T,Q);});return Q;},batch:function(S,R){var T=this,Q=A._getTempNode();E.Array.each(M[this[D]],function(W,V){var U=E.Node._instances[W[D]];if(!U){P[Q[D]]=W;U=Q;}return S.call(R||U,U,V,T);});return T;},some:function(S,R){var Q=this;return E.Array.some(M[this[D]],function(U,T){U=E.get(U);R=R||U;return S.call(R,U,T,Q);});},indexOf:function(Q){return E.Array.indexOf(M[this[D]],E.Node.getDOMNode(Q));},filter:function(Q){return E.all(E.Selector.filter(M[this[D]],Q));},modulus:function(S,R){R=R||0;var Q=[];A.each(this,function(U,T){if(T%S===R){Q.push(U);}});return E.all(Q);},odd:function(){return this.modulus(2,1);},even:function(){return this.modulus(2);},destructor:function(){delete A._instances[this[D]];},refresh:function(){var R,Q,S=M[this[D]];if(this._query){if(M[this[D]]&&M[this[D]][0]&&M[this[D]][0].ownerDocument){R=M[this[D]][0].ownerDocument;}M[this[D]]=E.Selector.query(this._query,R||E.config.doc);Q=E.Array.diff(S,M[this[D]]);Q.added=Q.added?E.all(Q.added):null;Q.removed=Q.removed?E.all(Q.removed):null;this.fire("refresh",Q);}return this;},on:function(S,R,Q){Q=Q||this;this.batch(function(T){T.on.call(T,S,R,Q);});},after:function(S,R,Q){Q=Q||this;this.batch(function(T){T.after.call(T,S,R,Q);});},size:function(){return M[this[D]].length;},get:function(R){var Q=[],S=A._getTempNode();A.each(this,function(U){var T=E.Node._instances[U[D]];if(!T){P[S[D]]=U;T=S;}Q[Q.length]=T.get(R);});return Q;},toString:function(){var T="",S=this[D]+": not bound to any nodes",Q=M[this[D]],R;if(Q&&Q[0]){R=Q[0];T+=R[F];if(R.id){T+="#"+R.id;}if(R.className){T+="."+R.className.replace(" ",".");}if(Q.length>1){T+="...["+Q.length+" items]";}}return T||S;}},true);A.importMethod(E.Node.prototype,["append","detach","detachAll","insert","plug","prepend","remove","set","setContent","unplug"]);E.NodeList=A;E.all=function(R,T,Q){var S=new A({nodes:R,doc:T,restricted:Q});return S;};E.Node.all=E.all;E.Array.each(["replaceChild","appendChild","insertBefore","removeChild","hasChildNodes","cloneNode","hasAttribute","removeAttribute","scrollIntoView","getElementsByTagName","focus","blur","submit","reset","select"],function(Q){E.Node.prototype[Q]=function(U,S,R){var T=this.invoke(Q,U,S,R);return T;};});I.importMethod(E.DOM,["contains","setAttribute","getAttribute"]);if(!document.documentElement.hasAttribute){E.Node.prototype.hasAttribute=function(Q){return E.DOM.getAttribute(E.Node.getDOMNode(this),Q)!=="";};}E.NodeList.importMethod(E.Node.prototype,["getAttribute","setAttribute"]);(function(){var R=document.createElement("div"),Q="_yuid";E.stamp(R);if(R[Q]===R.cloneNode(true)[Q]){E.Node.prototype.cloneNode=function(S){var T=E.Node.getDOMNode(this).cloneNode(S);T[Q]=E.guid();return E.get(T);};}})();(function(R){var Q=["hasClass","addClass","removeClass","replaceClass","toggleClass"];R.Node.importMethod(R.DOM,Q);R.NodeList.importMethod(R.Node.prototype,Q);})(E);E.Node.prototype.delegate=function(V,U,Q,T){T=T||this;var S=Array.prototype.slice.call(arguments,4),R=["delegate",U,E.Node.getDOMNode(this),V,Q,T];R=R.concat(S);return E.on.apply(E,R);};},"3.0.0b1",{requires:["dom-base","base","selector"]});YUI.add("node-style",function(A){(function(C){var B=["getStyle","getComputedStyle","setStyle","setStyles"];C.Node.importMethod(C.DOM,B);"getComputedStyle","setStyle","setStyles";C.NodeList.importMethod(C.Node.prototype,B);})(A);},"3.0.0b1",{requires:["dom-style","node-base"]});YUI.add("node-screen",function(A){A.each(["winWidth","winHeight","docWidth","docHeight","docScrollX","docScrollY"],function(B){A.Node.ATTRS[B]={getter:function(){var C=Array.prototype.slice.call(arguments);C.unshift(A.Node.getDOMNode(this));return A.DOM[B].apply(this,C);}};});A.Node.ATTRS.scrollLeft={getter:function(){var B=A.Node.getDOMNode(this);return("scrollLeft" in B)?B.scrollLeft:A.DOM.docScrollX(B);},setter:function(C){var B=A.Node.getDOMNode(this);if(B){if("scrollLeft" in B){B.scrollLeft=C;}else{if(B.document||B.nodeType===9){A.DOM._getWin(B).scrollTo(C,A.DOM.docScrollY(B));}}}else{}}};A.Node.ATTRS.scrollTop={getter:function(){var B=A.Node.getDOMNode(this);return("scrollTop" in B)?B.scrollTop:A.DOM.docScrollY(B);},setter:function(C){var B=A.Node.getDOMNode(this);if(B){if("scrollTop" in B){B.scrollTop=C;}else{if(B.document||B.nodeType===9){A.DOM._getWin(B).scrollTo(A.DOM.docScrollX(B),C);}}}else{}}};A.Node.importMethod(A.DOM,["getXY","setXY","getX","setX","getY","setY"]);A.Node.ATTRS.region={getter:function(){var B=A.Node.getDOMNode(this);if(B&&!B.tagName){if(B.nodeType===9){B=B.documentElement;
}else{if(B.alert){B=B.document.documentElement;}}}return A.DOM.region(B);}};A.Node.ATTRS.viewportRegion={getter:function(){return A.DOM.viewportRegion(A.Node.getDOMNode(this));}};A.Node.importMethod(A.DOM,"inViewportRegion");A.Node.prototype.intersect=function(B,D){var C=A.Node.getDOMNode(this);if(B instanceof A.Node){B=A.Node.getDOMNode(B);}return A.DOM.intersect(C,B,D);};A.Node.prototype.inRegion=function(B,D,E){var C=A.Node.getDOMNode(this);if(B instanceof A.Node){B=A.Node.getDOMNode(B);}return A.DOM.inRegion(C,B,D,E);};},"3.0.0b1",{requires:["dom-screen"]});YUI.add("node-aria",function(A){A.Node.re_aria=/^(?:role$|aria-)/;A.Node.prototype._addAriaAttr=function(B){this.addAttr(B,{getter:function(){return A.Node.getDOMNode(this).getAttribute(B,2);},setter:function(C){A.Node.getDOMNode(this).setAttribute(B,C);return C;}});};},"3.0.0b1",{requires:["node-base"]});YUI.add("node",function(A){},"3.0.0b1",{skinnable:false,use:["node-base","node-style","node-screen","node-aria"]});/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 3.0.0b1
build: 1163
*/
(function(){var GLOBAL_ENV=YUI.Env,C=YUI.config,D=C.doc,POLL_INTERVAL=C.pollInterval||40,_ready=function(e){GLOBAL_ENV._ready();};if(!GLOBAL_ENV._ready){GLOBAL_ENV._ready=function(){if(!GLOBAL_ENV.DOMReady){GLOBAL_ENV.DOMReady=true;if(D.removeEventListener){D.removeEventListener("DOMContentLoaded",_ready,false);}}};
/* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller/Diego Perini */
if(navigator.userAgent.match(/MSIE/)){GLOBAL_ENV._dri=setInterval(function(){try{document.documentElement.doScroll("left");clearInterval(GLOBAL_ENV._dri);GLOBAL_ENV._dri=null;_ready();}catch(ex){}},POLL_INTERVAL);}else{D.addEventListener("DOMContentLoaded",_ready,false);}}})();YUI.add("event",function(F){(function(){var I=YUI.Env,G=F.Env.evt.plugins,H=function(){F.fire("domready");};F.mix(G,{domready:{},"event:ready":{on:function(){var J=F.Array(arguments,0,true);J[0]="domready";return F.subscribe.apply(F,J);},detach:function(){var J=F.Array(arguments,0,true);J[0]="domready";return F.unsubscribe.apply(F,J);}}});F.publish("domready",{fireOnce:true});if(I.DOMReady){H();}else{F.before(H,I,"_ready");}})();(function(){var H=F.UA,G={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9},I=function(K){if(!K){return null;}try{if(H.webkit&&3==K.nodeType){K=K.parentNode;}}catch(J){}return F.Node.get(K);};F.DOMEventFacade=function(Q,K,J){var M=Q,L=K,N=F.config.doc,R=N.body,S=M.pageX,P=M.pageY,O,T;this.altKey=M.altKey;this.ctrlKey=M.ctrlKey;this.metaKey=M.metaKey;this.shiftKey=M.shiftKey;this.type=M.type;if(!S&&0!==S){S=M.clientX||0;P=M.clientY||0;if(H.ie){S+=Math.max(N.documentElement.scrollLeft,R.scrollLeft);P+=Math.max(N.documentElement.scrollTop,R.scrollTop);}}this._yuifacade=true;this.pageX=S;this.pageY=P;O=M.keyCode||M.charCode||0;if(H.webkit&&(O in G)){O=G[O];}this.keyCode=O;this.charCode=O;this.button=M.which||M.button;this.which=this.button;this.target=I(M.target||M.srcElement);this.currentTarget=I(L);T=M.relatedTarget;if(!T){if(M.type=="mouseout"){T=M.toElement;}else{if(M.type=="mouseover"){T=M.fromElement;}}}this.relatedTarget=I(T);this.stopPropagation=function(){if(M.stopPropagation){M.stopPropagation();}else{M.cancelBubble=true;}if(J){J.stopPropagation();}};this.stopImmediatePropagation=function(){if(M.stopImmediatePropagation){M.stopImmediatePropagation();}else{this.stopPropagation();}if(J){J.stopImmediatePropagation();}};this.preventDefault=function(){if(M.preventDefault){M.preventDefault();}else{M.returnValue=false;}if(J){J.preventDefault();}};this.halt=function(U){if(U){this.stopImmediatePropagation();}else{this.stopPropagation();}this.preventDefault();};};})();(function(){var M=YUI.Env.add,G=YUI.Env.remove,K=function(){YUI.Env.windowLoaded=true;F.Event._load();G(window,"load",K);},J=function(){F.Event._unload();G(window,"unload",J);},N="domready",L="~yui|2|compat~",I=function(P){try{return(P&&typeof P!=="string"&&(P.length&&((!P.size)||(P.size()>1)))&&!P.tagName&&!P.alert&&(P.item||typeof P[0]!=="undefined"));}catch(O){return false;}},H=function(){var Q=false,R=0,P=[],S={},O=null,T={};return{POLL_RETRYS:1000,POLL_INTERVAL:40,lastError:null,_interval:null,_dri:null,DOMReady:false,startInterval:function(){var U=F.Event;if(!U._interval){U._interval=setInterval(F.bind(U._poll,U),U.POLL_INTERVAL);}},onAvailable:function(c,X,b,Z,Y,V){var U=F.Array(c),W;for(W=0;W<U.length;W=W+1){P.push({id:U[W],fn:X,obj:b,override:Z,checkReady:Y,compat:V});}R=this.POLL_RETRYS;setTimeout(F.bind(F.Event._poll,F.Event),0);return new F.EventHandle();},onContentReady:function(Y,V,X,W,U){return this.onAvailable(Y,V,X,W,true,U);},attach:function(W,V,U,X){return F.Event._attach(F.Array(arguments,0,true));},_createWrapper:function(a,Z,U,V,Y){var b=F.stamp(a),X="event:"+b+Z,W;if(false===Y){X+="native";}if(U){X+="capture";}W=S[X];if(!W){W=F.publish(X,{bubbles:false,contextFn:function(){W.nodeRef=W.nodeRef||F.get(W.el);return W.nodeRef;}});W.el=a;W.type=Z;W.fn=function(c){W.fire(F.Event.getEvent(c,a,(V||(false===Y))));};if(a==F.config.win&&Z=="load"){W.fireOnce=true;O=X;}S[X]=W;T[b]=T[b]||{};T[b][X]=W;M(a,Z,W.fn,U);}return W;},_attach:function(a,W){var d=a.slice(1),f,j=F.Event,h,Y,e,U,X=false,Z,b=a[0],c=a[1],V=a[2]||F.config.win,i=W&&W.facade,g=W&&W.capture;if(d[d.length-1]===L){f=true;d.pop();}if(!c||!c.call){return false;}if(I(V)){h=[];F.each(V,function(m,l){a[2]=m;h.push(j._attach(a,W));});return(h.length===1)?h[0]:h;}else{if(F.Lang.isString(V)){Y=(f)?F.DOM.byId(V):F.Selector.query(V);if(Y){if(F.Lang.isArray(Y)){if(Y.length==1){V=Y[0];}else{a[2]=Y;return j._attach(a,W);}}else{V=Y;}}else{return this.onAvailable(V,function(){j._attach(a,W);},j,true,false,f);}}}if(!V){return false;}if(F.Node&&V instanceof F.Node){return V.on.apply(V,a);}e=this._createWrapper(V,b,g,f,i);if(V==F.config.win&&b=="load"){if(YUI.Env.windowLoaded){X=true;}}U=d[2];d[1]=U;d.splice(2,1);Z=e.subscribe.apply(e,d);if(X){e.fire();}return Z;},detach:function(b,d,W,X){var a=F.Array(arguments,0,true),e,Y,Z,c,U,V;if(a[a.length-1]===L){e=true;}if(b&&b.detach){return b.detach();}if(typeof W=="string"){W=(e)?F.DOM.byId(W):F.Selector.query(W);return F.Event.detach.apply(F.Event,a);}else{if(I(W)){c=true;for(Y=0,Z=W.length;Y<Z;++Y){a[2]=W[Y];c=(F.Event.detach.apply(F.Event,a)&&c);}return c;}}if(!b||!d||!d.call){return this.purgeElement(W,false,b);}U="event:"+F.stamp(W)+b;V=S[U];if(V){return V.detach(d);}else{return false;}},getEvent:function(X,V,U){var W=X||window.event;return(U)?W:new F.DOMEventFacade(W,V,S["event:"+F.stamp(V)+X.type]);},generateId:function(U){var V=U.id;if(!V){V=F.stamp(U);U.id=V;}return V;},_isValidCollection:I,_load:function(U){if(!Q){Q=true;if(F.fire){F.fire(N);}F.Event._poll();}},_poll:function(){if(this.locked){return;}if(F.UA.ie&&!YUI.Env.DOMReady){this.startInterval();return;}this.locked=true;var Z=!Q,Y,a,V,U,X,W;if(!Z){Z=(R>0);}Y=[];a=function(d,e){var c,b=e.override;if(e.compat){if(e.override){if(b===true){c=e.obj;}else{c=b;}}else{c=d;}e.fn.call(c,e.obj);}else{c=e.obj||F.get(d);e.fn.apply(c,(F.Lang.isArray(b))?b:[]);}};for(V=0,U=P.length;
V<U;++V){X=P[V];if(X&&!X.checkReady){W=(X.compat)?F.DOM.byId(X.id):F.Selector.query(X.id,null,true);if(W){a(W,X);P[V]=null;}else{Y.push(X);}}}for(V=0,U=P.length;V<U;++V){X=P[V];if(X&&X.checkReady){W=(X.compat)?F.DOM.byId(X.id):F.Selector.query(X.id,null,true);if(W){if(Q||(W.get&&W.get("nextSibling"))||W.nextSibling){a(W,X);P[V]=null;}}else{Y.push(X);}}}R=(Y.length===0)?0:R-1;if(Z){this.startInterval();}else{clearInterval(this._interval);this._interval=null;}this.locked=false;return;},purgeElement:function(Z,a,Y){var W=(F.Lang.isString(Z))?F.Selector.query(Z,null,true):Z,V=this.getListeners(W,Y),X,U;if(V){for(X=0,U=V.length;X<U;++X){V[X].detachAll();}}if(a&&W&&W.childNodes){for(X=0,U=W.childNodes.length;X<U;++X){this.purgeElement(W.childNodes[X],a,Y);}}},getListeners:function(Y,X){var Z=F.stamp(Y,true),U=T[Z],W=[],V=(X)?"event:"+Z+X:null;if(!U){return null;}if(V){if(U[V]){W.push(U[V]);}}else{F.each(U,function(b,a){W.push(b);});}return(W.length)?W:null;},_unload:function(V){var U=F.Event;F.each(S,function(X,W){X.detachAll();G(X.el,X.type,X.fn);delete S[W];});G(window,"load",U._load);G(window,"unload",U._unload);},nativeAdd:M,nativeRemove:G};}();F.Event=H;if(F.config.injected||YUI.Env.windowLoaded){K();}else{M(window,"load",K);}if(F.UA.ie){F.on(N,H._poll,H,true);}M(window,"unload",J);H.Custom=F.CustomEvent;H.Subscriber=F.Subscriber;H.Target=F.EventTarget;H.Handle=F.EventHandle;H.Facade=F.EventFacade;H._poll();})();F.Env.evt.plugins.available={on:function(I,H,K,J){var G=arguments.length>4?F.Array(arguments,4,true):[];return F.Event.onAvailable.call(F.Event,K,H,J,G);}};F.Env.evt.plugins.contentready={on:function(I,H,K,J){var G=arguments.length>4?F.Array(arguments,4,true):[];return F.Event.onContentReady.call(F.Event,K,H,J,G);}};(function(){var I=F.Env.evt.plugins,J={capture:true},H=function(){},G=function(L,N){var K=(F.Lang.isString(N))?F.Selector.query(N,null,true):N,M=K&&K.parentNode;if(M){F.Event._attach([L,H,M],J);}};I.focus={on:function(M,L,N){var K=F.Array(arguments,0,true);if(F.UA.opera){G(M,N);}return F.Event._attach(K,J);}};I.blur={on:function(M,L,N){var K=F.Array(arguments,0,true);if(F.UA.opera){G(M,N);}return F.Event._attach(K,J);}};})();F.Env.evt.plugins.key={on:function(J,L,G,P,H){var N=F.Array(arguments,0,true),K,O,M,I;if(!P||P.indexOf(":")==-1){N[0]="keypress";return F.on.apply(F,N);}K=P.split(":");O=K[0];M=(K[1])?K[1].split(/,|\+/):null;I=(F.Lang.isString(G)?G:F.stamp(G))+P;I=I.replace(/,/g,"_");if(!F.getEvent(I)){F.on(J+O,function(U){var V=false,R=false,S,Q,T;for(S=0;S<M.length;S=S+1){Q=M[S];T=parseInt(Q,10);if(F.Lang.isNumber(T)){if(U.charCode===T){V=true;}else{R=true;}}else{if(V||!R){V=(U[Q+"Key"]);R=!V;}}}if(V){F.fire(I,U);}},G);}N.splice(2,2);N[0]=I;return F.on.apply(F,N);}};(function(){var L=F.Lang,J={},I=function(N){try{if(N&&3==N.nodeType){return N.parentNode;}}catch(M){}return N;},H=function(O,U,P){var V=I((U.target||U.srcElement)),Q=J[O],X,R,M,T,N,W,S;for(X in Q){if(Q.hasOwnProperty(X)){R=Q[X];M=F.Selector.query(X,P);T=M.length;if(T>0){S=M.length-1;do{N=M[S];if(N===V||F.DOM.contains(N,V)){if(!W){W=new F.DOMEventFacade(U,P);W.container=W.currentTarget;}W.currentTarget=F.Node.get(N);F.fire(R,W);}}while(S--);}}}},G=function(O,N,M){F.Event._attach([O,function(P){H(N,(P||window.event),M);},M],{facade:false});},K=F.cached(function(M){return M.replace(/[|,:]/g,"~");});F.Env.evt.plugins.delegate={on:function(R,T,O,M,V){if(!V){return false;}var S=(L.isString(O)?O:F.stamp(O)),P="delegate:"+S+M+K(V),N=M+S,U=F.Array(arguments,0,true),Q;if(!(N in J)){if(L.isString(O)){Q=F.Selector.query(O);}else{Q=F.Node.getDOMNode(O);}if(L.isArray(Q)){F.Array.each(Q,function(W){G(M,N,W);});}else{G(M,N,Q);}J[N]={};}J[N][V]=P;U[0]=P;U.splice(2,3);return F.on.apply(F,U);}};})();(function(){var H,G,J="window:resize",I=function(K){if(F.UA.gecko){F.fire(J,K);}else{if(G){G.cancel();}G=F.later(F.config.windowResizeDelay||40,F,function(){F.fire(J,K);});}};F.Env.evt.plugins.windowresize={on:function(M,L){if(!H){H=F.Event._attach(["resize",I]);}var K=F.Array(arguments,0,true);K[0]=J;return F.on.apply(F,K);}};})();var A=F.Lang.isString,C=function(J,G,I,K,H){if(!J.compareTo(G)&&!J.contains(G)){K.container=K.currentTarget;K.currentTarget=J;F.fire(I,K);}},D=function(L,I,H){var G=L.relatedTarget,K=L.currentTarget,J=L.target;if(H){K.queryAll(H).some(function(M){var N;if(M.compareTo(J)||M.contains(J)){C(M,G,I,L,H);N=true;}return N;});}else{C(K,G,I,L);}},E=F.cached(function(G){return G.replace(/[|,:]/g,"~");}),B={on:function(L,K,J,H){var G=(L==="mouseenter")?"mouseover":"mouseout",M=L+":"+(A(J)?J:F.stamp(J))+G,I=F.Array(arguments,0,true),N;if(A(H)){N=H;M=M+E(N);}if(!F.getEvent(M)){F.on(G,function(O){D(O,M,N);},J);}I[0]=M;if(N){I.splice(2,2);}else{I.splice(2,1);}return F.on.apply(F,I);}};F.Env.evt.plugins.mouseenter=B;F.Env.evt.plugins.mouseleave=B;},"3.0.0b1",{requires:["event-custom"]});/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 3.0.0b1
build: 1163
*/
YUI.add("plugin",function(B){function A(C){A.superclass.constructor.apply(this,arguments);}A.ATTRS={host:{writeOnce:true}};A.NAME="plugin";A.NS="plugin";B.extend(A,B.Base,{_handles:null,initializer:function(C){this._handles=[];},destructor:function(){if(this._handles){for(var D=0,C=this._handles.length;D<C;D++){this._handles[D].detach();}}},doBefore:function(G,D,C){var E=this.get("host"),F;C=C||this;if(G in E){F=B.Do.before(D,E,G,C);}else{if(E.on){F=E.on(G,D,C);}}this._handles.push(F);return F;},doAfter:function(G,D,C){var E=this.get("host"),F;C=C||this;if(G in E){F=B.Do.after(D,E,G,C);}else{if(E.after){F=E.after(G,D,C);}}this._handles.push(F);return F;},toString:function(){return this.constructor.NAME+"["+this.constructor.NS+"]";}});B.namespace("Plugin").Base=A;},"3.0.0b1",{requires:["base"]});/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 3.0.0b1
build: 1163
*/
YUI.add("cache",function(C){var A=C.Lang,B=function(){B.superclass.constructor.apply(this,arguments);};C.mix(B,{NS:"cache",NAME:"cache",ATTRS:{max:{value:0,validator:function(D){return(A.isNumber(D));},setter:function(E){var D=this._entries;if(E>0){if(D){while(D.length>E){D.shift();}}}else{this._entries=[];}return E;}},size:{readOnly:true,getter:function(){return this._entries.length;}},entries:{readOnly:true,getter:function(){return this._entries;}}}});C.extend(B,C.Plugin.Base,{_entries:null,initializer:function(D){this.publish("add",{defaultFn:this._defAddFn});this.publish("flush",{defaultFn:this._defFlushFn});this._entries=[];},destructor:function(){this._entries=null;},_defAddFn:function(G){var E=this._entries,D=this.get("max"),F=G.entry;while(E.length>=D){E.shift();}E[E.length]=F;},_defFlushFn:function(D){this._entries=[];},_isMatch:function(E,D){return(E===D.request);},add:function(E,D,F){if(this.get("entries")&&(this.get("max")>0)&&(A.isValue(E)||A.isNull(E)||A.isUndefined(E))){this.fire("add",{entry:{request:E,response:D,payload:F}});}else{}},flush:function(){this.fire("flush");},retrieve:function(H){var D=this._entries,G=D.length,F=null,E=G-1;if((this.get("max")>0)&&(G>0)){this.fire("request",{request:H});for(;E>=0;E--){F=D[E];if(this._isMatch(H,F)){this.fire("retrieve",{entry:F});if(E<G-1){D.splice(E,1);D[D.length]=F;}return F;}}}return null;}});C.Cache=B;},"3.0.0b1",{requires:["plugin"]});/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 3.0.0b1
build: 1163
*/
YUI.add("cookie",function(C){var K=C.Lang,I=C.Object,G=null,D=K.isString,P=K.isObject,F=K.isUndefined,E=K.isFunction,H=encodeURIComponent,B=decodeURIComponent,N=C.config.doc;function J(L){throw new TypeError(L);}function M(L){if(!D(L)||L===""){J("Cookie name must be a non-empty string.");}}function A(L){if(!D(L)||L===""){J("Subcookie name must be a non-empty string.");}}C.Cookie={_createCookieString:function(Q,T,R,O){O=O||{};var V=H(Q)+"="+(R?H(T):T),L=O.expires,U=O.path,S=O.domain;if(P(O)){if(L instanceof Date){V+="; expires="+L.toUTCString();}if(D(U)&&U!==""){V+="; path="+U;}if(D(S)&&S!==""){V+="; domain="+S;}if(O.secure===true){V+="; secure";}}return V;},_createCookieHashString:function(L){if(!P(L)){J("Cookie._createCookieHashString(): Argument must be an object.");}var O=[];I.each(L,function(R,Q){if(!E(R)&&!F(R)){O.push(H(Q)+"="+H(String(R)));}});return O.join("&");},_parseCookieHash:function(S){var R=S.split("&"),T=G,Q={};if(S.length){for(var O=0,L=R.length;O<L;O++){T=R[O].split("=");Q[B(T[0])]=B(T[1]);}}return Q;},_parseCookieString:function(W,Y){var X={};if(D(W)&&W.length>0){var L=(Y===false?function(Z){return Z;}:B),U=W.split(/;\s/g),V=G,O=G,R=G;for(var Q=0,S=U.length;Q<S;Q++){R=U[Q].match(/([^=]+)=/i);if(R instanceof Array){try{V=B(R[1]);O=L(U[Q].substring(R[1].length+1));}catch(T){}}else{V=B(U[Q]);O="";}X[V]=O;}}return X;},exists:function(L){M(L);var O=this._parseCookieString(N.cookie,true);return O.hasOwnProperty(L);},get:function(O,L){M(O);var S,Q,R;if(E(L)){R=L;L={};}else{if(P(L)){R=L.converter;}else{L={};}}S=this._parseCookieString(N.cookie,!L.raw);Q=S[O];if(F(Q)){return G;}if(!E(R)){return Q;}else{return R(Q);}},getSub:function(L,Q,O){var R=this.getSubs(L);if(R!==G){A(Q);if(F(R[Q])){return G;}if(!E(O)){return R[Q];}else{return O(R[Q]);}}else{return G;}},getSubs:function(L){M(L);var O=this._parseCookieString(N.cookie,false);if(D(O[L])){return this._parseCookieHash(O[L]);}return G;},remove:function(O,L){M(O);L=C.merge(L||{},{expires:new Date(0)});return this.set(O,"",L);},removeSub:function(O,S,L){M(O);A(S);L=L||{};var R=this.getSubs(O);if(P(R)&&R.hasOwnProperty(S)){delete R[S];if(!L.removeIfEmpty){return this.setSubs(O,R,L);}else{for(var Q in R){if(R.hasOwnProperty(Q)&&!E(R[Q])&&!F(R[Q])){return this.setSubs(O,R,L);}}return this.remove(O,L);}}else{return"";}},set:function(O,Q,L){M(O);if(F(Q)){J("Cookie.set(): Value cannot be undefined.");}L=L||{};var R=this._createCookieString(O,Q,!L.raw,L);N.cookie=R;return R;},setSub:function(O,R,Q,L){M(O);A(R);if(F(Q)){J("Cookie.setSub(): Subcookie value cannot be undefined.");}var S=this.getSubs(O);if(!P(S)){S={};}S[R]=Q;return this.setSubs(O,S,L);},setSubs:function(O,Q,L){M(O);if(!P(Q)){J("Cookie.setSubs(): Cookie value must be an object.");}var R=this._createCookieString(O,this._createCookieHashString(Q),false,L);N.cookie=R;return R;}};},"3.0.0b1",{requires:["yui-base"]});/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 3.0.0b1
build: 1163
*/
YUI.add("dump",function(G){var B=G.Lang,C="{...}",F="f(){...}",A=", ",D=" => ",E=function(M,L){var I,H,K=[],J=B.type(M);if(!B.isObject(M)){return M+"";}else{if(J=="date"||("nodeType" in M&&"tagName" in M)){return M;}else{if(J=="function"){return F;}}}L=(B.isNumber(L))?L:3;if(J=="array"){K.push("[");for(I=0,H=M.length;I<H;I=I+1){if(B.isObject(M[I])){K.push((L>0)?B.dump(M[I],L-1):C);}else{K.push(M[I]);}K.push(A);}if(K.length>1){K.pop();}K.push("]");}else{if(J=="regexp"){K.push(M.toString());}else{K.push("{");for(I in M){if(M.hasOwnProperty(I)){K.push(I+D);if(B.isObject(M[I])){K.push((L>0)?B.dump(M[I],L-1):C);}else{K.push(M[I]);}K.push(A);}}if(K.length>1){K.pop();}K.push("}");}}return K.join("");};G.dump=E;B.dump=E;},"3.0.0b1");/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 3.0.0b1
build: 1163
*/
YUI.add("substitute",function(G){var B=G.Lang,D="dump",F=" ",C="{",E="}",A=function(U,I,P,K,H){var N,M,L,S,R,T,Q=[],J,O;K=K||C;H=H||E;for(;;){N=U.lastIndexOf(K);if(N<0){break;}M=U.indexOf(H,N);if(N+1>=M){break;}J=U.substring(N+1,M);S=J;T=null;L=S.indexOf(F);if(L>-1){T=S.substring(L+1);S=S.substring(0,L);}R=I[S];if(P){R=P(S,R,T);}if(B.isObject(R)){if(!G.dump){R=R.toString();}else{if(B.isArray(R)){R=G.dump(R,parseInt(T,10));}else{T=T||"";O=T.indexOf(D);if(O>-1){T=T.substring(4);}if(R.toString===Object.prototype.toString||O>-1){R=G.dump(R,parseInt(T,10));}else{R=R.toString();}}}}else{if(!B.isString(R)&&!B.isNumber(R)){R="~-"+Q.length+"-~";Q[Q.length]=J;}}U=U.substring(0,N)+R+U.substring(M+1);}for(N=Q.length-1;N>=0;N=N-1){U=U.replace(new RegExp("~-"+N+"-~"),K+Q[N]+H,"g");}return U;};G.substitute=A;B.substitute=A;},"3.0.0b1",{optional:["dump"]});/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 3.0.0
build: 1549
*/
YUI.add('history', function(Y) {

/*global YUI */


/**
 * The Browser History Utility provides the ability to use the back/forward
 * navigation buttons in a DHTML application. It also allows a DHTML
 * application to be bookmarked in a specific state.
 *
 * This utility requires the following static markup:
 *
 * &lt;iframe id="yui-history-iframe" src="path-to-real-asset-in-same-domain"&gt;&lt;/iframe&gt;
 * &lt;input id="yui-history-field" type="hidden"&gt;
 *
 * @module history
 */

/**
 * This class represents an instance of the browser history utility.
 * @class History
 * @constructor
 */

        // Shortcuts, etc.
    var win = Y.config.win,
        doc = Y.config.doc,

        encode = encodeURIComponent,
        decode = decodeURIComponent,

        H, G,

        // YUI Compressor helper...
        E_MISSING_OR_INVALID_ARG = 'Missing or invalid argument',

        // Regular expression used to parse query strings and such.
        REGEXP = /([^=&]+)=([^&]*)/g,

        // A few private variables...
        _useIFrame = false,
        _getHash,

        /**
         * @event history:ready
         * @description Fires when the browser history utility is ready
         * @type Event.Custom
         */
        EV_HISTORY_READY = 'history:ready',

        /**
         * @event history:globalStateChange
         * @description Fires when the global state of the page has changed (that is,
         *     when the state of at least one browser history module has changed)
         * @type Event.Custom
         */
        EV_HISTORY_GLOBAL_STATE_CHANGE = 'history:globalStateChange',

        /**
         * @event history:moduleStateChange
         * @description Fires when the state of a history module object has changed
         * @type Event.Custom
         */
        EV_HISTORY_MODULE_STATE_CHANGE = 'history:moduleStateChange';


    if (!YUI.Env.history) {

        YUI.Env.history = G = {

            // Flag used to tell whether the history utility is ready to be used.
            ready: false,

            // List of registered modules.
            _modules: [],

            // INPUT field (with type="hidden" or type="text") or TEXTAREA.
            // This field keeps the value of the initial state, current state
            // the list of all states across pages within a single browser session.
            _stateField: null,

            // Hidden IFrame used to store the browsing history on IE6/7.
            _historyIFrame: null
        };

    }

    /**
     * Returns the portion of the hash after the '#' symbol.
     * @method _getHash
     * @return {string} The hash portion of the document's location
     * @private
     */
    if (Y.UA.gecko) {
        // We branch at runtime for Gecko since window.location.hash in Gecko
        // returns a decoded string, and we want all encoding untouched.
        _getHash = function () {
            var m = /#(.*)$/.exec(win.location.href);
            var str = (m && m[1] ? m[1] : '');
            var i = str.indexOf('=');
            return str.substr(0,i + 1) +  encode(str.substr(i + 1));
        };
    } else {
        _getHash = function () {
            
            var str = win.location.hash.substr(1);
            var i = str.indexOf('=');
            return str.substr(0,i + 1) +  encode(str.substr(i + 1));
        };
    }

    /**
     * Stores the initial state and current state for all registered modules
     * in the (hidden) form field specified during initialization.
     * @method _storeStates
     * @private
     */
    function _storeStates() {
        var initialStates = [], currentStates = [];

        Y.Object.each(G._modules, function (module, moduleId) {
            initialStates.push(moduleId + '=' + module.initialState);
            currentStates.push(moduleId + '=' + module.currentState);
        });

        G._stateField.set('value', initialStates.join('&') + '|' + currentStates.join('&'));
    }

    /**
     * Sets the new currentState attribute of all modules depending on the new fully
     * qualified state. Also notifies the modules which current state has changed.
     * @method _handleFQStateChange
     * @param {string} fqstate fully qualified state
     * @private
     */
    function _handleFQStateChange(fqstate) {
        var m, states = [], globalStateChanged = false;

        if (fqstate) {

            REGEXP.lastIndex = 0;
            while ((m = REGEXP.exec(fqstate))) {
                states[m[1]] = m[2];
            }

            Y.Object.each(G._modules, function (module, moduleId) {
                var currentState = states[moduleId];

                if (!currentState || module.currentState !== currentState) {
                    module.currentState = currentState || module.initialState;
                    module.fire(EV_HISTORY_MODULE_STATE_CHANGE, decode(module.currentState));
                    globalStateChanged = true;
                }
            });

        } else {

            Y.Object.each(G._modules, function (module, moduleId) {
                if (module.currentState !== module.initialState) {
                    module.currentState = module.initialState;
                    module.fire(EV_HISTORY_MODULE_STATE_CHANGE, decode(module.currentState));
                    globalStateChanged = true;
                }
            });
        }

        if (globalStateChanged) {
            H.fire(EV_HISTORY_GLOBAL_STATE_CHANGE);
        }
    }

    /**
     * Update the IFrame with our new state.
     * @method _updateIFrame
     * @private
     * @return {boolean} true if successful. false otherwise.
     */
    function _updateIFrame(fqstate) {
        var html, doc;

        html = '<html><body>' + fqstate + '</body></html>';

        try {
            doc = G._historyIFrame.get('contentWindow.document');
            // TODO: The Node API should expose these methods in the very near future...
            doc.invoke('open');
            doc.invoke('write', html, '', '', '', ''); // see bug #2447937
            doc.invoke('close');
            return true;
        } catch (e) {
            return false;
        }
    }

    /**
     * Periodically checks whether our internal IFrame is ready to be used
     * @method _checkIframeLoaded
     * @private
     */
    function _checkIframeLoaded() {
        var elem, fqstate, hash;

        if (!G._historyIFrame.get('contentWindow.document')) {
            // Check again in 10 msec...
            setTimeout(_checkIframeLoaded, 10);
            return;
        }

        // Periodically check whether a navigate operation has been
        // requested on the main window. This will happen when
        // History.navigate has been called or after the user
        // has hit the back/forward button.
        elem = G._historyIFrame.get('contentWindow.document.body');
        // We must use innerText, and not innerHTML because our string contains
        // the "&" character (which would end up being escaped as "&amp;") and
        // the string comparison would fail...
        fqstate = elem ? elem.get('innerText') : null;

        hash = _getHash();

        setInterval(function () {
            var newfqstate, states, newHash;

            elem = G._historyIFrame.get('contentWindow.document.body');
            // See my comment above about using innerText instead of innerHTML...
            newfqstate = elem ? elem.get('innerText') : null;

            newHash = _getHash();

            if (newfqstate !== fqstate) {

                fqstate = newfqstate;
                _handleFQStateChange(fqstate);

                if (!fqstate) {
                    states = [];
                    Y.Object.each(G._modules, function (module, moduleId) {
                        states.push(moduleId + '=' + module.initialState);
                    });
                    newHash = states.join('&');
                } else {
                    newHash = fqstate;
                }

                // Allow the state to be bookmarked by setting the top window's
                // URL fragment identifier. Note that here, we are on IE < 8
                // which does not touch the browser history when changing the
                // hash (unlike all the other browsers).
                var i = newHash.indexOf('=');
                win.location.hash = hash = newHash.substr(0,i + 1) + decode(newHash.substr(i + 1));
                _storeStates();

            } else if (newHash !== hash) {

                // The hash hasURL changed. The user might have clicked on a link,
                // or modified the URL directly, or opened the same application
                // bookmarked in a specific state using a bookmark. However, we
                // know the hash change was not caused by a hit on the back or
                // forward buttons, or by a call to navigate() (because it would
                // have been handled above) We must handle these cases, which is
                // why we also need to keep track of hash changes on IE!

                // Note that IE6 has some major issues with this kind of user
                // interaction (the history stack gets completely messed up)
                // but it seems to work fine on IE7.

                hash = newHash;

                // Now, store a new history entry. The following will cause the
                // code above to execute, doing all the dirty work for us...
                _updateIFrame(newHash);
            }

        }, 200);

        G.ready = true;
        H.fire(EV_HISTORY_READY);
    }

    /**
     * Finish up the initialization of the browser utility library.
     * @method _initialize
     * @private
     */
    function _initialize() {
        var m, parts, moduleId, module, initialState, currentState, hash;

        // Decode the content of our storage field...
        parts = G._stateField.get('value').split('|');

        if (parts.length > 1) {

            REGEXP.lastIndex = 0;
            while ((m = REGEXP.exec(parts[0]))) {
                moduleId = m[1];
                initialState = m[2];
                module = G._modules[moduleId];
                if (module) {
                    module.initialState = initialState;
                }
            }

            REGEXP.lastIndex = 0;
            while ((m = REGEXP.exec(parts[1]))) {
                moduleId = m[1];
                currentState = m[2];
                module = G._modules[moduleId];
                if (module) {
                    module.currentState = currentState;
                }
            }
        }

        // IE8 in IE7 mode defines window.onhashchange, but never fires it...
        if (!Y.Lang.isUndefined(win.onhashchange) &&
            (Y.Lang.isUndefined(doc.documentMode) || doc.documentMode > 7)) {

            // The HTML5 way of handling DHTML history...
            win.onhashchange = function () {
                var hash = _getHash();
                _handleFQStateChange(hash);
                _storeStates();
            };

            G.ready = true;
            H.fire(EV_HISTORY_READY);

        } else if (_useIFrame) {

            // IE < 8 or IE8 in quirks mode or IE7 standards mode
            _checkIframeLoaded();

        } else {

            // Periodically check whether a navigate operation has been
            // requested on the main window. This will happen when
            // History.navigate has been called, or after the user
            // has hit the back/forward button.

            // On Gecko and Opera, we just need to watch the hash...
            hash = _getHash();

            setInterval(function () {
                var newHash = _getHash();
                if (newHash !== hash) {
                    hash = newHash;
                    _handleFQStateChange(hash);
                    _storeStates();
                }
            }, 50);

            G.ready = true;
            H.fire(EV_HISTORY_READY);
        }
    }


    H = {

        /**
         * Registers a new module.
         * @method register
         * @param {string} moduleId Non-empty string uniquely identifying the
         *     module you wish to register.
         * @param {string} initialState The initial state of the specified
         *     module corresponding to its earliest history entry.
         * @return {History.Module} The newly registered module
         */
        register: function (moduleId, initialState) {
            var module;

            if (!Y.Lang.isString(moduleId) || Y.Lang.trim(moduleId) === '' || !Y.Lang.isString(initialState)) {
                throw new Error(E_MISSING_OR_INVALID_ARG);
            }

            moduleId = encode(moduleId);
            initialState = encode(initialState);

            if (G._modules[moduleId]) {
                // The module seems to have already been registered.
                return;
            }

            // Note: A module CANNOT be registered once the browser history
            // utility has been initialized. This is related to reading and
            // writing state values from/to the input field. Relaxing this
            // rule would potentially create situations rather complicated
            // to deal with.
            if (G.ready) {
                return null;
            }

            module = new H.Module(moduleId, initialState);
            G._modules[moduleId] = module;
            return module;
        },

        /**
         * Initializes the Browser History Manager. Call this method
         * from a script block located right after the opening body tag.
         * @method initialize
         * @param {string|HTML Element} stateField <input type="hidden"> used
         *     to store application states. Must be in the static markup.
         * @param {string|HTML Element} historyIFrame IFrame used to store
         *     the history (only required for IE6/7)
         * @public
         */
        initialize: function (stateField, historyIFrame) {
            var tagName, type;

            if (G.ready) {
                // The browser history utility has already been initialized.
                return true;
            }

            stateField = Y.get(stateField);
            if (!stateField) {
                throw new Error(E_MISSING_OR_INVALID_ARG);
            }

            tagName = stateField.get('tagName').toUpperCase();
            type = stateField.get('type');

            if (tagName !== 'TEXTAREA' && (tagName !== 'INPUT' || type !== 'hidden' && type !== 'text')) {
                throw new Error(E_MISSING_OR_INVALID_ARG);
            }

            // IE < 8 or IE8 in quirks mode or IE7 standards mode
            if (Y.UA.ie && (Y.Lang.isUndefined(doc.documentMode) || doc.documentMode < 8)) {
                _useIFrame = true;
                historyIFrame = Y.get(historyIFrame);
                if (!historyIFrame || historyIFrame.get('tagName').toUpperCase() !== 'IFRAME') {
                    throw new Error(E_MISSING_OR_INVALID_ARG);
                }
            }

            if (Y.UA.opera && !Y.Lang.isUndefined(win.history.navigationMode)) {
                // Disable Opera's fast back/forward navigation mode and put
                // it in compatible mode. This makes anchor-based history
                // navigation work after the page has been navigated away
                // from and re-activated, at the cost of slowing down
                // back/forward navigation to and from that page.
                win.history.navigationMode = 'compatible';
            }

            G._stateField = stateField;
            G._historyIFrame = historyIFrame;

            Y.on('domready', _initialize);
            return true;
        },

        /**
         * Stores a new entry in the browser history by changing the state of a registered module.
         * @method navigate
         * @param {string} module Non-empty string representing your module.
         * @param {string} state String representing the new state of the specified module.
         * @return {boolean} Indicates whether the new state was successfully added to the history.
         * @public
         */
        navigate: function (moduleId, state) {
            var states;

            if (!Y.Lang.isString(moduleId) || !Y.Lang.isString(state)) {
                throw new Error(E_MISSING_OR_INVALID_ARG);
            }

            // The ncoding of module id and state takes place in mutiNavigate.
            states = {};
            states[moduleId] = state;

            return H.multiNavigate(states);
        },

        /**
         * Stores a new entry in the browser history by changing the state
         * of several registered modules in one atomic operation.
         * @method multiNavigate
         * @param {object} states Associative array of module-state pairs to set simultaneously.
         * @return {boolean} Indicates whether the new state was successfully added to the history.
         * @public
         */
        multiNavigate: function (states) {
            var newStates = [], fqstate, globalStateChanged = false;

            if (!G.ready) {
                return false;
            }

            Y.Object.each(G._modules, function (module, moduleId) {
                var state, decodedModuleId = decode(moduleId);

                if (!states.hasOwnProperty(decodedModuleId)) {
                    // The caller did not wish to modify the state of this
                    // module. We must however include it in fqstate!
                    state = module.currentState;
                } else {
                    state = encode(states[decodedModuleId]);
                    if (state !== module.upcomingState) {
                        module.upcomingState = state;
                        globalStateChanged = true;
                    }
                }

                newStates.push(moduleId + '=' + state);
            });

            if (!globalStateChanged) {
                // Nothing changed, so don't do anything.
                return false;
            }

            fqstate = newStates.join('&');

            if (_useIFrame) {
                return _updateIFrame(fqstate);
            } else {
                win.location.hash = decode(fqstate);
                return true;
            }
        },

        /**
         * Returns the current state of the specified module.
         * @method getCurrentState
         * @param {string} moduleId Non-empty string representing your module.
         * @return {string} The current state of the specified module.
         * @public
         */
        getCurrentState: function (moduleId) {
            var module;

            if (!Y.Lang.isString(moduleId)) {
                throw new Error(E_MISSING_OR_INVALID_ARG);
            }

            if (!G.ready) {
                return null;
            }

            moduleId = encode(moduleId);
            module = G._modules[moduleId];
            if (!module) {
                return null;
            }

            return decode(module.currentState);
        },

        /**
         * Returns the state of a module according to the URL fragment
         * identifier. This method is useful to initialize your modules
         * if your application was bookmarked from a particular state.
         * @method getBookmarkedState
         * @param {string} moduleId Non-empty string representing your module.
         * @return {string} The bookmarked state of the specified module.
         * @public
         */
        getBookmarkedState: function (moduleId) {
            var m, i, h;

            if (!Y.Lang.isString(moduleId)) {
                throw new Error(E_MISSING_OR_INVALID_ARG);
            }

            moduleId = encode(moduleId);

            // Use location.href instead of location.hash which is already
            // URL-decoded, which creates problems if the state value
            // contained special characters...
            h = win.location.href;
            i = h.indexOf('#');

            if (i >= 0) {
                h = h.substr(i + 1);
                REGEXP.lastIndex = 0;
                while ((m = REGEXP.exec(h))) {
                    if (m[1] === moduleId) {
                        return decode(m[2]);
                    }
                }
            }

            return null;
        },

        /**
         * Returns the value of the specified query string parameter.
         * This method is not used internally by the Browser History Manager.
         * However, it is provided here as a helper since many applications
         * using the Browser History Manager will want to read the value of
         * url parameters to initialize themselves.
         * @method getQueryStringParameter
         * @param {string} paramName Name of the parameter we want to look up.
         * @param {string} queryString Optional URL to look at. If not specified,
         *     this method uses the URL in the address bar.
         * @return {string} The value of the specified parameter, or null.
         * @public
         */
        getQueryStringParameter: function (paramName, url) {
            var m, q, i;

            url = url || win.location.href;

            i = url.indexOf('?');
            q = i >= 0 ? url.substr(i + 1) : url;

            // Remove the hash if any
            i = q.lastIndexOf('#');
            q = i >= 0 ? q.substr(0, i) : q;

            REGEXP.lastIndex = 0;
            while ((m = REGEXP.exec(q))) {
                if (m[1] === paramName) {
                    return decode(m[2]);
                }
            }

            return null;
        }
    };


    // Make Y.History an event target
    Y.mix(H, Y.Event.Target.prototype);
    Y.Event.Target.call(H);


    /**
     * This class represents a browser history module.
     * @class History.Module
     * @constructor
     * @param id {String} the module identifier
     * @param initialState {String} the module's initial state
     */
    H.Module = function (id, initialState) {

        Y.Event.Target.call(this);

        /**
         * The module identifier
         * @type String
         * @final
         */
        this.id = id;

        /**
         * The module's initial state
         * @type String
         * @final
         */
        this.initialState = initialState;

        /**
         * The module's current state
         * @type String
         * @final
         */
        this.currentState = initialState;

        /**
         * The module's upcoming state. There can be a slight delay between the
         * time a state is changed, and the time a state change is detected.
         * This property allows us to not fire the module state changed event
         * multiple times, making client code simpler.
         * @type String
         * @private
         * @final
         */
        this.upcomingState = initialState;
    };

    Y.mix(H.Module, Y.Event.Target, false, null, 1);

    Y.History = H;


}, '3.0.0' ,{skinnable:false, use:['event', 'node']});
/**
 * RUZEE.ShadedBorder 0.6.2
 * (c) 2006 Steffen Rusitschka
 *
 * RUZEE.ShadedBorder is freely distributable under the terms of an MIT-style license.
 * For details, see http://www.ruzee.com/
 */

var RUZEE = window.RUZEE || {};

RUZEE.ShadedBorder = {

create: function(opts) {
  var isie = /msie/i.test(navigator.userAgent) && !window.opera;
  var isie6 = isie && !window.XMLHttpRequest;
  function sty(el, h) {
    for(k in h) {
      if (/ie_/.test(k)) {
        if (isie) el.style[k.substr(3)]=h[k];
      } else el.style[k]=h[k];
    }
  }
  function crdiv(h) {
    var el=document.createElement("div");
    el.className = "sb-gen";
    sty(el, h);
    return el;
  }
  function op(v) {
    v = v<0 ? 0 : v;
    if (v>0.99999) return "";
    return isie ? " filter:alpha(opacity=" + (v*100) + ");" : " opacity:" + v + ';';
  }

  var sr = opts.shadow || 0;
  var r = opts.corner || 0;
  var bor = 0;
  var bow = opts.border || 0;
  var boo = opts.borderOpacity || 1;
  var shadow = sr != 0;
  var lw = r > sr ? r : sr;
  var rw = lw;
  var th = lw;
  var bh = lw;
  if (bow > 0) {
    bor = r;
    r = r - bow;
  }
  var cx = r != 0 && shadow ? Math.round(lw/3) : 0;
  var cy = cx;
  var cs = Math.round(cx/2);
  var iclass = r > 0 ? "sb-inner" : "sb-shadow";
  var sclass = "sb-shadow";
  var bclass = "sb-border";
  var edges = opts.edges || "trlb";
  if (!/t/i.test(edges)) th=0;
  if (!/b/i.test(edges)) bh=0;
  if (!/l/i.test(edges)) lw=0;
  if (!/r/i.test(edges)) rw=0;

  var p = { position:"absolute", left:"0", top:"0", width:lw + "px", height:th + "px", 
            ie_fontSize:"1px", overflow:"hidden", margin:"0", padding:"0" }; var tl = crdiv(p);
  delete p.left; p.right="0"; p.width=rw + "px"; var tr = crdiv(p);
  delete p.top; p.bottom="0"; p.height=bh + "px"; var br = crdiv(p);
  delete p.right; p.left="0"; p.width=lw + "px"; var bl = crdiv(p);

  var tw = crdiv({ position:"absolute", width:"100%", height:th + "px", ie_fontSize:"1px",
                   top:"0", left:"0", overflow:"hidden", margin:"0", padding:"0" });
  var t = crdiv({ position:"relative", height:th + "px", ie_fontSize:"1px",
                  margin:"0 "+ rw + "px 0 " + lw + "px", overflow:"hidden", padding:"0" });
  tw.appendChild(t);

  var bw = crdiv({ position:"absolute", left:"0", bottom:"0", width:"100%", height:bh + "px", 
                   ie_fontSize:"1px", overflow:"hidden", margin:"0", padding:"0" });
                   
  var b = crdiv({ position:"relative", height:bh + "px", ie_fontSize:"1px",
                  margin:"0 "+ rw + "px 0 " + lw + "px", overflow:"hidden", padding:"0" });
                  
  bw.appendChild(b);

  var mw = crdiv({ position:"absolute", top:(-bh)+"px", left:"0", width:"100%", height:"100%",
                   overflow:"hidden", ie_fontSize:"1px", padding:"0", margin:"0" });

  function corner(el,t,l) {
    var w = l ? lw : rw;
    var h = t ? th : bh;
    var s = t ? cs : -cs;
    var dsb = []; var dsi = []; var dss = [];
    
    var xp=0; var xd=1; if (l) { xp=w-1; xd=-1; }
    for (var x=0; x<w; ++x) {
      var yp=h-1; var yd=-1; if (t) { yp=0; yd=1; }
      var finished=false;
      for (var y=h-1; y>=0 && !finished; --y) {
        var div = '<div style="position:absolute; top:' + yp + 'px; left:' + xp + 'px; ' +
                  'width:1px; height:1px; overflow:hidden; margin:0; padding:0;';

        var xc = x - cx; var yc = y - cy - s;
        var d = Math.sqrt(xc*xc+yc*yc);
        var doShadow = false;

        if (r > 0) {
          // draw border
          if (xc < 0 && yc < bor && yc >= r || yc < 0 && xc < bor && xc >= r) {
            dsb.push(div + op(boo) + '" class="' + bclass + '"></div>');
          } else
          if (d<bor && d>=r-1 && xc>=0 && yc>=0) {
            var dd = div;
            if (d>=bor-1) {
              dd += op((bor-d)*boo);
              doShadow = true;
            } else dd += op(boo);
            dsb.push(dd + '" class="' + bclass + '"></div>');
          }
          
          // draw inner
          var dd = div + ' z-index:2;' + (t ? 'background-position:0 -' + (r-yc-1) + 'px;' : 'background-image:none;');
          var finish = function() {
            if (!t) dd = dd.replace(/top\:\d+px/, "top:0px");
            dd = dd.replace(/height\:1px/, "height:" + (y+1) + "px");
            dsi.push(dd + '" class="' + iclass + '"></div>');
            finished = true;
          };
          if (xc < 0 && yc < r || yc < 0 && xc < r) {
            finish();
          } else
          if (d<r && xc>=0 && yc>=0) {
            if (d>=r-1) {
              dd += op(r-d);
              doShadow = true;
              dsi.push(dd + '" class="' + iclass + '"></div>');
            } else {
              finish();
            }
          } else doShadow = true;
        } else doShadow = true;
        
        // draw shadow
        if (sr > 0 && doShadow) {
          d = Math.sqrt(x*x+y*y);
          if (d<sr) {
            dss.push(div + ' z-index:0; ' + op(1-(d/sr)) + '" class="' + sclass + '"></div>');
          }
        }
        yp += yd;
      }
      xp += xd;
    }
    el.innerHTML = dss.concat(dsb.concat(dsi)).join('');
  }
  
  function mid(mw) {
    var ds = [];

    ds.push('<div style="position:relative; top:' + (th+bh) + 'px; height:2048px; ' +
            ' margin:0 ' + (rw-r-cx) + 'px 0 ' + (lw-r-cx) + 'px; ' +
            ' padding:0; overflow:hidden;' +
            ' background-position:0 ' + (th > 0 ? -(r+cy+cs) : '0') + 'px;"' +
            ' class="' + iclass + '"></div>');

    var dd = '<div style="position:absolute; width:1px;' +
        ' top:' + (th+bh) + 'px; height:2048px; padding:0; margin:0;';
    if (sr>0) {
      for (var x=0; x<lw-r-cx; ++x) {
        ds.push(dd + ' left:' + x + 'px;' + op((x+1.0)/lw) + 
            '" class="' + sclass + '"></div>');
      }

      for (var x=0; x<rw-r-cx; ++x) {
        ds.push(dd + ' right:' + x + 'px;' + op((x+1.0)/rw) + 
            '" class="' + sclass + '"></div>');
      }
    }

    if (bow > 0) {
      var su = ' width:' + bow + 'px;' + op(boo) + '" class="' + bclass + '"></div>';
      ds.push(dd + ' left:' + (lw-bor-cx) + 'px;' + su);
      ds.push(dd + ' right:' + (rw-bor-cx) + 'px;' + su);
    }

    mw.innerHTML = ds.join('');
  }

  function tb(el, t) {
    var ds = [];
    var h = t ? th : bh;
    var dd = '<div style="height:1px; overflow:hidden; position:absolute; margin:0; padding:0;' +
        ' width:100%; left:0px; ';
    var s = t ? cs : -cs;
    for (var y=0; y<h-s-cy-r; ++y) {
      if (sr>0) ds.push(dd + (t ? 'top:' : 'bottom:') + y + 'px;' + op((y+1)*1.0/h) + 
          '" class="' + sclass + '"></div>');
    }
    if (y >= bow) {
      ds.push(dd + (t ? 'top:' : 'bottom:') + (y - bow) + 'px;' + op(boo) +
          ' height:' + bow + 'px;" class="' + bclass + '"></div>');
    }

    ds.push(dd + (t ? 'background-position-y:0; top:' : 
                      'background-image:none; bottom:') + y + 'px;' +
        ' height:' + (r+cy+s) + 'px;" class="' + iclass + '"></div>');

    el.innerHTML = ds.join('');
  }

  corner(tl, true, true); corner(tr, true, false);
  corner(bl, false, true); corner(br, false, false);
  mid(mw); tb(t, true); tb(b, false);
  needsCloning = false;

  return {
    render: function(el) {
      if (typeof el == 'string') el = document.getElementById(el);
      if (el.length != undefined) {
        for (var i=0; i<el.length; ++i) this.render(el[i]);
        return;
      }
      el.className += " sb";
      sty(el, { position:"relative", background:"transparent" });

      // remove generated children
      var node = el.firstChild;
      while (node) {
        var nextNode = node.nextSibling;
        if (node.nodeType == 1 && node.className == 'sb-gen')
          el.removeChild(node);
        node = nextNode;
      }

      var iel = el.firstChild;

      var twc = needsCloning ? tw.cloneNode(true) : tw;
      var mwc = needsCloning ? mw.cloneNode(true) : mw;
      var bwc = needsCloning ? bw.cloneNode(true) : bw;
      var tlc = needsCloning ? tl.cloneNode(true) : tl;
      var trc = needsCloning ? tr.cloneNode(true) : tr;
      var blc = needsCloning ? bl.cloneNode(true) : bl;
      var brc = needsCloning ? br.cloneNode(true) : br;
      
      el.insertBefore(tlc, iel); el.insertBefore(trc, iel);
      el.insertBefore(blc, iel); el.insertBefore(brc, iel);
      el.insertBefore(twc, iel); el.insertBefore(mwc, iel);
      el.insertBefore(bwc, iel);

      if (isie6) {
        el.onmouseover=function() { this.className += " hover"; }
        el.onmouseout=function() { this.className = this.className.replace(/ hover/,""); }
      }
      if (isie) {
        function resize() {
          twc.style.width = bwc.style.width = mwc.style.width = el.offsetWidth + "px";
          if (isie6) {
            mwc.firstChild.style.height = el.offsetHeight + "px";
          } else {
            for (var i=0; i<mwc.childNodes.length; ++i) {
              mwc.childNodes[i].style.height = (el.offsetHeight - bh - th)  + "px";
            }
          }
          trc.style.right = brc.style.right = null;
          trc.style.left  = brc.style.left  = (el.offsetWidth - rw) + "px";
        }
        el.onresize=resize;
        resize();
      }
      needsCloning = true;
    }
  };
}
}

// add our styles to the document
document.write('\
  <style type="text/css">\
  .sb, .sbi, .sb *, .sbi * { position:relative; z-index:1; }\
  * html .sb, * html .sbi { height:1%; }\
  .sbi { display:inline-block; }\
  .sb-inner { background:#ddd; }\
  .sb-shadow { background:#000; }\
  .sb-border { background:#bbb; }\
  </style>\
');
/* http://www.JSON.org/json2.js */

/*jslint evil: true */

/*global JSON */

/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
    lastIndex, length, parse, prototype, push, replace, slice, stringify,
    test, toJSON, toString, valueOf
*/

// Create a JSON object only if one does not already exist. We create the
// methods in a closure to avoid creating global variables.

if (!this.JSON) {
    JSON = {};
}
(function () {
    function f(n) {
        return n < 10 ? '0' + n : n;
    }

    if (typeof Date.prototype.toJSON !== 'function') {
        Date.prototype.toJSON = function (key) {
            return this.getUTCFullYear()   + '-' +
                 f(this.getUTCMonth() + 1) + '-' +
                 f(this.getUTCDate())      + 'T' +
                 f(this.getUTCHours())     + ':' +
                 f(this.getUTCMinutes())   + ':' +
                 f(this.getUTCSeconds())   + 'Z';
        };
        String.prototype.toJSON =
        Number.prototype.toJSON =
        Boolean.prototype.toJSON = function (key) {
            return this.valueOf();
        };
    }

    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        gap,
        indent,
        meta = {    // table of character substitutions
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"' : '\\"',
            '\\': '\\\\'
        },
        rep;

    function quote(string) {
        escapable.lastIndex = 0;
        return escapable.test(string) ?
            '"' + string.replace(escapable, function (a) {
                var c = meta[a];
                return typeof c === 'string' ? c :
                    '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
            }) + '"' :
            '"' + string + '"';
    }

    function str(key, holder) {

        var i,          // The loop counter.
            k,          // The member key.
            v,          // The member value.
            length,
            mind = gap,
            partial,
            value = holder[key];

        if (value && typeof value === 'object' &&
                typeof value.toJSON === 'function') {
            value = value.toJSON(key);
        }

        if (typeof rep === 'function') {
            value = rep.call(holder, key, value);
        }

        switch (typeof value) {
        case 'string':
            return quote(value);

        case 'number':
            return isFinite(value) ? String(value) : 'null';
        case 'boolean':
        case 'null':
            return String(value);
        case 'object':
            if (!value) {
                return 'null';
            }
            gap += indent;
            partial = [];
            if (Object.prototype.toString.apply(value) === '[object Array]') {
                length = value.length;
                for (i = 0; i < length; i += 1) {
                    partial[i] = str(i, value) || 'null';
                }
                v = partial.length === 0 ? '[]' :
                    gap ? '[\n' + gap +
                            partial.join(',\n' + gap) + '\n' +
                                mind + ']' :
                          '[' + partial.join(',') + ']';
                gap = mind;
                return v;
            }
            if (rep && typeof rep === 'object') {
                length = rep.length;
                for (i = 0; i < length; i += 1) {
                    k = rep[i];
                    if (typeof k === 'string') {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            } else {
                for (k in value) {
                    if (Object.hasOwnProperty.call(value, k)) {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            }
            v = partial.length === 0 ? '{}' :
                gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
                        mind + '}' : '{' + partial.join(',') + '}';
            gap = mind;
            return v;
        }
    }
    if (typeof JSON.stringify !== 'function') {
        JSON.stringify = function (value, replacer, space) {
            var i;
            gap = '';
            indent = '';
            if (typeof space === 'number') {
                for (i = 0; i < space; i += 1) {
                    indent += ' ';
                }
            } else if (typeof space === 'string') {
                indent = space;
            }
            rep = replacer;
            if (replacer && typeof replacer !== 'function' &&
                    (typeof replacer !== 'object' ||
                     typeof replacer.length !== 'number')) {
                throw new Error('JSON.stringify');
            }
            return str('', {'': value});
        };
    }
    if (typeof JSON.parse !== 'function') {
        JSON.parse = function (text, reviver) {
            var j;
            function walk(holder, key) {
                var k, v, value = holder[key];
                if (value && typeof value === 'object') {
                    for (k in value) {
                        if (Object.hasOwnProperty.call(value, k)) {
                            v = walk(value, k);
                            if (v !== undefined) {
                                value[k] = v;
                            } else {
                                delete value[k];
                            }
                        }
                    }
                }
                return reviver.call(holder, key, value);
            }
            cx.lastIndex = 0;
            if (cx.test(text)) {
                text = text.replace(cx, function (a) {
                    return '\\u' +
                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
                });
            }
            if (/^[\],:{}\s]*$/.
test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
                j = eval('(' + text + ')');
                return typeof reviver === 'function' ?
                    walk({'': j}, '') : j;
            }
            throw new SyntaxError('JSON.parse');
        };
    }
}());
/*	SWFObject v2.2 <http://code.google.com/p/swfobject/> 
	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
*/
var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();/**
 * A collection of global functions and values
 * @module global
 */

YAHOO = new YUI({
    base : '/js/yui/',
    loadOptional : false,
    timeout : 10000,
    filter: 'raw',
    modules:  { // one or more external modules that can be loaded along side of YUI
        json_org: {fullpath: "http://www.json.org/json.js"},
        json2_org: {fullpath: "http://www.json.org/json2.js"}
    }
});

GOOM = {blog: {}, user : {}, radio: {}, util : {}, site: {}, rotation : {}};

function getASSET() {
    return window.ASSET_STORE_ARRAY[parseInt(Math.random(window.ASSET_STORE_ARRAY.length - 1), 10)];
}

var _isIE = false;
/*@cc_on
   _isIE = true
@*/

function addOption(el, text, value) {
    var option = new Option(text, value);
    if(window._isIE) {
        el.add(option, el.options.length);
    } else {
        el.add(option, el.options[el.options.length]);
    }
}

function replace(str, map) {
    transform = function(n){return n;};
    return str.replace(/\%\{(\w+)\}/g, function(match, key) {
        return transform(map[key]);
    });
}

function defaultImg(img, src) {
    img.style.visibility='visible';
    img.onerror=null;
    img.removeAttribute('onerror');
    img.src=src;
}

/**
 *  Get element by a given id the same as document.getElementById
 *  @method byId
 *  @param {String} id
 *  @return {Element} Element or null
 */
function byId(id) {
    return document.getElementById(id);
}

var byClass = (function() {
    if(document.getElementsByClassName) {
        return function(el, className) {
            return el.getElementsByClassName(className);
        }
    } else {
        return function(el, className) {
            var els = el.getElementsByTagName('*');
            var results = [];
            for(var i = 0, len = els.length; i < len; i++) {
                if(els[i].className == className) {
                   results.push(els[i]); 
                }
            }
            return els;
        }
    }
})()

/**
 *  Set text in Elememt
 *  @method setText
 *  @param {Element} el
 *  @param {String} text
 */
function setText(el, text){
     el.innerText = el.textContent = text;
}

function hasClass(el, className) {
    if(el && className && el.className) {
        return (el.className.search(className) !== -1);
    }
    return false;
}

function removeClass(el, className) {
    if(el && el.tagName) {
        el = [el];
    }
    if(el){
        for(var i = 0, len = el.length; i < len; i++) {
            var classStr = el[i].className || '';
            el[i].className = classStr.replace(className, '').replace(/$\s*/gi, '');
        }
    }
}

function addClass(el, className) {
    if(el && el.tagName) {
        el = [el];
    }
    if(el) {
        for(var i = 0, len = el.length; i < len; i++) {
            var classStr = el[i].className || '';
            if(classStr.indexOf(className) != -1) {
                return;
            }
            el[i].className = classStr + ' ' + className;
        }
    }
}

function onEnter(event) {
    var event = e || window.event;
    var charCode = event.charCode || event.keyCode;
    if(charCode != 13) {
        return false;
    }
    return true;
}

function batchApply(el, fn, scope, args) {
    var scope = scope || window;
    if(el && el.tagName) {
        fn.call(scope, el, args);
    } else if(el) {
        for(var i = 0, len = el.length; i < len; i++) {
            fn.call(scope, el[i], args);
        }
    }
}

function containsNode(a, b){
  return a.contains ?
    (a != b) && a.contains(b) :
    !!(a.compareDocumentPosition(b) & 16);
}

function createScript(uri, callback) {
    var script = document.createElement("script")
    script.type = "text/javascript";
    script.src = uri;

    if(callback) {
        if (script.readyState){  //IE
            script.onreadystatechange = function(){
                if (script.readyState == "loaded" ||
                        script.readyState == "complete"){
                    script.onreadystatechange = null;
                    callback();
                }
            };
        } else {  //Others
            script.onload = function(){
                callback();
            };
        }
    }

    document.getElementsByTagName('head')[0].appendChild(script);
}

function removeScript(uri, callback) {
    var head = document.getElementsByTagName('head')[0],
        scripts = head.getElementsByTagName('script');

    for (var i = 0, len = scripts.length; i < len; ++i) {
        if (scripts[i].src == uri) {
            head.removeChild(scripts[i]);
            break;
        }
    }

    if (callback) {
        callback();
    }
}

/**
 *  A collection of values used for escaping
 *  @property _htmlEnt
 *  @private
 *  @see escapeHTML
 */
var _htmlEnt = {
    '"' : "&quot;",
    "'" : '&apos;',
    "<" : "&lt;",
    ">" : "&gt;",
    '&' : "&amp;"
}

var _xmlEnt = {
    '&apos;' : "'",
    '&quot;' : '"',
    '&amp;'  : '&',
    '&lt;'   : '<',
    '&gt;'   : '>'
}

/**
 *  Escapes a string from html
 *  @method escapeHTML
 *  @param {String} str
 *  @return {String} a string
 */
function escapeHTML(str) {
    return str ? (str+'').replace(/[<>\"&]/gm, function(str) {return _htmlEnt[str] || str;}) : "";
}

function shortener(str, length) {
    str = str ? (str+'').replace(/(&apos;|&quot;|&amp;|&lt;|&gt;)/gm, function(str) {return _xmlEnt[str] || str;}) : "";
    if(str.length > length) {
        str = str.substring(0, length - 3) + '...';
    }
    str = str ? (str+'').replace(/[<>\"&]/gm, function(str) {return _htmlEnt[str] || str;}) : "";
    return str;
}

function shortenerNoEscape(str, length) {
    str = str ? (str+'').replace(/(&apos;|&quot;|&amp;|&lt;|&gt;)/gm, function(str) {return _xmlEnt[str] || str;}) : "";
    if(str.length > length) {
        str = str.substring(0, length - 3) + '...';
    }
    return str;
}

/**
 * Creates namespace
 * @method createNS
 * @param {String} NameStr
 */
function createNS(nameStr) {
    var nameArr = nameStr.split('.');
    if(!window[nameArr[0]]) {
      window[nameArr[0]] = {};
    }
    var nameObj = window[nameArr[0]];
    for(var i = 1, len = nameArr.length; i < len; i++) {
        if(!nameObj[nameArr[i]]) {
           nameObj[nameArr[i]] = {};
        }
        nameObj = nameObj[nameArr[i]];
    }
}

function clearFormMsgs(formEl) {
    for(var i = 0, len = formEl.elements.length; i < len; i++) {
        var el = formEl.elements[i];
        if(el.getAttribute('gtype') == 'button') {
            el = el.parentNode.parentNode;
        }
        removeClass(el, 'invalidInput');
        if(el.parentNode) {
            span = el.parentNode.getElementsByTagName('span')[0];
            if(span) {
                span.style.display = 'none';
            }
        }
    }
}

function handleFormResults(formEl, result, newChecks) {
    clearFormMsgs(formEl);
    if(!result.success) {
        if(!result.errors) {
            return;
        }
        var err = result.errors;

        // temporarily added for testing purposes. 
        // I would like to switch on the newChecks part if possibile but 
        // I still have to investigate on that
        //XXX can we please avoid test code .....
        if(newChecks == true) {
            for(var i in err) {
                handleFormElement(formEl.elements[i], err[i]);
            }
        } else {
            for(var i = 0, len = result.errors.length; i < len; i++) {
                var el = formEl.elements[result.errors[i][0]];
                if(el) {
                    if(el instanceof NodeList) {
                        el = el[0];
                    }

                    if(el.getAttribute('gtype') == 'button') {
                        el = el.parentNode.parentNode;
                    }

                    addClass(el, 'invalidInput');
                    var span = el.parentNode.getElementsByTagName('span')[0];
                    if(span) {
                        span.style.display = 'block';
                        span.className = 'unAvailable';
                        setText(span, result.errors[i][1]);
                    }
                }
            }
        }
    }
}

function handleFormElement(el, err) {
    if(el) {
        if(el.getAttribute('gtype') == 'button') {
            el = el.parentNode.parentNode;
        }
        addClass(el, 'invalidInput');
        var span = el.parentNode.getElementsByTagName('span')[0];
        if(span) {
            span.style.display = 'block';
            span.className = 'unAvailable';
            setText(span, err);
        }
    }
}

function setFormMsg(el, msg, className) {
    var span = el.parentNode.getElementsByTagName('span')[0];
    if(span) {
        span.style.display = 'block';
        if(className) {
            span.className = className;
        } else {
            span.className = 'unAvailable';
        }
        setText(span, msg);
    }
}

function enableFields(elements) {
    for(var i = 0, len = elements.length; i < len; ++i) {
        if(elements[i]) {
            elements[i].disabled = false;
        }
    }
}

function disableFields(elements) {
  for(var i = 0, len = elements.length; i < len; i++) {
      elements[i].disabled = true;
  }
}

function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    } else {
        var expires = "";
    }
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' '){c = c.substring(1,c.length);}
        if (c.indexOf(nameEQ) == 0) {
            return c.substring(nameEQ.length,c.length);
        }
    }
    return null;
}

function play(type, id, notActive) {
    if(GOOM.Audio) {
        if(type == 'radio') {
            GOOM.Audio.playRadio(id);
        } else {
            GOOM.Audio.playPodcast(id);
        }
    }
}

function playAndGo(type, id, href) {
    play(type, id);
    if(GOOM.Navigation) {
        GOOM.Navigation.load(href);
    }
}

function playRandomAndGo(type) {
    GOOM.util.Get('/radio/api/random?date=' + (new Date()).getTime(), function(r) {
        if(!r.success) {
            return;
        }
        if(GOOM.Audio && r.result) {
            GOOM.Audio.playRadio(r.result.id);
        }
    })
}

function purge(ids) {
    for(var i = 0, len = ids.length; i < len; i++) {
        el = byId(ids[i]);
        if(el) {
            el.src = el.src + '?nocache=' + (new Date()).getTime(); 
        }
    }
}

function block(ids) {
    if(typeof(ids) == 'string') {
        byId(ids).style.display = 'block';
        return;
    }
    for(var i = 0, len = ids.length; i < len; i++) {
        el = byId(ids[i]);
        if(el) {
            display = el.style.display = 'block';
        }
    }
}

function none(ids) {
    if(typeof(ids) == 'string') {
        byId(ids).style.display = 'none';
        return;
    }
    for(var i = 0, len = ids.length; i < len; i++) {
        el = byId(ids[i]);
        if(el) {
            display = el.style.display = 'none';
        }
    }
}

function toggle(hide, show) {
    none(hide);
    block(show);
} 

createNode = (function() {
    var nodeTmp = document.createElement('div'),
        nodeCache = {};
        
    return function(html) {
        var node = nodeCache[html], nodes, ret, doc = document;
        if(node) {
            return node;
        }
        
        nodeTmp.innerHTML = html;
        nodes = nodeTmp.childNodes;
        if (nodes.length === 1) { 
            ret = nodes[0].parentNode.removeChild(nodes[0]);
        } else { // return multiple nodes as a fragment
            ret = doc.createDocumentFragment();
            while (nodes.length) {
                ret.appendChild(nodes[0]); 
            }
        }
        nodeCache[html] = ret.cloneNode(true);
        return ret;
    }
})()

function setFocus(el) {
    el.blur();
    el.focus();
}

function handleUserStatus(r) {
    if(!r) {
        return false;
    }
    if(r.userNotAuth) {
        GOOM.user.Auth.show();
        return false;
    } else if(r.userNotConfirmed) {
        GOOM.user.Utils.showValidateEmail();
        return false;
    }
    return true;
}

function stopEvent(e) {
	e = e || window.event;
	if(e.stopPropagation) {
		e.stopPropagation();
	}
	e.cancelBubble = true;
}

function addEvent(element, type, handler) {
    if (element.addEventListener) {
        element.addEventListener(type, handler, false);
    } else {
        // assign each event handler a unique ID
        if (!handler.$$guid) handler.$$guid = addEvent.guid++;
        // create a hash table of event types for the element
        if (!element.events) element.events = {};
        // create a hash table of event handlers for each element/event pair
        var handlers = element.events[type];
        if (!handlers) {
            handlers = element.events[type] = {};
            // store the existing event handler (if there is one)
            if (element["on" + type]) {
                handlers[0] = element["on" + type];
            }
        }
        // store the event handler in the hash table
        handlers[handler.$$guid] = handler;
        // assign a global event handler to do all the work
        element["on" + type] = handleEvent;
    }
};

// a counter used to create unique IDs
addEvent.guid = 1;

function removeEvent(element, type, handler) {
    if (element.removeEventListener) {
        element.removeEventListener(type, handler, false);
    } else {
        // delete the event handler from the hash table
        if (element.events && element.events[type]) {
            delete element.events[type][handler.$$guid];
        }
    }
};

function handleEvent(event) {
    var returnValue = true;
    event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
    var handlers = this.events[event.type];
    for (var i in handlers) {
        this.$$handleEvent = handlers[i];
        if (this.$$handleEvent(event) === false) {
            returnValue = false;
        }
    }
    return returnValue;
};

function fixEvent(event) {
    event.preventDefault = fixEvent.preventDefault;
    event.stopPropagation = fixEvent.stopPropagation;
    return event;
};
fixEvent.preventDefault = function() {
    this.returnValue = false;
};
fixEvent.stopPropagation = function() {
    this.cancelBubble = true;
};

function handleEscKey(e, fn) {
    if(!e) e = window.event;
    var code = e.keyCode || e.charCode;
    if(code != 27) return;
    if(fn) fn();
}

function onActionClicked(actionName) {
    switch(actionName) {
        case 'menu-radios' :
            GOOM.Navigation.load('/radios');
            break;
        case 'menu-shows' :
            GOOM.Navigation.load('/shows');
            break;
        case 'action-share' :
            if (GOOM.Audio.currentRadioObj) {
                GOOM.user.Share.showDialog('radio', GOOM.Audio.currentRadioObj);
                break;
            }
            if (GOOM.Audio.currentPodcastObj) {
                GOOM.user.Share.showDialog('show', arguments[1]);
                break;
            }
            GOOM.user.Share.showDialog('error', {});
            break;
        case 'action-create' :
            GOOM.radio.Utils.showOverlay(false);
            break;
        case 'action-shout' :
        break;
        default:
    }
   
};GOOM.util = {
    createHeadScript : function(src) {
        var el = document.createElement('script');
        el.type = 'text/javascript';
        el.src = src;
        document.getElementsByTagName('head')[0].appendChild(el);
    },

    addOption : function(el, text, value) {
        var option = new Option(text, value);
        if(YAHOO.UA && YAHOO.UA.ie) {
            el.add(option, 1);
        } else {
            el.add(option, el.options[el.options.length]);
        }
    },

    checkEmail : function(el, callback) {
        var tmpEl = el,
            innerCallback = function(r) {
                while (tmpEl.parentNode && !tmpEl.parentNode.getElementsByTagName('span')[0]) {
                    tmpEl = tmpEl.parentNode;
                }
                var span = tmpEl.parentNode.getElementsByTagName('span')[0];
                if (r.success) {
                    removeClass(tmpEl, 'invalidInput');
                    if(span) {
                        span.style.display = 'none';
                        span.className = '';
                        setText(span, '');
                    }
                    callback();
                } else {
                    addClass(tmpEl, 'invalidInput');
                    if(span) {
                        span.style.display = 'block';
                        span.className = 'unAvailable';
                        setText(span, r.message);
                    }
                }
            };
        GOOM.util.Get('/default/api/check-email?address=' + el.value, innerCallback);
    },

    stopPlayingClip : function(id) {
        if(id) {
            if(GOOM.PlayItemMgr.currentEl) {
                var attr = GOOM.PlayItemMgr.currentEl.attributes;
                for(var i = 0, len = attr.length; i < len; ++i) {
                    if(attr[i].name == 'gdata' && attr[i].value == id) {
                        GOOM.PlayItemMgr.stop();
                        return;
                    }
                }
            }
        } else {
            var playClip = byId('playingPreview');

            if(playClip) {
                GOOM.PlayItemMgr.stop();
            }
        }
    }
}

GOOM.Event = function(type, context, signature) {
    this.type = type;
    this.scope = context || window;
    this.signature = signature || GOOM.Event.FLAT;
    this.subscribers = [];
     
    var onsubscribeType = "GOOM_ONSUBSCRIBE";
    if (type !== onsubscribeType) {
        this.subscribeEvent = 
                new GOOM.Event(onsubscribeType, this, true);

    } 
    this.lastError = null;
};
GOOM.Event.LIST = 0;
GOOM.Event.FLAT = 1;
GOOM.Event.ONCE = 'once';

GOOM.Event.prototype = {
    subscribe : function(fn, obj, type, overrideContext) {
        if (!fn) {
            throw new Error("Invalid callback for subscriber to '" + this.type + "'");
        }
        if (this.subscribeEvent) {
            this.subscribeEvent.fire(fn, obj, overrideContext);
        }
        this.subscribers.push( new GOOM.util.Subscriber(fn, obj, type, overrideContext));
    },
    
    unsubscribe : function(fn, obj) {
        var found = false;
        for (var i=0, len=this.subscribers.length; i<len; ++i) {
            var s = this.subscribers[i];
            if (s && s.contains(fn, obj)) {
                this._delete(i);
                found = true;
            }
        }
        return found;
    },
    fire : function() {
        this.lastError = null;
        var errors = [],
            len=this.subscribers.length;
        if (!len) {
            return true;
        }
        var args =[].slice.call(arguments, 0), ret=true, i, rebuild=false;
        var subs = this.subscribers.slice(), throwErrors = GOOM.Event.throwErrors;
        for (i=0; i<len; ++i) {
            var s = subs[i];
            if (!s) {
                rebuild=true;
            } else {
                var scope = s.getScope(this.scope);
                if (this.signature == GOOM.Event.FLAT) {
                    var param = null;
                    if (args.length > 0) {
                        param = args[0];
                    }
                    
                    try {
                        ret = s.fn.apply(scope, args);
                    } catch(e) {
                        this.lastError = e;
                        // errors.push(e);
                        if (throwErrors) {
                            throw e;
                        }
                    }
                    
                } else {
                    try {
                        ret = s.fn.call(scope, this.type, args, s.obj);
                    } catch(ex) {
                        this.lastError = ex;
                        if (throwErrors) {
                            throw ex;
                        }
                    }
                }
                
                if(s.type == GOOM.Event.ONCE) {
                    this._delete(i);
                }
            }
        }
        return (ret !== false);
    },
    unsubscribeAll : function() {
        var l = this.subscribers.length, i;
        for (i=l-1; i>-1; i--) {
            this._delete(i);
        }

        this.subscribers=[];

        return l;
    },

    /**
     * @method _delete
     * @private
     */
    _delete : function(index) {
        var s = this.subscribers[index];
        if (s) {
            delete s.fn;
            delete s.obj;
        }

        // this.subscribers[index]=null;
        this.subscribers.splice(index, 1);
    }
};

/////////////////////////////////////////////////////////////////////

GOOM.util.Subscriber = function(fn, obj, type , overrideContext) {
    this.type = type;
    this.fn = fn;
    this.obj = typeof(obj) === 'undefined' ? null : obj;
    this.overrideContext = overrideContext;
};

GOOM.util.Subscriber.prototype.getScope = function(defaultScope) {
    if (this.overrideContext) {
        if (this.overrideContext === true) {
            return this.obj;
        } else {
            return this.overrideContext;
        }
    }
    return defaultScope;
};

GOOM.util.Subscriber.prototype.contains = function(fn, obj) {
    if (obj) {
        return (this.fn == fn && this.obj == obj);
    } else {
        return (this.fn == fn);
    }
};
/* $Id: Navigation.js 15262 2010-02-12 13:11:32Z Carlo Pescetelli $ */
/**
 * Handles request that takes the user to another page on gooms website
 * @namespace GOOM
 * @module navigation
 * @requires global, list
 */

/** 
 * Handles request that takes the user to another page on gooms website
 * @class Navigation
 * @requires global
 * @requires GOOM.List
 */
GOOM.Navigation = {
    NavID : 'page',
    Events : {
        onPageReady : new GOOM.Event('G:Navigation:onPageReady'),
        onPageLeave : new GOOM.Event('G:Navigation:onPageLeave'),
        onPageChange : new GOOM.Event('G:Navigation:onPageChange')
    },
    prevHref : null,
    lockedHref : {},
    callback : false,
    curRequest : false,
    scrollSpan : 0,
    
    /**
     * Internal function used to request and pass a given page
     * @private
     * @method get
     * @param {String} url
     */    
    get : function(url) {
        var me = GOOM.Navigation;
        me.Events.onPageChange.fire(url);
        var setup = {
            success : function(data) {
                me.prevHref = url;
                if(!me.contentElement) {
                    try {
                        me.contentElement = byId(me.contentElementId);
                    } catch(e) {
                        throw "GOOM.Navigation.cotentElement not found";
                    }
                }
                me.contentElement.style.display = 'block';
                GOOM.Navigation.Events.onPageLeave.fire(url);
                try {
                    me.contentElement.innerHTML = data;
                } catch(e) {}
                //GA Helper
                if(window.pageTracker){
                    var pageStr = window.location.hash;
                    if(!pageStr.indexOf('#' + me.NavID +'=')) {
                        pageTracker._trackPageview(pageStr.replace('#' + me.NavID + '=', ''));
                    }
                }
                var scripts = me.contentElement.getElementsByTagName('script');
                var jsCode = [];
                for ( var i = 0; i < scripts.length; i++ ) {
                    jsCode.push(scripts[i].innerHTML);
                }
                var sGetter = document.createElement("script");
                sGetter.type = "text/javascript";
                if (sGetter.canHaveChildren) { 
                    sGetter.innerHTML = jsCode.join('');
                } else {
                    //IE doesnt allow nodes inside script tags
                    sGetter.text = jsCode.join('');
                }
                document.body.appendChild(sGetter);
                document.body.style.cursor = "default";
                GOOM.Navigation.Events.onPageReady.fire({});
                
                if(me.callback) {
                    me.callback();
                    me.callback = false;
                }
                //scrolling to the top
                window.scroll(0, GOOM.Navigation.scrollSpan);
                GOOM.Navigation.scrollSpan = 0;
            },
            failure: function (code, event) {
                if(document.body) {
                    document.body.style.cursor = "default";
                }
                if(code == 302) {
                    byId(me.contentElementId).style.display = 'block';
                    return;
                }
                
                if(GOOM.site && GOOM.site.Note) {
                    GOOM.site.Note.show('error', _('NAVIGATION_FAILED_LOADING_PAGE'), true);
                }
            },
            rawText : true
        };
        //makes the change seems more like a page reload, than a dynamic switch, or well that is my hope
        if(document.body) {
            document.body.style.cursor = "progress";
        }
        
        if(me.curRequest) {
            me.curRequest.abort();
        }
        requestURL = url + ((url.indexOf('?') >= 0) ? '&d=1' : '?d=1');
        if(me.curURI == url) {
            me.curRequest.abort();
        }
        me.curRequest = new GOOM.util.Request("GET", requestURL , setup);
        me.curURI = requestURL;
    },
    /**
     * Load a a given url
     * @method load
     * @param {String} href
     */
    load : function(href, callback) {
        GOOM.util.DialogMgr.close();

        var me = GOOM.Navigation;
        if(callback) {
            me.callback = callback;
        }

        var loc = window.location;
        href = href.replace(loc.href.replace(loc.pathname + loc.hash, ''), '').replace('http://'+ loc.host, '');
        if(me.lockedHref[me.prevHref]) {
            me.lockedHref[me.prevHref](href);
            return;
        }
        
        if (!YAHOO.History.navigate(me.NavID, href)) {
            me.get(href);
        }
    },

    lock : function(href, callback) {
        GOOM.Navigation.lockedHref[href] = callback;
    },

    unlock : function(href) {
        delete GOOM.Navigation.lockedHref[href];
    },

    refresh : function(callback) {
        var hashURL = YAHOO.History.getCurrentState(GOOM.Navigation.NavID);
        if(callback) {
            GOOM.Navigation.callback = callback;
        }
        GOOM.Navigation.get(hashURL == '' ? window.location.href : hashURL);
    },
    
    setContentElementId : function(id) {
        var me = GOOM.Navigation;
        me.contentElementId = id;
    },

    scrollTo : function(id) {
        var commentArea = byId(id);
        if(commentArea) {
            GOOM.Navigation.scrollSpan = commentArea.offsetTop;
        }
    }
};

YAHOO.use('history', function(Y) {
    NavID = GOOM.Navigation.NavID;
    var initState;
    if(window.location.hash.indexOf(NavID) == 1) {
        initState = window.location.hash.replace('#' + NavID + '=', '');
    } else {
        initState = window.location.pathname + window.location.search;
    }
    GOOM.Navigation.prevHref = initState;
    
    Y.History.register(NavID, initState).subscribe('history:moduleStateChange', function(uri) {
        GOOM.Navigation.get(uri);
    });
    
    Y.History.subscribe('history:ready', function () {
        var me = GOOM.Navigation;
        var href = Y.History.getCurrentState(me.NavID);
        if(!href || !href.length || window.location.pathname == href ) {
            return;
        }
        me.get(href);
    });
});

/* $Id: UI.js 14012 2009-12-21 14:09:51Z Claudio Beatrice $ */ 
createNS('GOOM');

GOOM.UI = {
    update : function (el, options) {
        var elements = [],
            container = el || document,
            me = GOOM.UI,
            element,
            type;
       
        var scan = function(elements) {
            // NOTE: don't optimize "i < elements.length"
            for (var i = 0; i < elements.length; ++i) {
                element = elements[i];

                type = element.getAttribute('gtype');
                if (!type || element.getAttribute('guiloaded')) {
                    continue;
                }
                element.setAttribute('guiloaded', true);
                
                //NOTE to self after the switch, the element doesnt exist anymore in its orginal state
                switch(type) {
                    case 'button' : {
                        me.btnTemplate(element);
                        element.guiloaded = true;
                        break;
                    }
                    case 'default:text' : {
                        break;
                    }
                }
            }
        };
        scan(container.getElementsByTagName('input'));
        scan(container.getElementsByTagName('select'));
        scan(container.getElementsByTagName('textarea'));
    },
    
    btnTemplate : function(el) {
        var clone = el.cloneNode(true);
        if(el.value) {
            clone.value = el.value;
        }

        var div = document.createElement('div');
        div.className = el.className;
        if(el.id) {
            div.id = el.id + 'Wrap';
        }
        if(el.type == 'file') {
            div.innerHTML = '<div class="fileUpload"><button></button><div class="fileUploadMask"><input id="' + el.id + 'HiddenInput" value=""/><div class="button primary" ><div class="bl" ><p>' + _('INPUT_BROWSER_LABEL') +'</p></div><div class="br"></div></div></div></div>'
        } else {
            div.innerHTML ='<div class="bl"><button></button></div><div class="br"></div>';
        }
        
        var btn = div.getElementsByTagName('button')[0];

        if(el.title && (el.type == 'textarea' || el.type == 'text' || el.type == 'password')) {
            if(clone.value.length == 0) {
                addClass(clone, 'inputTxtGrey');
                clone.value = el.title;
            }

            var form = GOOM.util.Form;

            addEvent(clone, 'focus', function() {
                form.fieldFocus(clone);
            });

            addEvent(clone, 'blur', function() {
                form.fieldBlur(clone);
            });

        }

        btn.parentNode.replaceChild(clone, btn);
        
        el.parentNode.replaceChild(div, el);
    },
    
        
    thumbnailRadio : function(id, name, size) {
         return ['<a href="/radio/', id ,'" onclick="GOOM.Navigation.load(this.href); return false;" title="', name ,'"><img class="', size ,'" onload="this.style.visibility=\'visible\'" onerror="defaultImg(this, \'/img/radio_', size ,'.jpg\')" src="', window.getASSET() , '/radio/' , id , '/' , size , '"/></a>'].join('');
    },

    thumbnailDOM : function(el, type, obj, size) {
        el.alt = obj.name;
        el.src = (type == 'radio' ? '/radio/image/logo?uid=' : '/show/image/logo?id=') + obj.id  + '&converter=' + size;
        el.style.visibility = 'hidden';
        el.onload = function(){this.style.visibility='visible'}
        if(type == 'radio') {
            el.onerror = function(){defaultImg(this, '/img/radio_' + size + '.jpg')}
        } else if(type == 'show'){
            el.onerror = function(){defaultImg(this, '/img/show_' + size + '.jpg')}
        }
    },
    
    inputDefaultText : function(el) {
        batchApply(el, function bind(el) {
            if(!el) {
                return;
            }
            if(el.value == '') {
                el.value = el.getAttribute('gtext');
            }
            el.onblur = function() { if(this.value == '') this.value = el.getAttribute('gtext'); this.style.color = '#999999';};
            el.onfocus = function(){ if(this.value == el.getAttribute('gtext')) this.value =''; this.style.color = '#000000';};
        });
    }
}


GOOM.Navigation.Events.onPageReady.subscribe(function() {
    GOOM.UI.update();
});
/**
 * Provides access to goom's flex player events and functions
 * @module audio
 * @namespace GOOM
 * @title Audio Controller
 */

createNS('GOOM');

/**
 * Provides access to goom's flex player events and functions
 * @class Audio
 */
GOOM.Audio = {
    Events : {
         onReady : new GOOM.Event("G:Audio:onReady"),
         onNextSong : new GOOM.Event("G:Audio:onAudioNextSong"),
         onPodcastChange : new GOOM.Event("G:Audio:onPodcastChange"),
         onRadioChange : new GOOM.Event("G:Audio:onAudioRadioChange"),
         onPlaybackStart : new GOOM.Event("G:Audio:onPlaybackStart"),
         onPlaybackStop : new GOOM.Event("G:Audio:onPlaybackStop"),
         onDetailPage : new GOOM.Event("G:Audio:onDetailPage"),
         onLogoClick : new GOOM.Event("G:Audio:onLogoClick"),
         onBrowseMoreClick : new GOOM.Event("G:Audio:onBrowseMoreClick"),
         onShuffleItemClick : new GOOM.Event("G:Audio:onShuffleItemClick"),
         onShuffleButtonClick : new GOOM.Event("G:Audio:onShuffleButtonClick"),
         onInfoBtnClick : new GOOM.Event("G:Audio:onInfoBtnClick")
    },

    ready : false,
    bufferedEvents : [],
    flashObj : false,
    isMuted : false,
    isPlaying : false,
    playHistory : [], 
    flashAudioObj : false,
    volume : false,
    currentRadioObj : null,
    currentPodcastObj : null,

    /** 
     * Control which flex player to use, should be called onReady
     * @method setFlashObj
     * @param {Element} flashAudioObj
     */
    setFlashObj : function(flashAudioObj) {
        this.flashAudioObj = flashAudioObj;
    },

    /** 
     * Change the radio playing to the given id
     * @method changeRadio
     * @param {String} radioId
     */
    playRadio : function(radioId){
        if(this.flashAudioObj) {
            this.flashAudioObj.playRadio(radioId);
        }
        this.currentRadioId = radioId;
    },

    playPodcast : function(podcastId, showObj) {
        if(this.flashAudioObj) {
            this.flashAudioObj.playAsset(podcastId, showObj);
        }
    },

    playSample : function(sampleId) {
        if(this.flashAudioObj ) {
            try {
                this.flashAudioObj.playAssetSample(sampleId);
            } catch(e) {} //issues with switching fast between songs. suppress bugs
        }
    },
    
    stop : function() {
        if(this.flashAudioObj) {
            this.flashAudioObj.pb_stop();
        }
    },
    
    getMediaObj : function () {
        if(this.flashAudioObj) {
            return this.flashAudioObj.getMediaObj();
        }
        return null;
    },

    /** 
     * Toggle mute state
     * @method toggleMute
     * @param {Boolean} forceValue optional 
     */
    toggleMute : function(forceValue) {
        this.isMuted = (typeof(forceValue) != "undefined") ? forceValue : !this.isMuted;    
        //set the value in the player
        if(this.flashAudioObj) {
            this.flashAudioObj.muteRadio(this.isMuted);
        }
    },
    
    /** 
     * Set the volume of the flex player
     * @method setVolume
     * @param {Int} value between 0 - 200
     */
    setVolume : function(value) {
        this.volume = value;
        if(this.flashAudioObj) {
            this.flashAudioObj.setVolume(this.volume);
        }
    },
    
    /** 
     * Get the current volume
     * @method getVolume
     * @return {Int} volume
     */
    getVolume : function(){
        if(this.flashAudioObj) {
            this.volume = this.flashAudioObj.getVolume();
        }
        return this.volume;
    },
    
    getSongs : function() {
        if(!this.currentSongObj || !this.nextSongObj) {
            return false;
        }
        return { 
            currentSongObj : this.currentSongObj, 
             nextSongObj : this.nextSongObj 
        }
    },
    
    /** 
     * Internal function used to trigger a the onNextSong event
     * @private
     * @method onNextSong
     * @param {SongObject} currentSongObj
     * @param {SongObject} nextSongOBj
     */
    onNextSong : function(currentSongObj, nextSongObj) {
        if(!currentSongObj || !nextSongObj){
            return;
        }
        var me = GOOM.Audio;
        me.currentSongObj = currentSongObj;
        me.nextSongObj = nextSongObj;
        
        me.playHistory.unshift(currentSongObj);
        me.Events.onNextSong.fire({currentSongObj : currentSongObj, 
                                      nextSongObj : nextSongObj});
    },
       
    /** 
     * Internal function used to trigger onPlaybackStart
     * @private
     * @method onPlaybackStart
     */
    onPlaybackStart : function() {
        this.isPlaying = true;
        this.Events.onPlaybackStart.fire({});
    },
    
    /** 
     * Internal function used to trigger onPlaybackEnd
     * @private
     * @method onPlaybackEnd
     */
    onPlaybackStop : function() {
        this.isPlaying = false;
        this.Events.onPlaybackStop.fire({});
    },
    
    /** 
     * Internal function used to trigger onReady
     * @private
     * @method onReady
     */
    onReady : function(){ 
        if(this.ready) {
            return;
        }
        this.ready = true;
        this.Events.onReady.fire({});
    },
    
    /** 
     * Internal function used to trigger onRadioChange
     * @private
     * @method onRadioChange
     * @param {RadioObject} radioObj
     */
    onRadioChange : function(radioObj) {
        if(window.GATrack) {
           window.GATrack('GOOM.Audio','onRadioChange', radioObj.id, radioObj.name);
        }
        createCookie('lastPlayedRadio', radioObj.id, 14);
        this.currentSongObj = null;
        this.currentRadioObj = radioObj;
        this.Events.onRadioChange.fire(radioObj);
        this.currentPodcastObj = null;
    },
    
    onPodcastChange : function(podcastObj) {
        this.currentPodcastObj = podcastObj;
        this.Events.onPodcastChange.fire();
        this.currentRadioObj = null;
    },

    onDetailPage : function(type, slug, siteId) {
        if (siteId == SITE_ID) {
            GOOM.Navigation.load('/' + type + '/' + slug);
        } else {
            GOOM.site.Navigation.switchSite(DOMAIN_PREFIX + SITES_ARRAY[SITE_ID].domain,
                                            DOMAIN_PREFIX + SITES_ARRAY[siteId].domain + '/' + type + '/' + slug);
        }
    },

    onLogoClick : function() {
        GOOM.Navigation.load('/');
    },

    onBrowseMoreClick : function() {
        GOOM.Navigation.load('/radios');
    },

    onShuffleItemClick : function(slug, id) {
        this.playRadio(id);
        GOOM.Navigation.load('/radio/' + slug);
    },

    onShuffleButtonClick : function() {
        playRandomAndGo();
    },

    onInfoBtnClick : function() {
        GOOM.Navigation.load('/about/gsound/');
    },

    /** 
     * Internal function pass on the events that it gets from the flex player
     * @private
     * @method handleEvents
     */
    handleEvents : function() {
        var eventId = arguments[0];

        try {
            switch(eventId) {
                case "onNextSong" :
                    this.onNextSong(arguments[1], arguments[2]);
                break;
                case "onPlaybackStart" :
                    this.onPlaybackStart();
                break;
                case "onPodcastChange" :
                    this.onPodcastChange(arguments[1]); 
                break;
                case "onPlaybackStop" :
                    this.onPlaybackStop();
                break;
                case "onRadioChange" :
                    this.onRadioChange(arguments[1]);
                break;
                case "onReady" :
                    this.onReady();
                break;
                case "onDetailPage" :
        			this.onDetailPage(arguments[1], arguments[2], arguments[3]);
       			break;
       			case "onLogoClick" :
                    this.onLogoClick();
                break;
                case 'onBrowseMoreClick':
                    this.onBrowseMoreClick();
                break;
                case 'onShuffleItemClick':
                    this.onShuffleItemClick(arguments[1], arguments[2]);
                break;
                case 'onShuffleButtonClick':
                    this.onShuffleButtonClick();
                break;
                case 'onInfoBtnClick':
                    this.onInfoBtnClick();
                break;
            }
        } catch(e) {
            //alert(e.message);
        }
    }
};

createNS('GOOM');

GOOM.Volume = {
    knopInit : false,
    initialized : false,
    
    initKnob : function(){
        if(!this.knopInit && this.initialized && this.flashAudioObj) {
            this.flashAudioObj.initKnob();
        }
        this.knopInit = true;
    },
        
    onReady : function() {
        this.flashAudioObj = byId('playerVolumeContainer');
        if(!this.flashAudioObj) {
            return;
        }
        
        this.initialized = true;
        if(GOOM.Audio.isPlaying) {
            this.initKnob();
        }
    },
    
    onVolumeChange : function(value){
        GOOM.Audio.setVolume(value);
    },
    
    onInfoBtnClick : function() {
        GOOM.Navigation.load('/about/gsound');
    },
    
    setVolume : function(value){
        if(this.flashAudioObj) {
            this.flashAudioObj.setvolume(value);
        }
    },
    
    getVolume : function(){
        if(this.flashAudioObj) {
            this.flashAudioObj.setVolume(value);
        }
    },
    
    handleEvents : function() {
        var eventId = arguments[0];
        try {
            switch(eventId) {
                case "onVolumeChange" :
                    this.onVolumeChange(arguments[1]);
                break;
                case "onReady" :
                    this.onReady();
                break;
                case "onInfoBtnClick":
                    this.onInfoBtnClick();
                break;
            }
        } catch(e) {
            //alert(e.message);
        }
    }
}

GOOM.Audio.Events.onPlaybackStart.subscribe(function(){
    GOOM.Volume.initKnob();
})

createNS('GOOM');

GOOM.Paginator = {
    
    template : {
        frontShowDual : {
            update : function(containerEl, r) {
                var img = containerEl.getElementsByTagName('img');
                if(r.success) {
                    for(var i = 0; i < r.shows.length; i++) {
                        if(img[i]) {
                            GOOM.UI.thumbnailDOM(img[i], 'show', r.shows[i], 't7');
                        }
                        if(img[i].parentNode && img[i].parentNode.tagName.toLowerCase() == 'a') {
                            img[i].parentNode.title = r.shows[i].name;
                            img[i].parentNode.href = '/show/' + r.shows[i].slug;
                        }
                    }
                }
            },
            limit : 2,
            api : '/show/list/promoted?limit=2&offset=%{offset}'
        }
    },
    
    left : function(el, templateId, containerId, total) {
        var el = byId(containerId);
        var curPos = parseInt(el.getAttribute('curPos') || total, 10);
        var template = this.template[templateId];
        var newPos = curPos - template.limit;
        if(newPos < 0) {
            newPos = total;
        }
        el.setAttribute('curPos', newPos);
        GOOM.util.Get(replace(this.template[templateId].api, { offset : newPos, 
                                                               limit : template.limit }), 
                      function(r) { GOOM.Paginator.template[templateId].update(byId(containerId), r)});
    },
    
    right : function(el, templateId, containerId, total) {
        var el = byId(containerId);
        var template = this.template[templateId];
        var curPos = parseInt(el.getAttribute('curPos') || 0, 10);
        var newPos = curPos + template.limit;
        if(newPos > total) {
            newPos = 0;
        }
        el.setAttribute('curPos', newPos);
        GOOM.util.Get(replace(this.template[templateId].api, { offset : newPos, 
                                                               limit : template.limit }), 
                      function(r) { GOOM.Paginator.template[templateId].update(byId(containerId), r)});
    }
}

createNS('GOOM');

GOOM.User = {
    Events : { onChange : new GOOM.Event('G:User:onChange') },

    userDetails : false,
    iframeUpdaterUrl : false,
    username : false,
    isLoggedIn : false,
    isValidated : false,

    updateDetails : function(result) {
        var me = GOOM.User,
            details = false;

        me.isValidated = me.isLoggedIn = false;
        if(result.userDetails) {
            details = result.userDetails;
            me.username = details.username;
            me.isLoggedIn = true;
            me.isValidated = (details.status == 'A');
        }

        if(result.iframeUrl) {
            me.removeLoginFrame();
            var iframe = document.createElement('iframe');
            iframe.id = 'loginIframe';
            iframe.src = result.iframeUrl;
            document.body.appendChild(iframe);
            setTimeout(me.removeLoginFrame, 10000);
        }
        me.userDetails = details;
        me.Events.onChange.fire(details);
    },

    removeLoginFrame : function() {
        if(byId('loginIframe')) {
            document.body.removeChild(byId('loginIframe'));
        }
    },

    getDetails: function() {
        return GOOM.User.userDetails;
    },

    checkStatus : function(fn) {
        var me = GOOM.User;
        if(!me.isLoggedIn) {
            GOOM.user.Auth.show();
            return false;
        } else if(!me.isValidated) {
            GOOM.util.Get('/user/api/user-status', function(r) { 
                if(!handleUserStatus(r)) {
                    return
                }
                me.isValidated = true;
                if(fn) {
                    fn();
                }
            });
            return false;
        }
        return true;
    }
};

/* $Id: Follow.js 11756 2009-10-23 18:32:40Z Claudio Beatrice $ */

GOOM.UserRadios = {
    followed : [],
    created : [],
    isUpdated : false,
    
    Events : {
        onReady : new GOOM.Event('G:Follow:onReady'),
        onChange : new GOOM.Event('G:Follow:onReady')
    },
    
    addFollow : function(radioUid, callback) {
        GOOM.util.Get('/user/api/follow?radioUid=' + radioUid, function(r) {
            if(!r.success) {
                if(!handleUserStatus(r)) {
                    return;
                }
                return;
            }
            var index = GOOM.UserRadios.followed.push(r.radio);
            r.radio._index = index;
            GOOM.UserRadios.followed['_' + r.radio.uid] = r.radio;
            GOOM.UserRadios.Events.onChange.fire(r.radio, true);
        });
    },
    
    removeFollow : function(radioUid, callback) {
        var me = GOOM.UserRadios;
        var radio = me.followed['_' + radioUid];
        delete me.followed['_' + radioUid];
        me.followed.splice(radio._index, 1);
        GOOM.util.Get('/user/api/unfollow?radioUid=' + radioUid, function(r) {
            if(!r.success) {
                if(!handleUserStatus(r)) {
                    return;
                }
                return;
            }
            
            GOOM.UserRadios.Events.onChange.fire(r.radio, false);
        });
    },
    
    getFollow : function(radioUid) {
        return GOOM.UserRadios.followed['_' + radioUid];
    },
    
    handleUpdate : function(result) {
        var me = GOOM.UserRadios, radio;
        me.followed = [], me.created = [];
        if(result.success) {
            for(var i = 0, len = result.followed.length; i < len; i++) {
                radio = result.followed[i];
                if(!radio) {
                    continue;
                }
                radio._index = i;
                me.followed.push(radio);
                me.followed['_' + radio.uid] = radio;
            }

            for(i = 0, len = result.created.length; i < len; i++) {
                radio = result.created[i];
                if(!radio) {
                    continue;
                }
                radio._index = i;
                me.created.push(radio);
                me.created['_' + radio.uid] = radio;
            }
        }

        me.isUpdated = true;
        GOOM.UserRadios.Events.onReady.fire();
    },
    
    update : function() {
        GOOM.util.Get('/user/api/radios', GOOM.UserRadios.handleUpdate);
    }
}

GOOM.Navigation.Events.onPageReady.subscribe(function() {
    if(GOOM.UserRadios.isUpdated) {
        GOOM.UserRadios.Events.onReady.fire();
    }
});

GOOM.User.Events.onChange.subscribe(function(userObj) {
    if(userObj) {
        GOOM.UserRadios.update();
    } else {
        GOOM.UserRadios.isUpdated = true;
        GOOM.UserRadios.Events.onReady.fire();
    }
});

createNS('GOOM.Translate');

GOOM.Translate = {
    Events : { onChange : new GOOM.Event('G:Translate:onChange') },
    
    data : {},
    lang : false,
    update : function(data) {
        var me = GOOM.Translate;
        me.data = data;
        me.Events.onChange.fire();
    },
    
    changeLang : function(LangId) {
        
        //var script = document.createElement('Script')
        //script.src = "/"
        //script.type= "text/javascript";
        //document.head.appendChild('script')
    }
}

if(window.__text && __text.strings) {
    GOOM.Translate.data = __text.strings;
    GOOM.Translate.lang = __text.lang;
}

function _(id, args) {
    var str = GOOM.Translate.data[id];
    if(args && str) {
        str = replace(r, args);
    }
    if(!str) {
        str = id;
    }
    return str;
}


function jssocket_init() {
    GOOM.Talkback.init(document.getElementById("jsSocket"));
}

GOOM.Talkback = {
    msgTemplate  : {internal : '<span class="sayName clear"></span><span class="clear sayInit">%{body}</span>',
                    normal : '<span class="sayName clear">%{from}</span><span class="sayMsg">%{body}</span>'},

    nick : false,
    xmpp : {},

    lastMsgSend : false,
    prevRadio : false,
    connectRetry : 0,

    blacklistWords : [],
    isDisabled : false,

    init : function(flashObj) {
        var me = GOOM.Talkback;
        GOOM.Audio.Events.onRadioChange.subscribe(me.handleRadioChange);
        GOOM.User.Events.onChange.subscribe(function() {
            me.updateNick();
            me.xmpp.changeNick(me.nick);
        });
        
        me.updateNick();

        me.xmpp = GOOM.util.XMPP;
        me.xmpp.init({flashObj :  flashObj,
                       config : window.XMPP,
                       nick : me.nick});

        me.xmpp.addHandlers({onDisconnect : function() {
                                byId('talkbackSayIpt').disabled = true;
                                me.updateNick(true);
                                me.xmpp.changeNick(me.nick);

                                if(me.connectRetry < 3) {
                                  me.connectRetry++;
                                  setTimeout(function() {me.xmpp.connect();}, 1500);
                                }
                              },
                              onError   : me.handleError,
                              onMessage : me.handleMessage,
                              onLog     : me.handleLog,
                              onConnect : me.handleStart});
                     
        me.xmpp.connect();
    },

    handleLog : function() {},

    updateNick : function(isTaken) {
        var me = GOOM.Talkback,
            oldnick = me.nick;
           
        if(GOOM.User.isLoggedIn) {
            if(isTaken) {
                var number = parseInt(me.nick.replace(GOOM.User.username, ''), 10);
                me.nick = GOOM.User.username + (isNaN(number) ? 1 : (number + 1));
            } else {
                me.nick = GOOM.User.username;
            }
        } else {
            me.nick = 'guest_' + parseInt(Math.random() * Math.random() * 10000, 10);
        }
    },

    handleError : function(code, msg) {
        var me = GOOM.Talkback;
        if(code == 403) {
            me.updateNick(true);
            me.xmpp.changeNick(me.nick);
        }
    },

    handleRadioChange : function() {
        var me = GOOM.Talkback,
            curRadio = GOOM.Audio.currentRadioObj,
            hideTalkback = function() {
                byId('Talkback').style.display = 'none';
                byId('Talkback-alternate').style.display = 'block';
            },
            showTalkback = function() {
                byId('Talkback').style.display = 'block';
                byId('Talkback-alternate').style.display = 'none';
            };
        if(!curRadio || !curRadio.uid || (me.xmpp &&  !me.xmpp.isConnected()) ||
           (me.prevRadio && curRadio.uid == me.prevRadio.uid)) {
            return;
        }
        me.checkDisabled(curRadio.id, function() {
            if(!GOOM.Talkback.isDisabled) {
                showTalkback();
                byId('talkbackMsgList').innerHTML = '';
                me.prevRadio = curRadio;
                me.handleMessage(null, _('TALK_MSG_JOINING') + ' ' + curRadio.name);
                me.xmpp.joinRoom(window.ENV + '_' + curRadio.uid + '@conference.' + window.XMPP.servername);
                me.blacklistInit('/user/api/talkback-blacklist');
            } else {
                byId('Talkback-alternate').innerHTML = '<img src="' + window.getASSET() + '/radio/' + curRadio.id + '_talkback" />';
                hideTalkback();
            }
        });
    },
    
    handleStart : function(status) {
        if(!status) {
            //write out failed to connect
            return;
        }
        GOOM.Talkback.handleRadioChange();
        byId('talkbackSayIpt').disabled = false;
        byId('talkbackMsgList').innerHTML = '';
    },

    sendMessage : function(ipt) {
        var me = GOOM.Talkback;
        var msg = ipt.value;
        if(!msg || !me.xmpp.isConnected()) {
            return;
        }
        msg = msg.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
        if(msg == '') {
           return;
        }
        if(me.lastMsgSend) {
            var curTime = new Date().getTime();
            if(curTime - me.lastMsgSend < 2000) {
                me.handleMessage(null ,_('TALKBACK_PLEASE_NOSPAM'));
                return;
            }
        }

        if(me.blacklist(msg) == true) {
                me.handleMessage(null ,_('TALKBACK_PLEASE_BLACKLIST'));
                return;
        }

        me.lastMsgSend = new Date().getTime();
        ipt.value =  '';
        me.xmpp.message(msg);
    },

    sendMood : function(type) {
        var me = GOOM.Talkback;
        var songObj = GOOM.Audio.currentSongObj;
        if(!songObj || !songObj.title ||  songObj.type !== 'SONG' || !me.xmpp.isConnected()) {
            return;
        }

        if(me.lastMsgSend) {
            var curTime = new Date().getTime();
            if(curTime - me.lastMsgSend < 2000) {
                me.handleMessage(null ,_('TALKBACK_PLEASE_NOSPAM'));
                return;
            }
        }
        me.lastMsgSend = new Date().getTime();
        if(songObj.assetMediaId) {
            GOOM.util.Get('/playlist/api/' + ((type == 'like') ? 'like' : 'dislike') +
                           '-media?mediaId=' + songObj.assetMediaId, function(r){});
        }

        var msg = songObj.artist + ' - ' + songObj.title;
        msg = ((type == 'like') ? ':like: ' : ':dislike: ') + msg;
        me.xmpp.message(msg);
    },

    handleMessage : function(from, msg) {
        var me = GOOM.Talkback;
        var htmlList = byId('talkbackMsgList');
        var curMsgLen = htmlList.getElementsByTagName('li').length;

        if(msg.length > 99) {
            msg = msg.substring(0, 97) + '...';
        }
        msg = escapeHTML(msg);
        msg = msg.replace(':like:', '<span class="sayIcon Like"></span>')
                 .replace(':dislike:', '<span class="sayIcon Dislike"></span>');


        if(from && from == me.nick){
            from = _('TALKBACK_YOU');
        }

        var li = document.createElement('li');
        li.innerHTML = replace(!from ? me.msgTemplate.internal
                                        : me.msgTemplate.normal, {from : from,
                                                                   body : msg});
        if(curMsgLen + 1 > 12) {
            htmlList.removeChild(htmlList.lastChild);
        }
        htmlList.insertBefore(li, htmlList.firstChild);
        curMsgLen++;
    },

    blacklistInit : function(url) {
        GOOM.util.Request('GET', url, {
            success : function(obj) {
                GOOM.Talkback.blacklistWords = obj.words;
            }
        }, 2000);
    },

    blacklist : function(msg) {
      for(var i = 0; i < GOOM.Talkback.blacklistWords.length; i++) {
          if(msg.indexOf(GOOM.Talkback.blacklistWords[i]) != -1) {
              return true;
          }
      }

      return false;
    },

    checkDisabled : function(radioId, callback) {
        var id = (GOOM.Audio.currentRadioObj) ? GOOM.Audio.currentRadioObj.id : radioId;
        if(id) {
            GOOM.util.Request('GET', '/radio/api/talkback-disabled?id=' + id, {
                success : function(r) {
                    if(r.success) {
                        GOOM.Talkback.isDisabled = r.disabled;
                        if(callback) {
                            callback();
                        }
                    }
                }
            });
        }
    }
}

swfobject.embedSWF("/swf/jsSocket/JsSocket.swf", "jsSocket",
                   "0", "0", "9.0.0", '/swf/jsSocket/JsSocket.swf',
                   null,  null, {id : 'jsSocket'});
/* $Rev: 15928 $ */
GOOM.Haction = {
    actions : ['playRadio', 'playShow', 'showNote'],
    
    execute : function() {
        var hashObj = window.location.hash.replace('#', '').split('&');
        if(!hashObj.length) {
            return;
        }
        var haction = hashObj[0];
        if(haction.indexOf(GOOM.Navigation.NavID) == 0) {
            if(!hashObj[1]) {
                return;
            }
            haction = hashObj[1];
        }
        hashObj = haction.split('=');
        var value = hashObj[1];
        switch(hashObj[0]) {
        case 'showNote' :
            this.showNote(value);
            break;
        default : 
            return;
        }
    },
    
    showNote : function(action) {
        if(action == 'validate-user') {
            GOOM.site.Note.show('normal', _('VALIDATE_USER_SUCCESS'), true);
        } else if(action == 'reg-user' && GOOM.User.isLoggedIn) {
            GOOM.site.Note.show('normal', _('REGISTER_USER_SUCCESS').replace('%s', GOOM.User.username), true);
        }
    }
}

GOOM.Navigation.Events.onPageReady.subscribe(function() {
    setTimeout(function() { GOOM.Haction.execute();}, 0);
})

GOOM.PlayItemMgr = {
    currentEl : false,
    stop : function(){
        if(this.currentEl) {
            GOOM.PlayItem(this.currentEl);
            this.currentEl = false;
        }
    }
};

GOOM.PlayItem = (function() {
    var curEl, counterInterval, firstEvent = true;

    function restoreFlashNode(obj) {
        obj.innerHTML = '<img src="/img/asset_play.png"/>';
    }

    GOOM.Audio.Events.onPlaybackStop.subscribe(function() {
        if(curEl && firstEvent) {
            clearUp(curEl);
        }
        firstEvent = false;
    });

    GOOM.Audio.Events.onRadioChange.subscribe(function() {
        if(curEl) {
            clearUp(curEl);
        }
    });

    function clearUp(node) {
        try {
            clearInterval(counterInterval);

            var span = curEl.getElementsByTagName('span')[0];
            if(!span || !node) {
                return;
            }
            node.removeChild(span);
            var img = node.getElementsByTagName('img')[0]
            img.src = '/img/asset_play.png';
            node.style.width = '';
            node.isPlaying = false;
            GOOM.PlayItemMgr.currentEl = false;
        } catch(e) {}
    }

    function updateUI(newEl) {
        var image = '/img/asset_play.png';
        var isPlaying = newEl.isPlaying;

        if(curEl) {
            clearUp(curEl);
        }

        if(!GOOM.Audio.ready) {
            return;
        }
        firstEvent = false;
        try {
            if(!isPlaying) {
                image = '/img/asset_stop.png';
                GOOM.Audio.playSample(newEl.getAttribute('gdata') || newEl.gdata);

                newEl.isPlaying = true;
                newEl.style.width = '50px';

                var span = document.createElement('span');
                span.id = 'playingPreview';
                span.className = 'slider';
                span.innerHTML = '30';
                counterInterval = setInterval(function() {
                   var count = parseInt(span.innerHTML, 10);
                   if(count <= 1) {
                       clearUp(curEl);
                       return;
                   }
                   span.innerHTML = count - 1;
                }, 1000);
                newEl.appendChild(span);
                GOOM.PlayItemMgr.currentEl = newEl;
            } else {
                newEl.isPlaying = false;
                var mediaObj = GOOM.Audio.getMediaObj();
                //this should be fixed better as the type on show is 'radio' ...
                if(mediaObj && (mediaObj.type == 'asset' || (mediaObj.media && mediaObj.media.asset && mediaObj.media.asset.duration <= 30000))) {
                    GOOM.Audio.stop();
                    GOOM.PlayItemMgr.currentEl = false;
                }
            }
            newEl.getElementsByTagName('img')[0].src = image;
            curEl = newEl;
        } catch(e) {alert(e.message)}
    }

    return function(target, e) {
        if(e) {
            stopEvent(e);
        }
        updateUI(target);
    }
}())
createNS('GOOM.Components');

GOOM.Components = {
    
}/**
 * Provides a interface to the xmlHttpRequest object
 * Depend on having JSON_2.js either native or in script
 * @module Request
 * @namespace GOOM
 */

createNS('GOOM.util');

/**
 * Provides a interface to the xmlHttpRequest object
 * Depend on having JSON_2.js either native or in script
 * Example :
 *  var request = new GOOM.util.Request('GET',
 *                                    'http://goomradio.com/api/login',
 *                                     { success : function(data) {...},
 *                                       failure : function(code, event) {...}  },
 *                                     10000);
 *                                     request.abort();
 *
 * @class Request
 * @namespace GOOM.util.Request
 * @param {String} method GET or POST
 * @param {String} url
 * @param {Object} callbackObj
 * @param {int} timeout
 * @constructor
 */

GOOM.util.Request = function(method, url, callbackObj, timeout) {
  callbackObj = callbackObj || {};
  if(!method || !url) {
    return false;
  }
  var xmlHttpObj = null;
  try {
    if(window.XMLHttpRequest) {
      xmlHttpObj = new XMLHttpRequest();
    } else {
      xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
    }
  } catch(e) {
      return false;
    //throw e;
  }

  xmlHttpObj.open(method.toUpperCase(), url, true);
  if(method.toUpperCase() == 'POST') {
    xmlHttpObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  }
  xmlHttpObj.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
  xmlHttpObj.onreadystatechange = function() {
    if((xmlHttpObj.readyState == 4) && callbackObj.success) {
      if(xmlHttpObj.status == 200) {
        try {
            var result = callbackObj.rawText === true ? xmlHttpObj.responseText : JSON.parse(xmlHttpObj.responseText);
            callbackObj.success(result);
        } catch(e) {
          if(e.type == 'unexpected_token') {
              return;
          }
          if(callbackObj.failure) {
            callbackObj.failure(200, e);
          }
        }
      } else if(callbackObj.failure){
        callbackObj.failure(xmlHttpObj.status, null)
      }
    }
  }

  xmlHttpObj.send(callbackObj.postData || '');
  if(timeout) {
    setTimeout(function() {
        try {
            if(xmlHttpObj.readyState != 4) {
                xmlHttpObj.abort();
            }
        } catch(e) {}
    }, timeout);
  }
  /**
   * Aborts the request, and trigger on failure if its set in callbackObj
   * @method abort
   */
  this.abort = function() {
     xmlHttpObj.onreadystatechange = function() {};
     xmlHttpObj.abort();
  };
  /**
   * Gets the used xmlHttpRequest object
   * @method getXmlHttpRequest
   * @return {Native Object} xmlHttpRequest
   */
  this.getXmlHttpRequest = function() {
     return xmlHttpObj;
  }
}/* $Rev: 15928 $ */
createNS('GOOM.util');

GOOM.util.FormRequest = function(formEl, callbackObj) {
    var data = [], item = 0;
    
    for(var i = 0, len = formEl.elements.length; i < len; ++i) {
        var el = formEl.elements[i], param;
        
        if(el.disabled && !el.name) {
            continue;
        }
        param = encodeURIComponent(el.name) + '=' + encodeURIComponent(el.value);
        switch(el.type) {
            case 'radio':
            case 'checkbox':
                if(el.checked) {
                    data[item++] = param;
                }
                break;
            case 'file':
            case 'reset':
            case 'button':
            case 'submit':
            case undefined:
                // stub case for input type button elements.
                break;
            default:
                if(el.getAttribute('gtext') != el.value) {
                    data[item++] = param;
                }
        }
    }
    if(!callbackObj.postData) {
        callbackObj.postData = '';
    }
    if(callbackObj.postData.indexOf('&') != 0) {
        callbackObj.postData += '&';
    }
    callbackObj.postData += data.join('&');
    return new GOOM.util.Request('POST', formEl.action, callbackObj);
}
GOOM.util.Get = function(url, success, timeout) {
   new GOOM.util.Request('GET', url, {success: success}, timeout);
}/* $Rev: 15014 $ */

createNS('GOOM.util');

GOOM.util.DialogMgr = {
    dialogId : 0,
    curDialog : false,
    lastTriggerElement : {},
    handleEscKey : function(e) {
        handleEscKey(e, function() { GOOM.util.DialogMgr.close(); });
        removeEvent(document, 'keydown', GOOM.util.DialogMgr.handleEscKey);
    },
    handleMouseMove : function(e) {
        e = e || window.event;
        var dialogObj = GOOM.util.DialogMgr.curDialog,
            triggerEl = GOOM.util.DialogMgr.lastTriggerElement,
            related = (e.target) ? e.target : e.srcElement;

        try {
            if(triggerEl == related || containsNode(triggerEl, related)) {
                return;
            }
            if(containsNode(dialogObj.containerEl, related)) {
                return;
            }
        } catch(e) {
            return;
        }
        
        GOOM.util.DialogMgr.close();
        removeEvent(document, 'mousemove', GOOM.util.DialogMgr.handleMouseMove);
    },
    close : function(dialogObj) {
        var me = GOOM.util.DialogMgr,
            dialog = dialogObj || me.curDialog,
            select = document.getElementsByTagName('select');

        for(var i = 0, len = select.length; i < len; i++) {
            select[i].style.visibility = 'visible';
        }
        if(!dialog || !dialog.containerEl) {
            return;
        }

        window.onresize = null;

        if(byId('dialogMask')) { 
            byId('dialogMask').style.display = 'none';
        }
        var parentNode = dialog.containerEl.parentNode;
        if(parentNode) {
            parentNode.removeChild(dialog.containerEl);
        }
    },
    setCurDialog : function(dialogObj) {
        var me = GOOM.util.DialogMgr;
        me.close();
        me.curDialog = dialogObj;
    },
    getCurDialog : function(){
        return GOOM.util.DialogMgr.curDialog;
    }
};

GOOM.util.Dialog = function(options) {
    var dialogObj = {},
        loading = '<div style="height: 250px; background:url(/img/loading_big.gif) 190px 100px no-repeat" /></div>',
        template = '<div class="modalWrapper"><div class="topModal"><div class="closeContainer"><a href="#" onclick="GOOM.util.DialogMgr.close(); return false;" class="closeModal">close window</a></div></div><div class="mainModal clearfix"><div class="mainGradient clearfix"></div></div><div class="bottomModal"></div></div>',
        template_error = '<div class="modalWrapper errorWrapper"><div class="topModal"><div class="closeContainer"><a href="#" onclick="GOOM.util.DialogMgr.close(); return false;" class="closeModal">close window</a></div></div><div class="mainModal clearfix"><div class="mainGradient clearfix"></div></div><div class="bottomModal"></div></div>',
        overlay = '<div class="dropDown clearfix"><div class="dropDownArrow"></div><div class="dropDownContainer clearfix"></div></div>',
        menu = '<div class="dropDown clearfix"><div class="dropDownContainer clearfix"></div></div>';

        
    var containerEl = document.createElement('div');
    containerEl.style.position = 'absolute';
    if(options.width) {
        containerEl.style.width = options.width + 'px';
    }
    containerEl.className = "overlay";
    if(options.isModal && options.isError) {
        containerEl.innerHTML = template_error;
    } else if(options.isModal) {
        containerEl.innerHTML = template;
    } else if(options.isMenu) {
        containerEl.innerHTML = menu;
    } else {
        containerEl.innerHTML = overlay;
    }
    
    if(options.isNarrow) {
      addClass(containerEl, "overlayNarrow");
    }
    
    if(options.isModal) {
        dialogObj.contentEl = containerEl.getElementsByTagName('div')[4];
    } else if(options.isError) {
        dialogObj.contentEl = containerEl.getElementsByTagName('div')[4];
    } else if(options.isMenu) {
        dialogObj.contentEl = containerEl.getElementsByTagName('div')[0];
    } else {
        dialogObj.contentEl = containerEl.getElementsByTagName('div')[2];
        dialogObj.arrowEl = containerEl.getElementsByTagName('div')[1];
    }
    
    dialogObj.id = GOOM.util.DialogMgr.dialogId++;
    
    dialogObj.containerEl = containerEl;
    
    function updatePositionModale() {
        var maskEl = byId('dialogMask');
        if(maskEl) {
            maskEl.style.height = (getPageHeight() + 'px');
            maskEl.style.width =  (getPageWidth() + 'px');
            maskEl.style.display = 'block';
        }
        
        var addtop = 0;
        if(dialogObj.containerEl.offsetHeight > document.documentElement.clientHeight) {
            addtop = 100;
        }
        
        var scrollTop = document.documentElement.scrollTop;
        if(!scrollTop) {
            scrollTop = document.body.scrollTop;
        }
        
        dialogObj.containerEl.style.top = addtop + (scrollTop + document.documentElement.clientHeight/2 - (dialogObj.containerEl.offsetHeight/ 2))  + 'px';
        dialogObj.containerEl.style.left = (document.body.clientWidth/2 - (dialogObj.containerEl.offsetWidth/ 2)) + 'px';

    }
   
    function updatePositionOverlay(triggerEl, alignEl) {
       if(!triggerEl) {
           return;
       }
       YAHOO.use('node', function(Y) {
           var tPos = Y.get(triggerEl).getXY();
           if(alignEl) {
               var aPos =  Y.get(alignEl).getXY();
               dialogObj.containerEl.style.left = aPos[0] + 'px';
               if(dialogObj.arrowEl) {
                   dialogObj.arrowEl.style.width = '19px';
                   dialogObj.arrowEl.style.marginLeft = tPos[0] - aPos[0] + (triggerEl.offsetWidth / 2) - dialogObj.arrowEl.offsetWidth/2 + 'px';
               }
               dialogObj.containerEl.style.top = (tPos[1] + triggerEl.offsetHeight) + 'px';
               if(YAHOO && YAHOO.UA.ie && YAHOO.UA.ie < 8) {
                    if(dialogObj.arrowEl) {
                        dialogObj.arrowEl.style.marginRight = (dialogObj.containerEl.offsetWidth - 19 - (triggerEl.offsetWidth/ 2) - (dialogObj.arrowEl.offsetWidth/2)) + 'px';
                    }
                    dialogObj.containerEl.style.marginLeft = (-dialogObj.containerEl.offsetWidth/2) + 'px';
               }
           } else { 
               dialogObj.containerEl.style.left = (pos[0] + triggerEl.offsetWidth/2 - dialogObj.containerEl.offsetWidth/2)  + 'px';
               dialogObj.containerEl.style.top = (pos[1] + triggerEl.offsetWidth) + 'px';
           }
       });
   }
   
    function getPageHeight(){
        var height;
        if(document.body.scrollHeight > document.body.offsetHeight) {
            height = document.body.scrollHeight;
        } else {
            height = document.body.offsetHeight > 0 ? document.body.offsetHeight : 
                                                     (window.innerHeight + window.scrollMaxY);
        }
        var container = byId('container');
        if(container && container.scrollHeight > height) {
            height=container.scrollHeight;
        }
        
        if(height < screen.height) {
            height = screen.height;
        }
        return height;
    }
    
    function getPageWidth() {
        var width;
        if(document.body.scrollWidth > document.body.offsetWidth) {
            width = document.body.scrollWidth;
        } else {
            width = document.body.offsetWidth > 0 ? document.body.offsetWidth : 
                                                     (window.innerWidth + window.scrollMaxX);
        }
        var container = byId('container');
        if (container && container.scrollWidth > width) {
            width=container.scrollWidth;
        }
        return width;
    }
  
    this.open = function(triggerEl, alignEl) {

        GOOM.util.DialogMgr.lastTriggerElement = triggerEl;

        addEvent(document, 'keydown', GOOM.util.DialogMgr.handleEscKey);
        
        GOOM.util.DialogMgr.setCurDialog(dialogObj);
        document.body.appendChild(dialogObj.containerEl);

        addEvent(document, 'mousemove', GOOM.util.DialogMgr.handleMouseMove);
        
        if(options.isModal) {
            var select = document.getElementsByTagName('select');
            for(var i = 0, len = select.length; i < len; i++) {
                select[i].style.visibility = 'hidden';
            }
            select = dialogObj.containerEl.getElementsByTagName('select');
            for(i = 0, len = select.length; i < len; i++) {
                select[i].style.visibility = 'visible';
            }
            var maskEl = byId('dialogMask');
            if(!maskEl) { 
                maskEl = document.createElement('div');
                maskEl.className = 'mask';
                maskEl.id = 'dialogMask';
                maskEl.onclick = function(){GOOM.util.DialogMgr.close()};
                document.body.appendChild(maskEl); 
            } else {
                maskEl.style.display = 'block';
            }
            window.onresize = updatePositionModale;
            updatePositionModale();
        } else {
            updatePositionOverlay(triggerEl, alignEl);
            window.onresize = function() {updatePositionOverlay(triggerEl, alignEl);};
        }
        var inputs = dialogObj.contentEl.getElementsByTagName('input');
        for(i = 0, len = inputs.length; i < len; ++i) {
            var input = inputs[i];
            if(input.type == 'text') {
                input.focus();
                break;
            }
        }
    };
    
    this.setHTML = function(html, noRender) {
        dialogObj.contentEl.innerHTML = html;
        if(!noRender) {
            GOOM.UI.update(dialogObj.contentEl);
        }
    };
    
    this.loading = function() {
        dialogObj.contentEl.innerHTML = loading;
    },
    
    this.close = function(){ 
        GOOM.util.DialogMgr.close(dialogObj);
    };
    
    this.getContainer = function() {
        return dialogObj.contentEl;
    };
    
    this.isOpen = function() {
        return dialogObj.id === GOOM.util.DialogMgr.getCurDialog().id;
    };
}

/* $Rev$ */

GOOM.util.MenuMgr = {
    Events : {},
    menuId : 0,
    curMenu : false,
    lastTriggerElement : {},
    handleEscKey : function(e) {
        handleEscKey(e, function() { GOOM.util.MenuMgr.close(); });
        removeEvent(document, 'keydown', GOOM.util.MenuMgr.handleEscKey);
    },
    handleMouseMove : function(e) {
        e = e || window.event;
        var menuObj = GOOM.util.MenuMgr.curMenu,
            triggerEl = GOOM.util.MenuMgr.lastTriggerElement,
            related = (e.target) ? e.target : e.srcElement;

        try {
            if(triggerEl == related || containsNode(triggerEl, related)) {
                return;
            }
            if(containsNode(menuObj.containerEl, related)) {
                return;
            }
        } catch(e) {
            return;
        }
        GOOM.util.MenuMgr.close();
        removeEvent(document, 'mousemove', GOOM.util.MenuMgr.handleMouseMove);
    },
    close : function(menuObj) {
        var me = GOOM.util.MenuMgr,
            menu = menuObj || me.curMenu,
            select = document.getElementsByTagName('select');

        for(var i = 0, len = select.length; i < len; ++i) {
            select[i].style.visibility = 'visible';
        }

        if(!menu || !menu.containerEl) {
            return;
        }

        window.onresize = null;

        var parentNode = menu.containerEl.parentNode;

        if(parentNode) {
            parentNode.removeChild(menu.containerEl);
        }
        if(menu.closeFns) {
            for (i = 0, len = menu.closeFns.length; i < len; ++i) {
                menu.closeFns[i]();
            }
        }
    },
    setCurMenu : function(menuObj) {
        var me = GOOM.util.MenuMgr;
        me.close();
        me.curMenu = menuObj;
    },

    getCurMenu : function(){
        return GOOM.util.MenuMgr.curMenu;
    },

    onEntryOver : function(el) {
        addClass(el, 'selected');
    },

    onEntryOut : function(el) {
        removeClass(el, 'selected');
    },

    onSubentryOver : function(el) {
        addClass(el.children[0], 'selected');
        el.children[1].style.display='block';
    },

    onSubentryOut : function(el) {
        el.children[1].style.display='none';
        removeClass(el.children[0], 'selected');
    }

};

GOOM.util.Menu = function(options) {
    var menuObj = {},
        template = {
            container : '<div class="span-2 searchOverlay">' +
                            '<ul class="navSection">' +
                                '%{entries}' +
                            '</ul>' +
                        '</div>',
            menuEntry : '<li class="%{className}">' +
                            '<a id="%{id}" href="%{href}" role="menuitem" aria-haspopup="true" tabindex="-1" onclick="%{onclick}" onmouseover="GOOM.util.MenuMgr.onEntryOver(this);" onmouseout="GOOM.util.MenuMgr.onEntryOut(this);">' +
                                '%{image}' +
                                '%{label}' +
                            '</a>' +
                        '</li>',
            submenuEntry : '<li id="navUserRadiosCreated" class="%{className}" onmouseover="GOOM.util.MenuMgr.onSubentryOver(this);" onmouseout="GOOM.util.MenuMgr.onSubentryOut(this);">' +
                               '<a href="#" onclick="%{onclick}">' +
                                   '<em>' +
                                       '%{label}' +
                                   '</em>' +
                               '</a>' +
                               '<div id="submenu" style="display:none;">' +
                                   '<div>' +
                                       '<ul class="navDashboard">' +
                                           '%{content}' +
                                       '</ul>' +
                                   '</div>' +
                               '</div>' +
                           '</li>',
            submenuEntryContent : '<li id="navUserRadiosCreated">' +
                                      '<a href="%{href}" onclick="%{onclick}" onmouseover="GOOM.util.MenuMgr.onEntryOver(this);" onmouseout="GOOM.util.MenuMgr.onEntryOut(this);">%{label}</a>' +
                                  '</li>'
        },
        containerEl = document.createElement('div');
    if (options) {
        var openFns = options.openFns,
            closeFns = options.closeFns;
    }

    containerEl.style.position = 'absolute';
    if(options && options.width) {
        containerEl.style.width = options.width + 'px';
    }
    containerEl.className = "overlay";

    function updatePositionOverlay(triggerEl, alignEl) {
       if(!triggerEl) {
           return;
       }
       YAHOO.use('node', function(Y) {
           var tPos = Y.get(triggerEl).getXY();
           if(alignEl) {
               var aPos =  Y.get(alignEl).getXY();
               menuObj.containerEl.style.left = aPos[0] + 'px';
               if(menuObj.arrowEl) {
                   menuObj.arrowEl.style.width = '19px';
                   menuObj.arrowEl.style.marginLeft = tPos[0] - aPos[0] + (triggerEl.offsetWidth / 2) - menuObj.arrowEl.offsetWidth/2 + 'px';
               }
               menuObj.containerEl.style.top = (tPos[1] + triggerEl.offsetHeight) + 'px';
               if(YAHOO && YAHOO.UA.ie && YAHOO.UA.ie < 8) {
                    if(menuObj.arrowEl) {
                        menuObj.arrowEl.style.marginRight = (menuObj.containerEl.offsetWidth - 19 - (triggerEl.offsetWidth/ 2) - (menuObj.arrowEl.offsetWidth/2)) + 'px';
                    }
                    menuObj.containerEl.style.marginLeft = (-menuObj.containerEl.offsetWidth/2) + 'px';
               }
           } else {
               menuObj.containerEl.style.left = (triggerEl.offsetWidth/2 - menuObj.containerEl.offsetWidth/2)  + 'px';
               menuObj.containerEl.style.top = (triggerEl.offsetWidth) + 'px';
           }
       });
    }

    this.setContents = function(contents) {
        var entries = '';
        for(var i = 0, entry = '', c = contents, len = c.length; i < len; ++i, entry = '') {
            if(c[i].content) {
                for(var j = 0, len2 = c[i].content.length; j < len2; ++j) {
                    entry += replace(template.submenuEntryContent,
                                     {href  : c[i].content[j].href,
                                      label : c[i].content[j].label,
                                      onclick : (!c[i].content[j].siteId || c[i].content[j].siteId == SITE_ID) ?
                                                 'GOOM.Navigation.load(this.href); return false;' :
                                                 'GOOM.site.Navigation.switchSite(\'' + DOMAIN_PREFIX + SITES_ARRAY[c[i].content[j].siteId].domain + '\', \'' + c[i].content[j].href + '\', GOOM.Audio.currentRadioObj.id); return false;'});
                }
                entries += replace(template.submenuEntry,
                                   {label     : c[i].label,
                                    className : (c[i].className) ? c[i].className : '',
                                    onclick   : (c[i].onclick) ? c[i].onclick : 'return false;',
                                    content : entry});
            } else {
                entries += replace(template.menuEntry,
                                   {image     : (c[i].image) ? '<img src="' + c[i].image + '"/>' : '',
                                    label     : c[i].label,
                                    href      : c[i].href,
                                    onclick   : (c[i].onclick) ? c[i].onclick : 'return false;',
                                    className : (c[i].className) ? c[i].className : ''});
            }
        }
        menuObj.id = GOOM.util.MenuMgr.menuId++;
        menuObj.containerEl = containerEl;
        menuObj.containerEl.innerHTML = replace(template.container, {entries : entries});
        menuObj.contentEl = containerEl.getElementsByTagName('div')[0];
        menuObj.closeFns = closeFns;
    };

    this.open = function(triggerEl, alignEl) {

        GOOM.util.MenuMgr.lastTriggerElement = triggerEl;

        addEvent(document, 'keydown', GOOM.util.MenuMgr.handleEscKey);

        addEvent(document, 'mousemove', GOOM.util.MenuMgr.handleMouseMove);

        GOOM.util.MenuMgr.setCurMenu(menuObj);
        document.body.appendChild(menuObj.containerEl);

        updatePositionOverlay(triggerEl, alignEl);
        window.onresize = function() {updatePositionOverlay(triggerEl, alignEl);};
        if(openFns) {
            for(var i = 0, len = openFns.length; i < len; ++i) {
                openFns[i]();
            }
        }
    };

    this.close = function(){
        GOOM.util.MenuMgr.close(menuObj);
    };

    this.isOpen = function() {
        return menuObj.id === GOOM.util.MenuMgr.getCurMenu().id;
    };
}/* $Rev: 16019 $ */

createNS('GOOM.util');

/**
 *  Container for holder callback function 
 *  for the uploadFile method
 *  @private
 *  @property _uploadFileCall
 *  @see uploadFile
 */
GOOM.util.FileUploadStore = {};

/**
 *  File upload function
 */
GOOM.util.FileUpload = function(el, url, fn, queryArray, method) {
    
        var formEl = el;
        while(formEl) {
            if(formEl && formEl.tagName.toLowerCase() == 'form') {
                break;
            }
            formEl = formEl.parentNode;
        }
        
        el.parentNode.getElementsByTagName('input')[1].value = el.value;
        
        var count = GOOM.util.FileUpload.count;
        var inputTemplate = '<input type="hidden" name="%{name}" value="%{value}"/>'; 
        var queryHTML = [];
        if(queryArray) {
            for(var i = 0, len = queryArray.length; i < len; ++i) {
                queryHTML.push(replace(inputTemplate, { name : queryArray[i].name,
                                                        value : queryArray[i].value }));
            }
        }
        
        queryHTML.push(replace(inputTemplate, { name : 'json_function',
                                                value : 'GOOM.util.FileUploadStore.fn_' + count}));
    
        var queryEl = document.createElement('div');
        queryEl.innerHTML = queryHTML.join('');
    
        var clone = formEl.cloneNode(true);
        
        var txt = formEl.getElementsByTagName('textarea'),
            clonetxt = clone.getElementsByTagName('textarea');
        
        for(i = 0, len = txt.length; i < len; ++i) {
            clonetxt[i].value = txt[i].value;
        }
        
        var select = formEl.getElementsByTagName('select'),
            cloneSelect = clone.getElementsByTagName('select');
        
        for(i = 0, len = select.length; i < len; ++i) {
            cloneSelect[i].value = select[i].value; 
        }
        
        var elements = [];
        for(i = 0, len = formEl.elements.length; i < len; ++i) {
            if(formEl.elements[i] !== el) {
                if(formEl.elements[i].tagName.toLowerCase() == 'fieldset') {
                    continue;
                }
                formEl.elements[i].disabled = true;
                elements.push(formEl.elements[i]);
            } else {
                formEl.elements[i].disabled = false;
            }
            
        }
        
        var container = document.createElement('div');
        container.style.display = "none";
        container.id = "uploadFile_container_" + count;
      
        document.body.appendChild(container);
      
        var iframeName = 'uploadIframe_' + count;
        try {
            var iframe = document.createElement('<iframe name="' + iframeName+ '>');
        } catch (e) {
            iframe = document.createElement('iframe');
        }
        iframe.setAttribute('name', iframeName);
        container.appendChild(iframe);
       
        formEl.target = iframeName;
        formEl.setAttribute((_isIE && !document.documentMode) ? 'encoding' : 'enctype', 'multipart/form-data');
        
        formEl.method = (method || 'POST');
        formEl.action = url;
        formEl.appendChild(queryEl);
        
        //doing a bit of house cleaning
        GOOM.util.FileUploadStore['fn_' + count] = function(data) {
            enableFields(formEl.elements);
            container.parentNode.removeChild(container);
            GOOM.util.FileUploadStore['fn_' + count] = null;
            fn(data);
        }
        formEl.submit();
        
        formEl.parentNode.replaceChild(clone, formEl);
        GOOM.util.FileUpload.count++;
}

GOOM.util.FileUpload.count = 1;

GOOM.util.FatalMsg = function(options) {
    options.title = options.title || _('FATAL_MSG_TITLE');
    var template = '<div><h2 class="titleFatal">%{title}</h2><p>%{description}</p><form class="modalForm"><fieldset><legend></legend><div class="containerSubmit"><input onclick="GOOM.util.DialogMgr.close(); return false;" gtype="button" class="clear button standard" value="%{ok}" type="submit"></div></fieldset></form></div>';
    var html = replace(template,{ description : options.message, title : options.title, ok : _('OKAY')});
    var dialog = new GOOM.util.Dialog({isError: true, isModal : true, isNarrow : true});
    
    dialog.setHTML(html);
    dialog.open();
}
GOOM.util.Paginator = function(total, limit, offset, range){
    total = parseInt(total, 10);
    limit = parseInt(limit, 10);
    offset = parseInt(offset, 10);
    range = parseInt(range, 10);

    var totalPages = Math.ceil(total/limit);
    if (totalPages <= 0){
        return;
    }

    var curPage = Math.ceil(offset / limit);

    var hasNext = (offset + limit < total) ? Math.min(offset + limit, total) : false;
    var hasPrev = (curPage > 0) ? Math.max(offset - limit + 1, 0) : false;

    var startPage;
    if (curPage <= range) {
        startPage = 0;
    } else if (curPage + range < totalPages){
        startPage = curPage - range;
    } else {
        startPage = ( totalPages - range - range - 1 > 0 ) ? totalPages - range - range - 1 : 0;
    }

    var totalRange = (range + range + 1) < totalPages ? (range + range + 1) : totalPages;

    var pageList = [];
    for (var i = 0; i < totalRange; i++) {
        pageList.push({ 'pageNumber' : i + startPage + 1,
                        'selected'   : i + startPage == curPage,
                        'offset'     : Math.max((i + startPage) * limit, 0) });
    }
    
    var writeFn = function(elTarget, callFn) {
        var q, i, pagerHTML = [];
        
        if(hasPrev) {
            pagerHTML.push('<a class="smalllinkpager leftSlide" offset="' + (hasPrev - 1) +'" href="#"><img src="/img/left.png" alt="previous page"></a>&nbsp;')
        }
        for(q = 0; q < pageList.length; q++) {
            curPage = pageList[q];
            if(curPage.selected) {
                pagerHTML.push('<strong class="active">' + curPage.pageNumber + '</strong>');
            } else {
                pagerHTML.push(replace('<a offset="%{offset}" href="#">%{page}</a>', { page : curPage.pageNumber, offset : curPage.offset}));
            }
        }
        if(hasNext) {
            pagerHTML.push('<a class="smalllinkpager rightSlide" offset="' + hasNext + '" href="#"><img src="/img/rightexplorer.png" alt="next page"></a>&nbsp;')
        }
        
        elTarget.innerHTML = pagerHTML.join('');
        var ahrefs = elTarget.getElementsByTagName('a');
        for(i = 0; i < ahrefs.length; i++) {
            ahrefs[i].onclick= function(){ callFn(this.getAttribute('offset')); return false;} 
        }
    }
    
    return {
        hasNext : hasNext,
        hasPrev : hasPrev,
        list : pageList,
        write : writeFn
    }
}/* $Id$ */
createNS('GOOM.util');

GOOM.util.Form = {
    oldValue : '',
    userHasLogo : false,
    userHasProfile : false,
    previewImagesRequestDone : false,

    defaultFields : function(formEl) {
        if(!formEl) {
            return;
        }
        var elements = formEl.elements;
        for(var i = 0, len = elements.length; i < len; ++i) {
            var el = elements[i];
            el.onblur = this.fieldBlur(el);
            el.onfocus = this.fieldFocus(el, el.title);
        }
    },

    fieldFocus : function(el) {
        if(el.value == el.title) {
            el.value = '';
            removeClass(el, 'inputTxtGrey');
            addClass(el, 'inputTxtBlack');
        }
    },

    fieldBlur : function(el) {
        if(el.value == '') {
            removeClass(el, 'inputTxtBlack');
            addClass(el, 'inputTxtGrey');
            el.value = el.title;
        }
    },

    changePreviewImages : function(logoEl, profileEl, sourceEl, radioUid) {
        var logoPath = window.getASSET() + '/theme/' + sourceEl.value + '_%{type}/t8';
        if (!this.previewImagesRequestDone) {
            if (radioUid) {
                GOOM.util.Request('GET', '/radio/api/has-logo-profile?uid=' + radioUid,
                    { success : function callback(result) {
                                    GOOM.util.Form.userHasLogo    = result.hasLogo;
                                    GOOM.util.Form.userHasProfile = result.hasProfile;
                                    if (!result.hasLogo) {
                                        logoEl.src = replace(logoPath, {type : 'logo'});
                                    }
                                    if (!result.hasProfile) {
                                        profileEl.src = replace(logoPath, {type : 'profile'});
                                    }
                                    GOOM.util.Form.previewImagesRequestDone = true;
                                }
                    });
            } else {
                if (!this.userHasLogo) {
                    logoEl.src = replace(logoPath, {type : 'logo'});
                }
                if (!this.userHasProfile) {
                    profileEl.src = replace(logoPath, {type : 'profile'});
                }
            }
        } else {
            if (!this.userHasLogo) {
                logoEl.src = replace(logoPath, {type : 'logo'});
            }
            if (!this.userHasProfile) {
                profileEl.src = replace(logoPath, {type : 'profile'});
            }
        }
    }

}
GOOM.util.Base64 = {
	// private property
	_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
 
	// public method for encoding
	encode : function (input) {
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;
 
		input = GOOM.util.Base64._utf8_encode(input);
 
		while (i < input.length) {
 
			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);
 
			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;
 
			if (isNaN(chr2)) {
				enc3 = enc4 = 64;
			} else if (isNaN(chr3)) {
				enc4 = 64;
			}
 
			output = output +
			this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
			this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
 
		}
 
		return output;
	},
 
	// public method for decoding
	decode : function (input) {
		var output = "";
		var chr1, chr2, chr3;
		var enc1, enc2, enc3, enc4;
		var i = 0;
 
		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
 
		while (i < input.length) {
 
			enc1 = this._keyStr.indexOf(input.charAt(i++));
			enc2 = this._keyStr.indexOf(input.charAt(i++));
			enc3 = this._keyStr.indexOf(input.charAt(i++));
			enc4 = this._keyStr.indexOf(input.charAt(i++));
 
			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;
 
			output = output + String.fromCharCode(chr1);
 
			if (enc3 != 64) {
				output = output + String.fromCharCode(chr2);
			}
			if (enc4 != 64) {
				output = output + String.fromCharCode(chr3);
			}
 
		}
 
		output = GOOM.util.Base64._utf8_decode(output);
 
		return output;
 
	},
 
	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	},
 
	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 
		}
 
		return string;
	}
 
}

GOOM.util.XMPP = {
  _server   : null,
  _port     : 0,
  _host     : null,
  _nick     : null,
  _room     : null,

  _jssocket : null,
  _status   : 0,

  _connected : false,

  _connectCb    : null,
  _disconnectCb : null,
  _messageCb    : null,
  _logCb        : null,
  _errorCb      : null,

  _id : 1,

  _timer : null,

  init : function(opt) {
    var me = GOOM.util.XMPP;
    me._jssocket = opt.flashObj;
    me._host     = opt.config.host;
    me._port     = opt.config.port;
    me._server   = opt.config.servername;
    me._nick     = opt.nick;

    me._jid = 'user' + Math.round(Math.random() * 1000000) + '@' + me._server;

    me._jssocket.setCallBack("connect",    "GOOM.util.XMPP._connect");
    me._jssocket.setCallBack("disconnect", "GOOM.util.XMPP._disconnect");
    me._jssocket.setCallBack("ioerror",    "GOOM.util.XMPP._ioError");
    me._jssocket.setCallBack("recieve",    "GOOM.util.XMPP._receive");
  },

  connect : function() {
    GOOM.util.XMPP._jssocket.connect(GOOM.util.XMPP._host, GOOM.util.XMPP._port);
  },

  isConnected : function() {
      return GOOM.util.XMPP.connected;
  },

  addHandlers : function(opt) {
      GOOM.util.XMPP._disconnectCb = opt.onDisconnect || false;
      GOOM.util.XMPP._messageCb    = opt.onMessage    || false;
      GOOM.util.XMPP._logCb        = opt.onLog        || false;
      GOOM.util.XMPP._connectCb    = opt.onConnect    || false;
      GOOM.util.XMPP._errorCb      = opt.onError      || false;
  },

  _log : function(msg) {
    if(GOOM.util.XMPP._logCb) {
      GOOM.util.XMPP._logCb(msg);
    }
  },

  _connect : function() {
    GOOM.util.XMPP._log("Socket Connected");
    GOOM.util.XMPP.connected = true;
    //note issue with php 
    GOOM.util.XMPP.write("<" + "?xml version='1.0' ?><stream:stream to='" + GOOM.util.XMPP._server + "' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>");

    GOOM.util.XMPP._timer = setInterval(function() { GOOM.util.XMPP.write("  "); }, 10000);
    GOOM.util.XMPP._status = 0;
  },

  _disconnect : function() {
    GOOM.util.XMPP._log("Socket Closed");
    GOOM.util.XMPP.connected = false;
    
    if(GOOM.util.XMPP._timer) {
      clearInterval(GOOM.util.XMPP._timer);
      GOOM.util.XMPP._timer = null;
    }
    if(GOOM.util.XMPP._disconnectCb) {
      GOOM.util.XMPP._disconnectCb();
    }

    GOOM.util.XMPP._room = null;
  },

  _ioError : function() {
    GOOM.util.XMPP._log("There was an error connecting");

    if(GOOM.util.XMPP._connectCb) {
      GOOM.util.XMPP._connectCb(false);
    }
  },

  _receive : function(msg) {
    GOOM.util.XMPP._log("READ: " + msg);

    var jid = GOOM.util.XMPP._findJID(msg);
    if(jid)
      GOOM.util.XMPP._jid = jid;

    switch(GOOM.util.XMPP._status) {
      case 0:
        GOOM.util.XMPP.write("<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='ANONYMOUS'/>");
        GOOM.util.XMPP._status++;
        break;

      case 1:
        GOOM.util.XMPP.write("<stream:stream to='" + GOOM.util.XMPP._server + "' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>");
        GOOM.util.XMPP._status++;
        break;

      case 2:
        GOOM.util.XMPP.write("<iq type='set' id='sd" + (GOOM.util.XMPP._id++) + "'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><resource>" + GOOM.util.XMPP._nick + "</resource></bind></iq>");
        GOOM.util.XMPP.write("<iq type='set' id='sd" + (GOOM.util.XMPP._id++) + "' to='" + GOOM.util.XMPP._server + "'><session xmlns='urn:ietf:params:xml:ns:xmpp-session' /></iq>");
        GOOM.util.XMPP._status++;
        break;

      case 3:
        if(GOOM.util.XMPP._connectCb) {
          GOOM.util.XMPP._connectCb(true);
        }
        GOOM.util.XMPP._status++;
        break;

      case 4:
        GOOM.util.XMPP._parseMessage(msg);
        break;
    }
  },

  _findJID : function(msg) {
    var a = GOOM.util.XMPP._parseXML(msg);

    for(var i=0; i<a.length; i++) {
      if(a[i].tag == 'iq') {
        var b = a[i].children;
        for(var j=0; j<b.length; j++) {
          if(b[j].tag == 'bind') {
            b = b[j].children;
            for(var j=0; j<b.length; j++) {
              if(b[j].tag == 'jid') {
                return b[j].content;
              }
            }
          }
        }
      }
    }
  },

  _parseXML : function(msg) {
    if(msg.indexOf('<') == -1)
      return;

    var a = [];

    var p = msg.split('<');
    for(var i = 0; i < p.length; i++) {
      if(p[i] == '') {
        continue;
      }
      
      var n = GOOM.util.XMPP._parseMessageValidate(p, i);
      if(n != null) {
        a.push(n.data);
        i = n.i;
      }
    }

    return a;
  },

  _parseMessage : function(msg) {
    var a = GOOM.util.XMPP._parseXML(msg);
    if(!a)
      return;

    for(var i = 0; i<a.length; i++) {
      switch(a[i].tag) {
        case 'presence':
          GOOM.util.XMPP._parsePresence(a[i]);
          break;

        case 'message':
          GOOM.util.XMPP._parseMessageSingle(a[i]);
          break;

        default:
          break;
      }
    }
  },

  _parsePresence : function(c) {
    for(var i=0; i < c.children.length; i++) {
      if(c.children[i].tag == 'error') {
        c = c.children[i];

        var code = null;
        var message = null;

        for(var i=0; i < c.children.length; i++) {
          if(c.children[i].tag == 'text') {
            message = c.children[i].content;
            break;
          }
        }

        for(i=0; i < c.attr.length; i++) {
          if(c.attr[i].key == 'code') {
            code = c.attr[i].value;
            break;
          }
        }

        if(code && GOOM.util.XMPP._errorCb)
          GOOM.util.XMPP._errorCb(code, message);

        break;
      }
    }
  },

  _parseMessageSingle : function(c) {
    for(var i=0; i < c.children.length; i++) {
      if(c.children[i].tag == 'body') {
        var body = c.children[i].content;

        for(i=0; i < c.attr.length; i++) {
          if(c.attr[i].key == 'from') {
            if(c.attr[i].value.indexOf('/') != -1 && GOOM.util.XMPP._messageCb != null) {
              GOOM.util.XMPP._messageCb(c.attr[i].value.substring(c.attr[i].value.indexOf('/') + 1), body);
            }

            break;
          }
        }

        break;
      }
    }
  },

  _parseMessageValidate : function(p, i) {
    var pos = p[i].indexOf('>');
    if(pos == -1) {
      return;
    }
    var tagattr = p[i].substring(0, pos);
    if(tagattr[0] == '/') {
      return;
    }
    var content = p[i].substring(pos + 1);

    var tag = '';
    var attrs = '';

    if(tagattr.indexOf('\n') != -1) {
      tag = tagattr.substring(0, tagattr.indexOf('\n')).replace(/^\s*/, "").replace(/\s*$/, "");
      attr = tagattr.substring(tagattr.indexOf('\n')).replace(/^\s*/, "").replace(/\s*$/, "");
    }

    if(tagattr.indexOf(' ') != -1) {
      tag = tagattr.substring(0, tagattr.indexOf(' ')).replace(/^\s*/, "").replace(/\s*$/, "");
      attr = tagattr.substring(tagattr.indexOf(' ')).replace(/^\s*/, "").replace(/\s*$/, "");
    }

    if(tagattr.indexOf('\t') != -1) {
      tag = tagattr.substring(0, tagattr.indexOf('\t')).replace(/^\s*/, "").replace(/\s*$/, "");
      attr = tagattr.substring(tagattr.indexOf('\t')).replace(/^\s*/, "").replace(/\s*$/, "");
    }

    if(tag == '') {
      tag = tagattr.replace(/^\s*/, "").replace(/\s*$/, "");
    }
    
    var complete = false;
    if((attr != '' && attr[attr.length - 1] == '/') || tag[tag.length -1] == '/') {
      complete = true;
    }

    // FIXME: escape of tag && content
    var ret = { tag : tag , attr : [], children : [], content : GOOM.util.XMPP._unescape(content) };

    if(attr != '') {
      var a = [];

      while(attr != '') {
        if(attr.indexOf('=') == -1)
          break;

        var key = attr.substring(0, attr.indexOf('=')).replace(/^\s*/, "").replace(/\s*$/, "");
        attr = attr.substring(attr.indexOf('=') + 1);

        var d= ' ';

        if(attr[0] == '"') {
          d='"';
          attr = attr.substring(1);
        } else if(attr[0] == '\'') {
          d='\'';
          attr = attr.substring(1);
        }

        var value = '';

        if(attr.indexOf(d) != -1) {
          value = attr.substring(0, attr.indexOf(d));
          attr = attr.substring(attr.indexOf(d));

          if(d != ' ')
            attr = attr.substring(1);
        } else {
          value = attr;
          attr = '';
        }

        a.push({ key: key, value: GOOM.util.XMPP._unescape(value) });
      }

      ret.attr = a;
    }

    if(complete == false) {
      for(i++; i < p.length; i++) {
        if(p[i].indexOf('/' + tag) == 0)
          break;

        var n = GOOM.util.XMPP._parseMessageValidate(p, i);
        if(n != null) {
          ret.children.push(n.data);
          i = n.i;
        }
      }
    }
    
    return { data : ret, i : i};
  },

  _escape: function(str) {
    return str.replace(/&/gi, '&amp;')
              .replace(/'/gi, '&apos;')
              .replace(/"/gi, '&quot;')
              .replace(/</gi, '&lt;')
              .replace(/>/gi, '&gt;');
  },

  _unescape: function(str) {
    return str.replace(/&apos;/gi, '\'')
              .replace(/&quot;/gi, '"')
              .replace(/&amp;/gi,  '&')
              .replace(/&lt;/gi,   '<')
              .replace(/&gt;/gi,   '>');
  },

  joinRoom : function(room, password) {
    if(GOOM.util.XMPP._room) {
      if(GOOM.util.XMPP._room == room) {
        return;
      }
      GOOM.util.XMPP.leaveRoom();
    }
    
    GOOM.util.XMPP.write("<presence to='" + room + "/" + GOOM.util.XMPP._nick + "'>" +
                   "<x xmlns='http://jabber.org/protocol/muc'/></presence>");

    GOOM.util.XMPP._room = room;
  },

  leaveRoom : function() {
    if(!GOOM.util.XMPP._room) {
      return;
    }
    GOOM.util.XMPP.write("<presence from='" + GOOM.util.XMPP._jid + "' to='" + GOOM.util.XMPP._room + "/" + GOOM.util.XMPP._nick + "' type='unavailable' />");
    GOOM.util.XMPP._room = null;
  },

  changeNick : function(nick) {
    GOOM.util.XMPP._nick = nick;
    if(!GOOM.util.XMPP._room) {
      return;
    }
    GOOM.util.XMPP.write("<presence to='" + GOOM.util.XMPP._room + "/" + nick + "' from='" + GOOM.util.XMPP._jid + "' />");
  },

  message : function(message) {
    GOOM.util.XMPP.messageGeneric(GOOM.util.XMPP._jid,
                                  GOOM.util.XMPP._room,
                                  "groupchat",
                                  message);
  },

  messageGeneric : function(from, to, type, body) {
    GOOM.util.XMPP.write('<message ' +
                   (from != null ? 'from="'    + GOOM.util.XMPP._escape(from) + '" ' : '') +
                   (to   != null ? 'to="'      + GOOM.util.XMPP._escape(to)   + '" ' : '') +
                   (type != null ? 'type="'    + GOOM.util.XMPP._escape(type) + '" ' : '') +
                   '>' +
                   (body != null ? '<body>'    + GOOM.util.XMPP._escape(body) + '</body>' : '') +
                   '</message>');
  },

  write : function(msg) {
    GOOM.util.XMPP._log('WRITE: ' + msg);
    GOOM.util.XMPP._jssocket.write(msg);
  }
}

function getMousePos(ev) {
    ev = ev || window.event;
    if (!ev) {
        return null;
    }

    if (ev.pageX || ev.pageY) {
        mousex = ev.pageX;
        mousey = ev.pageY;
    } else if (ev.clientX || ev.clientY) {
        mousex = ev.clientX + document.documentElement.scrollLeft;
        mousey = ev.clientY + document.documentElement.scrollTop;
    }
    return {x: mousex, y: mousey};
}

GOOM.util.DD = {
    mousePos : false,
    dragCallback : false,

    startDrag : function(callback){
        GOOM.util.DD.dragCallback = callback;
        document.onmousemove = GOOM.util.DD.onMouseMove;
        document.onmouseup = function() {
            if(GOOM.util.DD.dragCallback) {
                GOOM.util.DD.dragCallback();
            }
            GOOM.util.DD.stopDrag();
        }
    },

    stopDrag : function() {
        document.onmousemove = null;
        document.onmouseup = null;
        GOOM.util.DD.dragCallback = GOOM.util.DD.mousePos = null;
    },

    onMouseMove : function(e) {
        var pos = getMousePos(e || window.event);
        if(!pos) {
            return;
        }
        pos.pre = GOOM.util.DD.mousePos;
        GOOM.util.DD.mousePos = pos;
    }
};

GOOM.util.DD.Container = function(el, wrapEl, options) {
    options = options || {};
    options.updateDragNode = options.updateDragNode || function(){};
    
    var me = this,
        flagInit = false,
        mousePos = GOOM.util.DD.mousePos,
        ddHoverTimer, scrollTimer,

        DD = GOOM.util.DD,

        ddCurDragEl,
        ddHoverNode,
        ddNodeHeight = 0,
        ddNodeCenter = 0,

        wEl = wrapEl,

        cEl = el,
        cPos = {h : 0, w: 0, t: 0, l : 0},
        cSrollBuffer  = options.buffer || 30,
        scrollArea = {top : {y1 : 0, y2 : 0},
                           bottom : {y1 : 0, y2 : 0}};

    function onMouseDown(e) {
        //inject position into DD
        GOOM.util.DD.onMouseMove(e);
        
        e = e || window.event;
        if(!(e.which && e.button == 0 || e.button == 1)) {
            return false;
        }
        pos = getMousePos(e);
        if(!pos) {
            return false;
        }
        
        ddCurDragEl = this;
        var nodePos  = YAHOO.get(this).get('region');
        ddNodeHeight = nodePos.height;
        ddNodeCenter = nodePos.height/2;
        
        ddHoverNode = document.createElement('div');
        ddHoverNode.position = "absolute";
        
                
        posY = (Math.max(pos.y - scrollArea.top.y1, 0)  + wEl.scrollTop);

        options.dragMouseDown(ddHoverNode, ddCurDragEl, posY);

        ddHoverNode.style.position = "absolute";
        ddHoverNode.style.top  =  pos.y - ddNodeCenter + 'px';
        ddHoverNode.style.left = cPos.x + 'px';
        ddHoverNode.style.width = nodePos.width + 'px';
        ddHoverNode.style.zIndex = 500;
        ddHoverNode.onselectstart = function() { return false; }
        document.body.appendChild(ddHoverNode);

        ddHoverNode.onmousedown  = null;

        if(scrollTimer) {
            clearInterval(updateScrolling);
        }

        DD.startDrag(onMouseUp);

        scrollTimer = setInterval(updateScrolling, 50);
        return false;
    }

    function onMouseUp() {
        clearInterval(scrollTimer);
        var posY = false;
        if(DD.mousePos) {
            posY = (Math.max(DD.mousePos.y - scrollArea.top.y1, 0)  + wEl.scrollTop);
        }
        options.dragMouseUp(ddCurDragEl, ddHoverNode, posY, ddNodeHeight);
        DD.stopDrag();
        
        if(ddCurDragEl) {
            ddCurDragEl.onmousedown = onMouseDown;
            ddCurDragEl = null;
        }
    }

    function updateScrolling() {
        var pos = DD.mousePos;
        if(!pos) {
            return;
        }
        var ydiff = pos.y - ddNodeCenter;
        if(ydiff < scrollArea.top.y1) {
            ydiff = scrollArea.top.y1;
        }
        if(ydiff > scrollArea.bottom.y2) {
            ydiff = scrollArea.bottom.y1;
        }

        if(ddHoverNode) {
            ddHoverNode.style.top  = ydiff + 'px';
        }

        ydiff += parseInt(wEl.scrollTop, 10);
        options.updateDragNode(ddHoverNode, parseInt((ydiff - cPos.y), 10), ddNodeHeight);
        
        if(pos.y <= scrollArea.top.y2) {
            wEl.scrollTop = parseInt(wEl.scrollTop) - cSrollBuffer;
            return;
        }

        if(pos.y >= scrollArea.bottom.y1) {
            wEl.scrollTop = wEl.scrollTop + cSrollBuffer;
            return;
        }
    }

    this._initialize = function() {
        cEl.onselectstart = function() { return false; }
        cPos  = YAHOO.get(wEl).get('region');
        cPos.h = cPos.height;
        tmpPos  = YAHOO.get(cEl).get('region');
        cPos.realHeight = tmpPos.height;
        
        cPos.y = tmpPos.top, cPos.x = tmpPos.left;

        scrollArea.top.y1    = cPos.y;
        scrollArea.top.y2    = cPos.y + cSrollBuffer;
        scrollArea.bottom.y1 = cPos.y + cPos.h - cSrollBuffer;
        scrollArea.bottom.y2 = cPos.y + cPos.h - ddNodeCenter;
        flagInit = true;
    };

    this.setupNode = function(node) {
        node.onmousedown = onMouseDown;
    };

    this.dragInNode = function(node, e) {
        onMouseDown.call(node, e);
    };

    this.getScrollArea = function() {
        return scrollArea;
    };

    window.onresize = function() {
        var metoo = me;
        if(me.timeoutResize) {
           clearTimeout(me.timeoutResize);
        }

        me.timeoutResize = setTimeout(function() { metoo._initialize(); }, 500);
    }

    this._initialize();
};
/* $Rev$ */
GOOM.util.Charts = {

    chartItems : [],
    total : 0,
    rowNum : 1,
    titleRequest : null,
    titleRequests : {},
    chartItemsPlayingNowRequest : null,
    playingOn : {uri : 'http://meta.goomradio.com/_item?target=web&partner=GOOM&',
                 args : '',
                 jsonp : 'format=jsonp&jsonp=GOOM.util.Charts.parseMeta'},

    scheduledOn : function(radioId) {
        var me = GOOM.util.Charts,
            now = new Date(),
            uri = '/radio/list/whatson?radioId=' + radioId +
                  '&nocache=' + now.getTime() +
                  '&timezone=' + -now.getTimezoneOffset(),
            req = function() {
                GOOM.util.Get(uri, function(r) {
                    if (!r.success) {
                        return;
                    }
                    if(r.results[0] && r.results[0][0]) {
                        var m = r.results[0][0];
                        if(m) {
                            byId('chartItemRadioLiveNowArtist').innerHTML = m.artist;
                            byId('chartItemRadioLiveNowTitle').innerHTML = m.title;
                        }
                    }
                }, 5000);
            };

        if(me.titleRequest) {
            clearInterval(me.titleRequest);
        }
        req();
        me.titleRequest = setInterval(function() {req();}, 5000);
    },

    playingNow : function () {
        var me = GOOM.util.Charts,
            req = function() {createScript(me.playingOn.uri + me.playingOn.args + me.playingOn.jsonp);};
        req();
        me.chartItemsPlayingNowRequest = setInterval(function() {req();}, 10000);
    },

    parseMeta : function () {
        var me = GOOM.util.Charts,
            els = [],
            setDisplayedTitle = function(moId, displayFlag) {
                var songTitle = byId('chartItemSongTitle-' + moId),
                    radioTitle = byId('chartItemRadioTitle-' + moId);

                if(!songTitle || !radioTitle) {
                    return;
                }

                switch(displayFlag) {
                    case 'radio':
                        songTitle.style.display = 'none';
                        radioTitle.style.display = 'block';
                        break;
                    case 'song':
                        radioTitle.style.display = 'none';
                        songTitle.style.display = 'block';
                        break;
                    default:
                        if(songTitle.style.display == 'none') {
                            radioTitle.style.display = 'none';
                            songTitle.style.display = 'block';
                        } else {
                            songTitle.style.display = 'none';
                            radioTitle.style.display = 'block';
                        }
                }
            };

        // create an array with chartItems present in the page
        for(var i = 0, len = me.chartItems.length - 1; i < len; ++i) {
            var moId = me.chartItems[i].id.replace('chartItem-', ''),
                el = byId('chartItemTitlePlayingOn-' + moId);

            if(el) {
                els.push(el);
            }
        }

        // foreach song I get from meta
        for(i = 0, len = arguments[0].length; i < len; ++i) {
            var arg = arguments[0][i];

            if(arg && arg.whatson) {
                var moId = arg.whatson[0].objectId + '-' + arg.whatson[0].mediaId,
                    el = byId('chartItemTitlePlayingOn-' + moId);

                if(!el) {
                    continue;
                }

                var chartItem = byId('chartItem-' + moId),
                    streamArr = arg.streamId.split(':'),
                    radioId = streamArr[2] * 256 + streamArr[3] * 16 + 1,
                    intervalFn = function(moId) {
                        return function() {
                            setDisplayedTitle(moId);
                        }
                    };

                el.innerHTML = '<img src="/img/musical_note.png">&nbsp;' +
                               '<a href="/radio/' + arg.streamSlug + 
                               '" onclick="playAndGo(\'radio\', ' + radioId +
                               ', this.href); stopEvent(e); return false;">' + arg.stream + '</a>';


                chartItem.onmouseover = (function(moId) {
                    return function(e) {
                        setDisplayedTitle(moId, 'radio');
                        clearInterval(me.titleRequests[moId]);
                        stopEvent(e);
                    }
                })(moId);

                chartItem.onmouseout = (function(moId) {
                    return function(e) {
                        me.titleRequests[moId] = setInterval(intervalFn(moId), 1250);
                        stopEvent(e);
                    }
                })(moId);

                for(var j = 0, len2 = els.length; j < len2; ++j) {
                    if(els[j].id == el.id) {
                        els.splice(j, 1);
                        --len2;
                    }
                }

                if(!me.titleRequests[moId]) {
                    setDisplayedTitle(moId);
                    me.titleRequests[moId] = setInterval(intervalFn(moId), 1250);
                }
            }
        }

        // restoring song name for elements not in results of meta
        for(i = 0, len = els.length; i < len; ++i) {
            var moId = els[i].id.replace('chartItemTitlePlayingOn-', '');

            clearInterval(me.titleRequests[moId]);
            delete me.titleRequests[moId];
            setDisplayedTitle(moId, 'song');
        }

        removeScript(me.playingOn.uri + me.playingOn.args + me.playingOn.jsonp);
    },

    init : function() {
        var me = GOOM.util.Charts;

        me.chartItems = byId('chartItems').children;
        me.total = parseInt(byId('chartItemsTotal').innerHTML);
        me.rowNum = Math.floor((me.total + 1) / 3);

        clearInterval(me.chartItemsPlayingNowRequest);

        me.playingOn.args = '';
        for (var i = 0, len = me.chartItems.length - 1; i < len; ++i) {
            me.playingOn.args += 'id=' + me.chartItems[i].getAttribute('gdata') + '&';
        }
        me.playingNow();
    },

    showOverlay : function(overlay, id, num, objectId, mediaId) {
        var callback = function(response) {
            var r = response.radio,
                t = parseInt(response.radioTotal, 10),
                m = response.mediaAsset,
                me = GOOM.util.Charts,
                curRow = Math.floor(num / 3),
                minRow = Math.min(me.rowNum - 2, curRow),
                topPos = ((minRow > 0) ? minRow : 0) * 3,
                leftPos = (num % 3) ? 1 : 0,
                playClip = byId('chartItemPlayClip');

            // replace content in the overlay
            byId('chartItemImg').src = getASSET() + '/mediaAsset/' + m.siteId +
                                       '_' + m.coverObjectId + '_' + m.coverMediaId + '/t10';
            byId('chartItemTitle').innerHTML = m.title;
            playClip.gdata = m.id;

            GOOM.util.stopPlayingClip();

            byId('chartItemSubtitle').innerHTML = m.artists;

            var left_arrow = byId('chartItemExpandedDetailsArrowLeft'),
                right_arrow = byId('chartItemExpandedDetailsArrowRight'),
                radioImg = byId('chartItemRadioImg'),
                radioTitle = byId('chartItemRadioTitle');

            if(t <= 0 || !r.uid) {
                if(!GOOM.User.isLoggedIn) {
                    if(me.titleRequest) {
                        clearInterval(me.titleRequest);
                    }
                    
                    radioImg.parentNode.onclick = function() {return false;};
                    radioImg.parentNode.style.cursor = 'default';

                    radioImg.src = getASSET() + '/radio/0_logo/t4';
                    
                    radioTitle.innerHTML = '';
                    byId('chartItemRadioSlogan').innerHTML = _('GOOM_CHARTS_ADD_IT_TO_YOUR_RADIOS');

                    if(!GOOM.User.isLoggedIn) {
                        byId('chartItemFurtherInfoEmpty').style.display = 'block';
                    } else {
                        byId('chartItemFurtherInfoEmpty').style.display = 'none';
                    }

                    byId('chartItemFurtherInfoFull').style.display = 'none';
                    byId('chartItemExpandedDetails').style.display = 'block';
                } else {
                    byId('chartItemExpandedDetails').style.display = 'none';
                }
            }

            if(t > 1) {
                left_arrow.onclick = function() {
                    GOOM.util.Charts.overlayChangeRadio(id, (t - 1));
                    return false;
                };
                right_arrow.onclick = function() {
                    GOOM.util.Charts.overlayChangeRadio(id, 1);
                    return false;
                };

                left_arrow.style.visibility = 'visible';
                right_arrow.style.visibility = 'visible';
            } else {
                left_arrow.onclick = function() {return false;};
                right_arrow.onclick = function() {return false;};

                left_arrow.style.visibility = 'hidden';
                right_arrow.style.visibility = 'hidden';
            }

            if(t >= 1) {
                byId('chartItemExpandedDetails').style.display = 'block';
                radioImg.parentNode.style.cursor = 'pointer';
            }

            if(r.uid) {
                var gotoRadioFn = function() {
                    GOOM.Navigation.load('/radio/' + r.slug);
                    return false;
                };

                radioImg.src = getASSET() + '/radio/' + r.uid + '_logo/t4';
                radioImg.parentNode.onclick = gotoRadioFn;
                radioTitle.innerHTML = r.name;
                radioTitle.onclick = gotoRadioFn;
                byId('chartItemRadioSlogan').innerHTML = r.slogan;
                byId('chartItemFollowers').innerHTML = r.followers;

                me.scheduledOn(r.id);

                byId('chartItemFurtherInfoEmpty').style.display = 'none';
                byId('chartItemFurtherInfoFull').style.display = 'block';
            }

            byId('chartItemNr').innerHTML = ++num;

            var el = byId('chartItemTitlePlayingOn-' + objectId + '-' + mediaId);
            if (el) {
                byId('chartItemOverlayTitlePlayingOn').innerHTML = el.innerHTML;
            }

            var elLabel = byId('chartItemTitlePlayingOnLabel-' + objectId + '-' + mediaId);
            if (elLabel) {
                byId('chartItemOverlayTitlePlayingOnLabel').innerHTML = elLabel.innerHTML;
            }

            // move the overlay to the correct position
            overlay.style.top = me.chartItems.item(topPos).offsetTop + 'px';
            overlay.style.left = me.chartItems.item(leftPos).offsetLeft + 'px';

            // finally show the overlay
            overlay.style.display = 'block';
        };

        GOOM.util.Get('/default/list/charts-item?id=' + id, callback);
    },

    hideOverlay : function(overlay) {
        var me = GOOM.util.Charts;

        GOOM.util.stopPlayingClip();
        byId('chartItemExpanded').style.display = 'none';
        if(me.titleRequest) {
            clearInterval(me.titleRequest);
        }
    },

    overlayChangeRadio : function(mediaAssetId, start) {
        var callback = function(response) {
            var me = GOOM.util.Charts,
                r = response.radio,
                t = parseInt(response.radioTotal),
                radioTitle = byId('chartItemRadioTitle'),
                radioImg = byId('chartItemRadioImg'),
                gotoRadioFn = function() {
                    GOOM.Navigation.load('/radio/' + r.slug);
                    return false;
                };

            if(t > 1) {
                byId('chartItemExpandedDetailsArrowLeft').onclick = function() {
                    GOOM.util.Charts.overlayChangeRadio(mediaAssetId, (start - 1) < 0 ? (t - 1) : (start - 1));
                    return false;
                };
                byId('chartItemExpandedDetailsArrowRight').onclick = function() {
                    GOOM.util.Charts.overlayChangeRadio(mediaAssetId, (start + 1 > (t - 1)) ? 0 : (start + 1));
                    return false;
                };
                radioImg.src = getASSET() + '/radio/' + r.uid + '_logo/t4';
                radioImg.parentNode.onclick = gotoRadioFn;
                radioTitle.innerHTML = r.name;
                radioTitle.onclick = gotoRadioFn;
                byId('chartItemRadioSlogan').innerHTML = r.slogan;
                byId('chartItemFollowers').innerHTML = r.followers;

                me.scheduledOn(r.id);
            }
        }

        GOOM.util.Get('/default/list/charts-item-overlay-radio?id=' + mediaAssetId + '&start=' + start, callback);
    }

}
/* $Rev: 15928 $ */
createNS('GOOM.site');

GOOM.site.Navigation = (function() {
    var _navRadiosDialog = new GOOM.util.Dialog({isModal : false, width: 250}),
        _navShowsDialog = new GOOM.util.Dialog({isModal : false, width: 250}),
        _navPremiumRadiosDialog = new GOOM.util.Dialog({isModal : false, width: 310}),
        _template = {
            radios : '<form action="/radio/search" class="modalForm loginform" method="post"><fieldset><legend></legend><div class="clearfix findButtons"><label for="findRadios">%{find}</label><div class="findRadiosContainer"><input type="text"  name="findRadios" class="formElement inputText findRadios formStackMargin" gType="button" value="" /></div><div class="findRadiosContainer"><input gtype="button" class="button primary" submit="" type="submit" value="%{submit}" /></div></div><label for="radiosCreated">%{your}</label><select name="radiosCreated" class="formElement select clear" gtype="button" onchange="GOOM.Navigation.load(this.value); return false;"><option selected="selected">%{your}</option></select><label for="radiosFollow">%{follow}</label><select name="radiosFollow" class="formElement select clear" gtype="button" onchange="GOOM.Navigation.load(this.value); return false;"><option selected="selected">%{follow}</option></select></div></fieldset></form><ul>%{links}</ul>'
        };
    
    return {
        showRadios : function(triggerEl) {
            if(GOOM.User.isLoggedIn) {
                var template = replace(_template.radios, { find : _('NAV_FIND_RADIOS'), submit : _('NAV_FIND'), 
                                                           your : _('NAV_YOUR_RADIOS'), links : byId('navOverlayRadiosLinks').innerHTML,
                                                           follow : _('NAV_FOLLOW_RADIOS')});
                _navRadiosDialog.setHTML(template);
                _navRadiosDialog.open(triggerEl, byId('playerNavigation'));
                var formEl = _navRadiosDialog.getContainer().getElementsByTagName('form')[0];
                
                
                var radios = GOOM.UserRadios.followed;
                formEl.radiosFollow.innerHTML = '';
                addOption(formEl.radiosFollow, _('NAV_FOLLOW_RADIOS'));
                for(var i = 0; len = radios.length, i < len; i++) {
                    addOption(formEl.radiosFollow, radios[i].name, '/radio/' + radios[i].slug);
                }
                
                formEl.radiosCreated.innerHTML = '';
                radios = GOOM.UserRadios.created;
                addOption(formEl.radiosCreated, _('NAV_YOUR_RADIOS'));
                for(var i = 0; len = radios.length, i < len; i++) {
                    addOption(formEl.radiosCreated, radios[i].name, '/radio/' + radios[i].slug);
                }
            } else {
                template = byId('navOverlayRadios').innerHTML;
                _navRadiosDialog.setHTML(template, true);
                _navRadiosDialog.open(triggerEl, byId('playerNavigation'));
                formEl = _navRadiosDialog.getContainer().getElementsByTagName('form')[0];
            }

            var searchEl = _navRadiosDialog.getContainer().getElementsByTagName('input')[0];

            formEl.onsubmit = function() {
                if (searchEl.value != '' && searchEl.value != searchEl.getAttribute('gtext')) {
                    GOOM.Navigation.load('/radio/search?name=' + searchEl.value);
                }
                return false;
            }
        },
        
        showShows : function(triggerEl){
            var template = byId('navOverlayShows').innerHTML;
            _navShowsDialog.setHTML(template, true);
            _navShowsDialog.open(triggerEl, byId('playerNavigation'));
            var formEl = _navShowsDialog.getContainer().getElementsByTagName('form')[0];
            var searchEl = _navShowsDialog.getContainer().getElementsByTagName('input')[0];
            
            formEl.onsubmit = function() {
                if (searchEl.value != '' && searchEl.value != searchEl.getAttribute('gtext')) {
                    GOOM.Navigation.load('/show/search?name=' + searchEl.value);
                }
                return false;
            }
        },

        switchSite : function (domain, path, radioId) {
            var href = 'http://' + domain.replace('http://', ''),
                _dialogHTML = '<div><h2>%{title}</h2><p>%{confirm}</p><form class="modalForm" onsubmit="setTimeout(function() { window.location = \'%{href}\'}, 0);"><fieldset><legend></legend><div class="containerSubmit"><input onclick="GOOM.util.DialogMgr.close(); return false;" gtype="button" class="clear button standard" value="%{cancel}" type="button"> <input gtype="button" class="clear button primary" value="%{okay}" type="submit"></div></fieldset></form></div>',
                _dialog = new GOOM.util.Dialog({isModal : true, isNarrow : true});

            try {
              radioId = radioId || GOOM.Audio.currentRadioObj.id;
            } catch(e) { }
            
            if(radioId || path) {
                href += '/play-n-go';
                if(radioId) {
                    href += '?radioId=' + radioId;
                }
                if(path) {
                    href += ((radioId) ? '&' : '?')  + 'page=' + path;
                }
            }
            _dialog.setHTML(replace(_dialogHTML, {confirm : _('NAV_SWITCHSITE_CONFIRM'),
                                                  href    : href,
                                                  title   : _('NAV_SWITCHSITE_TITLE'),
                                                  cancel  : _('CANCEL'),
                                                  okay    : _('OKAY') }));
            _dialog.open();
        },
        
        search : function(type, formEl) {
            var uri, term;
            
            switch(type) {
                case 'radio':
                    uri = '/radio/search';
                    term = formEl.elements.findRadios.value;
                    break;
                case 'show':
                    uri = '/show/search';
                    term = formEl.elements.findShows.value;
                    break;
                default:
                    return;
            }
            
            GOOM.Navigation.load(uri + '?term=' + term);
            _navRadiosDialog.close();
        },
        
        showPremiumRadios : function(triggerEl) {
            var template = byId('premiumRadios').innerHTML;
            _navPremiumRadiosDialog.setHTML(template);
            _navPremiumRadiosDialog.open(triggerEl, byId('buttonData'));
        }
    }
})();
/* $Rev: 15928 $ */
createNS('GOOM.site.Note');

GOOM.site.Note = { 
    autoCloseCounter : false,
    template : { normal : '<span style="float:left;" class="noteText">%{msg}</span> <a href="#" onclick="GOOM.site.Note.close(); return false;" class="close" title="">%{close}</a>'},

    show : function(type, message, noTimeout, links) {
        var noteEl = byId('noteContainer');
        if(!noteEl) {
            return;
        }
        noteEl.innerHTML = replace(this.template.normal,{ msg : message, close : _('NOTE_CLOSE')});
        if(links && links.length) {
            var a = noteEl.getElementsByTagName('a');
            for(var i = 0; i < a.length; i++) {
                if(links[i]) {
                    a[i].onclick = links[i];
                }
            }
        }
        noteEl.style.display = 'block';
        
        if(!noTimeout) {
            setTimeout(GOOM.site.Note.close, 5000);
        }
    },
    
    close : function() {
        byId('noteContainer').style.display = 'none';
    }
}

GOOM.Navigation.Events.onPageReady.subscribe(function(){
    GOOM.site.Note.close();
})
/* $Rev: 15928 $ */
createNS('GOOM.site');

GOOM.site.CoverFlow = {
    onShowClick : function(slug) {
        GOOM.Navigation.load('/show/' + slug);
    },
    
    onRadioClick : function(slug) {
        GOOM.Navigation.load('/radio/' + slug);
    },
    
    onShowPlay : function(id) {
        play('show', id);    
    },
    
    onRadioPlay : function(id) {
        play('radio', id);
    }
}
/* $Rev: 15928 $ */
createNS('GOOM.site');

GOOM.site.SimpleTab = {
    tabs : {
        topHits : {
            playingNowRequest : null,

            updateFn : function(id) {
                var top20Btn = byId('topHitsTop20'),
                    emptySong = {id : null,
                                 siteId : null,
                                 coverObjectId : null,
                                 coverMediaId :null,
                                 artists : [],
                                 title : null};

                if (top20Btn) {
                    top20Btn.onclick = function() {
                        GOOM.Navigation.load('/charts?genreId=' + id);
                        return false;
                    }
                }

                GOOM.util.Get('/default/list/tophits?genre=' + id + '&limit=5&nocache=' + (new Date().getTime()), function(r) {
                    if(!r.success) {
                        return;
                    }

                    var createRadioLink = function() {
                            var radioLink = '';
                            if(r.playingNow[i] && r.playingNow[i].name && r.playingNow[i].name.toLowerCase() != 'error') {
                                if(r.playingNow[i].slug) {
                                    radioLink = musicalNote +
                                                '<a href="/radio/' + r.playingNow[i].slug + '" onclick="playAndGo(\'radio\', ' + r.playingNow[i].id + ', this.href); return false;">' +
                                                    r.playingNow[i].name +
                                                '</a>';
                                } else {
                                    radioLink = musicalNote + r.playingNow[i].name;
                                }
                            }

                            return radioLink;
                        },

                        replaceElement = function() {
                            var artists = [],
                                topHitEl = songs[i];

                            if(topHitEl) {
                                var ch = topHitEl.children;

                                topHitEl.id = topHitElId;
                                for(var j = 0, len2 = ch.length; j < len2; ++j) {
                                    switch(ch[j].className) {
                                        case 'miniPlay':
                                            if(song.id) {
                                                ch[j].setAttribute('gdata', song.id);
                                                ch[j].style.display = 'block';
                                            } else {
                                                ch[j].style.display = 'none';
                                            }
                                            break;
                                        case 'thumb t2':
                                            if(song.siteId && song.coverObjectId && song.coverMediaId) {
                                                ch[j].src = window.getASSET() +
                                                            '/mediaAsset/' +
                                                            song.siteId + '_' +
                                                            song.coverObjectId + '_' +
                                                            song.coverMediaId + '/t2';
                                                ch[j].style.display = 'block';
                                            } else {
                                                ch[j].style.display = 'none';
                                            }
                                            break;
                                        case 'topHitsWrapper':
                                            var ch2 = ch[j].children;
                                            if(ch2) {
                                                for(var k = 0, len3 = song.artists.length; k < len3; ++k) {
                                                    artists.push(song.artists[k].name);
                                                }
                                                for(k = 0, len3 = ch2.length; k < len3; ++k) {
                                                    if(song.id && song.artists) {
                                                        switch(ch2[k].className) {
                                                            case 'topHitsTitle':
                                                                ch2[k].innerHTML = song.title;
                                                                break;
                                                            case 'topHitsSubtitle':
                                                                ch2[k].innerHTML = artists.join(', ');
                                                                break;
                                                            case 'topHitsRadio':
                                                                ch2[k].id = topHitsRadioId;
                                                                ch2[k].innerHTML = createRadioLink();
                                                                ch2[k].setAttribute('gdata', song.id);
                                                                break;
                                                            default:
                                                        }
                                                        ch2[k].style.display = 'block';
                                                    } else {
                                                        ch2[k].style.display = 'none';
                                                    }
                                                }
                                            }
                                            break;
                                        default:
                                    }
                                }
                            }
                        },
                        thcDivs = byId('topHitsContainer').getElementsByTagName('div'),
                        songs = [];

                    for(var i = 0, len = thcDivs.length; i < len; ++i) {
                        if(thcDivs[i].getAttribute('gdata') == 'song') {
                            songs.push(thcDivs[i]);
                        }
                    }

                    var musicalNote = '<img src="/img/musical_note.png">&nbsp;',
                        playingPreview = byId('playingPreview');

                    for(i = 0, len = r.mediaAssets.length; i < len; ++i) {
                        var song = r.mediaAssets[i],
                            topHitsRadioId = 'topHitsRadio-' + song.objectId + '-' + song.mediaId,
                            topHitElId = 'topHit-' + song.id;

                        if(playingPreview && playingPreview.parentNode) {
                            var previewMediaAssetId = playingPreview.parentNode.getAttribute('gdata');

                            if(previewMediaAssetId == songs[i].id.replace('topHit-', '') ||
                               previewMediaAssetId == song.id) {
                                continue;
                            }
                        }

                        if(songs[i].id != topHitElId) {
                            replaceElement();
                        } else {
                            var radioLink = createRadioLink(),
                                topHitsRadioEl = byId(topHitsRadioId);

                            if(topHitsRadioEl.innerHTML != radioLink) {
                                topHitsRadioEl.innerHTML = radioLink;
                            }
                        }
                    }
                    song = emptySong;
                    for(len = songs.length; i < len; ++i) {
                        replaceElement();
                    }
                })
            },
            
            selectTab : function(el, id) {
                var me = GOOM.site.SimpleTab.tabs.topHits,
                    tabs = byId('topHitsGenres').getElementsByTagName('a');

                removeClass(tabs, 'active');
                addClass(el, 'active');

                GOOM.util.stopPlayingClip();

                clearInterval(me.playingNowRequest);
                me.updateFn(id);
                me.playingNowRequest = setInterval(function() {me.updateFn(id);}, 10000);
            }
        }
    },
    
    select : function(el, typeId, id) {
         var me = GOOM.site.SimpleTab,
             tabObj = me.tabs[typeId];

         tabObj.selectTab(el, id);
    }
}
/* $Rev: 15928 $ */
GOOM.site.Promo = {
    handleClick : function(url, type) {
        if(type === 'internal') {
            GOOM.Navigation.load(url);
        } else {
            window.open(url);
        }
    }
};
/* $Rev$ */
GOOM.site.Util = {
    SNADialog : new GOOM.util.Dialog({isModal : true, isNarrow : true, isError : true}),
    SNA : false,

    showSNA : function() {
        var content = '<h2>' + _('SERVICE_NOT_AVAILABLE_TITLE') + '</h2>' +
                      _('SERVICE_NOT_AVAILABLE') + '<br/><br/>' +
                      _('SERVICE_NOT_AVAILABLE_COME_BACK_SOON') + '<br/>' + 
                      '<form action="" onsubmit="return false;">' +
                        '<input gtype="button" type="button" value="OK" onclick="GOOM.util.DialogMgr.close(); return false;" class="button secondary">' +
                      '</form>';

        this.SNADialog.setHTML(content);
        this.SNADialog.open();
    },

    isServiceAvailable : function(fn) {
        GOOM.util.Request('GET', '/default/api/service-not-available',
                          {success : function callback(r) {
                                var me = GOOM.site.Util;
                                me.SNA = r.notAvailable;
                                fn();
                          }});
    }
}

createNS('GOOM.user');

GOOM.user.Follow = {
    btnList : [],
    
    btnClick : function() {
        var radioUid = this.getAttribute('radioUid');
        if(!GOOM.User.isLoggedIn) {
            GOOM.user.Auth.show();
            return false;
        }
        if(this.disabled || !radioUid) {
            return false;
        }
        var radioObj = GOOM.UserRadios.getFollow(radioUid);
        if(radioObj) {
            GOOM.UserRadios.removeFollow(radioUid, function(){});
        } else {
            GOOM.UserRadios.addFollow(radioUid, function(){});
        }
        return false;
    },
    
    createFollowBtn : function(el, radioUid, callback) {
        var me = GOOM.user.Follow,
            btn = el.getElementsByTagName('a')[0],
            countEl = el.parentNode.getElementsByTagName('strong');

        countEl = countEl.length ? countEl[0] : false;

        if(GOOM.UserRadios.isUpdated) {
            var radioObj = GOOM.UserRadios.getFollow(radioUid),
                text = radioObj ? _('FOLLOW_STOP') : _('FOLLOW_START'),
                titleTxt = radioObj ? _('FOLLOW_STOP_TITLE') : _('FOLLOW_START_TITLE');
            btn.innerHTML = text;
            btn.title = titleTxt;
        }
        btn.onclick = GOOM.user.Follow.btnClick;
        btn.setAttribute('radioUid', radioUid);
        
        return me.btnList.push({el : btn,
                                countEl : countEl, 
                                radioUid : radioUid,
                                callback : callback});
    },
    
    removeFollowBtn : function(btnIndex) {
        var me = GOOM.user.Follow;
        btnIndex = btnIndex - 1; 
        if(!me.btnList[btnIndex]) {
            return false;
        }
        return me.btnList.splice(btnIndex, 1);
    },
    
    handleOnReady : function() {
        var me = GOOM.user.Follow;
        for(var i = 0; i < me.btnList.length; i++) {
            var btn = me.btnList[i];
            var radioObj = GOOM.UserRadios.getFollow(btn.radioUid);
            var text = radioObj ? _('FOLLOW_STOP') : _('FOLLOW_START');
            var titleTxt = radioObj ? _('FOLLOW_STOP_TITLE') : _('FOLLOW_START_TITLE');
            btn.el.innerHTML = text;
            btn.el.title = titleTxt;
        }
    },
    
    handleOnChange : function(radioObj, isAdd) {
        var me = GOOM.user.Follow;
        for(var i = 0, len =  me.btnList.length; i < len; i++) {
            var btn = me.btnList[i];
            if(btn.radioUid != radioObj.uid) {
                continue;
            }
            setText(btn.countEl, radioObj.followers);
            var text = isAdd ? _('FOLLOW_STOP') : _('FOLLOW_START');
            var titleTxt = isAdd ? _('FOLLOW_STOP_TITLE') : _('FOLLOW_START_TITLE');
            btn.el.innerHTML = text;
            btn.el.title = titleTxt;
            if(btn.callback) {
                btn.callback(radioObj, isAdd);
            }
        }
    }
}

GOOM.UserRadios.Events.onReady.subscribe(GOOM.user.Follow.handleOnReady);
GOOM.UserRadios.Events.onChange.subscribe(GOOM.user.Follow.handleOnChange);

/* $Rev: 16019 $ */
createNS('GOOM.user');

GOOM.user.Share = {
    html : false,
    loading : '<div style="height: 250px; background:url(/img/loading_big.gif) 190px 100px no-repeat" /></div>',
    url : '/user/api/getoverlay?name=share',
    dialog : new GOOM.util.Dialog({isModal:true, isNarrow : true}),
    shareObj : false,
    emails : [],

    showDialog : function(type, shareObj) {
        if(!shareObj || !shareObj.id){
            return;
        }

        var link = shareObj.link;

        if(type == 'radio' || type == 'show') {
            if(!shareObj.link) {
                link = '/' + type + '/' + shareObj.slug;
            }
        }

        this.shareObj = {id           : shareObj.id,
                         title        : shareObj.name,
                         professional : shareObj.professional,
                         link         : 'http://' + window.location.host + link,
                         type         : type.toLowerCase()};
                     
        switch (type) {
            case 'radio':
            case 'show':
                this.emails = [];
                this.shareObj.link += '?autoplay' + type.charAt(0).toUpperCase() + type.substr(1) + 'Id=' + this.shareObj.id;
                if(this.html) {
                    this.dialog.setHTML(this.html);
                    this.dialog.open();
                    GOOM.UI.inputDefaultText([byId('shareToEmail'),byId('shareFromEmail')]);
                    byId('shareToEmail').value = '';
                    byId('shareToEmail').onkeydown = function(e) {
                        setTimeout(function() {
                            var keyCode = 0;
                            if (window && window.event && window.event.keyCode) {
                                keyCode = window.event.keyCode;
                            } else if (e && e.which) {
                                keyCode = e.which;
                            }
                            if (keyCode == 13) {
                                GOOM.user.Share.addEmail(byId('shareToEmail'));
                                return false;
                            } else {
                                return true;
                            }
                        }, 0);
                    };
                    if(byId('shareDirectLink')) {
                        byId('shareDirectLink').value = this.shareObj.link;
                    }
                    if(byId('shareEmbedCode')) {
                        if(this.shareObj.type == 'radio') {
                            byId('shareEmbedCode').parentNode.parentNode.style.display = 'inline';
                            var partnerId = this.shareObj.professional ? 'GOOMRADIO' : 'MYGOOM';
                            byId('shareEmbedCode').value = '<script type="text/javascript">goomPartnerId="' + partnerId + '";goomAutoPlay="1";goomDefaultRadio="'+ this.shareObj.id +'";</script><script type="text/javascript" src="http://slam.goomradio.com/include.js"></script>';
                        } else {
                            byId('embedCode').parentNode.style.display = 'none';
                            byId('shareEmbedCode').parentNode.parentNode.style.display = 'none';
                        }
                    }
                    setText(byId('shareTitle'), this.shareObj.title);
                    if(window.GATrack) {
                        window.GATrack('GOOM.user.Share','onShowDialog', this.shareObj.link);
                    }
                    this.html = false;
                    return;
                }
                break;
            case 'blogpost':
                if(this.html) {
                    this.dialog.setHTML(this.html);

                    this.dialog.open();
                    if(window.GATrack) {
                        window.GATrack('GOOM.user.Share','onShowDialog', this.shareObj.link);
                    }
                    this.html = false;
                    return;
                }
                break;
            default:
                this.dialog.setHTML(_('DIALOG_SHARE_ERROR'));
                this.dialog.open();
                this.html = false;
                break;
        }

        this.dialog.setHTML(this.loading);
        this.dialog.open();

        GOOM.util.Request('GET', this.url + '&type=' + type,
                          {success : function callback(result) {
                                var me = GOOM.user.Share;
                                me.html = result;
                                if(me.dialog.isOpen()) {
                                    me.showDialog(type, shareObj);
                                }
                          },
                          rawText : true});
    },
    
    closeDialog : function() {
        this.dialog.close();
    },
    
    shareLink : function(provider) { 
        var networks = {
            friendfeed : 'http://friendfeed.com/?url=%{link}&title=%{title}',
            twitter    : 'http://twitter.com/home?status=%{title} %{link}',
            digg       : 'http://digg.com/submit?url=%{link}&title=%{title}',
            myspace    : 'http://www.myspace.com/index.cfm?fuseaction=postto&t=%{title}&u=%{link}',
            delicious  : 'http://delicious.com/save?v=5&noui=1&partner=goom&jump=doclose&url=%{link}',
            facebook   : 'http://www.facebook.com/sharer.php?u=%{link}&t=%{title}'
        };
        if(!this.shareObj || !networks[provider]) {
            return;
        }
        if(window.GATrack) {
           window.GATrack('GOOM.user.Share','onShareLink', provider, this.shareObj.link);
        }
        //this sets the opener of the first opened window to the new window you just opened
        window.open(replace(networks[provider], {link : this.shareObj.link, title : this.shareObj.title}), 'popup', 'width=800,height=600,scrollbars=1');
    },
    
    addEmail : function(el){
        var val = el.value,
            callback = function () {
                byId('shareToEmail').value = '';
                GOOM.user.Share.emails.push(val);

                var li = document.createElement('li');
                li.innerHTML = '<a href="#" onclick="GOOM.user.Share.removeEmail(this); return false;">' + val + '</a>';
                byId('shareEmailList').appendChild(li);
            };
        GOOM.util.checkEmail(el, callback);
    },
    
    removeEmail : function(el) {
        for(var i = 0; len = this.emails.length, i < len; i++) {
            if(this.emails[i] == el.innerHTML) {
                this.emails.splice(i, 1);
            }
        }
        byId('shareEmailList').removeChild(el.parentNode);
    },

    send : function(formEl) {
        formEl.elements.shareEmails.value = this.emails.join(',');
        formEl.elements.shareType.value = this.shareObj.type;
        formEl.elements.shareId.value = this.shareObj.id;
        disableFields(formEl.elements);
        GOOM.util.FormRequest(formEl, {success : function(result){
            enableFields(formEl.elements);
            
            var li = byId('shareEmailList').getElementsByTagName('li');
            removeClass(li, 'invalid');
            
            if(result.success) {
                GOOM.site.Note.show('NORMAL', result.message);
                GOOM.user.Share.closeDialog();
                return;
            }
            var me = GOOM.user.Share;
            setText(byId('shareErrorMessage'), result.message);
            
            if(result.badEmails) {
                for(var i = 0, len = result.badEmails.length; i < len; i++) {
                    var email = result.badEmails[i];
                    if(me.emails.indexOf(email) != -1) {
                        if(li[i]) {
                            addClass(li[i], 'invalid');
                        }
                    }
                }
                delete result.errors.badEmails;
                handleFormResults(formEl, result);
            }
        }});
        
    }
}
createNS('GOOM.user');

GOOM.user.StatusBar = {
    UserMenu : new GOOM.util.Menu({openFns  : [function() {byId('profileStatusBar').children[1].className = 'userSelected'}],
                                   closeFns : [function() {byId('profileStatusBar').children[1].className = 'userDetails'}]}),
    Flags : new GOOM.util.Menu({openFns  : [function() {byId('countryFlags').className = 'countryFlags flagSelected'}],
                                closeFns : [function() {byId('countryFlags').className = 'countryFlags'}]}),
    NavChangeSearch : new GOOM.util.Menu(),
    navSearchObjType : 'radio',

    template : { 
        loggedOutStatus : '<a id="statusBarLoginBtn" href="#" onclick="GOOM.user.Auth.show(); return false;">' + 
                            '%{login}' +
                          '</a>' +
                          ' | ' +
                          '<a href="#" onclick="GOOM.user.Registration.show(); return false;">' +
                            '%{register}' +
                          '</a>',
        loggedInStatus : '<a class="t1" href="/home" onclick="GOOM.Navigation.load(this.href); return false;" title="%{more}">' +
                             '<img alt="small avatar" class="smallAvatar" src="%{avatar}" onerror="defaultImg(this, \'/img/goomer_t1.jpg\')"/>' +
                         '</a>' +
                         '<a class="userDetails" onclick="GOOM.Navigation.load(this.href); return false;" onmouseover="GOOM.user.StatusBar.showUser(this)" href="/user/settings" title="%{more}">' +
                            '%{username}' +
                         '</a>'
    },

    init: function() {
        var contents = [];
        var flagLabels = {1 : _('USA'), 2 : _('FRANCE'), 3 : _('GERMANY')}

        for (var i in SITES_ARRAY) {
            var isSite   = (i == SITE_ID),
                onclickFn = (isSite) ?
                            'return false;' :
                            'GOOM.site.Navigation.switchSite(\'' +
                            DOMAIN_PREFIX + SITES_ARRAY[SITE_ID].domain + '\', ' +
                            '\'' + DOMAIN_PREFIX + SITES_ARRAY[i].domain + '/\'); ' +
                            'return false;',
                flagIcon  = (isSite) ?
                            '/img/flag_' + SITES_ARRAY[i].countryCode + '_off.jpg' :
                            '/img/flag_' + SITES_ARRAY[i].countryCode + '.jpg';


            contents.push({image   : flagIcon,
                           label   : flagLabels[i],
                           href    : '#',
                           onclick : onclickFn});
        }

        this.Flags.setContents(contents);

        this.NavChangeSearch.setContents([{label : _('NAV_FIND_RADIOS'),
                                           href : '#',
                                           onclick : 'GOOM.user.StatusBar.setNavSearchObj(\'radio\'); return false;'},
                                          {label : _('NAV_FIND_SHOWS'),
                                           href : '#',
                                           onclick : 'GOOM.user.StatusBar.setNavSearchObj(\'show\'); return false;'}]);

        GOOM.User.Events.onChange.subscribe(GOOM.user.StatusBar.update);

        GOOM.UserRadios.Events.onChange.subscribe(function() {
            GOOM.user.StatusBar.updateUserRadios(GOOM.UserRadios.created, GOOM.UserRadios.followed);
        });

        GOOM.UserRadios.Events.onReady.subscribe(function() {
            GOOM.user.StatusBar.updateUserRadios(GOOM.UserRadios.created, GOOM.UserRadios.followed);
        });

        GOOM.Navigation.Events.onPageLeave.subscribe(function() {
            GOOM.util.MenuMgr.close();
        });

        GOOM.Navigation.Events.onPageChange.subscribe(function() {
            GOOM.util.MenuMgr.close();
        });

        GOOM.user.StatusBar.update();
    },
    
    update : function(purgeImage) {
        var me = GOOM.user.StatusBar;
        var userDetails = GOOM.User.getDetails();
        var html = replace(me.template.loggedOutStatus, {register : _('NAV_REGISTER'), login : _('NAV_LOGIN')});
        if(userDetails) {
            var avatar = window.getASSET() + '/goomer/' + userDetails.id + '_avatar/t1';
            if(purgeImage) {
                avatar += '?nocache=' + (new Date()).getTime();
            }
            html = replace(me.template.loggedInStatus, {avatar : avatar,
                                                         more : _('NAV_MORE_ACTION'), 
                                                         username : userDetails.username});
            avatar = window.getASSET() + '/goomer/' + userDetails.id + '_avatar/t3';
            if(purgeImage) {
                avatar += '?nocache=' + (new Date()).getTime();
            }
            GOOM.user.StatusBar.updateUserRadios(GOOM.UserRadios.created, GOOM.UserRadios.followed)
        } else {
            GOOM.user.StatusBar.updateUserRadios(null, null);
        }
        byId('profileStatusBar').innerHTML = html;
    },

    updateUserRadios : function(created, followed) {
            var createdRadios = [],
                followedRadios = [];

            if(created) {
                for(var i = 0, len = (created.length < 5) ? created.length : 5; i < len; ++i) {
                    createdRadios[i] = {href : '/radio/' + created[i].slug,
                                        label : created[i].name,
                                        siteId : created[i].siteId};
                }
                if(created.length > 5) {
                    createdRadios[i] = {href : '/radios/created',
                                        label : _('NAV_SEE_MORE'),
                                        siteId : SITE_ID}
                }
            }
            if(followed) {
                for(i = 0, len = (followed.length < 5) ? followed.length : 5; i < len; ++i) {
                    followedRadios[i] = {href : '/radio/' + followed[i].slug,
                                         label : followed[i].name,
                                         siteId : followed[i].siteId};
                }
                if(followed.length > 5) {
                    followedRadios[i] = {href : '/radios/following',
                                         label : _('NAV_SEE_MORE'),
                                         siteId : SITE_ID}
                }
            }
            GOOM.user.StatusBar.UserMenu.setContents(
                [{label : _('NAV_DASHBOARD'),
                  href : '/home',
                  onclick : 'GOOM.Navigation.load(this.href); return false;'},
                 {label : _('NAV_RADIOS_CREATED'),
                  className : 'groupLi',
                  content : createdRadios,
                  onclick : 'GOOM.Navigation.load(\'/radios/created\'); return false;'},
                 {label : _('NAV_RADIOS_FOLLOWING'),
                  content : followedRadios,
                  onclick : 'GOOM.Navigation.load(\'/radios/following\'); return false;'},
                 {label : _('NAV_SETTINGS'), 
                  className : 'groupLi',
                  href : '/user/settings',
                  onclick : 'GOOM.Navigation.load(this.href); return false;'},
                 {label : _('NAV_LOGOUT'),
                  onclick : 'GOOM.util.MenuMgr.close(); GOOM.user.Auth.logout(); return false;'}]);
    },
    
    showUser : function(triggerEl) {
        var details = GOOM.User.getDetails();
        if(!details) {
            return;
        }
        this.UserMenu.open(triggerEl, byId('profileStatusBar'));
    },

    setNavSearchObj : function(type) {
        var val = (type == 'show') ? _('NAV_FIND_SHOWS') : _('NAV_FIND_RADIOS'),
            searchEl = byId('nav-search-value');
        searchEl.value = val;
        searchEl.title = val;
        this.navSearchObjType = type;
        GOOM.util.MenuMgr.close();
    }
}
/* $Rev: 15928 $ */
createNS('GOOM.user');

GOOM.user.Auth = (function() {
        LoginDialog = new GOOM.util.Dialog({isModal : true, isNarrow : true});
        
    //need to fix this should get the base uri from somwhere
    var _api = { logout : '/user/session/logout?multidomain_cb=GOOM.User.removeLoginFrame',
                 login : '/user/session/login' };

    var _templateHome = '<fieldset><h3 class="getStartedHeader">%{message}</h3><input gtype="button" type="submit" class="button primary" value="%{ok}"/></fieldset>';
    
    function getLoginHTMLStr(attr) {
        attr = attr || {};
        var str = '';
        if(!attr.noHeader) {
            str += replace('<div class="loginform"><h2 class="registrationTitle">%{title}</h2><p class="registrationTxt">%{description} <a href="#" onclick="GOOM.user.Registration.show(); return false;" title="%{register}">%{register}</a></p>', 
                    { title : _('AUTH_LOGIN_TITLE') , description : _('AUTH_DESCRIPTION'), register : _('AUTH_REGISTER') });
        }
        str += replace('<form id="userLoginForm" class="modalForm" method="post" onsubmit="GOOM.user.Auth.login(this); return false;"><fieldset><legend></legend><div class="username"><label for="loginUsername">%{username}</label><input type="text" class="formElement inputText clear" gtype="button" name="login" id="loginUsername" autocomplete="off" value="" /></div><div class="username"><label for="loginPassword" class="clear">%{password}</label><input id="loginPassword" class="formElement inputPassword" gtype="button" name="password" autocomplete="off" value="" type="password" /></div><div id="loginMessage" class="clear invalid"></div><div class="clear forgotPwd"><a href="/password/forgot" onclick="GOOM.util.DialogMgr.close(); GOOM.Navigation.load(this.href); return false;">%{forgot}</a></div>',
                { title : _('AUTH_LOGIN_TITLE'), description : _('AUTH_DESCRIPTION'), username : _('AUTH_USERNAME'), password : _('AUTH_PASSWORD'), forgot : _('AUTH_FORGOT')});
        if(!attr.noBtn) {
            str += replace('<div class="containerSubmit"><input gtype="button" class="clear button primary" value="%{enter}" type="submit"></div>',
                    { enter : _('AUTH_ENTER') });
        }
        str += '</fieldset></form></div>';
        return str;
    }
    
    function handleResponse(formEl, result, cb) {
        enableFields(formEl.elements);
        formEl.getElementsByTagName('input')[0].focus();
        if(!cb && result.success) {
            LoginDialog.close();
            GOOM.User.updateDetails(result);
            // find a way to customize this
            GOOM.Navigation.load('/home');
            return;
        }
        
        if(formEl.name == 'homeLogin') {
            formEl.style.display = 'none';
            var msgForm = document.createElement('form');
            msgForm.className = 'formScreen';
            msgForm.onsubmit = function() { this.parentNode.removeChild(this); formEl.style.display = "block"; }
            msgForm.innerHTML = replace(_templateHome, {message :result.message, ok : _('LABEL_TRY_AGAIN')});
            byId('homeLoginContainer').appendChild(msgForm);
            GOOM.UI.update(byId('homeLoginContainer'));
        } else {
            var el = byId('loginMessage');
            if(el) {
                setText(el, result.message);
            }
        }
        
        if(cb) {
            cb(result.success);
        }
    }
    
    return {
        show : function() {
            LoginDialog.setHTML(getLoginHTMLStr());
            LoginDialog.open();
        },
        
        append : function(el, callback) {
            el.innerHTML = getLoginHTMLStr({ noHeader : true, noBtn : true });
            var form = el.getElementsByTagName('form');
            form[0].onsubmit = function(){  GOOM.user.Auth.login(this, callback); return false;}
        },
        
        logout : function() {
            GOOM.Navigation.load('/', function() {
                GOOM.util.Get(_api.logout, function(result) {
                    GOOM.User.updateDetails(result);
                })
            });
        },
        
        login : function(formEl, cb) {
            clearFormMsgs(formEl);
            disableFields(formEl.elements);
            formEl.action = _api.login;
            GOOM.util.FormRequest(formEl, { success : function(r) { handleResponse(formEl, r, cb); },
                                            postData : 'multidomain_cb=GOOM.User.removeLoginFrame'});
        }
    }
})();
/* $Rev: 15928 $ */
createNS('GOOM.user');
createNS('GOOM.user.Registration');

GOOM.user.Registration = (function() {
    var _api = '/user/api/create',
        _dialog = new GOOM.util.Dialog({isModal:true});

    function handleResponse(formEl, result, cb) {
        if(!cb && result.success) {
            GOOM.User.updateDetails(result);
            GOOM.Navigation.load('/home');
            _dialog.close();
            return;
        }
        enableFields(formEl);
        handleFormResults(formEl, result);
        if(cb) {
            cb(result.success);
        }
        var el = _dialog.getContainer();
        el.className = el.className;
    }

    function getRegisterHTMLStr(setting) {
        setting = setting || {};
        var str = '';
        if(!setting.noHeader) {
            str = replace('<h2 class="registrationTitle">%{title}</h2><p class="registrationTxt">%{description}<br /><a href="#" onclick="GOOM.user.Auth.show(byId(\'statusBarLoginBtn\'))" title="%{login}">%{login}</a></p>',
                          { title : _('REG_TITLE'), description : _('REG_DESCRIPTION') , login : _('REG_LOGIN') });
        }
        
        str += replace('<form autocomplete="off" id="userRegisterForm" onsubmit="GOOM.user.Registration.register(this); return false;" class="modalForm"><fieldset><legend></legend><div class="username"><label for="registerUsername">%{username}</label><input id="registerUsername" name="registerUsername" class="formElement inputText clear" gtype="button" type="text" /><span class="unAvailable"></span></div><div class="email"><label for="registerEmail">%{email}</label><input id="registerEmail" name="registerEmail" class="formElement inputText clear" gtype="button" type="text" /><span class="clear invalid"></span><div id="registerDisclaim" class="disclaimer clear">%{privacy}</div></div><div class="clear"></div><div class="password"><label for="registerPassword" class="clear">%{password}</label><input id="registerPassword" name="registerPassword" type="password" class="formElement inputPassword" gtype="button" /><span class="clear invalid"></span><div id="registerDisclaim" class="disclaimer clear">%{passwordWarning}</div></div><div class="password"><label for="registerConfirmPassword" class="clear">%{confirm}</label><input id="registerConfirmPassword" name="registerConfirmPassword" type="password" class="formElement inputPassword" gtype="button" /><span class="clear invalid"></span></div><div class="clear gender"><label for="male">%{male}</label><input id="male" type="radio" name="registerGender" value="male" /><label for="female">%{female}</label><input type="radio" id="female" name="registerGender" value="female" /><span class="clear invalid"></span></div><div class="birthdate"><label for="registerDay">%{birth}</label><div><select name="registerDay" id="registerDay" class="formElement select settingsDay" gtype="button"><option selected="selected">%{day}</option></select><select id="registerMonth" name="registerMonth" class="formElement select settingsMonth" gtype="button"><option selected="selected">%{month}</option></select><select id="registerYear" name="registerYear" class="formElement select settingsYear" gtype="button"><option selected="selected">%{year}</option></select></div><span class="clear invalid"></span></div><div class="clear acceptTos"><input id="registerTerms" value="true" type="checkbox" name="registerTerms" /><label for="registerTerms">%{terms}</label><span class="clear invalid"></span></div><div class="containerSubmit">',
                       { privacy : _('REG_DISCLAIM_EMAIL'), confirm : _('REG_CONFIRM_PASS'), birth : _('REG_BIRTH'), year : _('REG_YEAR'), month : _('REG_MONTH'), day : _('REG_DAY'), terms : _('REG_TERMS'), username : _('REG_USERNAME'), password : _('REG_PASS'), email : _('REG_EMAIL'), male : _('REG_MALE'), female : _('REG_FEMALE'), passwordWarning : _('REG_PASSWORD_WARNING')});
        
        if(!setting.noBtn) {
            str += replace('<input gtype="button" class="clear button primary" value="%{submit}" type="submit">',
                           { submit : _('REG_SUBMIT') });
        }
        str += '</div></fieldset></form>';
        return str;
    }

    function updateDate() {
        var dayEl = byId('registerDay'),
            monthEl = byId('registerMonth'),
            yearEl = byId('registerYear'),
            y = new Date().getFullYear();

        for(var i = 1; i < 32; ++i) {
            addOption(dayEl, i , i);
        }

        for(i = 1; i < 13; ++i) {
            addOption(monthEl, i , i);
        }

        for(i = y - 12; i > y - 100; --i) {
            addOption(yearEl, i, i);
        }
    }

    return {
        show : function(triggerEl) {
            _dialog.setHTML(getRegisterHTMLStr());
            _dialog.open();
            updateDate();
        },

        append : function(el, callback) {
            el.innerHTML = getRegisterHTMLStr({ noHeader : true, noBtn : true });
            var form = el.getElementsByTagName('form');
            form[0].onsubmit = function(){  GOOM.user.Registration.register(this, callback); return false;}
            updateDate();
        },

        register : function(formEl, cb) {
            clearFormMsgs(formEl);
            disableFields(formEl.elements);
            formEl.action = _api;
            GOOM.util.FormRequest(formEl, { success : function(r) { 
                handleResponse(formEl, r, cb); 
            }});
        }
    }
})();
/* $Id: Utils.js 15121 2010-02-09 17:03:02Z Carlo Pescetelli $ */

createNS('GOOM.user.Utils');

GOOM.user.Utils = {
    checkUsername : function(el, excludeUsername) {
        var str = el.value;

        if(str == excludeUsername) {
            return;
        }
        if(el.getAttribute('gtype') == 'button') {
            el = el.parentNode.parentNode;
        }
        removeClass(el, 'invalidInput');

        addClass(el, 'loadingResult');
        GOOM.util.Request('GET', '/user/api/check?username=' + str, function(r) {
            removeClass(el, 'loadingResult');
            if(!r.success){
                return;
            }
            if(r.available) {
                removeClass(el, 'invalidInput');
                setFormMsg(el, _('USERNAME_AVAILABLE'), 'available');
            } else {
                addClass(el, 'invalidInput');
                setFormMsg(el, _('USERNAME_UNAVAILABLE'));
            }
        });
    },
        
    saveProfile : function(formEl) {
        GOOM.util.FormRequest(formEl, {success : function(result) {
            enableFields(formEl.elements);
            if(result.success) {
                if(result.invalidateUser) {
                   GOOM.User.isValidated = false;
                }
                if(result.reloadNeeded) {
                    window.location = '/home';
                } else {
                    GOOM.Navigation.load('/home');
                }
                GOOM.site.Note.show('normal', result.message);
            } else {
                if(result.errors) {
                    handleFormResults(formEl, result, true);
                } else {
                    GOOM.util.FatalMsg({message : result.message});
                }
            }
        }});
        disableFields(formEl.elements);
        clearFormMsgs(formEl);
    },

    saveAvatar : function(triggerEl) {
        GOOM.util.FileUpload(triggerEl, '/user/settings/avatar', function(r) {
            if(!r.success) {
                GOOM.util.FatalMsg({message : r.message});
                return;
            }
            GOOM.user.StatusBar.update(true);
            if(GOOM.User.isLoggedIn) {
                byId('settingsAvatarImg').src = window.getASSET() + '/goomer/' + GOOM.User.userDetails.id + '_avatar/t3?nocache=' + (new Date()).getTime();
            }
        });
    },

    showComingSoon : function(triggerEl, alignEl) {
        var body = replace("<h2 class='comingSoonTitle'>%{title}</h2><p class='comingSoonTxt'>%{body}</p>",
                {title : _('SHOUT_COMING_SOON') , body : _('SHOUT_COMING_SOON_BODY')});
        GOOM.radio.Utils.comingSoonDialog.setHTML(body);
        GOOM.radio.Utils.comingSoonDialog.open(triggerEl, alignEl);
    },

    report : function(el, type, reportId) {
        if(el.getAttribute('loaded')) {
            return;
        }
        el.setAttribute('loaded', true);

        var label = el.innerHTML,
            reportUri  = '/user/api/flag?type=' + type + '&reportId=' + reportId;

        setText(el,_('LABEL_SENDING'));
        if(GOOM.User && GOOM.User.isLoggedIn) {
            reportUri += '&userId=' + GOOM.User.userDetails.id;
        }
        GOOM.util.Get(reportUri, function(r) {
              if(!r.success) {
                  return;
              }
              setText(el, r.message);
              setTimeout(function() {setText(el, label)}, 3000);
        });
    },

    contact : function(formEl) {
        disableFields(formEl.elements);
        GOOM.util.FormRequest(formEl, {success : function(r) {
            enableFields(formEl.elements);
            if(r.success) {
                formEl.reset();
                GOOM.Navigation.load('/');
            }
            if(r.message) {
                GOOM.site.Note.show('normal', r.message);
            }
        }});
    },

///////////////////////////////////////////////////////////////////////////////////////////////////

    forgotDialog : new GOOM.util.Dialog(true),
    forgotDialogCache : false,

    showForgotPassword : function() {
        var me = GOOM.user.Utils;
        if(me.forgotDialogCache) {
            me.forgotDialog.setHTML(me.forgotDialogCache);
            GOOM.UI.inputDefaultText(byId('passwordEmail'));
        } else {
            me.forgotDialog.loading();
            GOOM.util.Request('GET','/user/overlay/password-reset', {
                success : function(r) {
                    me.forgotDialogCache = r;
                    me.forgotDialog.setHTML(r);
                    GOOM.UI.inputDefaultText(byId('passwordEmail'));
                },
                rawText : true});
        }
        me.forgotDialog.open();
    },

    forgotPassword : function(formEl) {
        disableFields(formEl.elements);
        GOOM.util.FormRequest(formEl, {success : function(r) {
            enableFields(formEl.elements);
            if(r.success) {
                GOOM.Navigation.load('/', function(){GOOM.site.Note.show('normal', r.message);});
                return;
            } else {
                setText(byId('passwordResetMessage'), r.message);
            }
        }});
    },

    showValidateEmail : function() {
        var dialog = new GOOM.util.Dialog({isModal : true, isNarrow : true});
        dialog.loading();
        dialog.open();
        
        GOOM.util.Request('GET','/user/overlay/validate-email', {success : function(r) {
            dialog.setHTML(r);
            var form = byId('validateEmailForm');
            if(form) {
                var inputs = form.getElementsByTagName('input');
                if(inputs[0]) {
                    inputs[0].focus();
                }
            }
        }, rawText : true});
    },

    resendValidateEmail : function(triggerEl) {
        if(!GOOM.User.isLoggedIn) {
            GOOM.user.Auth.show();
            return;
        }
        GOOM.util.Get('/user/api/resend-confirmation-mail', function(r) {
            if(r.success) {
                GOOM.site.Note.show('normal', r.message);
                return;
            }
            GOOM.util.FatalMsg({message : r.message});
        })
        GOOM.util.DialogMgr.close();
    }
};
/* $Id$ */

createNS('GOOM.user.Dashboard');

GOOM.user.Dashboard = function() {
    var curObjId = false,
        curObjHTML = false,
        titleTimeout = null,
        loadingSuccessful = false,
        titleRequest = null,
        buildTemplate = function (m) {
            var t = {radioImg     : '<img src="%{radioImgSrc}" onerror="defaultImg(this, \'/img/radio_t2.jpg\')" alt="icon" class="thumb t2" />',
                     radioWrapper : '<div class="radioCreatedWrapper">%{nowPlaying} %{songName} %{artistName}</div>',
                     nowPlaying   : '<h5 class="radioCreatedName">%{nowPlayingLabel}</h5>',
                     songName     : '<h5 class="radioCreatedSlogan">%{songName}</h5>',
                     artistName   : '<div class="followers"><span>%{artistName}</span></div>'};

                var nowPlaying   = replace(t.nowPlaying, {'nowPlayingLabel' : _('NOW_PLAYING')}),
                    songName     = replace(t.songName, {'songName' : m.songTitle.slice(0,30)}),
                    artistName   = replace(t.artistName, {'artistName' : m.artist.slice(0,30)}),
                    radioImg     = replace(t.radioImg, {'radioImgSrc' : getASSET() + '/mediaAsset/' + m.siteId + '_' + m.coverObjectId + '_' + m.coverMediaId + '/t2'}),
                    radioWrapper = replace(t.radioWrapper, {'nowPlaying' : nowPlaying,
                                                            'songName'   : songName,
                                                            'artistName' : artistName});
            return radioImg + radioWrapper;
        },
        update = function (result) {
            byId('rowsContainer').innerHTML = result;
        };

    return {
        selectTab : function(id) {
            var Get   = GOOM.util.Request,
                _tabs = byId('radioCreatedFollowingTabs').getElementsByTagName('li');

            for (var i = 0, len = _tabs.length; i < len; ++i) {
                if (_tabs[i].id == id) {
                    _tabs[i].className = 'active';
                    Get('GET', '/user/list/' + id, { success : update, rawText : true });
                } else {
                    _tabs[i].className = '';
                }
            }
        },

        changePage : function(id, offset) {
            GOOM.util.Request('GET', '/user/list/' + id + '?offset=' + offset, { success : update, rawText : true });
        },

        loadTitle : function(el, radioId, siteId) {
            clearTimeout(titleTimeout);
            if(curObjId != el.id) {

                if(curObjId && curObjHTML) {
                    var curObj = byId(curObjId);
                    if (curObj) {
                        removeClass(curObj, 'radioCreatedHover');
                        if(loadingSuccessful) {
                            curObj.innerHTML = curObjHTML;
                        }
                    }
                }

                curObjId = el.id;
                curObjHTML = el.innerHTML;
                addClass(el, 'radioCreatedHover');

                var now = new Date(),
                    uri = '/radio/list/whatson?radioId=' + radioId + '&nocache=' + now.getTime() + '&timezone=' + -now.getTimezoneOffset();

                if(titleRequest) {
                    titleRequest.abort();
                }
                titleRequest = new GOOM.util.Request('GET', uri, {success : function(r) {
                    if (!r.success) {
                        return;
                    }

                    if(r.results[0] && r.results[0][0]) {
                        var m = r.results[0][0];
                        if(m) {
                            el.innerHTML = buildTemplate({songTitle     : m.title,
                                                          artist        : m.artist,
                                                          mediaId       : m.mediaId,
                                                          objectId      : m.objectId,
                                                          coverMediaId  : m.coverMediaId,
                                                          coverObjectId : m.coverObjectId,
                                                          siteId        : siteId});
                            loadingSuccessful = true;
                        }
                    } else {
                        loadingSuccessful = false;
                    }
                }}, 2500);
            }
        },

        unloadTitle : function(el) {
            titleTimeout = setTimeout(function() {
                if(curObjId && curObjHTML) {
                    var curObj = byId(curObjId);
                    if(curObj) {
                        removeClass(curObj, 'radioCreatedHover');
                        if(loadingSuccessful) {
                            curObj.innerHTML = curObjHTML;
                        }
                    }
                }
                curObjId = null;
                curObjHTML = '';
            }, 250);
        }
    }
}()
createNS('GOOM.radio.Utils');

GOOM.radio.WhatsOn = {
    url : '/radio/list/whatson?radioId=%{radioId}',
    template :{ 
        radio    : ['<div class="span-3 nowTitle">%{description}</div><h2>%{artist}</h2>',
                    '<div class="span-3 nextTitle"></div><h3>%{artist}</h3>',
                    '<div class="span-3 nextTitle"></div><h4>%{artist}</h4>',
                    '<div class="span-3 nextTitle"></div><h5>%{artist}</h5>']
    },
    
    start : function(type, radioIds, elementsIds) {
        this.elements = elementsIds;
        this.radioIds = radioIds;
        this.type = type;
        clearTimeout(this.count);
        setTimeout(function() { GOOM.radio.WhatsOn.run() }, 500);
    },
    
    run : function(){
        var me = GOOM.radio.WhatsOn;
        var now = new Date();

        var tz = now.getTimezoneOffset();
        tz = -tz;
        GOOM.util.Request('GET' , replace(me.url, {radioId : me.radioIds.join(',')}) + '&nocache=' + now.getTime() + '&timezone=' + encodeURIComponent(tz), { success : me.update}, 10000);
    },
    
    stop : function() {
        clearTimeout(this.count);
    },
    
    update : function(r) {
        var me = GOOM.radio.WhatsOn, i, q, el, html, divs;
        if(me.type == 'radio') {
            for(i = 0; i < me.elements.length; i++) {
                el = byId(me.elements[i]);
                if(!el) {
                    continue;
                }
                html = [];
                for(q = 0; q < me.template.radio.length; q++) {
                    if(!r.results[i] || (r.results[i] && !r.results[i][q])) {
                        continue;
                    }
                    if(q == 0) {
                        html.push(replace(me.template.radio[q], {description : _('WHATSON_COMINGUP'), artist : shortenerNoEscape(r.results[i][q].artist, 40)}));
                    } else {
                        html.push(replace(me.template.radio[q], {artist : shortenerNoEscape(r.results[i][q].artist, 40)}));
                    }
                }
                if(html.length) {
                    el.innerHTML = html.join('');
                }
            }
        } else if(me.type == 'radiocase') {
            for(i = 0; i < me.elements.length; i++) {
                el = byId(me.elements[i]);
                if(!el) {
                    continue;
                }
                if(!r.results[i]) {
                    continue;
                }
                divs = el.getElementsByTagName('div');
                if(divs[0]) {
                    setText(divs[0], shortenerNoEscape(r.results[i][0].title, 20));
                }
                if(divs[1]) {
                    setText(divs[1], shortenerNoEscape(r.results[i][0].artist, 20));
                }
            }
        }
        me.count = setTimeout(GOOM.radio.WhatsOn.run, 45000);
    }
};

GOOM.Navigation.Events.onPageLeave.subscribe(function() {
        GOOM.radio.WhatsOn.stop();
})
/* $Id: TinyBrowser.js 6940 2009-08-06 16:52:57Z Claudio Beatrice $ */

createNS('GOOM.radio');

GOOM.radio.TinyBrowser = function() {
    var Get = GOOM.util.Get,
        _store = { 'latest' : [], 'similar' : [], 'popular' : []},
        _page = { 'latest' : 0, 'similar' : 0, 'popular' : 0},
        _selected = { 'latest' : 0, 'similar' : 0, 'popular' : 0},
        _selectedTab = 'latest',
        _followIndex = false,
        _uri = '/radio/list/%{list}?limit=4&offset=%{offset}&radioId=%{radioId}';
    
    var displayRadio = function(radioObj, tabId) {
        byId('tinyBrowserContent').style.visibility = 'visible';
        if(!radioObj) {
            byId('tinyBrowserContent').style.visibility = 'hidden';
            return;
        }
        
        var img = byId('tinyBrowserThumbnail').getElementsByTagName('img')[0];
        if(img) {
            GOOM.UI.thumbnailDOM(img, 'radio', radioObj, 't7');
        }
        var imgLnk = byId('tinyBrowserThumbnail').getElementsByTagName('a')[0];
        if(imgLnk) {
            imgLnk.title = radioObj.name;
            imgLnk.href = '/radio/' + radioObj.id;
        }
        
        var titleEl = byId('tinyBrowserName');
        titleEl.href = '/radio/' + radioObj.id;
        titleEl.title = radioObj.name;
        setText(titleEl, shortener(radioObj.name, 20));
        setText(byId('tinyBrowserSlogan'), radioObj.slogan);
        setText(byId('tinyBrowserFollowers'), radioObj.followers);
        
        if(_followIndex) {
            GOOM.user.Follow.removeFollowBtn(_followIndex);
        }
        
        _followIndex = GOOM.user.Follow.createFollowBtn(byId('tinyBrowserFollowBtn'), radioObj.slug, function(radioObj, isAdd){
            var names = ['latest', 'similar', 'popular'];
            for(var i = 0; i < names.length; i++) {
                var list = _store[names[i]];
                for(var q = 0; len = list.length, q < len; q++) {
                    if(list[q].slug !=  radioObj.slug) {
                        continue;
                    }
                    _store[names[i]][q].followers = radioObj.followers;
                }
            }
        });
    };
    
    var displaySliderEntries = function(radioList) {
        var entriesHTML = [];
        var template = '<li class="thumbnail" ><a title="%{name}" onclick="GOOM.radio.TinyBrowser.select(this, %{index}); return false;" href="/radio/%{id}"><img class="t3" alt="%{name}" onload="this.style.visibility=\'visible\'" onerror="defaultImg(this, \'/img/radio_t3.jpg\')" src="%{thumbnail}" alt="%{name}" /></a></li>';
        for(var i = 0; i < radioList.length; i++) {
            radioList[i].thumbnail = window.getASSET() + '/radio/' + radioList[i].id + '/t3';
            radioList[i].index = i;
            entriesHTML.push(replace(template, radioList[i]));
        }
        byId('tinyBrowserSliderList').innerHTML = entriesHTML.join(' ');
    };
    
    var update = function(result, tabId) {
        if(!result.success) {
            return;
        }
        _store[tabId] = _store[tabId].concat(result.radios);
        if(_selectedTab == tabId) {
            displaySliderEntries(_store[tabId].slice(_page[tabId], 4));
            displayRadio(_store[tabId][_selected[tabId]], tabId);
        }
    };
    
    return {
        selectTab : function(el, id) {
            var me = GOOM.radio.TinyBrowser;
            tabs = byId('tinyBrowserTabs').getElementsByTagName('div');
            for(var i = 0, len = tabs.length; i < len; i++) {
                tabs[i].className = "";
            }
            el.parentNode.className = 'active';
            _selectedTab = id;
            if(_store[id].length) {
                displaySliderEntries(_store[id].slice(_page[id], 4));
                displayRadio(_store[id][_selected[id]]);
                return;
            }
            var radioId = 1;
            if(window.pageObj && window.pageObj.type == "RADIO") {
               radioId = window.pageObj.radioId;
            }    
            var uri = replace(_uri, {list : _selectedTab, offset: _page[_selectedTab], radioId: radioId });
            Get(uri, function(result){ 
                update(result, id)
            });
        },
        
        select : function(el, index) {
            var me = GOOM.radio.TinyBrowser;
            var radioObj = _store[_selectedTab][index];
            _selected[_selectedTab] = parseInt(index, 10);
            if(!radioObj) { 
                var uri = replace(_uri, {list : _selectedTab, offset: _page[_selectedTab] });
                Get(uri, function(result){ 
                    update(result, _selectedTab)
                });
                return;
            }
            displayRadio(radioObj);
        },
        
        slideLeft : function() {
            
        },
        
        sliderRight : function() {
            
        }
    }
}()

createNS('GOOM.radio.Utils');

GOOM.radio.Utils = {
    uri : { image : '/radio/api/image-upload', overlayRadio : '/radio/overlay/form' },
    dialogCreate : new GOOM.util.Dialog({isModal : true}),
    comingSoonDialog : new GOOM.util.Dialog({isModal : false, width: 250}),
    defaultRadioId : 0,
    statusDialog : new GOOM.util.Dialog({isModal : true, isNarrow : true}),
    isStatusSubscribe : {},
    checkingRadioName : false,

    showOverlay : function(uid, cloneRadioId, genreId){
        if(!GOOM.User.checkStatus(function() { GOOM.radio.Utils.showOverlay(uid, cloneRadioId); })) {
            return;
        }

        var displayDialog = function() {
            var args = '?';
                if(uid) {
                    if(args != '?') {
                        args += '&';
                    }
                    args += 'uid=' + uid;
                }
                if(cloneRadioId) {
                    if(args != '?') {
                        args += '&';
                    }
                    args += 'cloneRadioId=' + cloneRadioId;
                }
                if(genreId) {
                    if(args != '?') {
                        args += '&';
                    }
                    args += 'genreId=' + genreId;
                }

                GOOM.util.Form.userHasLogo    = false;
                GOOM.util.Form.userHasProfile = false;
                GOOM.util.Form.previewImagesRequestDone = false;

                GOOM.util.Request('GET', GOOM.radio.Utils.uri.overlayRadio + args,
                        { success : function callback(result) {
                                        GOOM.radio.Utils.dialogCreate.setHTML(result);
                                        GOOM.radio.Utils.dialogCreate.open();
                        },
                        rawText : true });

                GOOM.radio.Utils.dialogCreate.loading();
                GOOM.radio.Utils.dialogCreate.open();
        };

        if(!uid || cloneRadioId) {
            GOOM.site.Util.isServiceAvailable(function() {
                if (GOOM.site.Util.SNA) {
                    GOOM.site.Util.showSNA();
                } else {
                    displayDialog();
                }
            });
        } else {
            displayDialog();
        }
    },

    showShoutOverlay : function(triggerEl, alignEl){
        var body = replace('<h2 class="comingSoonTitle">%{soon}</h2><p class="comingSoonTxt">%{text}</p><a href="/about/alpha" onclick="GOOM.Navigation.load(this.href); return false;" class="comingSoonLink" title="%{title}">%{title}</a>', {
            soon : _('COMINGSOON_COMINGSOON'), text : _('COMINGSOON_TEXT'), title : _('COMINGSOON_TITLE') } );
        GOOM.radio.Utils.comingSoonDialog.setHTML(body);
        GOOM.radio.Utils.comingSoonDialog.open(triggerEl, alignEl);
    },

    showAddShowOverlay : function(triggerEl, alignEl){
        var body = replace('<h2 class="comingSoonTitle">%{soon}</h2><p class="comingSoonTxt">%{text}</p><a href="/about/alpha" onclick="GOOM.Navigation.load(this.href); return false;" class="comingSoonLink" title="%{title}">%{title}</a>', {
            soon : _('COMINGSOON_COMINGSOON'), text : _('COMINGSOON_ADDSHOW_TEXT'), title : _('COMINGSOON_TITLE') } );
        GOOM.radio.Utils.comingSoonDialog.setHTML(body);
        GOOM.radio.Utils.comingSoonDialog.open(triggerEl, alignEl);
    },

    checkRadioName : function(submitEl, el, radioUid) {
       var str = el.value,
           tmpEl = el,
           uri = '/radio/api/check?name=' + str,
           callback = function(r) {
               if(!r.success) {
                   return;
               }
               while (tmpEl.parentNode && !tmpEl.parentNode.getElementsByTagName('span')[0]) {
                   tmpEl = tmpEl.parentNode;
               }
               setFormMsg(tmpEl, '');
               removeClass(tmpEl, 'loadingResult');
               var span = tmpEl.parentNode.getElementsByTagName('span')[0];
               if (r.exists) {
                   addClass(tmpEl, 'invalidInput');
                   if(span) {
                       span.style.display = 'block';
                       span.className = 'unAvailable';
                       setText(span, _('API_RADIO_ALREADY_EXISTING'));
                   }
                   disableFields([submitEl]);
               } else {
                   removeClass(tmpEl, 'invalidInput');
                   if(span) {
                       span.style.display = 'none';
                       span.className = '';
                       setText(span, '');
                   }
                   enableFields([submitEl]);
               }
           },
           checkFn  = function() {
               if(str.length < 3) {
                   while (tmpEl.parentNode && !tmpEl.parentNode.getElementsByTagName('span')[0]) {
                       tmpEl = tmpEl.parentNode;
                   }
                   var span = tmpEl.parentNode.getElementsByTagName('span')[0];
                   addClass(tmpEl, 'invalidInput');
                   if(span) {
                       span.style.display = 'block';
                       span.className = 'unAvailable';
                       setText(span, _('API_RADIO_NAME_NOT_VALID'));
                       disableFields([submitEl]);
                   }
                   return;
               }
               enableFields([submitEl]);
               addClass(el, 'loadingResult');
               if(radioUid) {
                   uri += '&uid=' + radioUid;
               }
               GOOM.util.Request('GET', uri, {success : callback});
           };

       if(GOOM.radio.Utils.checkingRadioName) {
           clearTimeout(GOOM.radio.Utils.checkingRadioName);
       }

       GOOM.radio.Utils.checkingRadioName = setTimeout(function() { checkFn() }, 500);
    },

    submitRadio : function(formEl) {
        if(!GOOM.User.checkStatus(function() { GOOM.radio.Utils.submitRadio(formEl); })) {
            return;
        }

        disableFields(formEl.elements);
        if(formEl.editCreateRadioUserTZOffset) {
            formEl.editCreateRadioUserTZOffset.value = -(new Date()).getTimezoneOffset();
        }

        var tagEl = formEl.elements.editCreateRadioTags;
        if(tagEl.title == tagEl.value) {
            tagEl.value = '';
        }
        GOOM.util.FormRequest(formEl, {success : function(r) {
            if(!handleUserStatus(r)) {
                return;
            }
            enableFields(formEl.elements);
            if(r.success) {
                GOOM.UserRadios.update();
                GOOM.util.DialogMgr.close();
                GOOM.Navigation.load('/radio/' + r.radioSlug);
            } else {
                if(r.errors) {
                    handleFormResults(formEl, r, true);
                } else {
                    GOOM.util.FatalMsg({message : r.message});
                }
            }
        }});
    },

    updateImage : function(el, previewElId, previewElFilter, type , radioId) {
        var msgField = byId(previewElId == 'profilePreview' ? 'profileGuidance' : 'logoGuidance'),
            form = byId('editCreateRadioForm'),
            options = [{name : 'type', value : type}],
            previewElStyle = getASSET() + '/tmp/%{filename}/%{filter}',
            callback = function(result) {
                var inputEl = byId(el.id + 'HiddenInput');
                byId(previewElId + 'Loading').style.display = 'none';
                if(!result.success) {
                   var msgField = byId(previewElId == 'profilePreview' ? 'profileGuidance' : 'logoGuidance');
                   if(inputEl) {
                       addClass(inputEl, 'imageFail');
                   }
                   if(msgField) {
                       msgField.innerHTML = result.message;
                   }
                   return;
                }
                if(previewElId) {
                    var previewEl = byId(previewElId);
                    if(previewEl) {
                        previewEl.src = replace(previewElStyle, { filename : result.filename, filter : previewElFilter });
                    }
                    if(inputEl) {
                        removeClass(inputEl, 'imageFail');
                    }
                    byId(el.id + 'Uid').value = result.filename; //makes sure that we store the tmp key in form, when pre create
                    if (previewElId == 'profilePreview') {
                        GOOM.util.Form.userHasProfile = true;
                    } else if (previewElId == 'logoPreview') {
                        GOOM.util.Form.userHasLogo = true;
                    }
                }
            };

        if(!el.value || !form) {
            return;
        }
        byId(previewElId).style.visibility = 'hidden';
        byId(previewElId + 'Loading').style.display = 'inline';

        options.push({name : 'filename', value : el.value});
        if(radioId) {
            options.push({name : 'radioId', value : radioId });
        }

        GOOM.util.FileUpload(el, this.uri.image, callback, options, 'POST');
    },

    toggleForm : function(enableId, disableId) {
        GOOM.site.Util.isServiceAvailable(function() {
            if (GOOM.site.Util.SNA) {
                GOOM.site.Util.showSNA();
            } else {
                byId(enableId).style.display = 'inline';
                byId(disableId).style.display = 'none';
            }
        });
    },

    leave : function(uid, isLast) {
        var uri = '/radio/api/delete?uid=' + uid;
        GOOM.util.Request('POST', uri, {success : function(result) {
            if(!result.success) {
                GOOM.util.FatalMsg({message : result.message});
                return;
            }
            GOOM.Navigation.load('/home');
            GOOM.UserRadios.update();
        }});
    },

    checkStatus : function(uid, fromBtn) {
        if(GOOM.radio.Pending.isActive(uid)) {
            return true;
        } else {
            if(fromBtn) {
                var template = replace('<div class="waitPending"><h2>%{title}</h2><p>%{text}</p><form class="modalForm" method="" onsubmit="GOOM.util.DialogMgr.close(); return false;"><div class="containerSubmit"><input gtype="button" class="clear button primary" value="%{button}" type="submit"></div></form></div>', {
                    title : _('RADIO_STATUS_PENDING_TITLE_SHORT'), button : _('RADIO_STATUS_PENDING_OK'), text : _('RADIO_STATUS_PENDING_BODY_SHORT') });
            } else {
                template = replace('<div class="waitPending"><h2>%{title}</h2><p class="noworries">%{meantime}</p><p><a href="#" title="%{link1}" onclick="GOOM.blog.Editor.showPost(\'formContainer\', [\'writePost\', \'sortPager\'], [\'formContainer\']); GOOM.util.DialogMgr.close(); return false;">%{link1title}</a><br />%{link1txt}</p><p><a href="#" title="%{link3}" onclick="GOOM.util.DialogMgr.close(); GOOM.user.Share.showDialog(\'radio\', window.pageObj); return false;">%{link3title}</a><br />%{link3txt}</p><p>%{dashboard}</p><p><div class="progressBar"><div id="progress"></div></div></p><form class="modalForm" method="" onsubmit="GOOM.util.DialogMgr.close(); return false;"><fieldset><legend></legend><div class="containerSubmit"><input gtype="button" class="clear button primary" value="%{button}" type="submit"></div></fieldset></form></div>', {
                    cancelBtn : _('LABEL_CLOSE'), text : _('DIALOG_RADIO_PENDING_TEXT'), title : _('RADIO_STATUS_TEMPLATE_TITLE'), meantime : _('RADIO_STATUS_TEMPLATE_MEANTIME'), link1 : _('RADIO_STATUS_TEMPLATE_LINK1'), link1title : _('RADIO_STATUS_TEMPLATE_LINK1TITLE'), link1txt : _('RADIO_STATUS_TEMPLATE_LINK1TXT'), link3 : _('RADIO_STATUS_TEMPLATE_LINK3'), link3title : _('RADIO_STATUS_TEMPLATE_LINK3TITLE'), link3txt : _('RADIO_STATUS_TEMPLATE_LINK3TXT'), dashboard : _('RADIO_STATUS_TEMPLATE_DASHBOARD'), button : _('RADIO_STATUS_TEMPLATE_BUTTON') });
            }

            var Dialog = this.statusDialog;
            Dialog.setHTML(template);
            Dialog.open();
            if(byId('progress')) {
                swfobject.embedSWF("/progressBar/goomProgressBar.swf", "progress",
                        "400", "20", "9.0.0", "/progressBar/goomProgressBar.swf",
                        { duration : 25 }, { });
            }
        }
        var radioName = window.pageObj.name;
        var slug = window.pageObj.slug;
        if(this.pendingEventSub != uid) {
            GOOM.radio.Pending.Events.onChange.subscribe(function(uid, radioId) {
                var me = GOOM.radio.Utils;
                if(Dialog.isOpen()) {
                    Dialog.close();
                }
                me.loadMostPlayed(uid);
                GOOM.site.Note.show('normal', replace(_('RADIO_CREATE_SUCCESS'), 
                                    {radioName :  radioName }), true,
                                    [function() {play('radio', radioId); return false; },
                                     function() { GOOM.Navigation.load('/radio/' + slug + '/rotation/songs');
                                                  return false; }]);
            });
            this.pendingEventSub = uid;
        }
        return false;
    },

    loadMostPlayed : function(uid) {
        var template = {'odd'   : '<div class="oddRow">%{entryContent}</div>',
                        'even'  : '<div class="evenRow">%{entryContent}</div>',
                        'entry' : '<a href="#" onclick="GOOM.PlayItem(this); return false" class="miniPlay" gdata="%{mediaId}"><img src="/img/asset_play.png"/></a><img class="thumb t2" alt="icon" onerror="defaultImg(this, \'/img/radio_t2.jpg\')" src="%{src}" /><div class="mostPlayedWrapper"><h5 class="mostPlayedTitle">%{title}</h5><div class="mostPlayedAlbum"></div><div class="mostPlayedArtist">%{artist}</div></div><div class="clear"></div>'};

            GOOM.util.Request('GET', '/playlist/list/playlist?radioId=' + window.pageObj.id + '&radioUid=' + window.pageObj.uid + '&limit=5', { success : function(r) {
                if (!r.success) {
                    return;
                }
                var content = '', entryContent = '', entries = r.results;
                for (var i = 0, len = entries.length; i < len; i++) {
                    var e = entries[i],
                        src = getASSET() + '/mediaAsset/'+ e.siteId + '_' + e.objectId + '_' + e.mediaId +'/t2',
                        artists = '';

                    for (var j = 0, len2 = e.artists.length; j < len2; j++) {
                        artists += e.artists[j].name + ', ';
                    }
                    entryContent = replace(template.entry, {src : src, mediaId : e.id, title : e.title, artist : artists.substr(0, artists.length - 2)});
                    if (i % 2) {
                        content += replace(template.even, {entryContent : entryContent});
                    } else {
                        content += replace(template.odd, {entryContent : entryContent});
                    }
                }
                byId('rowsContainer').innerHTML = content;
            }
        });
    },

    //XXX should be submit form NRG-985
    showPreview : function() {
        var themeId = byId('editCreateRadioTheme').value,
            profileUid = byId('editCreateRadioProfileUid').value,
            logoUid = byId('editCreateRadioLogoUid').value,
            title = byId('editCreateRadioName').value,
            slogan = byId('editCreateRadioSlogan').value,
            description = byId('editCreateRadioDescription').value,
            tags = byId('editCreateRadioTags').value,
            radioUid = byId('radioUid'),
            genreId = byId('editCreateRadioGenre'),
            uri = '/radio/theme/preview/' + themeId,
            options = [];

        genreId = (genreId) ? genreId.value : '';

        if(title) {
            options.push('name=' + title);
        }
        if(profileUid) {
            options.push('profileUid=' + profileUid);
        }
        if(logoUid) {
            options.push('logoUid=' + logoUid);
        }
        if(slogan) {
            options.push('slogan=' + slogan);
        }
        if(description) {
            options.push('description=' + description);
        }
        if(tags) {
            options.push('tags=' + tags);
        }
        if(genreId) {
            options.push('genreId=' + genreId);
        }
        if(radioUid && radioUid.value) {
            options.push('uid=' + radioUid.value);
        }

        options.push('hasLogoImage=' + GOOM.util.Form.userHasLogo);
        options.push('hasProfileImage=' + GOOM.util.Form.userHasProfile);

        for(var i = 0, len = options.length; i < len; ++i) {
            if(i == 0) {
                uri += '?' + options[i];
            } else {
                uri += '&' + options[i];
            }
        }
        window.open(uri);
    }

};
GOOM.radio.Pending = {
    timeout : 5000,
    counter : null,
    interval : {},
    active : {},
    Events : {
        onChange : new GOOM.Event("G:Pending:onReady")
    },

    start : function(uid) {
        if(this.interval[uid]) {
            return;
        }

        this.interval[uid] = this.checkActive(uid, this.timeout);
    },

    isActive : function(uid) {
        if(this.active[uid]) {
            return true;
        }
        return false;
    },

    checkActive : function (uid) {
        GOOM.util.Get('/playlist/api/active?uid=' + uid + '&nocache=' + (new Date().getTime()), function(r) {
            var me = GOOM.radio.Pending;

            if(!r.success) {
               return;
            }

            if(r.active) {
               me.active[uid] = r.radioId;
               var pageObj = window.pageObj;
               if(pageObj.type == 'RADIO' && pageObj.uid == uid) {
                   pageObj.id = r.radioId;
                   pageObj.radioId = r.radioId;
                   pageObj.active = true;
               }
               clearTimeout(GOOM.radio.Pending.counter);
               me.Events.onChange.fire(uid, r.radioId);
            } else {
                me.counter = setTimeout(function() { GOOM.radio.Pending.checkActive(uid) }, me.timeout);
            }
        }, this.timeout);
    }
}

GOOM.Navigation.Events.onPageLeave.subscribe(function() {
    clearTimeout(GOOM.radio.Pending.counter);
    GOOM.radio.Pending.timeout = 5000;
});

createNS('GOOM.blog.Editor');

GOOM.blog.Editor = function() {

    var Get = GOOM.util.Request,
        _pageStatus = { containerId : null,
                        containerHTML : '',
                        disableIds : ['formContainer'],
                        enableIds : ['postContainer'] },
        _statusStack = [_pageStatus];

    var _show = function(containerId, uri, richEditor) {
                    Get('GET', uri, { success : function(result) {
                        var container = byId(containerId);
                        container.innerHTML = result;
                        var textarea = container.getElementsByTagName('textarea');
                        if(richEditor && textarea && textarea.length) {
                            textarea = textarea[0];
                            var iframe = document.createElement('iframe');
                            iframe.src = '/blogpost/overlay/rich-editor';
                            iframe.style.width = textarea.offsetWidth + 'px';
                            iframe.style.height = textarea.offsetHeight + 'px';
                            textarea.style.display = 'none';
                            textarea.parentNode.insertBefore(iframe, textarea);
                        }
                        GOOM.UI.update(byId(containerId));
                        if(container.parentNode) {
                            container.parentNode.className = container.parentNode.className; //FORCE IE TO REDRAW
                        }
                    }, rawText : true });
                },

        _disable = function(el) {
                       if(el) {
                           el.style.display = 'none';
                       }
                   },

        _enable = function(el, showMode) {
                      if(el) {
                          el.style.display = 'block';
                      }
                  },

        _pagePushConfig = function(disableElements, enableElements, containerId) {
                              _pageStatus.disableElements = disableElements;
                              _pageStatus.enableElements = enableElements;
                              _pageStatus.containerId = containerId;
                              _pageStatus.containerHTML = byId(containerId).innerHTML;
                              _statusStack.push(_pageStatus);
                          },

        _pagePopConfig = function() {
                             _pageStatus = _statusStack.pop();
                         },

        _pageSetup = function(mode) {
                         var containerId = _pageStatus.containerId,
                             containerHTML = _pageStatus.containerHTML;

                         if(mode == true) {
                             var disableElements = _pageStatus.disableElements,
                                 enableElements = _pageStatus.enableElements;
                         } else {
                             disableElements = _pageStatus.enableElements;
                             enableElements = _pageStatus.disableElements;
                         }

                         for(var i = 0, len = disableElements.length; i < len; i++) {
                             _disable(disableElements[i]);
                         }

                         for(i = 0, len = enableElements.length; i < len; i++) {
                             _enable(enableElements[i]);
                         }
                         byId(containerId).innerHTML = containerHTML;
                     },

        _getElements = function(idList) {
                           var elList = [];
                           if (idList) {
                               for(var i = 0, len = idList.length; i < len; i++) {
                                   elList.push(byId(idList[i]));
                               }
                           }
                           return elList;
                       };

    return {
        showPost : function(containerId, disableIds, enableIds, postId) {
                       var pageObj = window.pageObj;

                       if(pageObj && (pageObj.type == "RADIO")) {
                           var uri = '/blogpost/overlay/form?radioUid=' + pageObj.uid,
                               disableElements = _getElements(disableIds),
                               enableElements = _getElements(enableIds),
                               editDeleteButtons = byId('postContainer').getElementsByTagName('div');

                           if(postId) {
                               var previewContainer = byId('previewContainer'),
                                   shit = previewContainer.getElementsByTagName('div');
                               uri = '/blogpost/overlay/form?radioUid=' + pageObj.uid + '&postId=' + postId;
                               previewContainer.innerHTML = byId('post-' + postId).innerHTML;
                               for (var i = 0, len = shit.length; i < len; i++) {
                                   if (shit[i].id == 'editDeletePost') {
                                       disableElements.push(shit[i]);
                                       break;
                                   }
                               }
                           }

                           for(i = 0, len = editDeleteButtons.length; i < len; i++) {
                               if(editDeleteButtons[i].id == 'editDeletePost') {
                                   disableElements.push(editDeleteButtons[i]);
                               }
                           }

                           _pagePushConfig(disableElements, enableElements, containerId);
                           _pageSetup(true);
                           _show(containerId, uri, true);
                       }
                   },

        showComment : function(containerId, disableIds, enableIds, commentId) {
                          var pageObj = window.pageObj,
                              uri = '/comment/overlay/form?commentId=' + commentId,
                              disableElements = _getElements(disableIds),
                              enableElements = _getElements(enableIds);

                          _pagePushConfig(disableElements, enableElements, containerId);
                          _pageSetup(true);
                          _show(containerId, uri, false);
                      },

        showDeletePost : function(containerId, disableIds, enableIds) {
                             var enableElements = _getElements([enableIds]);

                             _pagePushConfig([], enableElements, containerId);
                             _pageSetup(true);
                         },

        submitDeletePost : function(postId) {
                              var uri = '/blogpost/api/delete?postId=' + postId,
                                  callback = function(r) {
                                      if(!r.success) {
                                          if(!handleUserStatus(r)) {
                                              return;
                                          }
                                          GOOM.util.FatalMsg({ message :  r.message});
                                          return;
                                      }
                                      if(window.pageObj && (window.pageObj.type == 'RADIO') && window.pageObj.slug) {
                                          GOOM.Navigation.load('/radio/' + window.pageObj.slug);
                                      } else {
                                          GOOM.Navigation.refresh();
                                      }
                                  };

                              GOOM.util.Request('POST', uri, {success : callback});
                           },
        //TODO take a look at this function, it doesn't convince me
        showDeleteComment : function(containerId, disableIds, enableIds) {
                                var enableElements = _getElements([enableIds]);
                                _pagePushConfig([], enableElements, containerId);
                                _pageSetup(true);
                            },

        submitDeleteComment : function(commentId) {
                                  var uri = '/comment/api/delete?commentId=' + commentId,
                                      callback = function(r) {
                                          if(!r.success) {
                                              if(!handleUserStatus(r)) {
                                                  return;
                                              }
                                              GOOM.util.FatalMsg({ message :  r.message});
                                              return;
                                          }
                                          GOOM.Navigation.refresh();
                                          GOOM.Navigation.scrollTo('commentsTop');
                                      };

                                  GOOM.util.Request('POST', uri, {success : callback});
                              },

        cancel : function() {
                     _pagePopConfig();
                     _pageSetup(false);
                 },

        submit : function(form, richEditor, callback) {
                     disableFields(form.elements);

                     if(richEditor) {
                        var iframe = form.getElementsByTagName('iframe')[0];
                        var tinyMCE = iframe.contentWindow.window.tinyMCE;
                        var textarea = form.getElementsByTagName('textarea')[0];
                        if(tinyMCE) {
                            textarea.value = tinyMCE.editors.mce_0.save();
                        }
                     }

                     GOOM.util.FormRequest(form, { success : function(r) {
                         enableFields(form.elements);
                         if(!r.success) {
                             if(!handleUserStatus(r)) {
                                 return;
                             }
                             if(r.errors) {
                                 handleFormResults(form, r, true);
                             } else {
                                 GOOM.util.FatalMsg({ message : r.message });
                             }
                         } else {
                             GOOM.Navigation.refresh();
                             if(callback) {
                                 callback();
                             }
                         }
                     }});
                 }
    };
}();
GOOM.rotation.Song = {
    confirmDialog : new GOOM.util.Dialog({isModal : true, isNarrow: true}),

    interval : {},

    currentPlaylist : [],
    rotation : {length : 0},

    curMediaHash : {},
    curMediaElHash : {},
    
    isLoadedFlag : false,
    
    hotSongsIds : [],
    searchIds : [],
    
    searchData : [], 
    hotSongsData : [],

    DragContainer : null,
    DragContainerNodes : null, //tb pointer to nodes after load of playlist

    lastSearch : false,
    currentSongPos : 0,
    
    colorList : (function() {
        var color = [];
        for(var i = 0; i < 200; i++) {
            if(i < 10) {
                color[i] = 'mostPlayed';
            } else if(i < 30) {
                color[i] = 'secondMostPlayed';
            } else if(i < 60) {
                color[i] = 'thirdMostPlayed';
            } else if(i < 90) {
                color[i] = 'fourthMostPlayed';
            } else if(i < 130) {
                color[i] = 'fifthMostPlayed';
            } else {
                color[i] = 'sixthMostPlayed';
            }
        }
        return color;
    }()),
    
    templates : {
       item :           '<tr class="%{classStr}" gdata="%{gdata}">' +
                            '<td class="playClip"><a class="miniPlay" gdata="%{gdata}" onmousedown="GOOM.PlayItem(this, event); return false;" onclick="return false;" href="#"><img style="border:0px;height:17px;width:17px;" src="/img/asset_play.png"/></a></td>' +
                            '<td class="trackTitle"><span>%{title}</span></td>' +
                            '<td class="artistName">%{artist}</td>' +
                            '<td class="removeTrack"><a onmousedown="GOOM.rotation.Song.removeItem(this, event); return false;" href="#" onclick="return false;" title=""></a></td>' +
                        '</tr>',
        
       hoverItem :     '<div class="itemDrag"><ul><li class="itemDragNumber">%{number}</li><li class="itemDragTitle">%{title}</li><li class="itemDragArtist">%{artist}</li></ul><div>',
        
       searchItem :    '<tr id="%{id}" class="%{className}" gData="%{gdata}">' +
                            '<td class="playClip">' +
                                '<a class="miniPlay" gdata="%{gdata}"  onclick="return false;" onmousedown="GOOM.PlayItem(this, event); return false;" href="#"><img style="border:0px;height:17px;width:17px;" src="/img/asset_play.png"/></a>' +
                            '</td>' +
                            '<td>' +
                                '<h3>%{title}</h3>' +
                                '<h4>%{artist}</h4>' +
                            '</td>' +
                        '</tr>'
    },
    
    heightLightEl : function(enable, el, color) {
        if(enable) {
            el.className = color + ' highlight';
            el.style.cursor = 'pointer';
            el.onclick = GOOM.rotation.Song.gotoItem;
        } else {
            el.onclick = null;
            el.className = color;
            el.style.cursor = 'move';
        }
    },
    
    search : function(formEl, offset) {
        var searchEl = byId('rotationSearchList');

        offset = offset || 0;
        this.lastSearchFormEl = formEl;

        GOOM.util.stopPlayingClip();

        while(searchEl.hasChildNodes()) {
            searchEl.removeChild(searchEl.childNodes[0]);
        }
        formEl.action = '/playlist/list/search';
        this.searchData = [];
        this.searchIds = [];
        if(formEl.terms.getAttribute('guiloaded')){
            addClass(formEl.terms.parentNode.parentNode, 'loadingResult');
        }
        if(this.searchRequest) {
            this.searchRequest.abort();
        }
        this.searchRequest = GOOM.util.FormRequest(formEl, {success  : this.handleSearchResult,
                                                            failure  : function() {enableFields(formEl.elements)},
                                                            postData : 'offset=' + offset + '&limit=11'});
        
        none(['rotationSearchAddContainer', 'rotationSearchNoResult']);
        byId('rotationSearchPager').innerHTML = '';
    },
    
    handleSearchResult : function(r) {
        if(!r || !r.success) {
            return;
        }
        
        var item, paginator, q, i, 
            me = GOOM.rotation.Song,
            formEl = me.lastSearchFormEl,
            len = r.results.length,
            color, node,
            listEl = byId('rotationSearchList');

        me.searchIds = [];
        while(listEl.hasChildNodes()) {
            listEl.removeChild(listEl.childNodes[0]);
        }
        if(formEl.terms.getAttribute('guiloaded')){ 
            removeClass(formEl.terms.parentNode.parentNode, 'loadingResult');
        }
        formEl.terms.getAttribute('guiloaded');
        
        (len) ? block('rotationSearchAddContainer') :
                block('rotationSearchNoResult');
        
        me.searchData = [];
        for(i = 0; i < len; i++) {
            item = r.results[i];
            item.artists = artist = item.name || [];
            
            node = YAHOO.Node.create(replace(me.templates.searchItem, {
                id : item.id + '_search',
                title : item.title, 
                artist : shortener(artist.join(', '), 50), 
                gdata : item.id
            }));

            color = me.curMediaHash[item.id];
            node = YAHOO.Node.getDOMNode(node);
            node.index = i;
            if(color) {
                me.heightLightEl(true, node, color);
            } else {
                me.heightLightEl(false, node, (i % 2) ? '' : 'odd');
            }
            listEl.appendChild(node);
            me.createExternalDragNode(node, item);

            me.searchIds.push(item.id);
            me.searchData.push(item);
        }

        if(r.total > r.limit) {
            paginator = new GOOM.util.Paginator(r.total, r.limit, r.offset || 0, 2);
            paginator.write(byId('rotationSearchPager'), function(offset){ 
                var me = GOOM.rotation.Song;
                me.search(me.lastSearchFormEl, offset); 
            });
        }
    },

    loadHotSongs : function() {
        var updateHotSongs = function(r) {
            var item, node, i, 
                me = GOOM.rotation.Song,
                listEl = byId('rotationHotList');
            
            me.hotSongsIds = [];
            me.hotSongsData = [];
            if(!r.success) {
                me.hotSongsLoaded = false;
                return;
            }
            me.hotSongsResults = true;
            for(i = 0; i < r.results.length; i++) {
                item = r.results[i];
                var artists = [];
                for(var q = 0, artistLen = item.artists.length; q < artistLen; ++q) {
                    artists.push(item.artists[q].name);
                }
                item.artists = artists;
                
                node = YAHOO.Node.create(replace(me.templates.searchItem, {
                    id : item.id + '_hot',
                    title : item.title, 
                    artist : shortener(artists.join(', '), 50), 
                    gdata : item.id
                }));

                var color = me.curMediaHash[item.id],
                    nodeHTML = YAHOO.Node.getDOMNode(node);
                nodeHTML.index = i;
                if(color) {
                    me.heightLightEl(true, nodeHTML, color);
                } else {
                    me.heightLightEl(false, nodeHTML, (i % 2) ? '' : 'odd');
                }
                listEl.appendChild(nodeHTML);
                me.createExternalDragNode(nodeHTML, item);
                me.hotSongsData.push(item);
                me.hotSongsIds.push(item.id);
            }
        }
        if(GOOM.rotation.Song.hotSongsLoaded) {
            return;
        }
        GOOM.rotation.Song.hotSongsLoaded = true;
        GOOM.util.Get('/playlist/list/hot-songs', updateHotSongs);
    },
    
    showTab : function(id) {
        var searchTab = byId('rotationTabSearch'),
            searchContainer = byId('rotationSearchContainer'),
            hotTab = byId('rotationTabHot'),
            hotContainer = byId('rotationHotContainer');

        GOOM.util.stopPlayingClip();

        if(id == 'hot') {
            removeClass(searchTab, 'active');
            addClass(hotTab, 'active');
            searchContainer.style.display = 'none';
            hotContainer.style.display = 'block';
            this.loadHotSongs();
        } else {
            removeClass(hotTab, 'active');
            addClass(searchTab, 'active');
            searchContainer.style.display = 'block';
            hotContainer.style.display = 'none';
        }
    },

    clear : function() {
        var rotationList =  byId('rotationList');
        while(rotationList.hasChildNodes()) {
            rotationList.removeChild(rotationList.childNodes[0]);
        }
        GOOM.rotation.Song.reindex();
    },
    
    addAll : function() {
        var searchContainer = byId('rotationSearchContainer').getElementsByTagName('tr'),
            listEl = byId('rotationList'),
            me = GOOM.rotation.Song;
            

        var trs = listEl.getElementsByTagName('tr');
        for(var i = 0; i < me.searchData.length; i++) {
            var id = searchContainer[i].getAttribute('gdata');
            if(me.curMediaHash[id] || me.searchData[i].id != id) {
               continue; 
            }
            var node = this.createHTMLItem(me.searchData[i]);
            me.DragContainer.setupNode(node);
            if(!trs[0]) {
                listEl.appendChild(node);
            } else {
                listEl.insertBefore(node, trs[trs.length - 1]);
            }
        }
        this.reindex();
    },
    
    removeItem : function(el, e) {
        stopEvent(e);
        var parent = el.parentNode;
        if(parent) {
            parent = parent.parentNode;
            if(parent) {
                var id = parent.getAttribute('gdata'),
                    hotEl = byId(id + '_hot');

                GOOM.util.stopPlayingClip(id);

                delete this.curMediaElHash[id];
                delete this.curMediaHash[id];
                parent.parentNode.removeChild(parent);
                
                if(hotEl) {
                    hotEl.className = (hotEl.index % 2) ? '' : 'odd';
                }
                var searchEl = byId(id + '_search');
                if(searchEl) {
                    searchEl.className = (searchEl.index % 2) ? '' : 'odd';
                }
            }
        }
        this.reindex();
    },
    
    gotoItem : function() {
        var me = GOOM.rotation.Song;
        if(me.gotoLastEl) {
            removeClass(me.gotoLastEl, 'highlight');
        }
        var el = me.curMediaElHash[this.getAttribute('gdata')];
        var color = me.curMediaHash[this.getAttribute('gdata')];
        me.gotoLastEl = el;
        byId('rotationScrollContainer').scrollTop = el.offsetTop - 240;
        
        clearInterval(me.gotoInterval);
        var count = 1;
        me.gotoInterval = setInterval(function() {
            (count % 2) ? addClass(el, color) : el.className = 'highlight';
            if(count == 5) {
                clearInterval(me.gotoInterval);
            }
            count++;
        }, 250);
    },
    
    save : function() {
        if(!this.isLoadedFlag) {
            return;
        }
        
        var trs = byId('rotationList').getElementsByTagName('tr');
        var ids = [];
        for(var i = 0, len = trs.length; i < len; ++i) {
            ids.push(trs[i].getAttribute('gdata'));
        }
        var postData = replace('radioId=%{radioId}&ids=%{ids}&date=%{date}', {radioId : window.pageObj.radioId, 
                                                                               ids : ids.join(','), 
                                                                               date : -(new Date()).getTimezoneOffset()});

        var slug = window.pageObj.slug;
        GOOM.util.Request('POST', '/playlist/api/update', { 
                success : function (r) {
                    var me = GOOM.rotation.Song;
                    if(!r.success) {
                        GOOM.util.FatalMsg({message : r.message});
                        return;
                    }
                    me.isLoadedFlag = false;
                    GOOM.Navigation.load('/radio/' + slug);
                },
                postData : postData});
    },

    update : function() {
        var me = GOOM.rotation.Song, Pending = GOOM.radio.Pending;
        me.curMediaHash = {};
        me.curMediaElHash = {};
        me.hotSongsIds = [];
        me.searchIds = [];
        me.hotSongsLoaded = false;
        me.currentPlaylist = [];
        me.isLoadedFlag = false;
        
        if(!window.pageObj) {
            return;
        }
        
        if(!window.pageObj.active && !me.pendingSubscribed) {
            Pending.start(window.pageObj.uid);
            me.pendingSubscribed = true;
            GOOM.radio.Pending.Events.onChange.subscribe(function(uid) {
                if((uid + '') == window.pageObj.uid) {
                    GOOM.rotation.Song.update();
                }
            })
            return;
        }
        GOOM.util.Get('/playlist/list/playlist?radioUid=' + window.pageObj.uid, this.handleUpdate)
    },
    
    handleUpdate : function(r) {
        if(!r.success || !r.ready || (r.ready && !r.results.length)) {
            toggle(['rotationSongListLoading'], ['rotationSongListFailed']);
            return;
        }
        
        var i = 0, q, 
        me = GOOM.rotation.Song,
        len = r.results.length, 
        artists, artistLen, node,
        rotationList = YAHOO.Node.get(byId('rotationList'));
        
        me.isLoadedFlag = true;
        
        toggle(['rotationMsgContainer'], ['rotationScrollContainer']);

        me.DragContainerNodes = byId('rotationList').getElementsByTagName('tr'),
        me.DragContainer = new GOOM.util.DD.Container(byId('rotationList'), byId('rotationScrollContainer'), {
                dragMouseDown  : me.dragMouseDown,
                updateDragNode : me.updateDragNode,
                dragMouseUp    : me.dragMouseUp
        });
        
        for(i; i < len; ++i) {
            var data = r.results[i];
            me.currentPlaylist.push(data.id);
            artists = [];
            for(q = 0; artistLen = data.artists.length, q < artistLen; q++) {
                artists.push(data.artists[q].name);
            }
            data.artists = artists;
            node = me.createHTMLItem(data);
            rotationList.appendChild(node);
            me.DragContainer.setupNode(node, data);
        }
        me.reindex();
    },

    createExternalDragNode : function(node, data) {
        node.onselectstart = function() {return false;};
        node.onmousedown = function(e) {
            e = e || window.event;
            if(!(e.which && e.button == 0 || e.button == 1)) {
                return false;
            }
            var me = GOOM.rotation.Song;
            if(me.curMediaElHash[this.getAttribute('gdata')]) {
                return false;
            }
            if(me.DragContainer) {
                var x = GOOM.rotation.Song.createHTMLItem(this.data);
                x.data = data;
                byId('rotationList').appendChild(x);
                me.reindex();
                me.DragContainer.dragInNode(x, e);
                GOOM.rotation.Song.reindex();
            }
            return false;
        }
        node.data = data;
    },

    createHTMLItem : function(mediaObj) {
        var str = replace(this.templates.item, {title :  shortener(mediaObj.title, 40),
                                                 artist : shortener(mediaObj.artists.join(', '), 30),
                                                 gdata : mediaObj.id,
                                                 playClipText : _('ROTATION_CLIP_PLAY')});
        var node = YAHOO.Node.getDOMNode(YAHOO.Node.create(str));
        node.data = mediaObj;
        return node;
    },
    
    dragMouseDown : function(dragContainer, node) {
        var data = node.data;
        dragContainer.innerHTML = replace(GOOM.rotation.Song.templates.hoverItem, {
            title  :  shortener(data.title, 40),
            artist : shortener(data.artists.join(', '), 30),
            number : ' '
        });
        YAHOO.Node.get(dragContainer).addClass('moving');
    },

    updateDragNode : function(drag, position, nodeHeight) {
        var me = GOOM.rotation.Song;
        me.currentSongPos = Math.min(GOOM.rotation.Song.rotation.length,
                        parseInt(position/nodeHeight, 10) + 1);
        drag.firstChild.firstChild.firstChild.innerHTML = me.currentSongPos;
    },

    dragMouseUp : function(ddCurDragEl, ddHoverNode, posY, ddNodeHeight) {
        var me = GOOM.rotation.Song;

        if(ddHoverNode) {
            ddHoverNode.parentNode.removeChild(ddHoverNode);
            ddHoverNode = null;
        }

        var nodeIndex = me.currentSongPos - 1,
            goingUp = nodeIndex < ddCurDragEl.gindex,
            target = me.DragContainerNodes[nodeIndex];

        if(!ddCurDragEl) {
            node.parentNode.appendChild(ddCurDragEl);
            return;
        }
        if(!goingUp) {
            target = target.nextSibling;
            if(!target) {
                ddCurDragEl.parentNode.appendChild(ddCurDragEl);
                GOOM.rotation.Song.reindex();
                return;
            }
        }
        target.parentNode.insertBefore(ddCurDragEl, target);
        
        GOOM.rotation.Song.reindex();
    },
    
    reindex : function() {
        if(this.reindexTimeout) {
            return;
        }
        
        setTimeout(function() {
            var trs = byId('rotationList').getElementsByTagName('tr'),
                me = GOOM.rotation.Song,
                id, color,
                item;

            me.curMediaElHash = {};
            me.curMediaHash = {};
            for(var i = 0, len = trs.length; i < len; ++i) {
                item = trs[i];
                if(!item) {
                    continue;
                }
                if(i > 199) {
                    item.parentNode.removeChild(item);
                    continue;
                }
                color = me.colorList[i];
                item.className = color;
                item.gindex = i;
                id = item.getAttribute('gdata');
                me.curMediaHash[id] = color;
                me.curMediaElHash[id] = item;
            }
            me.rotation.length = trs.length;
            trs = byId('rotationSearchList').getElementsByTagName('tr');
            for(i = 0; i < trs.length; ++i) {
                var tr = trs[i];
                color = me.curMediaHash[tr.getAttribute('gdata')];
                if(color) {
                    me.heightLightEl(true, tr, color);
                } else {
                    me.heightLightEl(false, tr, (i % 2) ? '' : 'odd');
                }
            }
            for(i = 0, len = me.hotSongsIds.length; i < len; ++i) {
                id = me.hotSongsIds[i];
                color = me.curMediaHash[me.hotSongsIds[i]];
                if(color) {
                    me.heightLightEl(true, byId(id + '_hot'), color);
                } else {
                    me.heightLightEl(false, byId(id + '_hot'), (i % 2) ? '' : 'odd');
                }
            }
            me.reindexTimeout = false;
        }, 0);
        this.reindexTimeout = true;
    }
};

/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


GOOM.rotation.Show = {
    hotShowsOrder : 'title',

    plannedShows : [],

    showColors : {},

    createdShow : false,
    dragging: false,

    defaultColors : ['#FF4000','#FFBF00', '#00A33D', '#55E7FF', '#2210D2', '#D111AD', '#D59758', '#CCFF00', '#29ABE2', '#FF7900', '#FF00FF', '#047391', '#5A3D1C', '#FFFF00','#662D91', '#FF8888', '#72A126', '#BF0000', '#004F72', '#C9C900'],

    template : {
        planItem : '<div class="show" gdata="%{gdata}" >' +
                       '<a gdata="%{gdata}" onclick="return false;" class="playShowClip miniPlay" onmousedown="GOOM.PlayItem(this, event); return false;" href="#">' +
                           '<img src="/img/asset_play.png"/>' +
                       '</a>' +
                       '<img class="showImage" src="/img/" alt="" />' +
                       '<div class="description">' +
                           '<h1>%{name}</h1>' +
                           '<h2>%{slogan}</h2>' +
                       '</div>' +
                       '<div class="showHoverArrows"></div>' +
                       '<a onmousedown="GOOM.rotation.Show.removePlanItem(this.parentNode, event); return false;" title="" class="close" href="#"></a>' +
                   '</div>',
        
        planItemTiny : '<div class="show oneSlot" gdata="%{gdata}" >' +
                            '<a gdata="%{gdata}" class="playShowClip miniPlay" onclick="return false;" onmousedown="GOOM.PlayItem(this, event); return false;" href="#">' +
                                '<img src="/img/asset_play.png"/>' +
                             '</a>' +
                            '<div class="description">' +
                                '<h1>%{name}</h1>' +
                            '</div>' +
                            '<div class="showHoverArrows"></div>' + 
                            '<a onmousedown="GOOM.rotation.Show.removePlanItem(this.parentNode, event); return false;" title="" class="close" href="#"></a>' +
                        '</div>',

        sideBarItem :    '<li id="%{id}" class="%{className} clearfix" gData="%{id}">' +
                            '<div class="t5"><img onerror="defaultImg(this, \'/img/show_t5.jpg\')" src="%{imagePath}" /></div>' +
                            '<div class="showContentSide clearfix">' +
                                '<h3>%{name}</h3>' +
                                '<span>%{slogan}</span>' +
                                '<p>%{shortDescription}</p>' +
                                '<div>' +
                                    '<a gdata="%{gdata}" onclick="return false;" class="playShowClip miniPlay" onmousedown="GOOM.PlayItem(this, event); return false;" href="#">' +
                                        '<img src="/img/asset_play.png" />' +
                                    '</a>' +
                                    '<div class="showLength"><strong>%{lengthText}</strong>%{duration}\'</div>' +
                                 '</div>' +
                             '</div>' +
                         '</li>'
    },

    requestPlan : function() {
        var me = GOOM.rotation.Show;
        if(!window.pageObj) {
            return;
        }
        
        if(!window.pageObj.active) {
            GOOM.radio.Pending.start(window.pageObj.uid);
            me.pendingSubscribed = true;
            GOOM.radio.Pending.Events.onChange.subscribe(function(uid) {
                if((uid + '') == window.pageObj.uid) {
                    GOOM.rotation.Show.requestPlan();
                }
            })
            return;
        }
        //reset stuff
        me.savedData = {ids : [] , startTimes : []};
        me.showColors = {};
        me.colors = me.defaultColors.slice(0);
        me.plannedShows = [];
        me.planLoaded = false;
        
        GOOM.util.Get('/radio/list/plan?radioUid=' + window.pageObj.uid +
                      '&timezone=' + -(new Date()).getTimezoneOffset()/60, me.handlePlan)
    },
    
    handlePlan : function(r) {
        if(!r.success) {
            toggle(['rotationShowListLoading'], ['rotationShowListFailed']);
            return;
        }

        toggle(['rotationShowMsgContainer'], ['rotationShowScrollContainer']);

        var me = GOOM.rotation.Show, 
            containerList = byId('rotationShowList'),
            show, initDate, startTime, endTime, node;


        me.DragContainer = new GOOM.util.DD.Container(containerList, byId('rotationShowScrollContainer'), {
                dragMouseDown : me.dragMouseDown,
                updateDragNode : function() {byId('rotationShowHoverItem').style.display = 'none'},
                dragMouseUp : me.dragMouseUp
        });

        initDate = new Date(0);
        initDate.setHours(0);

        for(var i = 0; i < r.results.length; i++) {
            show = r.results[i];

            startTime = new Date(initDate);
            startTime.setMinutes(show.startTime);
            endTime = new Date(initDate);
            endTime.setMinutes(show.startTime + show.maxDuration/60, -1);

            me.savedData.ids.push(show.id);
            me.savedData.startTimes.push(startTime.getTime());

            show.startTime = startTime;
            show.endTime = endTime;

            show.index = i;

            node = me.createPlanItem(show, true);
            me.DragContainer.setupNode(node, show);
            containerList.appendChild(node);
        }
        me.plannedShows = r.results;

        me.planLoaded = true;
    },

    hasPlanChanged : function() {
        var me = GOOM.rotation.Show;

        if(!me.planLoaded){
           return false;
        }

        var ids = [], startTimes = [];
        for(var i = 0; i < me.plannedShows.length; i++) {
            var show =  me.plannedShows[i];
            ids.push(show.id);
            startTimes.push(show.startTime.getTime());
        }

        return ids.join(',') != me.savedData.ids.join(',') ||
               startTimes.join(',') != me.savedData.startTimes.join(',');
    },

    savePlan : function() {
        var me = GOOM.rotation.Show;
        var ids = [], startTimes = [];

        for(var i = 0; i < me.plannedShows.length; i++) {
            var show =  me.plannedShows[i];
            ids.push(show.id);
            startTimes.push(show.startTime.getHours() + ':' + show.startTime.getMinutes());
        }

        var postData = 'radioId=%{id}&timezone=%{zone}&starttimes=%{times}&showids=%{ids}';
        postData = replace(postData, {id : window.pageObj.radioId,
                             ids : ids.join(','),
                             times : startTimes.join(','),
                             zone : -(new Date()).getTimezoneOffset()/60
                        })

        GOOM.util.Request('POST', '/radio/api/update-plan', {
                success : function (r) {
                    if(!r.success) {
                        GOOM.util.FatalMsg({message : r.message});
                        return;
                    }
                    me.planLoaded = false; //little hack to make the leave dialog not appear;
                    GOOM.Navigation.load('/radio/' + window.pageObj.slug);
                }, postData : postData});
    },

    requestCurrentShows : function(genreId, offset) {
        var me = GOOM.rotation.Show;

        me.hotShowsOrder = genreId;
        offset = offset || 0;

        GOOM.util.stopPlayingClip();

        if(me.hotSongsRequest) {
            me.hotSongsRequest.abort();
        }
        var uri = '/show/list/shows?limit=5&genreId=' + genreId + '&offset=' + offset + '&mediaAssetStatusList=C';
        me.hotSongsRequest = GOOM.util.Request('GET', uri, {success : me.handleHotSongs});
    },

    handleHotSongs : function(r) {
        if(!r || !r.success) {
            return;
        }

        var paginator, node, showObj,
            me = GOOM.rotation.Show,
            listEl = byId('rotationShowHotList');

        while(listEl.hasChildNodes()) {
            listEl.removeChild(listEl.childNodes[0]);
        }

        for(var i = 0; i < r.results.length; i++) {
            showObj = r.results[i];
            node = me.createSideBarItem(showObj, (i % 2) ? '' : 'odd')
            listEl.appendChild(node);
            me.createExternalDragNode(node, showObj);
        }

        
        if(parseInt(r.total, 10) > parseInt(r.limit, 10)) {
            paginator = new GOOM.util.Paginator(r.total, r.limit, r.offset || 0, 2);
            paginator.write(byId('rotationShowSearchPager'), function(offset){
                var me = GOOM.rotation.Show;
                me.requestCurrentShows(me.hotShowsOrder, offset);
            });
        } else {
            byId('rotationShowSearchPager').innerHTML = '';
        }
    },

    dateToPos : function(date) {
        var pos = date.getHours() * 60 + date.getMinutes() - 360; //starts in 06:00
        if(pos < 0) {
            pos += 1440; //made sure if its goes into after 24:00
        }
        return pos *= (2 + 1/60); //adjusting to fit ui
    },

    posToDate : function(posY) {
         pos = posY/(2 + (1/60));
         pos = Math.round(pos/10) * 10;
         var date = new Date(0);
         if(pos > 1070) {
             pos -= 1080;
             date.setHours(0);
         } else {
             date.setHours(6)
         }
          //start in 06:00
         date.setMinutes(pos, 0); //round to closes 10
         return date;
    },
    
    durationToHeight : function(duration) {
        return duration/60 * 2;
    },

    addShowToLocation : function(startTime, endTime) {
        var me = GOOM.rotation.Show;
        var low = 0, high = me.plannedShows.length - 1, i = 0, cur;
        while (low <= high) {
            i = parseInt((low + high) / 2, 10);
            cur = me.plannedShows[i];
            if(cur.startTime.getTime() > endTime.getTime()) {
                 high = i - 1;
            } else if(cur.endTime.getTime() < startTime.getTime()){
                low = i + 1;
            } else {
                return false;
            }
        }

        if(me.plannedShows[i] && me.plannedShows[i].startTime < startTime) {
           i += 1;
        }
        return i;
    },

    createSideBarItem : function(data, className) {
        data.className = className;
        data.lengthText = _('LENGHT');
        data.duration = parseInt(data.maxDuration/60, 10);
        data.gdata = data.mediaSampleId;

        data.shortDescription = shortener(data.description, 40);

        var me = GOOM.rotation.Show;
        var li = document.createElement('div');
        li.innerHTML = replace(me.template.sideBarItem, data);
        li.getElementsByTagName('p')[0].title = data.description;
        GOOM.UI.thumbnailDOM(li.getElementsByTagName('img')[0], 'show', data, 't5');
        return li.firstChild;
    },

    dragMouseUp : function(ddCurDragEl, ddHoverNode, posY, ddNodeHeight) {
        var me = GOOM.rotation.Show;
        me.dragging = false;

        var show = ddCurDragEl.data;

        var startTime = me.posToDate(Math.max(posY - ddNodeHeight/2, 0));
        var endTime = new Date(startTime);
         //-1 to make sure that we dont got problems with shows that is next to each other
        endTime.setMinutes(startTime.getMinutes() + show.maxDuration/60, -1);

        var create = false;

        var newIndex = me.addShowToLocation(startTime, endTime);
        if(newIndex !== false) {
            //update array with new position
            me.plannedShows.splice(newIndex, 0, show);
            me.reindex();
            //update time
            show.startTime = startTime;
            show.endTime = endTime;
            create = true;
        } else if(me.createdShow == false) {
            me.plannedShows.splice(show.index, 0, show);
            me.reindex();
            create = true;
        }

        if(create == true) {
            var node = me.createPlanItem(show, true);
            me.DragContainer.setupNode(node);
            byId('rotationShowList').appendChild(node);
        }

        if(ddHoverNode) {
            ddHoverNode.parentNode.removeChild(ddHoverNode);
            ddHoverNode = null;
        }

        me.createdShow = false;
    },

    dragMouseDown : function(dragContainer, node, posY) {
        var me = GOOM.rotation.Show;
        me.dragging = true;
        
        node.parentNode.removeChild(node);
        if(me.createdShow == false) {
            me.plannedShows.splice(node.data.index, 1);
        }

        me.reindex();
       
        node = me.createPlanItem(node.data);
        node.style.position = "static";
        dragContainer.appendChild(node);
    },

    createPlanItem : function(data, hover) {
        var me = GOOM.rotation.Show,
            pos = me.dateToPos(data.startTime),
            div = document.createElement('div');

            var height = me.durationToHeight(data.maxDuration);
            var dataTemplate = {gdata : data.mediaSampleId,  name :  shortener(data.name, 25), slogan : shortener(data.slogan, 25)};
            if(height > 30) {
                div.innerHTML = replace(me.template.planItem, dataTemplate);
                GOOM.UI.thumbnailDOM(div.getElementsByTagName('img')[1], 'show', data, 't5');
            } else {
                div.innerHTML = replace(me.template.planItemTiny, dataTemplate);
            }

            var node = div.firstChild, color;
            color = me.showColors[data.id];
            if(!color) {
                color = me.colors.shift();
                if(!color) {
                    do {
                        color = ('#0' + Math.round(0xffffff * Math.random()).toString(16)).replace(/^#0([0-9a-f]{6})$/i, '#$1')
                    } while(me.showColors[color])
                }
            }
            me.showColors[data.id] = color;
            data.color = color;

            node.style.position = "absolute";
            node.style.display = 'block';
            node.style.top = pos + 'px';
            
            node.style.backgroundColor = data.color;
            
            node.style.height = (height > 30 ? height : 20) + 'px';
            
            node.data = data;
            if(hover) {
                YAHOO.on('mouseenter', function() {
                    node.hoverTimer = setTimeout(function() {
                        if(GOOM.rotation.Show.dragging == false) {
                            GOOM.rotation.Show.updateHoverItem(data, node);
                            me.updateHoverStatus(node, false);
                        }
                    }, 1000)
                }, node);

                YAHOO.on('mouseleave', function() {
                    if(node.hoverTimer) {
                        clearTimeout(node.hoverTimer);
                        me.updateHoverStatus(node, true);
                    }
                }, node);
            } else {
                node.style.zIndex = 501;
            }
            clearTimeout(node.hoverTimer);
            me.updateHoverStatus(node, true);
        return node;
    },

    updateHoverStatus : function(node, hide) {
       var pointer = node.getElementsByTagName('div')[1];
       if(node.data.color) {
            pointer.className = 'showHoverArrows ' + node.data.color.replace('#', 'c');
       }
       pointer.style.display = hide ? 'none' : 'block';
       byId('rotationShowHoverItem').style.display =  hide ? 'none' : 'block';
    },

    updateHoverItem : function(data, relatedNode) {
        var node = byId('rotationShowHoverItem');
        node.style.border = '2px solid ' + data.color;
        
        setText(node.getElementsByTagName('h1')[0], data.name);
        setText(node.getElementsByTagName('h2')[0], data.slogan);
        setText(node.getElementsByTagName('p')[0], shortenerNoEscape(data.description, 150));
        
        GOOM.UI.thumbnailDOM(node.getElementsByTagName('img')[0], 'show', data, 't7');

        var scrollArea = GOOM.rotation.Show.DragContainer.getScrollArea();
        var top = parseInt(relatedNode.style.top, 10);
        var height = parseInt(relatedNode.style.height, 10);
        
        top = top - byId('rotationShowScrollContainer').scrollTop - height/2;

        var height = scrollArea.bottom.y2 - scrollArea.top.y1;
        
        if(0 > top - 90) {
            top = 0;
        } else if(height < top + 90) {
            top = height - 180;
        } else {
            top = top - 180/2;
        }
        node.style.top = (scrollArea.top.y1 + top)  + 'px';
        relatedNode.getElementsByTagName('div')[1].style.display = 'block';
    },

    removePlanItem : function(node, event) {
        var me = GOOM.rotation.Show, 
            index = node.data.index,
            attr = node.attributes;

        for(var i = 0, len = attr.length; i < len; ++i) {
            if(attr[i].name == 'gdata') {
                GOOM.util.stopPlayingClip(attr[i].value);
                break;
            }
        }

        stopEvent(event); //just to be sure
        if(node.hoverTimer) {
            clearTimeout(node.hoverTimer);
        }
        me.updateHoverStatus(node, true); //hides the arrow and hover overlay
        me.plannedShows.splice(index, 1);
        node.parentNode.removeChild(node);
        me.reindex();
    },

    createExternalDragNode : function(node, data) {
        node.onselectstart = function() {return false;};
        node.onmousedown = function(e) {
            e = e || window.event;
            if(!(e.which && e.button == 0 || e.button == 1)) {
                return false;
            }

            this.data.maxDuration =  this.data.maxDuration || 60;

            var startDate = new Date(0);
                startDate.setHours(0);
            
            var endDate = new Date(startDate);
                endDate.setMinutes(this.data.maxDuration/60);

            this.data.startTime = startDate;
            this.data.endTime = endDate

            var me = GOOM.rotation.Show;
            me.createdShow = true;

            if(me.DragContainer) {
                var clone = me.cloneObject(this.data);
                var x = GOOM.rotation.Show.createPlanItem(clone, false);
                x.data = clone;
                me.DragContainer.dragInNode(x, e);
            }
            return false;
        }
        node.data = data;
    },
    
    reindex : function() {
        var me = GOOM.rotation.Show;
        for(var i = 0; i < me.plannedShows.length; i++) {
            me.plannedShows[i].index = i; //update the index
        }
    },

    cloneObject : function (obj) {
        var newObj = (obj instanceof Array) ? [] : {};
        for (var i in obj) {
            if (i == 'startTime' || i == 'endTime') {
                newObj[i] = new Date(obj[i]);
            }
            
            else newObj[i] = obj[i]
        }
        
        return newObj;
    }
}

/* $Id$ */

createNS('GOOM.showcase');

GOOM.showcase.FindByGenre = {
    displayResults : function(triggerEl, itemType, genreSlug) {
        GOOM.util.Get(triggerEl.href, function(result){
            var entriesHTML = [];
            if(itemType == 'show') {
                var itemList = result.shows;
            } else {
                itemList = result.radios;
            }
            byId('findByContainer').style.visibility = 'visible';
            if(!itemList) {
                byId('findByContainer').style.visibility = 'hidden';
                return;
            }

            var template = '<tr>' +
                               '<td class="' + itemType + 'Genre"><div>' +
                                   '<a class="radioIcon" title="play this ' + itemType + '" onclick="GOOM.Audio.playPodcast(\'%{id}\'); return false;" href="#">' +
                                       '<img src="' + getASSET() + '/' + itemType + '/%{uid}_logo/t2" onerror="defaultImg(this, \'/img/' + itemType + '_t2.jpg\')"/>' +
                                   '</a>' +
                                   '<a title="go to this show" onclick="GOOM.Navigation.load(this.href); return false;" href="/' + itemType + '/%{slug}">%{name}</a>' +
                               '</div></td>' +
                               '<td><div>%{slogan}</div></td>' +
                           '</tr>';
            for(var i = 0, len = itemList.length; i < len; i++) {
                entriesHTML.push(replace(template, itemList[i]));
            }

            var li = triggerEl.parentNode;

            removeClass(byId('findByMenu').getElementsByTagName("li"), 'active');

            li.className = 'active';
            byId('findByContainer').innerHTML =
                '<table>' +
                    '<tbody>' +
                        entriesHTML.join(' ') +
                    '</tbody>' +
                '</table>' +
                '<a href="/' + itemType + '/search?genreSlug=' + genreSlug + '&hot=true" onclick="GOOM.Navigation.load(this.href); return false;" class="allGenres">' +
                    _('SEE_ALL') +
                '</a>';
        });
    }
}
createNS('GOOM.show');

GOOM.show.Util = {
    initEpisodes : function() {
        var assetId = (GOOM.Audio.currentPodcastObj) ? GOOM.Audio.currentPodcastObj.assetMediaId : null;

        if(assetId) {
            var el = byId('showEpisode-' + assetId);
            if(el && !hasClass(el, 'nowPlaying')) {
                addClass(el, 'nowPlaying');
            }
        }        
    },

    playStopEpisode : function(assetId) {
        var el = byId('showEpisode-' + assetId);
        if(GOOM.Audio.currentPodcastObj && assetId == GOOM.Audio.currentPodcastObj.assetMediaId) {
            if(el && hasClass(el, 'nowPlaying')) {
                removeClass(el, 'nowPlaying');
                GOOM.Audio.stop();
            }
        } else {
            if(el && !hasClass(el, 'nowPlaying')) {
                this.disableAllButtons();
                addClass(el, 'nowPlaying');

                GOOM.Audio.playPodcast(assetId, window.showObj || window.featuredShowObj);
            }
        }
    },

    disableAllButtons : function() {
        var links = byId("archivedShows").getElementsByTagName('a');

        for(var i = 0, len = links.length; i < len; ++i) {
            if (hasClass(links[i], 'nowPlaying')) {
                removeClass(links[i], 'nowPlaying');
            }
        }
    }
}