if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=(""+A[C]).split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules,B,H,G,F,C;if(!I[A]){I[A]={versions:[],builds:[]};}B=I[A];H=D.version;G=D.build;F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var D=function(H){var I=0;return parseFloat(H.replace(/\./g,function(){return(I++==1)?"":".";}));},G=navigator,F={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:G.cajaVersion,secure:false,os:null},C=navigator&&navigator.userAgent,E=window&&window.location,B=E&&E.href,A;F.secure=B&&(B.toLowerCase().indexOf("https")===0);if(C){if((/windows|win32/i).test(C)){F.os="windows";}else{if((/macintosh/i).test(C)){F.os="macintosh";}}if((/KHTML/).test(C)){F.webkit=1;}A=C.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){F.webkit=D(A[1]);if(/ Mobile\//.test(C)){F.mobile="Apple";}else{A=C.match(/NokiaN[^\/]*/);if(A){F.mobile=A[0];}}A=C.match(/AdobeAIR\/([^\s]*)/);if(A){F.air=A[0];}}if(!F.webkit){A=C.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){F.opera=D(A[1]);A=C.match(/Opera Mini[^;]*/);if(A){F.mobile=A[0];}}else{A=C.match(/MSIE\s([^;]*)/);if(A&&A[1]){F.ie=D(A[1]);}else{A=C.match(/Gecko\/([^\s]*)/);if(A){F.gecko=1;A=C.match(/rv:([^\s\)]*)/);if(A&&A[1]){F.gecko=D(A[1]);}}}}}}return F;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C++){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var B=YAHOO.lang,A=Object.prototype,H="[object Array]",C="[object Function]",G="[object Object]",E=[],F=["toString","valueOf"],D={isArray:function(I){return A.toString.apply(I)===H;},isBoolean:function(I){return typeof I==="boolean";},isFunction:function(I){return(typeof I==="function")||A.toString.apply(I)===C;},isNull:function(I){return I===null;},isNumber:function(I){return typeof I==="number"&&isFinite(I);},isObject:function(I){return(I&&(typeof I==="object"||B.isFunction(I)))||false;},isString:function(I){return typeof I==="string";},isUndefined:function(I){return typeof I==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(K,J){var I,M,L;for(I=0;I<F.length;I=I+1){M=F[I];L=J[M];if(B.isFunction(L)&&L!=A[M]){K[M]=L;}}}:function(){},extend:function(L,M,K){if(!M||!L){throw new Error("extend failed, please check that "+"all dependencies are included.");}var J=function(){},I;J.prototype=M.prototype;L.prototype=new J();L.prototype.constructor=L;L.superclass=M.prototype;if(M.prototype.constructor==A.constructor){M.prototype.constructor=M;}if(K){for(I in K){if(B.hasOwnProperty(K,I)){L.prototype[I]=K[I];}}B._IEEnumFix(L.prototype,K);}},augmentObject:function(M,L){if(!L||!M){throw new Error("Absorb failed, verify dependencies.");}var I=arguments,K,N,J=I[2];if(J&&J!==true){for(K=2;K<I.length;K=K+1){M[I[K]]=L[I[K]];}}else{for(N in L){if(J||!(N in M)){M[N]=L[N];}}B._IEEnumFix(M,L);}},augmentProto:function(L,K){if(!K||!L){throw new Error("Augment failed, verify dependencies.");}var I=[L.prototype,K.prototype],J;for(J=2;J<arguments.length;J=J+1){I.push(arguments[J]);}B.augmentObject.apply(this,I);},dump:function(I,N){var K,M,P=[],Q="{...}",J="f(){...}",O=", ",L=" => ";if(!B.isObject(I)){return I+"";}else{if(I instanceof Date||("nodeType" in I&&"tagName" in I)){return I;}else{if(B.isFunction(I)){return J;}}}N=(B.isNumber(N))?N:3;if(B.isArray(I)){P.push("[");for(K=0,M=I.length;K<M;K=K+1){if(B.isObject(I[K])){P.push((N>0)?B.dump(I[K],N-1):Q);}else{P.push(I[K]);}P.push(O);}if(P.length>1){P.pop();}P.push("]");}else{P.push("{");for(K in I){if(B.hasOwnProperty(I,K)){P.push(K+L);if(B.isObject(I[K])){P.push((N>0)?B.dump(I[K],N-1):Q);}else{P.push(I[K]);}P.push(O);}}if(P.length>1){P.pop();}P.push("}");}return P.join("");},substitute:function(Y,J,R){var N,M,L,U,V,X,T=[],K,O="dump",S=" ",I="{",W="}",Q,P;for(;;){N=Y.lastIndexOf(I);if(N<0){break;}M=Y.indexOf(W,N);if(N+1>=M){break;}K=Y.substring(N+1,M);U=K;X=null;L=U.indexOf(S);if(L>-1){X=U.substring(L+1);U=U.substring(0,L);}V=J[U];if(R){V=R(U,V,X);}if(B.isObject(V)){if(B.isArray(V)){V=B.dump(V,parseInt(X,10));}else{X=X||"";Q=X.indexOf(O);if(Q>-1){X=X.substring(4);}P=V.toString();if(P===G||Q>-1){V=B.dump(V,parseInt(X,10));}else{V=P;}}}else{if(!B.isString(V)&&!B.isNumber(V)){V="~-"+T.length+"-~";T[T.length]=K;}}Y=Y.substring(0,N)+V+Y.substring(M+1);}for(N=T.length-1;N>=0;N=N-1){Y=Y.replace(new RegExp("~-"+N+"-~"),"{"+T[N]+"}","g");}return Y;},trim:function(I){try{return I.replace(/^\s+|\s+$/g,"");}catch(J){return I;}},merge:function(){var L={},J=arguments,I=J.length,K;for(K=0;K<I;K=K+1){B.augmentObject(L,J[K],true);}return L;},later:function(P,J,Q,L,M){P=P||0;J=J||{};var K=Q,O=L,N,I;if(B.isString(Q)){K=J[Q];}if(!K){throw new TypeError("method undefined");}if(O&&!B.isArray(O)){O=[L];}N=function(){K.apply(J,O||E);};I=(M)?setInterval(N,P):setTimeout(N,P);return{interval:M,cancel:function(){if(this.interval){clearInterval(I);}else{clearTimeout(I);}}};},isValue:function(I){return(B.isObject(I)||B.isString(I)||B.isNumber(I)||B.isBoolean(I));}};B.hasOwnProperty=(A.hasOwnProperty)?function(I,J){return I&&I.hasOwnProperty(J);}:function(I,J){return !B.isUndefined(I[J])&&I.constructor.prototype[J]!==I[J];};D.augmentObject(B,D,true);YAHOO.util.Lang=B;B.augment=B.augmentProto;YAHOO.augment=B.augmentProto;YAHOO.extend=B.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.8.0r4",build:"2449"});
(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var E=YAHOO.util,L=YAHOO.lang,m=YAHOO.env.ua,A=YAHOO.lang.trim,d={},h={},N=/^t(?:able|d|h)$/i,X=/color$/i,K=window.document,W=K.documentElement,e="ownerDocument",n="defaultView",v="documentElement",t="compatMode",b="offsetLeft",P="offsetTop",u="offsetParent",Z="parentNode",l="nodeType",C="tagName",O="scrollLeft",i="scrollTop",Q="getBoundingClientRect",w="getComputedStyle",a="currentStyle",M="CSS1Compat",c="BackCompat",g="class",F="className",J="",B=" ",s="(?:^|\\s)",k="(?= |$)",U="g",p="position",f="fixed",V="relative",j="left",o="top",r="medium",q="borderLeftWidth",R="borderTopWidth",D=m.opera,I=m.webkit,H=m.gecko,T=m.ie;E.Dom={CUSTOM_ATTRIBUTES:(!W.hasAttribute)?{"for":"htmlFor","class":F}:{"htmlFor":"for","className":g},DOT_ATTRIBUTES:{},get:function(z){var AB,x,AA,y,Y,G;if(z){if(z[l]||z.item){return z;}if(typeof z==="string"){AB=z;z=K.getElementById(z);G=(z)?z.attributes:null;if(z&&G&&G.id&&G.id.value===AB){return z;}else{if(z&&K.all){z=null;x=K.all[AB];for(y=0,Y=x.length;y<Y;++y){if(x[y].id===AB){return x[y];}}}}return z;}if(YAHOO.util.Element&&z instanceof YAHOO.util.Element){z=z.get("element");}if("length" in z){AA=[];for(y=0,Y=z.length;y<Y;++y){AA[AA.length]=E.Dom.get(z[y]);}return AA;}return z;}return null;},getComputedStyle:function(G,Y){if(window[w]){return G[e][n][w](G,null)[Y];}else{if(G[a]){return E.Dom.IE_ComputedStyle.get(G,Y);}}},getStyle:function(G,Y){return E.Dom.batch(G,E.Dom._getStyle,Y);},_getStyle:function(){if(window[w]){return function(G,y){y=(y==="float")?y="cssFloat":E.Dom._toCamel(y);var x=G.style[y],Y;if(!x){Y=G[e][n][w](G,null);if(Y){x=Y[y];}}return x;};}else{if(W[a]){return function(G,y){var x;switch(y){case"opacity":x=100;try{x=G.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(z){try{x=G.filters("alpha").opacity;}catch(Y){}}return x/100;case"float":y="styleFloat";default:y=E.Dom._toCamel(y);x=G[a]?G[a][y]:null;return(G.style[y]||x);}};}}}(),setStyle:function(G,Y,x){E.Dom.batch(G,E.Dom._setStyle,{prop:Y,val:x});},_setStyle:function(){if(T){return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){switch(x){case"opacity":if(L.isString(Y.style.filter)){Y.style.filter="alpha(opacity="+y*100+")";if(!Y[a]||!Y[a].hasLayout){Y.style.zoom=1;}}break;case"float":x="styleFloat";default:Y.style[x]=y;}}else{}};}else{return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){if(x=="float"){x="cssFloat";}Y.style[x]=y;}else{}};}}(),getXY:function(G){return E.Dom.batch(G,E.Dom._getXY);},_canPosition:function(G){return(E.Dom._getStyle(G,"display")!=="none"&&E.Dom._inDoc(G));},_getXY:function(){if(K[v][Q]){return function(y){var z,Y,AA,AF,AE,AD,AC,G,x,AB=Math.floor,AG=false;if(E.Dom._canPosition(y)){AA=y[Q]();AF=y[e];z=E.Dom.getDocumentScrollLeft(AF);Y=E.Dom.getDocumentScrollTop(AF);AG=[AB(AA[j]),AB(AA[o])];if(T&&m.ie<8){AE=2;AD=2;AC=AF[t];if(m.ie===6){if(AC!==c){AE=0;AD=0;}}if((AC===c)){G=S(AF[v],q);x=S(AF[v],R);if(G!==r){AE=parseInt(G,10);}if(x!==r){AD=parseInt(x,10);}}AG[0]-=AE;AG[1]-=AD;}if((Y||z)){AG[0]+=z;AG[1]+=Y;}AG[0]=AB(AG[0]);AG[1]=AB(AG[1]);}else{}return AG;};}else{return function(y){var x,Y,AA,AB,AC,z=false,G=y;if(E.Dom._canPosition(y)){z=[y[b],y[P]];x=E.Dom.getDocumentScrollLeft(y[e]);Y=E.Dom.getDocumentScrollTop(y[e]);AC=((H||m.webkit>519)?true:false);while((G=G[u])){z[0]+=G[b];z[1]+=G[P];if(AC){z=E.Dom._calcBorders(G,z);}}if(E.Dom._getStyle(y,p)!==f){G=y;while((G=G[Z])&&G[C]){AA=G[i];AB=G[O];if(H&&(E.Dom._getStyle(G,"overflow")!=="visible")){z=E.Dom._calcBorders(G,z);}if(AA||AB){z[0]-=AB;z[1]-=AA;}}z[0]+=x;z[1]+=Y;}else{if(D){z[0]-=x;z[1]-=Y;}else{if(I||H){z[0]+=x;z[1]+=Y;}}}z[0]=Math.floor(z[0]);z[1]=Math.floor(z[1]);}else{}return z;};}}(),getX:function(G){var Y=function(x){return E.Dom.getXY(x)[0];};return E.Dom.batch(G,Y,E.Dom,true);},getY:function(G){var Y=function(x){return E.Dom.getXY(x)[1];};return E.Dom.batch(G,Y,E.Dom,true);},setXY:function(G,x,Y){E.Dom.batch(G,E.Dom._setXY,{pos:x,noRetry:Y});},_setXY:function(G,z){var AA=E.Dom._getStyle(G,p),y=E.Dom.setStyle,AD=z.pos,Y=z.noRetry,AB=[parseInt(E.Dom.getComputedStyle(G,j),10),parseInt(E.Dom.getComputedStyle(G,o),10)],AC,x;if(AA=="static"){AA=V;y(G,p,AA);}AC=E.Dom._getXY(G);if(!AD||AC===false){return false;}if(isNaN(AB[0])){AB[0]=(AA==V)?0:G[b];}if(isNaN(AB[1])){AB[1]=(AA==V)?0:G[P];}if(AD[0]!==null){y(G,j,AD[0]-AC[0]+AB[0]+"px");}if(AD[1]!==null){y(G,o,AD[1]-AC[1]+AB[1]+"px");}if(!Y){x=E.Dom._getXY(G);if((AD[0]!==null&&x[0]!=AD[0])||(AD[1]!==null&&x[1]!=AD[1])){E.Dom._setXY(G,{pos:AD,noRetry:true});}}},setX:function(Y,G){E.Dom.setXY(Y,[G,null]);},setY:function(G,Y){E.Dom.setXY(G,[null,Y]);},getRegion:function(G){var Y=function(x){var y=false;if(E.Dom._canPosition(x)){y=E.Region.getRegion(x);}else{}return y;};return E.Dom.batch(G,Y,E.Dom,true);},getClientWidth:function(){return E.Dom.getViewportWidth();},getClientHeight:function(){return E.Dom.getViewportHeight();},getElementsByClassName:function(AB,AF,AC,AE,x,AD){AF=AF||"*";AC=(AC)?E.Dom.get(AC):null||K;if(!AC){return[];}var Y=[],G=AC.getElementsByTagName(AF),z=E.Dom.hasClass;for(var y=0,AA=G.length;y<AA;++y){if(z(G[y],AB)){Y[Y.length]=G[y];}}if(AE){E.Dom.batch(Y,AE,x,AD);}return Y;},hasClass:function(Y,G){return E.Dom.batch(Y,E.Dom._hasClass,G);},_hasClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom._getAttribute(x,F)||J;if(Y.exec){G=Y.test(y);}else{G=Y&&(B+y+B).indexOf(B+Y+B)>-1;}}else{}return G;},addClass:function(Y,G){return E.Dom.batch(Y,E.Dom._addClass,G);},_addClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom._getAttribute(x,F)||J;if(!E.Dom._hasClass(x,Y)){E.Dom.setAttribute(x,F,A(y+B+Y));G=true;}}else{}return G;},removeClass:function(Y,G){return E.Dom.batch(Y,E.Dom._removeClass,G);},_removeClass:function(y,x){var Y=false,AA,z,G;if(y&&x){AA=E.Dom._getAttribute(y,F)||J;E.Dom.setAttribute(y,F,AA.replace(E.Dom._getClassRegex(x),J));z=E.Dom._getAttribute(y,F);if(AA!==z){E.Dom.setAttribute(y,F,A(z));Y=true;if(E.Dom._getAttribute(y,F)===""){G=(y.hasAttribute&&y.hasAttribute(g))?g:F;
y.removeAttribute(G);}}}else{}return Y;},replaceClass:function(x,Y,G){return E.Dom.batch(x,E.Dom._replaceClass,{from:Y,to:G});},_replaceClass:function(y,x){var Y,AB,AA,G=false,z;if(y&&x){AB=x.from;AA=x.to;if(!AA){G=false;}else{if(!AB){G=E.Dom._addClass(y,x.to);}else{if(AB!==AA){z=E.Dom._getAttribute(y,F)||J;Y=(B+z.replace(E.Dom._getClassRegex(AB),B+AA)).split(E.Dom._getClassRegex(AA));Y.splice(1,0,B+AA);E.Dom.setAttribute(y,F,A(Y.join(J)));G=true;}}}}else{}return G;},generateId:function(G,x){x=x||"yui-gen";var Y=function(y){if(y&&y.id){return y.id;}var z=x+YAHOO.env._id_counter++;if(y){if(y[e]&&y[e].getElementById(z)){return E.Dom.generateId(y,z+x);}y.id=z;}return z;};return E.Dom.batch(G,Y,E.Dom,true)||Y.apply(E.Dom,arguments);},isAncestor:function(Y,x){Y=E.Dom.get(Y);x=E.Dom.get(x);var G=false;if((Y&&x)&&(Y[l]&&x[l])){if(Y.contains&&Y!==x){G=Y.contains(x);}else{if(Y.compareDocumentPosition){G=!!(Y.compareDocumentPosition(x)&16);}}}else{}return G;},inDocument:function(G,Y){return E.Dom._inDoc(E.Dom.get(G),Y);},_inDoc:function(Y,x){var G=false;if(Y&&Y[C]){x=x||Y[e];G=E.Dom.isAncestor(x[v],Y);}else{}return G;},getElementsBy:function(Y,AF,AB,AD,y,AC,AE){AF=AF||"*";AB=(AB)?E.Dom.get(AB):null||K;if(!AB){return[];}var x=[],G=AB.getElementsByTagName(AF);for(var z=0,AA=G.length;z<AA;++z){if(Y(G[z])){if(AE){x=G[z];break;}else{x[x.length]=G[z];}}}if(AD){E.Dom.batch(x,AD,y,AC);}return x;},getElementBy:function(x,G,Y){return E.Dom.getElementsBy(x,G,Y,null,null,null,true);},batch:function(x,AB,AA,z){var y=[],Y=(z)?AA:window;x=(x&&(x[C]||x.item))?x:E.Dom.get(x);if(x&&AB){if(x[C]||x.length===undefined){return AB.call(Y,x,AA);}for(var G=0;G<x.length;++G){y[y.length]=AB.call(Y,x[G],AA);}}else{return false;}return y;},getDocumentHeight:function(){var Y=(K[t]!=M||I)?K.body.scrollHeight:W.scrollHeight,G=Math.max(Y,E.Dom.getViewportHeight());return G;},getDocumentWidth:function(){var Y=(K[t]!=M||I)?K.body.scrollWidth:W.scrollWidth,G=Math.max(Y,E.Dom.getViewportWidth());return G;},getViewportHeight:function(){var G=self.innerHeight,Y=K[t];if((Y||T)&&!D){G=(Y==M)?W.clientHeight:K.body.clientHeight;}return G;},getViewportWidth:function(){var G=self.innerWidth,Y=K[t];if(Y||T){G=(Y==M)?W.clientWidth:K.body.clientWidth;}return G;},getAncestorBy:function(G,Y){while((G=G[Z])){if(E.Dom._testElement(G,Y)){return G;}}return null;},getAncestorByClassName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return E.Dom.hasClass(y,G);};return E.Dom.getAncestorBy(Y,x);},getAncestorByTagName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return y[C]&&y[C].toUpperCase()==G.toUpperCase();};return E.Dom.getAncestorBy(Y,x);},getPreviousSiblingBy:function(G,Y){while(G){G=G.previousSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getPreviousSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getPreviousSiblingBy(G);},getNextSiblingBy:function(G,Y){while(G){G=G.nextSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getNextSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getNextSiblingBy(G);},getFirstChildBy:function(G,x){var Y=(E.Dom._testElement(G.firstChild,x))?G.firstChild:null;return Y||E.Dom.getNextSiblingBy(G.firstChild,x);},getFirstChild:function(G,Y){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getFirstChildBy(G);},getLastChildBy:function(G,x){if(!G){return null;}var Y=(E.Dom._testElement(G.lastChild,x))?G.lastChild:null;return Y||E.Dom.getPreviousSiblingBy(G.lastChild,x);},getLastChild:function(G){G=E.Dom.get(G);return E.Dom.getLastChildBy(G);},getChildrenBy:function(Y,y){var x=E.Dom.getFirstChildBy(Y,y),G=x?[x]:[];E.Dom.getNextSiblingBy(x,function(z){if(!y||y(z)){G[G.length]=z;}return false;});return G;},getChildren:function(G){G=E.Dom.get(G);if(!G){}return E.Dom.getChildrenBy(G);},getDocumentScrollLeft:function(G){G=G||K;return Math.max(G[v].scrollLeft,G.body.scrollLeft);},getDocumentScrollTop:function(G){G=G||K;return Math.max(G[v].scrollTop,G.body.scrollTop);},insertBefore:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}return G[Z].insertBefore(Y,G);},insertAfter:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}if(G.nextSibling){return G[Z].insertBefore(Y,G.nextSibling);}else{return G[Z].appendChild(Y);}},getClientRegion:function(){var x=E.Dom.getDocumentScrollTop(),Y=E.Dom.getDocumentScrollLeft(),y=E.Dom.getViewportWidth()+Y,G=E.Dom.getViewportHeight()+x;return new E.Region(x,y,G,Y);},setAttribute:function(Y,G,x){E.Dom.batch(Y,E.Dom._setAttribute,{attr:G,val:x});},_setAttribute:function(x,Y){var G=E.Dom._toCamel(Y.attr),y=Y.val;if(x&&x.setAttribute){if(E.Dom.DOT_ATTRIBUTES[G]){x[G]=y;}else{G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;x.setAttribute(G,y);}}else{}},getAttribute:function(Y,G){return E.Dom.batch(Y,E.Dom._getAttribute,G);},_getAttribute:function(Y,G){var x;G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;if(Y&&Y.getAttribute){x=Y.getAttribute(G,2);}else{}return x;},_toCamel:function(Y){var x=d;function G(y,z){return z.toUpperCase();}return x[Y]||(x[Y]=Y.indexOf("-")===-1?Y:Y.replace(/-([a-z])/gi,G));},_getClassRegex:function(Y){var G;if(Y!==undefined){if(Y.exec){G=Y;}else{G=h[Y];if(!G){Y=Y.replace(E.Dom._patterns.CLASS_RE_TOKENS,"\\$1");G=h[Y]=new RegExp(s+Y+k,U);}}}return G;},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}\\])/g},_testElement:function(G,Y){return G&&G[l]==1&&(!Y||Y(G));},_calcBorders:function(x,y){var Y=parseInt(E.Dom[w](x,R),10)||0,G=parseInt(E.Dom[w](x,q),10)||0;if(H){if(N.test(x[C])){Y=0;G=0;}}y[0]+=G;y[1]+=Y;return y;}};var S=E.Dom[w];if(m.opera){E.Dom[w]=function(Y,G){var x=S(Y,G);if(X.test(G)){x=E.Dom.Color.toRGB(x);}return x;};}if(m.webkit){E.Dom[w]=function(Y,G){var x=S(Y,G);if(x==="rgba(0, 0, 0, 0)"){x="transparent";}return x;};}if(m.ie&&m.ie>=8&&K.documentElement.hasAttribute){E.Dom.DOT_ATTRIBUTES.type=true;}})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this.y=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this.x=B;this[0]=B;
this.width=this.right-this.left;this.height=this.bottom-this.top;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top),D=Math.min(this.right,E.right),A=Math.min(this.bottom,E.bottom),B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top),D=Math.max(this.right,E.right),A=Math.max(this.bottom,E.bottom),B=Math.min(this.left,E.left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D),C=F[1],E=F[0]+D.offsetWidth,A=F[1]+D.offsetHeight,B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}YAHOO.util.Point.superclass.constructor.call(this,B,A,B,A);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var B=YAHOO.util,A="clientTop",F="clientLeft",J="parentNode",K="right",W="hasLayout",I="px",U="opacity",L="auto",D="borderLeftWidth",G="borderTopWidth",P="borderRightWidth",V="borderBottomWidth",S="visible",Q="transparent",N="height",E="width",H="style",T="currentStyle",R=/^width|height$/,O=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,M={get:function(X,Z){var Y="",a=X[T][Z];if(Z===U){Y=B.Dom.getStyle(X,U);}else{if(!a||(a.indexOf&&a.indexOf(I)>-1)){Y=a;}else{if(B.Dom.IE_COMPUTED[Z]){Y=B.Dom.IE_COMPUTED[Z](X,Z);}else{if(O.test(a)){Y=B.Dom.IE.ComputedStyle.getPixel(X,Z);}else{Y=a;}}}}return Y;},getOffset:function(Z,e){var b=Z[T][e],X=e.charAt(0).toUpperCase()+e.substr(1),c="offset"+X,Y="pixel"+X,a="",d;if(b==L){d=Z[c];if(d===undefined){a=0;}a=d;if(R.test(e)){Z[H][e]=d;if(Z[c]>d){a=d-(Z[c]-d);}Z[H][e]=L;}}else{if(!Z[H][Y]&&!Z[H][e]){Z[H][e]=b;}a=Z[H][Y];}return a+I;},getBorderWidth:function(X,Z){var Y=null;if(!X[T][W]){X[H].zoom=1;}switch(Z){case G:Y=X[A];break;case V:Y=X.offsetHeight-X.clientHeight-X[A];break;case D:Y=X[F];break;case P:Y=X.offsetWidth-X.clientWidth-X[F];break;}return Y+I;},getPixel:function(Y,X){var a=null,b=Y[T][K],Z=Y[T][X];Y[H][K]=Z;a=Y[H].pixelRight;Y[H][K]=b;return a+I;},getMargin:function(Y,X){var Z;if(Y[T][X]==L){Z=0+I;}else{Z=B.Dom.IE.ComputedStyle.getPixel(Y,X);}return Z;},getVisibility:function(Y,X){var Z;while((Z=Y[T])&&Z[X]=="inherit"){Y=Y[J];}return(Z)?Z[X]:S;},getColor:function(Y,X){return B.Dom.Color.toRGB(Y[T][X])||Q;},getBorderColor:function(Y,X){var Z=Y[T],a=Z[X]||Z.color;return B.Dom.Color.toRGB(B.Dom.Color.toHex(a));}},C={};C.top=C.right=C.bottom=C.left=C[E]=C[N]=M.getOffset;C.color=M.getColor;C[G]=C[P]=C[V]=C[D]=M.getBorderWidth;C.marginTop=C.marginRight=C.marginBottom=C.marginLeft=M.getMargin;C.visibility=M.getVisibility;C.borderColor=C.borderTopColor=C.borderRightColor=C.borderBottomColor=C.borderLeftColor=M.getBorderColor;B.Dom.IE_COMPUTED=C;B.Dom.IE_ComputedStyle=M;})();(function(){var C="toString",A=parseInt,B=RegExp,D=YAHOO.util;D.Dom.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(E){if(!D.Dom.Color.re_RGB.test(E)){E=D.Dom.Color.toHex(E);}if(D.Dom.Color.re_hex.exec(E)){E="rgb("+[A(B.$1,16),A(B.$2,16),A(B.$3,16)].join(", ")+")";}return E;},toHex:function(H){H=D.Dom.Color.KEYWORDS[H]||H;if(D.Dom.Color.re_RGB.exec(H)){var G=(B.$1.length===1)?"0"+B.$1:Number(B.$1),F=(B.$2.length===1)?"0"+B.$2:Number(B.$2),E=(B.$3.length===1)?"0"+B.$3:Number(B.$3);H=[G[C](16),F[C](16),E[C](16)].join("");}if(H.length<6){H=H.replace(D.Dom.Color.re_hex3,"$1$1");}if(H!=="transparent"&&H.indexOf("#")<0){H="#"+H;}return H.toLowerCase();}};}());YAHOO.register("dom",YAHOO.util.Dom,{version:"2.8.0r4",build:"2449"});YAHOO.util.CustomEvent=function(D,C,B,A,E){this.type=D;this.scope=C||window;this.silent=B;this.fireOnce=E;this.fired=false;this.firedWith=null;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var F="_YUICEOnSubscribe";if(D!==F){this.subscribeEvent=new YAHOO.util.CustomEvent(F,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(B,C,D){if(!B){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(B,C,D);}var A=new YAHOO.util.Subscriber(B,C,D);if(this.fireOnce&&this.fired){this.notify(A,this.firedWith);}else{this.subscribers.push(A);}},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){this.lastError=null;var H=[],A=this.subscribers.length;var D=[].slice.call(arguments,0),C=true,F,B=false;if(this.fireOnce){if(this.fired){return true;}else{this.firedWith=D;}}this.fired=true;if(!A&&this.silent){return true;}if(!this.silent){}var E=this.subscribers.slice();for(F=0;F<A;++F){var G=E[F];if(!G){B=true;}else{C=this.notify(G,D);if(false===C){if(!this.silent){}break;}}}return(C!==false);},notify:function(F,C){var B,H=null,E=F.getScope(this.scope),A=YAHOO.util.Event.throwErrors;if(!this.silent){}if(this.signature==YAHOO.util.CustomEvent.FLAT){if(C.length>0){H=C[0];}try{B=F.fn.call(E,H,F.obj);}catch(G){this.lastError=G;if(A){throw G;}}}else{try{B=F.fn.call(E,this.type,C,F.obj);}catch(D){this.lastError=D;if(A){throw D;}}}return B;},unsubscribeAll:function(){var A=this.subscribers.length,B;for(B=A-1;B>-1;B--){this._delete(B);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"context: "+this.scope;}};YAHOO.util.Subscriber=function(A,B,C){this.fn=A;this.obj=YAHOO.lang.isUndefined(B)?null:B;this.overrideContext=C;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.overrideContext){if(this.overrideContext===true){return this.obj;}else{return this.overrideContext;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", overrideContext: "+(this.overrideContext||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var G=false,H=[],J=[],A=0,E=[],B=0,C={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9},D=YAHOO.env.ua.ie,F="focusin",I="focusout";return{POLL_RETRYS:500,POLL_INTERVAL:40,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,CAPTURE:7,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:D,_interval:null,_dri:null,_specialTypes:{focusin:(D?"focusin":"focus"),focusout:(D?"focusout":"blur")},DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){this._interval=YAHOO.lang.later(this.POLL_INTERVAL,this,this._tryPreloadAttach,null,true);}},onAvailable:function(Q,M,O,P,N){var K=(YAHOO.lang.isString(Q))?[Q]:Q;for(var L=0;L<K.length;L=L+1){E.push({id:K[L],fn:M,obj:O,overrideContext:P,checkReady:N});}A=this.POLL_RETRYS;this.startInterval();},onContentReady:function(N,K,L,M){this.onAvailable(N,K,L,M,true);},onDOMReady:function(){this.DOMReadyEvent.subscribe.apply(this.DOMReadyEvent,arguments);},_addListener:function(M,K,V,P,T,Y){if(!V||!V.call){return false;}if(this._isValidCollection(M)){var W=true;for(var Q=0,S=M.length;Q<S;++Q){W=this.on(M[Q],K,V,P,T)&&W;}return W;}else{if(YAHOO.lang.isString(M)){var O=this.getEl(M);if(O){M=O;}else{this.onAvailable(M,function(){YAHOO.util.Event._addListener(M,K,V,P,T,Y);});return true;}}}if(!M){return false;}if("unload"==K&&P!==this){J[J.length]=[M,K,V,P,T];return true;}var L=M;if(T){if(T===true){L=P;}else{L=T;}}var N=function(Z){return V.call(L,YAHOO.util.Event.getEvent(Z,M),P);};var X=[M,K,V,N,L,P,T,Y];var R=H.length;H[R]=X;try{this._simpleAdd(M,K,N,Y);}catch(U){this.lastError=U;this.removeListener(M,K,V);return false;}return true;},_getType:function(K){return this._specialTypes[K]||K;},addListener:function(M,P,L,N,O){var K=((P==F||P==I)&&!YAHOO.env.ua.ie)?true:false;return this._addListener(M,this._getType(P),L,N,O,K);},addFocusListener:function(L,K,M,N){return this.on(L,F,K,M,N);},removeFocusListener:function(L,K){return this.removeListener(L,F,K);},addBlurListener:function(L,K,M,N){return this.on(L,I,K,M,N);},removeBlurListener:function(L,K){return this.removeListener(L,I,K);},removeListener:function(L,K,R){var M,P,U;K=this._getType(K);if(typeof L=="string"){L=this.getEl(L);}else{if(this._isValidCollection(L)){var S=true;for(M=L.length-1;M>-1;M--){S=(this.removeListener(L[M],K,R)&&S);}return S;}}if(!R||!R.call){return this.purgeElement(L,false,K);}if("unload"==K){for(M=J.length-1;M>-1;M--){U=J[M];if(U&&U[0]==L&&U[1]==K&&U[2]==R){J.splice(M,1);return true;}}return false;}var N=null;var O=arguments[3];if("undefined"===typeof O){O=this._getCacheIndex(H,L,K,R);}if(O>=0){N=H[O];}if(!L||!N){return false;}var T=N[this.CAPTURE]===true?true:false;try{this._simpleRemove(L,K,N[this.WFN],T);}catch(Q){this.lastError=Q;return false;}delete H[O][this.WFN];delete H[O][this.FN];H.splice(O,1);return true;},getTarget:function(M,L){var K=M.target||M.srcElement;return this.resolveTextNode(K);},resolveTextNode:function(L){try{if(L&&3==L.nodeType){return L.parentNode;}}catch(K){}return L;},getPageX:function(L){var K=L.pageX;if(!K&&0!==K){K=L.clientX||0;if(this.isIE){K+=this._getScrollLeft();}}return K;},getPageY:function(K){var L=K.pageY;if(!L&&0!==L){L=K.clientY||0;if(this.isIE){L+=this._getScrollTop();}}return L;},getXY:function(K){return[this.getPageX(K),this.getPageY(K)];},getRelatedTarget:function(L){var K=L.relatedTarget;if(!K){if(L.type=="mouseout"){K=L.toElement;
}else{if(L.type=="mouseover"){K=L.fromElement;}}}return this.resolveTextNode(K);},getTime:function(M){if(!M.time){var L=new Date().getTime();try{M.time=L;}catch(K){this.lastError=K;return L;}}return M.time;},stopEvent:function(K){this.stopPropagation(K);this.preventDefault(K);},stopPropagation:function(K){if(K.stopPropagation){K.stopPropagation();}else{K.cancelBubble=true;}},preventDefault:function(K){if(K.preventDefault){K.preventDefault();}else{K.returnValue=false;}},getEvent:function(M,K){var L=M||window.event;if(!L){var N=this.getEvent.caller;while(N){L=N.arguments[0];if(L&&Event==L.constructor){break;}N=N.caller;}}return L;},getCharCode:function(L){var K=L.keyCode||L.charCode||0;if(YAHOO.env.ua.webkit&&(K in C)){K=C[K];}return K;},_getCacheIndex:function(M,P,Q,O){for(var N=0,L=M.length;N<L;N=N+1){var K=M[N];if(K&&K[this.FN]==O&&K[this.EL]==P&&K[this.TYPE]==Q){return N;}}return -1;},generateId:function(K){var L=K.id;if(!L){L="yuievtautoid-"+B;++B;K.id=L;}return L;},_isValidCollection:function(L){try{return(L&&typeof L!=="string"&&L.length&&!L.tagName&&!L.alert&&typeof L[0]!=="undefined");}catch(K){return false;}},elCache:{},getEl:function(K){return(typeof K==="string")?document.getElementById(K):K;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",YAHOO,0,0,1),_load:function(L){if(!G){G=true;var K=YAHOO.util.Event;K._ready();K._tryPreloadAttach();}},_ready:function(L){var K=YAHOO.util.Event;if(!K.DOMReady){K.DOMReady=true;K.DOMReadyEvent.fire();K._simpleRemove(document,"DOMContentLoaded",K._ready);}},_tryPreloadAttach:function(){if(E.length===0){A=0;if(this._interval){this._interval.cancel();this._interval=null;}return;}if(this.locked){return;}if(this.isIE){if(!this.DOMReady){this.startInterval();return;}}this.locked=true;var Q=!G;if(!Q){Q=(A>0&&E.length>0);}var P=[];var R=function(T,U){var S=T;if(U.overrideContext){if(U.overrideContext===true){S=U.obj;}else{S=U.overrideContext;}}U.fn.call(S,U.obj);};var L,K,O,N,M=[];for(L=0,K=E.length;L<K;L=L+1){O=E[L];if(O){N=this.getEl(O.id);if(N){if(O.checkReady){if(G||N.nextSibling||!Q){M.push(O);E[L]=null;}}else{R(N,O);E[L]=null;}}else{P.push(O);}}}for(L=0,K=M.length;L<K;L=L+1){O=M[L];R(this.getEl(O.id),O);}A--;if(Q){for(L=E.length-1;L>-1;L--){O=E[L];if(!O||!O.id){E.splice(L,1);}}this.startInterval();}else{if(this._interval){this._interval.cancel();this._interval=null;}}this.locked=false;},purgeElement:function(O,P,R){var M=(YAHOO.lang.isString(O))?this.getEl(O):O;var Q=this.getListeners(M,R),N,K;if(Q){for(N=Q.length-1;N>-1;N--){var L=Q[N];this.removeListener(M,L.type,L.fn);}}if(P&&M&&M.childNodes){for(N=0,K=M.childNodes.length;N<K;++N){this.purgeElement(M.childNodes[N],P,R);}}},getListeners:function(M,K){var P=[],L;if(!K){L=[H,J];}else{if(K==="unload"){L=[J];}else{K=this._getType(K);L=[H];}}var R=(YAHOO.lang.isString(M))?this.getEl(M):M;for(var O=0;O<L.length;O=O+1){var T=L[O];if(T){for(var Q=0,S=T.length;Q<S;++Q){var N=T[Q];if(N&&N[this.EL]===R&&(!K||K===N[this.TYPE])){P.push({type:N[this.TYPE],fn:N[this.FN],obj:N[this.OBJ],adjust:N[this.OVERRIDE],scope:N[this.ADJ_SCOPE],index:Q});}}}}return(P.length)?P:null;},_unload:function(R){var L=YAHOO.util.Event,O,N,M,Q,P,S=J.slice(),K;for(O=0,Q=J.length;O<Q;++O){M=S[O];if(M){K=window;if(M[L.ADJ_SCOPE]){if(M[L.ADJ_SCOPE]===true){K=M[L.UNLOAD_OBJ];}else{K=M[L.ADJ_SCOPE];}}M[L.FN].call(K,L.getEvent(R,M[L.EL]),M[L.UNLOAD_OBJ]);S[O]=null;}}M=null;K=null;J=null;if(H){for(N=H.length-1;N>-1;N--){M=H[N];if(M){L.removeListener(M[L.EL],M[L.TYPE],M[L.FN],N);}}M=null;}L._simpleRemove(window,"unload",L._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var K=document.documentElement,L=document.body;if(K&&(K.scrollTop||K.scrollLeft)){return[K.scrollTop,K.scrollLeft];}else{if(L){return[L.scrollTop,L.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(M,N,L,K){M.addEventListener(N,L,(K));};}else{if(window.attachEvent){return function(M,N,L,K){M.attachEvent("on"+N,L);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(M,N,L,K){M.removeEventListener(N,L,(K));};}else{if(window.detachEvent){return function(L,M,K){L.detachEvent("on"+M,K);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=EU.addFocusListener;EU.onBlur=EU.addBlurListener;
if(EU.isIE){if(self!==self.top){document.onreadystatechange=function(){if(document.readyState=="complete"){document.onreadystatechange=null;EU._ready();}};}else{YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,overrideContext:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);
},createEvent:function(B,G){this.__yui_events=this.__yui_events||{};var E=G||{},D=this.__yui_events,F;if(D[B]){}else{F=new YAHOO.util.CustomEvent(B,E.scope||this,E.silent,YAHOO.util.CustomEvent.FLAT,E.fireOnce);D[B]=F;if(E.onSubscribeCallback){F.subscribeEvent.subscribe(E.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var A=this.__yui_subscribers[B];if(A){for(var C=0;C<A.length;++C){F.subscribe(A[C].fn,A[C].obj,A[C].overrideContext);}}}return D[B];},fireEvent:function(B){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[B];if(!D){return null;}var A=[];for(var C=1;C<arguments.length;++C){A.push(arguments[C]);}return D.fire.apply(D,A);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};(function(){var A=YAHOO.util.Event,C=YAHOO.lang;YAHOO.util.KeyListener=function(D,I,E,F){if(!D){}else{if(!I){}else{if(!E){}}}if(!F){F=YAHOO.util.KeyListener.KEYDOWN;}var G=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(C.isString(D)){D=document.getElementById(D);}if(C.isFunction(E)){G.subscribe(E);}else{G.subscribe(E.fn,E.scope,E.correctScope);}function H(O,N){if(!I.shift){I.shift=false;}if(!I.alt){I.alt=false;}if(!I.ctrl){I.ctrl=false;}if(O.shiftKey==I.shift&&O.altKey==I.alt&&O.ctrlKey==I.ctrl){var J,M=I.keys,L;if(YAHOO.lang.isArray(M)){for(var K=0;K<M.length;K++){J=M[K];L=A.getCharCode(O);if(J==L){G.fire(L,O);break;}}}else{L=A.getCharCode(O);if(M==L){G.fire(L,O);}}}}this.enable=function(){if(!this.enabled){A.on(D,F,H);this.enabledEvent.fire(I);}this.enabled=true;};this.disable=function(){if(this.enabled){A.removeListener(D,F,H);this.disabledEvent.fire(I);}this.enabled=false;};this.toString=function(){return"KeyListener ["+I.keys+"] "+D.tagName+(D.id?"["+D.id+"]":"");};};var B=YAHOO.util.KeyListener;B.KEYDOWN="keydown";B.KEYUP="keyup";B.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};})();YAHOO.register("event",YAHOO.util.Event,{version:"2.8.0r4",build:"2449"});YAHOO.register("yahoo-dom-event", YAHOO, {version: "2.8.0r4", build: "2449"});
(function(){var B=YAHOO.util;var A=function(D,C,E,F){if(!D){}this.init(D,C,E,F);};A.NAME="Anim";A.prototype={toString:function(){var C=this.getEl()||{};var D=C.id||C.tagName;return(this.constructor.NAME+": "+D);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(C,E,D){return this.method(this.currentFrame,E,D-E,this.totalFrames);},setAttribute:function(C,F,E){var D=this.getEl();if(this.patterns.noNegatives.test(C)){F=(F>0)?F:0;}if(C in D&&!("style" in D&&C in D.style)){D[C]=F;}else{B.Dom.setStyle(D,C,F+E);}},getAttribute:function(C){var E=this.getEl();var G=B.Dom.getStyle(E,C);if(G!=="auto"&&!this.patterns.offsetUnit.test(G)){return parseFloat(G);}var D=this.patterns.offsetAttribute.exec(C)||[];var H=!!(D[3]);var F=!!(D[2]);if("style" in E){if(F||(B.Dom.getStyle(E,"position")=="absolute"&&H)){G=E["offset"+D[0].charAt(0).toUpperCase()+D[0].substr(1)];}else{G=0;}}else{if(C in E){G=E[C];}}return G;},getDefaultUnit:function(C){if(this.patterns.defaultUnit.test(C)){return"px";}return"";},setRuntimeAttribute:function(D){var I;var E;var F=this.attributes;this.runtimeAttributes[D]={};var H=function(J){return(typeof J!=="undefined");};if(!H(F[D]["to"])&&!H(F[D]["by"])){return false;}I=(H(F[D]["from"]))?F[D]["from"]:this.getAttribute(D);if(H(F[D]["to"])){E=F[D]["to"];}else{if(H(F[D]["by"])){if(I.constructor==Array){E=[];for(var G=0,C=I.length;G<C;++G){E[G]=I[G]+F[D]["by"][G]*1;}}else{E=I+F[D]["by"]*1;}}}this.runtimeAttributes[D].start=I;this.runtimeAttributes[D].end=E;this.runtimeAttributes[D].unit=(H(F[D].unit))?F[D]["unit"]:this.getDefaultUnit(D);return true;},init:function(E,J,I,C){var D=false;var F=null;var H=0;E=B.Dom.get(E);this.attributes=J||{};this.duration=!YAHOO.lang.isUndefined(I)?I:1;this.method=C||B.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=B.AnimMgr.fps;this.setEl=function(M){E=B.Dom.get(M);};this.getEl=function(){return E;};this.isAnimated=function(){return D;};this.getStartTime=function(){return F;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(B.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds){this.totalFrames=1;}B.AnimMgr.registerElement(this);return true;};this.stop=function(M){if(!this.isAnimated()){return false;}if(M){this.currentFrame=this.totalFrames;this._onTween.fire();}B.AnimMgr.stop(this);};var L=function(){this.onStart.fire();this.runtimeAttributes={};for(var M in this.attributes){this.setRuntimeAttribute(M);}D=true;H=0;F=new Date();};var K=function(){var O={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};O.toString=function(){return("duration: "+O.duration+", currentFrame: "+O.currentFrame);};this.onTween.fire(O);var N=this.runtimeAttributes;for(var M in N){this.setAttribute(M,this.doMethod(M,N[M].start,N[M].end),N[M].unit);}H+=1;};var G=function(){var M=(new Date()-F)/1000;var N={duration:M,frames:H,fps:H/M};N.toString=function(){return("duration: "+N.duration+", frames: "+N.frames+", fps: "+N.fps);};D=false;H=0;this.onComplete.fire(N);};this._onStart=new B.CustomEvent("_start",this,true);this.onStart=new B.CustomEvent("start",this);this.onTween=new B.CustomEvent("tween",this);this._onTween=new B.CustomEvent("_tween",this,true);this.onComplete=new B.CustomEvent("complete",this);this._onComplete=new B.CustomEvent("_complete",this,true);this._onStart.subscribe(L);this._onTween.subscribe(K);this._onComplete.subscribe(G);}};B.Anim=A;})();YAHOO.util.AnimMgr=new function(){var C=null;var B=[];var A=0;this.fps=1000;this.delay=1;this.registerElement=function(F){B[B.length]=F;A+=1;F._onStart.fire();this.start();};this.unRegister=function(G,F){F=F||E(G);if(!G.isAnimated()||F===-1){return false;}G._onComplete.fire();B.splice(F,1);A-=1;if(A<=0){this.stop();}return true;};this.start=function(){if(C===null){C=setInterval(this.run,this.delay);}};this.stop=function(H){if(!H){clearInterval(C);for(var G=0,F=B.length;G<F;++G){this.unRegister(B[0],0);}B=[];C=null;A=0;}else{this.unRegister(H);}};this.run=function(){for(var H=0,F=B.length;H<F;++H){var G=B[H];if(!G||!G.isAnimated()){continue;}if(G.currentFrame<G.totalFrames||G.totalFrames===null){G.currentFrame+=1;if(G.useSeconds){D(G);}G._onTween.fire();}else{YAHOO.util.AnimMgr.stop(G,H);}}};var E=function(H){for(var G=0,F=B.length;G<F;++G){if(B[G]===H){return G;}}return -1;};var D=function(G){var J=G.totalFrames;var I=G.currentFrame;var H=(G.currentFrame*G.duration*1000/G.totalFrames);var F=(new Date()-G.getStartTime());var K=0;if(F<G.duration*1000){K=Math.round((F/H-1)*G.currentFrame);}else{K=J-(I+1);}if(K>0&&isFinite(K)){if(G.currentFrame+K>=J){K=J-(I+1);}G.currentFrame+=K;}};this._queue=B;this._getIndex=E;};YAHOO.util.Bezier=new function(){this.getPosition=function(E,D){var F=E.length;var C=[];for(var B=0;B<F;++B){C[B]=[E[B][0],E[B][1]];}for(var A=1;A<F;++A){for(B=0;B<F-A;++B){C[B][0]=(1-D)*C[B][0]+D*C[parseInt(B+1,10)][0];C[B][1]=(1-D)*C[B][1]+D*C[parseInt(B+1,10)][1];}}return[C[0][0],C[0][1]];};};(function(){var A=function(F,E,G,H){A.superclass.constructor.call(this,F,E,G,H);};A.NAME="ColorAnim";A.DEFAULT_BGCOLOR="#fff";var C=YAHOO.util;YAHOO.extend(A,C.Anim);var D=A.superclass;var B=A.prototype;B.patterns.color=/color$/i;B.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;B.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;B.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;B.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;B.parseColor=function(E){if(E.length==3){return E;}var F=this.patterns.hex.exec(E);if(F&&F.length==4){return[parseInt(F[1],16),parseInt(F[2],16),parseInt(F[3],16)];}F=this.patterns.rgb.exec(E);if(F&&F.length==4){return[parseInt(F[1],10),parseInt(F[2],10),parseInt(F[3],10)];}F=this.patterns.hex3.exec(E);if(F&&F.length==4){return[parseInt(F[1]+F[1],16),parseInt(F[2]+F[2],16),parseInt(F[3]+F[3],16)];
}return null;};B.getAttribute=function(E){var G=this.getEl();if(this.patterns.color.test(E)){var I=YAHOO.util.Dom.getStyle(G,E);var H=this;if(this.patterns.transparent.test(I)){var F=YAHOO.util.Dom.getAncestorBy(G,function(J){return !H.patterns.transparent.test(I);});if(F){I=C.Dom.getStyle(F,E);}else{I=A.DEFAULT_BGCOLOR;}}}else{I=D.getAttribute.call(this,E);}return I;};B.doMethod=function(F,J,G){var I;if(this.patterns.color.test(F)){I=[];for(var H=0,E=J.length;H<E;++H){I[H]=D.doMethod.call(this,F,J[H],G[H]);}I="rgb("+Math.floor(I[0])+","+Math.floor(I[1])+","+Math.floor(I[2])+")";}else{I=D.doMethod.call(this,F,J,G);}return I;};B.setRuntimeAttribute=function(F){D.setRuntimeAttribute.call(this,F);if(this.patterns.color.test(F)){var H=this.attributes;var J=this.parseColor(this.runtimeAttributes[F].start);var G=this.parseColor(this.runtimeAttributes[F].end);if(typeof H[F]["to"]==="undefined"&&typeof H[F]["by"]!=="undefined"){G=this.parseColor(H[F].by);for(var I=0,E=J.length;I<E;++I){G[I]=J[I]+G[I];}}this.runtimeAttributes[F].start=J;this.runtimeAttributes[F].end=G;}};C.ColorAnim=A;})();
YAHOO.util.Easing={easeNone:function(B,A,D,C){return D*B/C+A;},easeIn:function(B,A,D,C){return D*(B/=C)*B+A;},easeOut:function(B,A,D,C){return -D*(B/=C)*(B-2)+A;},easeBoth:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B+A;}return -D/2*((--B)*(B-2)-1)+A;},easeInStrong:function(B,A,D,C){return D*(B/=C)*B*B*B+A;},easeOutStrong:function(B,A,D,C){return -D*((B=B/C-1)*B*B*B-1)+A;},easeBothStrong:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B*B*B+A;}return -D/2*((B-=2)*B*B*B-2)+A;},elasticIn:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return -(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;},elasticOut:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return B*Math.pow(2,-10*C)*Math.sin((C*F-D)*(2*Math.PI)/E)+G+A;},elasticBoth:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F/2)==2){return A+G;}if(!E){E=F*(0.3*1.5);}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}if(C<1){return -0.5*(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;}return B*Math.pow(2,-10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E)*0.5+G+A;},backIn:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*(B/=D)*B*((C+1)*B-C)+A;},backOut:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*((B=B/D-1)*B*((C+1)*B+C)+1)+A;},backBoth:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}if((B/=D/2)<1){return E/2*(B*B*(((C*=(1.525))+1)*B-C))+A;}return E/2*((B-=2)*B*(((C*=(1.525))+1)*B+C)+2)+A;},bounceIn:function(B,A,D,C){return D-YAHOO.util.Easing.bounceOut(C-B,0,D,C)+A;},bounceOut:function(B,A,D,C){if((B/=C)<(1/2.75)){return D*(7.5625*B*B)+A;}else{if(B<(2/2.75)){return D*(7.5625*(B-=(1.5/2.75))*B+0.75)+A;}else{if(B<(2.5/2.75)){return D*(7.5625*(B-=(2.25/2.75))*B+0.9375)+A;}}}return D*(7.5625*(B-=(2.625/2.75))*B+0.984375)+A;},bounceBoth:function(B,A,D,C){if(B<C/2){return YAHOO.util.Easing.bounceIn(B*2,0,D,C)*0.5+A;}return YAHOO.util.Easing.bounceOut(B*2-C,0,D,C)*0.5+D*0.5+A;}};(function(){var A=function(H,G,I,J){if(H){A.superclass.constructor.call(this,H,G,I,J);}};A.NAME="Motion";var E=YAHOO.util;YAHOO.extend(A,E.ColorAnim);var F=A.superclass;var C=A.prototype;C.patterns.points=/^points$/i;C.setAttribute=function(G,I,H){if(this.patterns.points.test(G)){H=H||"px";F.setAttribute.call(this,"left",I[0],H);F.setAttribute.call(this,"top",I[1],H);}else{F.setAttribute.call(this,G,I,H);}};C.getAttribute=function(G){if(this.patterns.points.test(G)){var H=[F.getAttribute.call(this,"left"),F.getAttribute.call(this,"top")];}else{H=F.getAttribute.call(this,G);}return H;};C.doMethod=function(G,K,H){var J=null;if(this.patterns.points.test(G)){var I=this.method(this.currentFrame,0,100,this.totalFrames)/100;J=E.Bezier.getPosition(this.runtimeAttributes[G],I);}else{J=F.doMethod.call(this,G,K,H);}return J;};C.setRuntimeAttribute=function(P){if(this.patterns.points.test(P)){var H=this.getEl();var J=this.attributes;var G;var L=J["points"]["control"]||[];var I;var M,O;if(L.length>0&&!(L[0] instanceof Array)){L=[L];}else{var K=[];for(M=0,O=L.length;M<O;++M){K[M]=L[M];}L=K;}if(E.Dom.getStyle(H,"position")=="static"){E.Dom.setStyle(H,"position","relative");}if(D(J["points"]["from"])){E.Dom.setXY(H,J["points"]["from"]);
}else{E.Dom.setXY(H,E.Dom.getXY(H));}G=this.getAttribute("points");if(D(J["points"]["to"])){I=B.call(this,J["points"]["to"],G);var N=E.Dom.getXY(this.getEl());for(M=0,O=L.length;M<O;++M){L[M]=B.call(this,L[M],G);}}else{if(D(J["points"]["by"])){I=[G[0]+J["points"]["by"][0],G[1]+J["points"]["by"][1]];for(M=0,O=L.length;M<O;++M){L[M]=[G[0]+L[M][0],G[1]+L[M][1]];}}}this.runtimeAttributes[P]=[G];if(L.length>0){this.runtimeAttributes[P]=this.runtimeAttributes[P].concat(L);}this.runtimeAttributes[P][this.runtimeAttributes[P].length]=I;}else{F.setRuntimeAttribute.call(this,P);}};var B=function(G,I){var H=E.Dom.getXY(this.getEl());G=[G[0]-H[0]+I[0],G[1]-H[1]+I[1]];return G;};var D=function(G){return(typeof G!=="undefined");};E.Motion=A;})();(function(){var D=function(F,E,G,H){if(F){D.superclass.constructor.call(this,F,E,G,H);}};D.NAME="Scroll";var B=YAHOO.util;YAHOO.extend(D,B.ColorAnim);var C=D.superclass;var A=D.prototype;A.doMethod=function(E,H,F){var G=null;if(E=="scroll"){G=[this.method(this.currentFrame,H[0],F[0]-H[0],this.totalFrames),this.method(this.currentFrame,H[1],F[1]-H[1],this.totalFrames)];}else{G=C.doMethod.call(this,E,H,F);}return G;};A.getAttribute=function(E){var G=null;var F=this.getEl();if(E=="scroll"){G=[F.scrollLeft,F.scrollTop];}else{G=C.getAttribute.call(this,E);}return G;};A.setAttribute=function(E,H,G){var F=this.getEl();if(E=="scroll"){F.scrollLeft=H[0];F.scrollTop=H[1];}else{C.setAttribute.call(this,E,H,G);}};B.Scroll=D;})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.8.0r4",build:"2449"});
YAHOO.util.Connect={_msxml_progid:["Microsoft.XMLHTTP","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP"],_http_headers:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:"application/x-www-form-urlencoded; charset=UTF-8",_default_form_header:"application/x-www-form-urlencoded",_use_default_xhr_header:true,_default_xhr_header:"XMLHttpRequest",_has_default_headers:true,_default_headers:{},_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,startEvent:new YAHOO.util.CustomEvent("start"),completeEvent:new YAHOO.util.CustomEvent("complete"),successEvent:new YAHOO.util.CustomEvent("success"),failureEvent:new YAHOO.util.CustomEvent("failure"),abortEvent:new YAHOO.util.CustomEvent("abort"),_customEvents:{onStart:["startEvent","start"],onComplete:["completeEvent","complete"],onSuccess:["successEvent","success"],onFailure:["failureEvent","failure"],onUpload:["uploadEvent","upload"],onAbort:["abortEvent","abort"]},setProgId:function(A){this._msxml_progid.unshift(A);},setDefaultPostHeader:function(A){if(typeof A=="string"){this._default_post_header=A;}else{if(typeof A=="boolean"){this._use_default_post_header=A;}}},setDefaultXhrHeader:function(A){if(typeof A=="string"){this._default_xhr_header=A;}else{this._use_default_xhr_header=A;}},setPollingInterval:function(A){if(typeof A=="number"&&isFinite(A)){this._polling_interval=A;}},createXhrObject:function(F){var D,A,B;try{A=new XMLHttpRequest();D={conn:A,tId:F,xhr:true};}catch(C){for(B=0;B<this._msxml_progid.length;++B){try{A=new ActiveXObject(this._msxml_progid[B]);D={conn:A,tId:F,xhr:true};break;}catch(E){}}}finally{return D;}},getConnectionObject:function(A){var C,D=this._transaction_id;try{if(!A){C=this.createXhrObject(D);}else{C={tId:D};if(A==="xdr"){C.conn=this._transport;C.xdr=true;}else{if(A==="upload"){C.upload=true;}}}if(C){this._transaction_id++;}}catch(B){}return C;},asyncRequest:function(G,D,F,A){var E,C,B=(F&&F.argument)?F.argument:null;if(this._isFileUpload){C="upload";}else{if(F.xdr){C="xdr";}}E=this.getConnectionObject(C);if(!E){return null;}else{if(F&&F.customevents){this.initCustomEvents(E,F);}if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(E,F,D,A);return E;}if(G.toUpperCase()=="GET"){if(this._sFormData.length!==0){D+=((D.indexOf("?")==-1)?"?":"&")+this._sFormData;}}else{if(G.toUpperCase()=="POST"){A=A?this._sFormData+"&"+A:this._sFormData;}}}if(G.toUpperCase()=="GET"&&(F&&F.cache===false)){D+=((D.indexOf("?")==-1)?"?":"&")+"rnd="+new Date().valueOf().toString();}if(this._use_default_xhr_header){if(!this._default_headers["X-Requested-With"]){this.initHeader("X-Requested-With",this._default_xhr_header,true);}}if((G.toUpperCase()==="POST"&&this._use_default_post_header)&&this._isFormSubmit===false){this.initHeader("Content-Type",this._default_post_header);}if(E.xdr){this.xdr(E,G,D,F,A);return E;}E.conn.open(G,D,true);if(this._has_default_headers||this._has_http_headers){this.setHeader(E);}this.handleReadyState(E,F);E.conn.send(A||"");if(this._isFormSubmit===true){this.resetFormState();}this.startEvent.fire(E,B);if(E.startEvent){E.startEvent.fire(E,B);}return E;}},initCustomEvents:function(A,C){var B;for(B in C.customevents){if(this._customEvents[B][0]){A[this._customEvents[B][0]]=new YAHOO.util.CustomEvent(this._customEvents[B][1],(C.scope)?C.scope:null);A[this._customEvents[B][0]].subscribe(C.customevents[B]);}}},handleReadyState:function(C,D){var B=this,A=(D&&D.argument)?D.argument:null;if(D&&D.timeout){this._timeOut[C.tId]=window.setTimeout(function(){B.abort(C,D,true);},D.timeout);}this._poll[C.tId]=window.setInterval(function(){if(C.conn&&C.conn.readyState===4){window.clearInterval(B._poll[C.tId]);delete B._poll[C.tId];if(D&&D.timeout){window.clearTimeout(B._timeOut[C.tId]);delete B._timeOut[C.tId];}B.completeEvent.fire(C,A);if(C.completeEvent){C.completeEvent.fire(C,A);}B.handleTransactionResponse(C,D);}},this._polling_interval);},handleTransactionResponse:function(B,I,D){var E,A,G=(I&&I.argument)?I.argument:null,C=(B.r&&B.r.statusText==="xdr:success")?true:false,H=(B.r&&B.r.statusText==="xdr:failure")?true:false,J=D;try{if((B.conn.status!==undefined&&B.conn.status!==0)||C){E=B.conn.status;}else{if(H&&!J){E=0;}else{E=13030;}}}catch(F){E=13030;}if((E>=200&&E<300)||E===1223||C){A=B.xdr?B.r:this.createResponseObject(B,G);if(I&&I.success){if(!I.scope){I.success(A);}else{I.success.apply(I.scope,[A]);}}this.successEvent.fire(A);if(B.successEvent){B.successEvent.fire(A);}}else{switch(E){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:A=this.createExceptionObject(B.tId,G,(D?D:false));if(I&&I.failure){if(!I.scope){I.failure(A);}else{I.failure.apply(I.scope,[A]);}}break;default:A=(B.xdr)?B.response:this.createResponseObject(B,G);if(I&&I.failure){if(!I.scope){I.failure(A);}else{I.failure.apply(I.scope,[A]);}}}this.failureEvent.fire(A);if(B.failureEvent){B.failureEvent.fire(A);}}this.releaseObject(B);A=null;},createResponseObject:function(A,G){var D={},I={},E,C,F,B;try{C=A.conn.getAllResponseHeaders();F=C.split("\n");for(E=0;E<F.length;E++){B=F[E].indexOf(":");if(B!=-1){I[F[E].substring(0,B)]=YAHOO.lang.trim(F[E].substring(B+2));}}}catch(H){}D.tId=A.tId;D.status=(A.conn.status==1223)?204:A.conn.status;D.statusText=(A.conn.status==1223)?"No Content":A.conn.statusText;D.getResponseHeader=I;D.getAllResponseHeaders=C;D.responseText=A.conn.responseText;D.responseXML=A.conn.responseXML;if(G){D.argument=G;}return D;},createExceptionObject:function(H,D,A){var F=0,G="communication failure",C=-1,B="transaction aborted",E={};E.tId=H;if(A){E.status=C;E.statusText=B;}else{E.status=F;E.statusText=G;}if(D){E.argument=D;}return E;},initHeader:function(A,D,C){var B=(C)?this._default_headers:this._http_headers;B[A]=D;if(C){this._has_default_headers=true;}else{this._has_http_headers=true;}},setHeader:function(A){var B;if(this._has_default_headers){for(B in this._default_headers){if(YAHOO.lang.hasOwnProperty(this._default_headers,B)){A.conn.setRequestHeader(B,this._default_headers[B]);}}}if(this._has_http_headers){for(B in this._http_headers){if(YAHOO.lang.hasOwnProperty(this._http_headers,B)){A.conn.setRequestHeader(B,this._http_headers[B]);
}}this._http_headers={};this._has_http_headers=false;}},resetDefaultHeaders:function(){this._default_headers={};this._has_default_headers=false;},abort:function(E,G,A){var D,B=(G&&G.argument)?G.argument:null;E=E||{};if(E.conn){if(E.xhr){if(this.isCallInProgress(E)){E.conn.abort();window.clearInterval(this._poll[E.tId]);delete this._poll[E.tId];if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{if(E.xdr){E.conn.abort(E.tId);D=true;}}}else{if(E.upload){var C="yuiIO"+E.tId;var F=document.getElementById(C);if(F){YAHOO.util.Event.removeListener(F,"load");document.body.removeChild(F);if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{D=false;}}if(D===true){this.abortEvent.fire(E,B);if(E.abortEvent){E.abortEvent.fire(E,B);}this.handleTransactionResponse(E,G,true);}return D;},isCallInProgress:function(A){A=A||{};if(A.xhr&&A.conn){return A.conn.readyState!==4&&A.conn.readyState!==0;}else{if(A.xdr&&A.conn){return A.conn.isCallInProgress(A.tId);}else{if(A.upload===true){return document.getElementById("yuiIO"+A.tId)?true:false;}else{return false;}}}},releaseObject:function(A){if(A&&A.conn){A.conn=null;A=null;}}};(function(){var G=YAHOO.util.Connect,H={};function D(I){var J='<object id="YUIConnectionSwf" type="application/x-shockwave-flash" data="'+I+'" width="0" height="0">'+'<param name="movie" value="'+I+'">'+'<param name="allowScriptAccess" value="always">'+"</object>",K=document.createElement("div");document.body.appendChild(K);K.innerHTML=J;}function B(L,I,J,M,K){H[parseInt(L.tId)]={"o":L,"c":M};if(K){M.method=I;M.data=K;}L.conn.send(J,M,L.tId);}function E(I){D(I);G._transport=document.getElementById("YUIConnectionSwf");}function C(){G.xdrReadyEvent.fire();}function A(J,I){if(J){G.startEvent.fire(J,I.argument);if(J.startEvent){J.startEvent.fire(J,I.argument);}}}function F(J){var K=H[J.tId].o,I=H[J.tId].c;if(J.statusText==="xdr:start"){A(K,I);return;}J.responseText=decodeURI(J.responseText);K.r=J;if(I.argument){K.r.argument=I.argument;}this.handleTransactionResponse(K,I,J.statusText==="xdr:abort"?true:false);delete H[J.tId];}G.xdr=B;G.swf=D;G.transport=E;G.xdrReadyEvent=new YAHOO.util.CustomEvent("xdrReady");G.xdrReady=C;G.handleXdrResponse=F;})();(function(){var D=YAHOO.util.Connect,F=YAHOO.util.Event;D._isFormSubmit=false;D._isFileUpload=false;D._formNode=null;D._sFormData=null;D._submitElementValue=null;D.uploadEvent=new YAHOO.util.CustomEvent("upload"),D._hasSubmitListener=function(){if(F){F.addListener(document,"click",function(J){var I=F.getTarget(J),H=I.nodeName.toLowerCase();if((H==="input"||H==="button")&&(I.type&&I.type.toLowerCase()=="submit")){D._submitElementValue=encodeURIComponent(I.name)+"="+encodeURIComponent(I.value);}});return true;}return false;}();function G(T,O,J){var S,I,R,P,W,Q=false,M=[],V=0,L,N,K,U,H;this.resetFormState();if(typeof T=="string"){S=(document.getElementById(T)||document.forms[T]);}else{if(typeof T=="object"){S=T;}else{return;}}if(O){this.createFrame(J?J:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=S;return;}for(L=0,N=S.elements.length;L<N;++L){I=S.elements[L];W=I.disabled;R=I.name;if(!W&&R){R=encodeURIComponent(R)+"=";P=encodeURIComponent(I.value);switch(I.type){case"select-one":if(I.selectedIndex>-1){H=I.options[I.selectedIndex];M[V++]=R+encodeURIComponent((H.attributes.value&&H.attributes.value.specified)?H.value:H.text);}break;case"select-multiple":if(I.selectedIndex>-1){for(K=I.selectedIndex,U=I.options.length;K<U;++K){H=I.options[K];if(H.selected){M[V++]=R+encodeURIComponent((H.attributes.value&&H.attributes.value.specified)?H.value:H.text);}}}break;case"radio":case"checkbox":if(I.checked){M[V++]=R+P;}break;case"file":case undefined:case"reset":case"button":break;case"submit":if(Q===false){if(this._hasSubmitListener&&this._submitElementValue){M[V++]=this._submitElementValue;}Q=true;}break;default:M[V++]=R+P;}}}this._isFormSubmit=true;this._sFormData=M.join("&");this.initHeader("Content-Type",this._default_form_header);return this._sFormData;}function C(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormData="";}function B(H){var I="yuiIO"+this._transaction_id,J;if(YAHOO.env.ua.ie){J=document.createElement('<iframe id="'+I+'" name="'+I+'" />');if(typeof H=="boolean"){J.src="javascript:false";}}else{J=document.createElement("iframe");J.id=I;J.name=I;}J.style.position="absolute";J.style.top="-1000px";J.style.left="-1000px";document.body.appendChild(J);}function E(H){var K=[],I=H.split("&"),J,L;for(J=0;J<I.length;J++){L=I[J].indexOf("=");if(L!=-1){K[J]=document.createElement("input");K[J].type="hidden";K[J].name=decodeURIComponent(I[J].substring(0,L));K[J].value=decodeURIComponent(I[J].substring(L+1));this._formNode.appendChild(K[J]);}}return K;}function A(K,V,L,J){var Q="yuiIO"+K.tId,R="multipart/form-data",T=document.getElementById(Q),M=(document.documentMode&&document.documentMode===8)?true:false,W=this,S=(V&&V.argument)?V.argument:null,U,P,I,O,H,N;H={action:this._formNode.getAttribute("action"),method:this._formNode.getAttribute("method"),target:this._formNode.getAttribute("target")};this._formNode.setAttribute("action",L);this._formNode.setAttribute("method","POST");this._formNode.setAttribute("target",Q);if(YAHOO.env.ua.ie&&!M){this._formNode.setAttribute("encoding",R);}else{this._formNode.setAttribute("enctype",R);}if(J){U=this.appendPostData(J);}this._formNode.submit();this.startEvent.fire(K,S);if(K.startEvent){K.startEvent.fire(K,S);}if(V&&V.timeout){this._timeOut[K.tId]=window.setTimeout(function(){W.abort(K,V,true);},V.timeout);}if(U&&U.length>0){for(P=0;P<U.length;P++){this._formNode.removeChild(U[P]);}}for(I in H){if(YAHOO.lang.hasOwnProperty(H,I)){if(H[I]){this._formNode.setAttribute(I,H[I]);}else{this._formNode.removeAttribute(I);}}}this.resetFormState();N=function(){if(V&&V.timeout){window.clearTimeout(W._timeOut[K.tId]);delete W._timeOut[K.tId];}W.completeEvent.fire(K,S);if(K.completeEvent){K.completeEvent.fire(K,S);
}O={tId:K.tId,argument:V.argument};try{O.responseText=T.contentWindow.document.body?T.contentWindow.document.body.innerHTML:T.contentWindow.document.documentElement.textContent;O.responseXML=T.contentWindow.document.XMLDocument?T.contentWindow.document.XMLDocument:T.contentWindow.document;}catch(X){}if(V&&V.upload){if(!V.scope){V.upload(O);}else{V.upload.apply(V.scope,[O]);}}W.uploadEvent.fire(O);if(K.uploadEvent){K.uploadEvent.fire(O);}F.removeListener(T,"load",N);setTimeout(function(){document.body.removeChild(T);W.releaseObject(K);},100);};F.addListener(T,"load",N);}D.setForm=G;D.resetFormState=C;D.createFrame=B;D.appendPostData=E;D.uploadFile=A;})();YAHOO.register("connection",YAHOO.util.Connect,{version:"2.8.0r4",build:"2449"});
(function(){var B=YAHOO.util.Event,G=YAHOO.lang,E=B.addListener,F=B.removeListener,C=B.getListeners,D=[],H={mouseenter:"mouseover",mouseleave:"mouseout"},A=function(N,M,L){var J=B._getCacheIndex(D,N,M,L),I,K;if(J>=0){I=D[J];}if(N&&I){K=F.call(B,I[0],M,I[3]);if(K){delete D[J][2];delete D[J][3];D.splice(J,1);}}return K;};G.augmentObject(B._specialTypes,H);G.augmentObject(B,{_createMouseDelegate:function(I,J,K){return function(Q,M){var P=this,L=B.getRelatedTarget(Q),O,N;if(P!=L&&!YAHOO.util.Dom.isAncestor(P,L)){O=P;if(K){if(K===true){O=J;}else{O=K;}}N=[Q,P,J];if(M){N.splice(2,0,M);}return I.apply(O,N);}};},addListener:function(M,L,K,N,O){var I,J;if(H[L]){I=B._createMouseDelegate(K,N,O);I.mouseDelegate=true;D.push([M,L,K,I]);J=E.call(B,M,L,I);}else{J=E.apply(B,arguments);}return J;},removeListener:function(L,K,J){var I;if(H[K]){I=A.apply(B,arguments);}else{I=F.apply(B,arguments);}return I;},getListeners:function(N,M){var L=[],P,K=(M==="mouseover"||M==="mouseout"),O,J,I;if(M&&(K||H[M])){P=C.call(B,N,this._getType(M));if(P){for(J=P.length-1;J>-1;J--){I=P[J];O=I.fn.mouseDelegate;if((H[M]&&O)||(K&&!O)){L.push(I);}}}}else{L=C.apply(B,arguments);}return(L&&L.length)?L:null;}},true);B.on=B.addListener;}());YAHOO.register("event-mouseenter",YAHOO.util.Event,{version:"2.8.1",build:"19"});

if(!swfobject){
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}}}}();
}

if(!CARE2) {
/*********************************************************************************************
    Shortcuts
**/

var $=function(){
    var ls=[];
    for(var l,i=0;l=arguments[i];i++){
        if(typeof l == 'string')l=document.getElementById(l);
        if(arguments.length == 1)return l;
        ls.push(l);
    }
    return (ls.length>0) ? ls : false;
}

if(!''.camelize){String.prototype.camelize=function(){var s=this,x=/-([a-z])/;while(x.test(s)) s=s.replace(x,RegExp.$1.toUpperCase());return s;}}
String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}
String.prototype.ltrim=function(){return this.replace(/^\s+/g,"")}
String.prototype.rtrim=function(){return this.replace(/\s+$/g,"")}
String.prototype.chunk=function(n){if(typeof n=='undefined')n=2;return this.match(RegExp('.{1,'+n+'}','g'));}
String.prototype.toTitleCase=function(){return this.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});}

String.prototype.toCharCode = function(){
    var str = this.split(''), len = str.length, work = [];
    for (var i = 0; i < len; ++i){
        try {
            work[i] = String.charCodeAt(str[i]);
        } catch(e) {
            work[i] = str[i].charCodeAt(0);
        }
    }
    return work.join(',');
}

Array.prototype.inArray=function(q){
    for(var l,i=0;l=this[i];i++)if(l===q)return true;
    return false;
}

var re = /^(.*\-)?.*/;
var js_www_stage = document.domain.replace(re, "$1");

/*********************************************************************************************
    json2.js 
    2008-01-17
    Public Domain
    No warranty expressed or implied. Use at your own risk.
    See http://www.JSON.org/js.html
**/

if(!this.JSON){JSON=function(){function f(n){return n<10?'0'+n:n;}
Date.prototype.toJSON=function(){return this.getUTCFullYear()+'-'+
f(this.getUTCMonth()+1)+'-'+
f(this.getUTCDate())+'T'+
f(this.getUTCHours())+':'+
f(this.getUTCMinutes())+':'+
f(this.getUTCSeconds())+'Z';};var m={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'};function stringify(value,whitelist){var a,i,k,l,r=/["\\\x00-\x1f\x7f-\x9f]/g,v;switch(typeof value){case'string':return r.test(value)?'"'+value.replace(r,function(a){var c=m[a];if(c){return c;}
c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+
(c%16).toString(16);})+'"':'"'+value+'"';case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}
if(typeof value.toJSON==='function'){return stringify(value.toJSON());}
a=[];if(typeof value.length==='number'&&!(value.propertyIsEnumerable('length'))){l=value.length;for(i=0;i<l;i+=1){a.push(stringify(value[i],whitelist)||'null');}
return'['+a.join(',')+']';}
if(whitelist){l=whitelist.length;for(i=0;i<l;i+=1){k=whitelist[i];if(typeof k==='string'){v=stringify(value[k],whitelist);if(v){a.push(stringify(k)+':'+v);}}}}else{for(k in value){if(typeof k==='string'){v=stringify(value[k],whitelist);if(v){a.push(stringify(k)+':'+v);}}}}
return'{'+a.join(',')+'}';}}
return{stringify:stringify,parse:function(text,filter){var j;function walk(k,v){var i,n;if(v&&typeof v==='object'){for(i in v){if(Object.prototype.hasOwnProperty.apply(v,[i])){n=walk(i,v[i]);if(n!==undefined){v[i]=n;}}}}
return filter(k,v);}
if(/^[\],:{}\s]*$/.test(text.replace(/\\./g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof filter==='function'?walk('',j):j;}
throw new SyntaxError('parseJSON');}};}();}

/*********************************************************************************************
    Global Functions
**/

var setCookie=function(c,v,ex){
    var exdate=new Date();
    exdate.setDate(exdate.getDate()+ex);
    document.cookie=c+"="+escape(v)+((ex==null) ? "" : ";expires="+exdate.toGMTString());
}

var getCookie=function(c){
    if(document.cookie.length>0){
        c_start=document.cookie.indexOf(c+"=");
        if(c_start!=-1){
            c_start=c_start+c.length+1;
            c_end=document.cookie.indexOf(";",c_start);
            if(c_end==-1)c_end=document.cookie.length;
            return unescape(document.cookie.substring(c_start,c_end));
        }
    }
    return false;
}

/*********************************************************************************************
    CARE2 Object
**/

var CARE2={
library:"YAHOO",
stage:js_www_stage,
loggedIn:function() {
    return this.userData();
},
log:function(m){
    if(!CARE2.stage) return false;
    try{
        console.log(m);
    }catch(e){}
},
userData:function(json) {
    var loginData = getCookie('carecards_user_cache');
    var unserialized = eval("String.fromCharCode("+loginData+")");
    
    if (typeof loginData == "string" && loginData != "false" && unserialized != "false") {
        loginData = CARE2.deserializeJson(loginData);
    } else {
        loginData = false;
    }

    if(typeof json != "undefined") { // SET COOKIE
        if(!loginData) loginData = {};
        
        for(var i in json) {
            loginData[i] = json[i];
        }
        
        var exp = (loginData.expires) ? ";expires="+loginData.expires.toGMTString() : "";
        
        document.cookie="carecards_user_cache="+CARE2.serializeJson(loginData)+";path=/"+exp;
    }

    return loginData;
},
serializeJson:function(j){
    j=JSON.stringify(j);
    return j.toCharCode();
},
deserializeJson:function(j){
    return JSON.parse(eval("String.fromCharCode("+j+")"));
},
bodyReady:false,
appendToBody:function(d){
    if(this.bodyReady){
        document.body.appendChild(d);
    }else{
        document.body.insertBefore(d, document.body.firstChild);
    }
},
debugwin:function(){
    var _self=this;
    var o={
        active:false,
        win:document.createElement('div'),
        put:function(t){
            if(this.active)this.win.innerHTML=t+"<br/>"+this.win.innerHTML
        },
        activate:function(){
            if(!this.active)CARE2.appendToBody(this.win);
            this.active=true;
        }
    }
    o.win.style.cssText='padding:3px;border:1px solid #000;background:#fff;width:400px;height:700px;overflow:auto;position:fixed;top:0;right:0';
    return o;
}(),
ie:YAHOO.env.ua.ie,
isIE:(document.all && !window.opera),
isSafari:navigator.userAgent.match(/safari/i),
isOpera:window.opera,
isFirefox:navigator.userAgent.match(/Firefox/),
isJSON:function(t){
    t=t.replace(/\\\'/g,"'");
    return /^[\],:{}\s]*$/.test(t.replace(/\\["\\\/bfnrtu]/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''));
},

stripTags:function(s) {
    return s.replace(/(<([^>]+)>)/ig,'');
},

iFrame:function(styles,allBrowsers){
    var iframe = $('care2_dropdown_iframe');
    if(!styles || typeof styles != "object"){
        iframe.style.left = iframe.style.top = iframe.style.width = iframe.style.height = 0;
    }else{
        if(CARE2.isIE||allBrowsers){
            for(var i in styles){
                iframe.style[i] = styles[i];
            }
        }
    }
},

getFlashMovieObject:function(m){
    if(window.document[m])return window.document[m];
    if(navigator.appName.indexOf("Microsoft Internet")==-1){
        if(document.embeds && document.embeds[m])return document.embeds[m];
    }else{
        return $(m);
    }
},

getMousePos:function(e){
    var e=e||window.event;
    if(e.pageX||e.pageY) return {x:e.pageX,y:e.pageY};
    return {x:e.clientX+document.body.scrollLeft-document.body.clientLeft,y:e.clientY+document.body.scrollTop-document.body.clientTop};
},

getPageScroll:function(){
    var x,y;
    if(self.pageYOffset){
        y=self.pageYOffset;x = self.pageXOffset;
    }else if(document.documentElement&&document.documentElement.scrollTop){
        y=document.documentElement.scrollTop;
        x=document.documentElement.scrollLeft;
    }else if(document.body){
        y=document.body.scrollTop;
        x=document.body.scrollLeft;
    }
    return {x:x,y:y};
},

getPageSize:function(){
    var x,y;
    if(window.innerHeight&&window.scrollMaxY){
        x=window.innerWidth+window.scrollMaxX;
        y=window.innerHeight+window.scrollMaxY;
    }else if(document.body.scrollHeight>document.body.offsetHeight){
        x=document.body.scrollWidth;
        y=document.body.scrollHeight;
    }else{
        x=document.body.offsetWidth;
        y=document.body.offsetHeight;
    }
    var ww,wh;
    if(self.innerHeight){
        (document.documentElement.clientWidth)?ww=document.documentElement.clientWidth:ww=self.innerWidth;
        wh=self.innerHeight;
    }else if(document.documentElement&&document.documentElement.clientHeight){
        ww=document.documentElement.clientWidth;
        wh=document.documentElement.clientHeight;
    }else if(document.body){
        ww=document.body.clientWidth;
        wh=document.body.clientHeight;
    }
    (y<wh)?pageHeight=wh:pageHeight=y;
    (x<ww)?pageWidth=x:pageWidth=ww;
    return {pageWidth:pageWidth,pageHeight:pageHeight,windowWidth:ww,windowHeight:wh};
},

backgroundPNG:function(p){
    return (navigator.userAgent.indexOf('MSIE')>=0)?"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader (src='"+p+"', sizingMethod='crop');":"background: transparent url("+p+") no-repeat scroll top left;"
},

buildElement:function(t,p){
    var d=document.createElement(t);
    for(var i in p){
        if(i=="style"){
            for(j in p[i]) d.style[j]=p[i][j];
        }else{
            d[i]=p[i]
        }
    }
    return d;
},

setOpacity:function(d,o){
    d=$(d);
    d.style.opacity=o/100;
    d.style.MozOpacity=o/100;
    d.style.KhtmlOpacity=o/100;
    d.style.filter="alpha(opacity="+o+")";
},

prettyDate:function(d){
    var time_formats=[[60,'Just Now'],[90,'1 Minute'],[3600,'Minutes',60],[5400, '1 Hour'],[86400,'Hours',3600],[129600,'1 Day'],[604800,'Days',86400],[907200,'1 Week'],[2628000,'Weeks',604800],[3942000,'1 Month'],[31536000,'Months',2628000],[47304000,'1 Year'],[3153600000,'Years',31536000],[4730400000,'1 Century']];
    var time=(''+d).replace(/-/g,"/").replace(/[TZ]/g," "),dt=new Date,seconds=((dt-new Date(time))/1000),token=' Ago',i=0,format;
    if(seconds<0){
        seconds=Math.abs(seconds);
        token='';
    }
    while(format=time_formats[i++]){
        if(seconds<format[0]){
            if(format.length==2){
                return format[1]+(i>1?token:'');
            }else{
                return parseInt(seconds/format[2])+' '+format[1]+(i>1?token:'');
            }
        }
    }

    if(seconds > 4730400000)return parseInt(seconds / 4730400000) + ' Centuries' + token;
    return d;
},

cloneObj:function(o){
    if((typeof(o)!='object')||(o==null))return o;
    var n={};
    for(var i in o)n[i]=this.cloneObj(o[i]);
    return n;
},
returnGetVars:function(){
    var o={};
    var q=document.URL.indexOf('?');
    if(q>-1){
        s=document.URL.substring(q+1,document.URL.length);
        var a=s.split('&');
        for(var b,i=0;b=a[i];i++)o[unescape(b.split('=')[0])]=unescape(b.split('=')[1]);
        return o;
    }else{
        return false;
    }
},
setSelectValue:function(el,v) {
    el = $(el);
    if(!el) return false;
    v = v.toLowerCase();

    for (var i=0; i < el.length; i++) {
        if (el[i].value.toLowerCase() == v) {
            el.selectedIndex = i;
            return true;
        }
    }
},

getNodeString: function(root, tag, i) {
    i = i|0;
    var retString = "";

    if(root.getElementsByTagName(tag).length > i && root.getElementsByTagName(tag)[i].firstChild) {
        retString = root.getElementsByTagName(tag)[i].firstChild.nodeValue;
    }

    return retString;
},

hasLayoutToggle:function(el,on){
    el=$(el);
    if(!el||!el.currentStyle) return;
    /*@cc_on @if(@_jscript&&!(@_win32||@_win16)&&(@_jscript_version<5.5)) return; @end @*/
    if(typeof(el.currentStyle.hasLayout)!='undefined'){
        if(on && el.currentStyle.hasLayout)return;
        el.style.zoom=!on?'':'1';
    }else{
        var re=/^auto|0$/,cs=el.currentStyle;
        if(on && (!re.test(cs.height) || !re.test(cs.width))) return;
        if(on) el._oldHeight=el.style.height;
        el.style.height=!on?(el._oldHeight||''):'1px';
        if(!on) el._oldHeight='';
    }
},

Color:function(c){
    var obj={r:0,g:0,b:0,
        set:function(color){
            return (color.indexOf("rgb(")==0)?this.setRGB(color):this.setHex(color);
        },
        setHex:function(h){
            if(h.charAt(0)=="#") h=h.slice(1);
            if(h.length==3){
                var ar=h.split(''),i=-1;
                while(++i<3) ar[i]+=ar[i];
                h=ar.join('');
            }
            this._setValue('r',parseInt(h.slice(0,2),16));
            this._setValue('g',parseInt(h.slice(2,4),16));
            return this._setValue('b',parseInt(h.slice(4,6),16));
        },
        setRGB:function(rgb){
            var colors=rgb.slice(4).split(',');
            this._setValue('r',parseInt(colors[0],10));
            this._setValue('g',parseInt(colors[1],10));
            return this._setValue('b',parseInt(colors[2],10));
        },
        changeColor:function(amount){
            this.changeRed(amount);
            this.changeGreen(amount);
            return this.changeBlue(amount);
        },
        changeRed:function(amount){
            return this._setValue('r',this.r+parseInt(amount));
        },
        changeGreen:function(amount){
            return this._setValue('g',this.g+parseInt(amount));
        },
        changeBlue:function(amount){
            return this._setValue('b',this.b+parseInt(amount));
        },
        getRGB:function(){
            return 'rgb('+this.r+', '+this.g+', '+this.b+')';
        },
        getHex:function(){
            return ('#'+this._toHex(this.r)+this._toHex(this.g)+this._toHex(this.b));
        },
        _toHex:function(n){
            return ((n.toString(16).length==1?'0':'')+n.toString(16).toLowerCase());
        },
        _setValue:function(color,num){
            this[color]=((num<0)?0:((num>255)?255:num));
            return this;
        }
    }
    if(c)obj.set(c);
    return obj;
},

about_rollover:function(args){
    var obj={};
    var _self=this;

    obj.data=args.data||[];
    obj.panels={};
    obj.className = args.className||'care2_about_rollover';
    obj.rightLimit = (args.rightLimit) ? $(args.rightLimit) : false;
    obj.offset = args.offset||[-3,-57];
    obj.overPopup = false;
    obj.overThumb = false;
    obj.curPanel = false;
    obj.intvl = false;
    if(obj.rightLimit) obj.rightLimit = _self.getElementPosition(obj.rightLimit).left + obj.rightLimit.offsetWidth;

    obj.tempWindow=_self.buildElement('div',{id:'care2_rollover_window',className:obj.className});
    obj.tempWindow.appendChild(hotspot = _self.buildElement('div',{className:'care2_rollover_hotspot'}));
    hotspot.appendChild(_self.buildElement('div',{className:'loading'}));

    obj.hidePanel=function(id){
        if(obj.intvl) clearTimeout(obj.intvl);
        setTimeout(function(id){return function(){
            if(((obj.panels[id]&&obj.panels[id].parentNode)||obj.tempWindow.parentNode) && !obj.overPopup && !obj.overThumb) {
                if($('care2_rollover_window'))$('care2_rollover_window').parentNode.removeChild($('care2_rollover_window'));
                CARE2.iFrame();
            }
        }}(id),250);
    }

    obj.hotspotOver = function(e,id) {
        this.overPopup = id;
    }

    obj.hotspotOut = function(e,id) {
        this.overPopup = false;
        this.hidePanel(id);
    }

    obj.displayPanel=function(id,source,imgid){
        if(source=="element"&&!obj.panels[id])obj.panels[id]='init';
        if(!obj.panels[id]){
            for(var i=0;i<obj.data.length;i++)if((obj.data[i].passportID&&obj.data[i].passportID==id)||(obj.data[i].photoID&&obj.data[i].photoID==id))obj.panels[id]=obj.data[i];

            if(!obj.panels[id]){
                obj.setPanel(obj.tempWindow,imgid);
                if(source=="members"){
                    var requrl='/servlets/profile_popup?passportIDs[0]='+id;
                    var request = YAHOO.util.Connect.asyncRequest('GET', requrl, {
                        success: function(o) {
                            if(o.status==200){
                                var json = o.responseText.replace(/(<([^>]+)>)/ig,'').trim();
                                if (_self.isJSON(json)){
                                    var resp=eval("("+json+")");
                                    for(var l,i=0;l=resp[i];i++)obj.data.push(l);
                                    obj.displayPanel(id,source,imgid);
                                }else{
                                    this.failure();
                                }
                            }else{
                                this.failure();
                            }
                        },
                        failure: function(o) {
                            if($('care2_rollover_window')) $('care2_rollover_window').parentNode.removeChild($('care2_rollover_window'));
                            CARE2.iFrame();
                        },
                        timeout: 30000
                    })
                }
            }else{obj.displayPanel(id,source,imgid);}
        }else{
            if(obj.panels[id].passportID||obj.panels[id].photoID||obj.panels[id]=='init'){
                var newpanel = _self.buildElement('div',{id:'care2_rollover_window',className:obj.className});
                var hotspot = _self.buildElement('div',{className:'care2_rollover_hotspot'});
                newpanel.appendChild(hotspot);

                CARE2.addListener(hotspot,"mouseover",obj.hotspotOver,eval(id),obj);
                CARE2.addListener(hotspot,"mouseout",obj.hotspotOut,eval(id),obj);

                if(source=="element"){
                    hotspot.innerHTML=$(obj.sourceId+"_"+id).innerHTML;
                    $(obj.sourceId+"_"+id).parentNode.removeChild($(obj.sourceId+"_"+id));
                }

                if(source=="members"){
                    // build HTML for members
                    hotspot.appendChild(about=_self.buildElement('div',{className:'about'}));
                    about.appendChild(_self.buildElement('span',{className:'tl'}));
                    about.appendChild(_self.buildElement('span',{className:'tr'}));
                    about.appendChild(aboutWrapper=_self.buildElement('div',{className:'about_wrapper'}));
                    aboutWrapper.appendChild(divname=_self.buildElement('div',{className:'name'}));
                    divname.appendChild(aspot=_self.buildElement('a',{href:'http://'+_self.stage+'www.care2.com/c2c/people/profile.html?pid='+id}));
                    aspot.appendChild(_self.buildElement('img',{src:obj.panels[id].thumbnail}));
                    divname.appendChild(_self.buildElement('div',{innerHTML:obj.panels[id].name}));
                    aboutWrapper.appendChild(divname=_self.buildElement('div',{className:'actions'}));
                    divname.appendChild(ul=_self.buildElement('ul'));
                    ul.appendChild(_self.buildElement('li',{innerHTML:"member since "+obj.panels[id].member_since}));
                    if(obj.panels[id].friends_count&&obj.panels[id].friends_count!="0")ul.appendChild(_self.buildElement('li',{innerHTML:obj.panels[id].friends_count+" friends"}));
                    if(obj.panels[id].petitions_signed&&obj.panels[id].petitions_signed!="0")ul.appendChild(_self.buildElement('li',{innerHTML:obj.panels[id].petitions_signed+" petitions signed"}));
                    about.appendChild(ul=_self.buildElement('div',{className:"kudos"}));
                    ul.appendChild(_self.buildElement('div',{className:"background"}));
                    ul.appendChild(_self.buildElement('a',{className:"stars",innerHTML:obj.panels[id].green_stars,href:"http://"+_self.stage+"www.care2.com/c2c/my/kudos_green_stars.html?pid="+id}));
                    ul.appendChild(_self.buildElement('a',{className:"butterflies",innerHTML:obj.panels[id].butterflies,href:"http://"+_self.stage+"www.care2.com/rewards/"}));
                    ul.appendChild(_self.buildElement('a',{className:"notes",innerHTML:obj.panels[id].golden_notes,href:"http://"+_self.stage+"www.care2.com/c2c/my/kudos_golden_notes.html?pid="+id}));
                    about.appendChild(_self.buildElement('span',{className:'bl'}));
                    about.appendChild(_self.buildElement('span',{className:'br'}));
                    hotspot.appendChild(about=_self.buildElement('div',{className:'icare',innerHTML:"I care about&#0133;<br/>"}));
                    var total_length=0;
                    if(obj.panels[id].causes){
                        for(var l,i=0;l=obj.panels[id].causes[i];i++){
                            l=l.trim();
                            total_length+=l.length;
                            var newl = (total_length>35) ? l.substr(0,35-(total_length-35))+"&#0133;" : l;
                            about.appendChild(_self.buildElement('a',{href:'http://'+_self.stage+'www.care2.com/c2c/people/tag/causes/'+escape(l),innerHTML:newl}));
                            if(total_length>35){
                                break;
                            }else{
                                if(i<obj.panels[id].causes.length-1)about.appendChild(document.createTextNode(", "));
                            }
                        }
                    }
                    hotspot.appendChild(about=_self.buildElement('ul',{className:'toolbar'}));
                    if(!obj.panels[id].is_friend){
                        about.appendChild(li=_self.buildElement('li',{className:'add'}));
                        li.appendChild(_self.buildElement('a',{href:'http://'+_self.stage+'www.care2.com/c2c/my/add_friend.html?fid='+id+'&sul='+escape(location.href),innerHTML:'Add as friend'}));
                    }else{
                        about.appendChild(li=_self.buildElement('li',{className:'email'}));
                        li.appendChild(_self.buildElement('a',{href:'http://'+_self.stage+'www.care2.com/c2c/pm/compose?pm[recipientID][]='+id,innerHTML:'Send message'}));
                    }
                    about.appendChild(li=_self.buildElement('li',{className:'star'}));
                    li.appendChild(_self.buildElement('a',{href:'http://'+_self.stage+'www.care2.com/c2c/people/greenstar.html?targetID='+id,innerHTML:'Send green star'}));
                }

                if(source=="photos"){
                    // build HTML for photos
                    hotspot.appendChild(about=_self.buildElement('div',{className:'pic'}));
                    about.appendChild(img=_self.buildElement('a',{href:obj.panels[id].photoURL}));
                    img.appendChild(_self.buildElement('img',{src:obj.panels[id].photoSRC}));
                    about.appendChild(author=_self.buildElement('div',{className:'author'}));
                    author.appendChild(document.createTextNode('posted by: '));
                    author.appendChild(_self.buildElement('a',{href:'http://'+_self.stage+'www.care2.com/c2c/people/profile.html?pid='+obj.panels[id].ownerID,innerHTML:obj.panels[id].ownerName}));
                }

                obj.panels[id]=newpanel;
            }

            obj.intvl = setTimeout(function(){
                if(obj.overThumb == id){
                    obj.curPanel = id;
                    obj.setPanel(obj.panels[id],imgid);
                    obj.intvl = false;
                }
            },100);
        }
    }

    obj.setPanel=function(panel,imgid){
        if(CARE2.bodyReady){
            panel.style.visibility = "hidden";CARE2.appendToBody(panel);
            obj.windowWidth = panel.offsetWidth;
            document.body.removeChild(panel);panel.style.visibility = "visible";

            if(imgid.getElementsByTagName&&imgid.getElementsByTagName('img')[0])imgid=imgid.getElementsByTagName('img')[0];
            var pos = _self.getElementPosition(imgid);
            var ofst = {w:imgid.offsetWidth,h:imgid.offsetHeight}
            if(imgid.coords){
                var newimgid = imgid.parentNode.parentNode.getElementsByTagName('img');
                for(var l,i=0;l=newimgid[i];i++){
                    if(l.src.indexOf(imgid.parentNode.id)>=0)pos = _self.getElementPosition(l);
                }
                var coords=imgid.coords.replace(" ",",").split(",");
                pos.top+=parseInt(coords[1]);
                pos.left+=parseInt(coords[0]);
                ofst = {
                    w:parseInt(coords[2])-parseInt(coords[0]),
                    h:parseInt(coords[3])-parseInt(coords[1])
                }
            }

            var newVals = (obj.rightLimit && pos.left+ofst.w+obj.windowWidth > obj.rightLimit) ? {
                className: obj.className+" "+obj.className+"_left",
                top: (pos.top+parseInt(ofst.h/2)+obj.offset[1])+"px",
                left: (pos.left-obj.windowWidth-obj.offset[0])+"px"
            } : {
                className: obj.className,
                top: (pos.top+parseInt(ofst.h/2)+obj.offset[1])+"px",
                left: (pos.left+(ofst.w+obj.offset[0]))+"px"
            };

            panel.className = newVals.className;
            panel.style.top = newVals.top;
            panel.style.left = newVals.left;

            if($('care2_rollover_window')) $('care2_rollover_window').parentNode.removeChild($('care2_rollover_window'));
            CARE2.appendToBody(panel);
            CARE2.iFrame({
                width:panel.offsetWidth+"px",
                height:panel.offsetHeight+"px",
                top:panel.style.top,
                left:panel.style.left
            });
        }
    }

    obj.assignOver = function(e,o) {
        this.overThumb = o.x;
        this.displayPanel(o.x,o.y,o.l);
    }

    obj.assignOut = function(e,o) {
        this.overThumb = false;
        this.hidePanel(o.x);
    }

    obj.assignFunctions=function(l,theID,source){
        CARE2.addListener(l,"mouseover",obj.assignOver,{x:theID,y:source,l:l},obj);
        CARE2.addListener(l,"mouseout",obj.assignOut,{x:theID},obj);
    }

    obj.members=function(l, theID){
        if(!theID) {
            var match = l.href.match(/\d{9}/g);

            if(!match)
            { return null; }

            theID = match.pop();
        }

        obj.assignFunctions(l,theID,"members");
        return theID;
    }

    obj.photos=function(l){
        var theID=l.parentNode.id.split("_").pop();
        obj.assignFunctions(l,theID,"photos");
        return theID;
    }

    obj.element=function(l){
        var theID=l.id.split("_").pop();
        obj.assignFunctions(l,theID,"element");
        return theID;
    }

    obj.mem=function(l, theID){
        l.onmouseover=null;
        var x = obj.members(l, theID);
        obj.overThumb = x;
        obj.displayPanel(x,"members",l);
    }

    obj.init=function(id,args){
        obj.sourceId=args.sourceId||false;
        var thumbs=(args.tag)?$(id).getElementsByTagName(args.tag):[$(id)];
        var preLoad=[];

        for(var l,i=0;l=thumbs[i];i++){
            var theID=l.id.split("_").pop();
            if(args.source)theID=obj[args.source](l);
            preLoad.push(theID);
        }

        if(args.source=="members"&&!args.noPreLoad){
            if(args.preData){
                for(var l,i=0;l=args.preData[i];i++)obj.data.push(l);
            }else{
                for(var l,i=0;l=preLoad[i];i++)preLoad[i]="passportIDs["+i+"]="+l;
                _self.addListener(window,'load',function(x){return function(){
                    var requrl='/servlets/profile_popup?'+x;
                    var request = YAHOO.util.Connect.asyncRequest('GET', requrl, {
                        success: function(o) {
                            if(o.status==200){
                                var resp=eval("("+o.responseText.replace(/(<([^>]+)>)/ig,'').trim()+")");
                                for(var l,i=0;l=resp[i];i++)obj.data.push(l);
                            }else{
                                this.failure();
                            }
                        },
                        failure: function(o) {
                            return false;
                        },
                        timeout: 30000
                    })
                }}(preLoad.join("&")));
            }
        }
    }

    return obj;
},

flashFix:function(v) {
    v=v||"hidden";
    var o=document.getElementsByTagName('embed');
    for(var i=0;i<o.length;i++){
        if((o[i].getAttribute("wmode")&&(o[i].getAttribute("wmode").toLowerCase()!="transparent"&&o[i].getAttribute("wmode").toLowerCase()!="opaque"))||(!o[i].getAttribute("wmode")))o[i].style.visibility=v;
    }
    var o=document.getElementsByTagName('object');
    for(var i=0;i<o.length;i++){
        var wmodeset=false;
        var p=o[i].getElementsByTagName('param');
        for(var j=0;j<p.length;j++){
            if(p[j].getAttribute("name").toLowerCase()=="wmode")wmodeset=true;
            if(p[j].getAttribute("name").toLowerCase()=="wmode"&&(p[j].getAttribute("value").toLowerCase()!="transparent"&&p[j].getAttribute("value").toLowerCase()!="opaque"))o[i].style.visibility=v;
        }
        if(!wmodeset)o[i].style.visibility=v;
    }
},
floaterOverlay:false,
floaterIFrame:false,
floaterOverlayCount:0,
floater:function(html, args) {
    var obj = {};
    var _self = this;

    // function to remove flash if wmode != transparent
    obj.flashFix = function(v) { _self.flashFix(v); }

    // show function
    obj.show = function(html) {
        obj.flashFix();
        obj.createOverlay();

        if(html) obj.insertContent(html);

        obj.box.style.visibility = "hidden"; obj.box.style.display = "block";
        obj.resizeBox();
        obj.box.style.visibility = "visible";

        if (obj._useDivShim) {
            obj._updateDivShim();
        }

        if(obj._onshow) obj._onshow();
    }

    // hide funtion
    obj.hide = function() {
        obj.flashFix("visible");
        obj.hideOverlay();
        if(obj.removeOnClose){
            obj.box.parentNode.removeChild(obj.box);
        }else{
            obj.box.style.display = "none";
        }

        if (obj._useDivShim) {
            obj._divShim.style.display = "none";
        }
        if(obj._onclose) obj._onclose();
    }

    // resize function
    obj.resizeBox = function(doSize,doPosition) {
        if(typeof doSize=="undefined")doSize=true;
        if(typeof doPosition=="undefined")doPosition=true;
        var pScroll = _self.getPageScroll();
        var pSize = _self.getPageSize();
        obj.content.style.cssText = "float:left;"+obj.content.style.cssText;
        if(doSize){
            var this_width = obj.box_width||obj.content.offsetWidth;
            var this_height = obj.box_height||obj.content.offsetHeight;
            obj.box.style.width = this_width + "px";
            obj.box.style.height = (this_height + obj.header.offsetHeight) + "px";
        }
        if(doPosition){
            var this_top = (obj.box_top) ? pScroll.y+parseFloat(obj.box_top) : pScroll.y + (pSize.windowHeight / 2) - (parseFloat(obj.box.style.height) / 2);
            var this_left = (obj.box_left) ? pScroll.x+parseFloat(obj.box_left) : pScroll.x + (pSize.windowWidth / 2) - (parseFloat(obj.box.style.width) / 2);
            obj.box.style.top = this_top+"px";
            obj.box.style.left = this_left+"px";
        }
        if(_self.floaterOverlay) _self.floaterOverlay.style.height = pSize.pageHeight + "px";
        if(_self.floaterIFrame) {
            _self.floaterIFrame.style.height = pSize.pageHeight + "px";
            _self.floaterIFrame.style.width = pSize.pageWidth + "px";
        }
    }

    obj.createOverlay = function() {
        if(!obj.disableOverlay) {
            _self.floaterOverlayCount++;
            if(_self.floaterOverlayCount == 1) {
                _self.floaterOverlay = _self.buildElement('div',{className:'care2_floater_overlay'});
                if(!obj.disableOverlayClose && !obj.disableClose) _self.floaterOverlay.onclick = obj.hide;
                CARE2.appendToBody(_self.floaterOverlay);
                if(this.isIE) {
                    _self.floaterIFrame = document.createElement('<iframe frameborder="0">');
                    _self.floaterIFrame.style.position = 'absolute';
                    _self.floaterIFrame.border = '0';
                    _self.floaterIFrame.frameborder = 0;
                    _self.floaterIFrame.className = "care2_floater_iframe";
                    _self.floaterIFrame.style.left = 0;
                    _self.floaterIFrame.style.top = 0;
                    CARE2.appendToBody(_self.floaterIFrame);
                }
            }
        }
    }

    obj.hideOverlay = function() {
        _self.floaterOverlayCount--;
        if(_self.floaterOverlayCount == 0) {
            if(_self.floaterOverlay) _self.floaterOverlay.parentNode.removeChild(_self.floaterOverlay);
            if(_self.floaterIFrame) _self.floaterIFrame.parentNode.removeChild(_self.floaterIFrame);
            _self.floaterIFrame = _self.floaterOverlay = false;
        }
    }

    obj.insertContent = function(html) {
        var content = $(html);
        if(!content) {
            content = document.createElement('div');
            content.innerHTML = html;
        }else if(content.parentNode){
            content.parentNode.removeChild(content);
        }
        obj.content.innerHTML = "";
        obj.content.appendChild(content);
        content.style.display = "block";
        if (obj._useDivShim) {
            obj._updateDivShim();
        }
    }

    obj._updateDivShim = function() {
        if (obj.box.style.display == 'block') {
            obj._divShim.style.width = obj.box.offsetWidth + "px";
            obj._divShim.style.height = obj.box.offsetHeight + "px";

            var boxLoc = YAHOO.util.Dom.getXY(obj.box);
            obj._divShim.style.left = boxLoc[0] + "px";
            obj._divShim.style.top = boxLoc[1] + "px";

            obj._divShim.style.display = 'block';
        }
    }

    // initialize the floater
    if(!args) args = {};
    obj.box_width = args.width||false;
    obj.box_height = args.height||false;
    obj.box_top = args.top||false;
    obj.box_left = args.left||false;
    obj._onclose = args._onclose||false;
    obj._onload = args._onload||false;
    obj._onshow = args._onshow||false;
    obj.box_id = args.id||false;
    obj.box_className = args.className||'care2_floater_container';
    obj.disableOverlay = args.disableOverlay||false;
    obj.disableOverlayClose = args.disableOverlayClose||false;
    obj.disableClose = args.disableClose||false;
    obj.removeOnClose = args.removeOnClose||false;
    obj.dontShow = args.dontShow||false;
    obj.branding = args.branding||'none';
    var titletxt = args.titletxt||"";

    // main box wrapper
    obj.box = _self.buildElement("div",{className:obj.box_className,style:{visibility:'hidden'}});
    if(obj.box_id)obj.box.id = obj.box_id;
    obj.header = _self.buildElement("div",{className:'floater_header branding_none'});
    if(obj.branding) obj.header.className = 'floater_header branding_'+obj.branding;
    obj.title = _self.buildElement("div",{className:'floater_title',innerHTML:titletxt});

    obj.header.appendChild(obj.title);
    obj.box.appendChild(obj.header);

    if(!obj.disableClose) {
        obj.closebox = _self.buildElement("div",{className:'floater_closebox',onclick:obj.hide});
        obj.box.appendChild(obj.closebox);
    }

    if ( (typeof(YAHOO) != 'undefined') && YAHOO.env.ua.ie && (YAHOO.env.ua.ie < 7) ) {
        obj._useDivShim = true;
        obj._divShim = document.createElement('iframe');
        obj._divShim.setAttribute('src', 'javascript:"";');
        obj._divShim.setAttribute('frameBorder', '0');
        obj._divShim.style.position = 'absolute';
        obj._divShim.style.display = 'none';
        document.body.appendChild(obj._divShim);
    } else {
        obj._useDivShim = false;
    }

    obj.content = _self.buildElement("div",{className:'contain_floats floater_content'});
    obj.insertContent(html);
    obj.box.appendChild(obj.content);
    CARE2.appendToBody(obj.box);

    if(obj._onload) obj._onload();
    if(!obj.dontShow) obj.show();

    return obj;
},

/*********************************************************************************************
    Depreciated CARE2 Object functions
**/

inArray:function(n,h){for(var l,i=0;l=h[i];i++) if(n==l) return true; return false;},
isIdOrHandler:function(h){return $(h);},
domReady:function(f,a){
    var obj = {
        func:f,
        waiting:0,
        wait:function(){
            this.waiting--;
            if(this.waiting<=0) {
                this.func();
            }
        }
    };

    for(var i in a){
        obj.waiting++;
        YAHOO.util.Event.onAvailable(i,function(){obj.wait()},obj);
    }
},
getElementPosition:function(d){
    var c=YAHOO.util.Dom.getXY($(d));
    return {top:c[1],left:c[0]}
},
addClassName:function(d,c){
    YAHOO.util.Dom.addClass(d,c);
    return $(d).className;
},
removeClassName:function(d,c){
    YAHOO.util.Dom.removeClass(d,c);
    return $(d).className;
},
addClass:function(d,c){
    YAHOO.util.Dom.addClass(d,c);
    return $(d).className;
},
removeClass:function(d,c){
    YAHOO.util.Dom.removeClass(d,c);
    return $(d).className;
},
getStyle:function(el,prop,numOnly){
    var s=YAHOO.util.Dom.getStyle(el,prop);
    return (numOnly) ? (parseFloat(s)||0) : s;
},
connect:function(type,requrl,args){
    return YAHOO.util.Connect.asyncRequest(type,requrl,args);
},
preventDefault:function(e){
    YAHOO.util.Event.preventDefault(e);
},
addListener:function(el,type,func,obj,override,prevent){
    obj=obj||$(el);
    var _self = this;
    if(typeof override == "undefined") override = false;
    if(prevent) YAHOO.util.Event.addListener(el,type,_self.preventDefault);
    if(type=="focus") { YAHOO.util.Event.addFocusListener(el,func,obj,override); return false; }
    if(type=="blur") { YAHOO.util.Event.addBlurListener(el,func,obj,override); return false; }
    YAHOO.util.Event.addListener(el,type,func,obj,override);
},
removeListener:function(el,type,func){
    if(type=="focus") { YAHOO.util.Event.removeFocusListener(el,func,obj,override); return false; }
    if(type=="blur") { YAHOO.util.Event.removeBlurListener(el,func,obj,override); return false; }
    YAHOO.util.Event.removeListener(el,type,func,obj,override);
},
fade:function(id, args) {
    var _self = this;
    var obj={
        totalFades:0,
        oncomplete:function(){
            this.totalFades--;
            if(this.totalFades<=0 && this._oncomplete) this._oncomplete();
        }
    }
    obj._oncomplete = args._oncomplete||false;

    obj.objs = (id.constructor != Array) ? [id] : id;
    for(var i=0;i<obj.objs.length;i++) {
        var fadeTo = l.end||(l.direction == 'out' ? 0 : 100);
    	var fadeOut = new YAHOO.util.Anim(l.id, { opacity: { to: fadeTo } }, 0.5);
    	if(obj._oncomplete) fadeOut.onComplete.subscribe(function(){obj.oncomplete()});
    	fadeOut.animate();
    }
},
expand:function(args) {
    var _self = this;
    var obj={totaldivs:0};
    obj.coldiv=$(args.coldiv);
    obj.expdiv=$(args.expdiv);
    obj.colheight=args.colheight||0;
    obj.expheight=args.expheight||false;
    obj.oncomplete=function(){
        this.totaldivs--;
        if(this.totaldivs<=0 && this._oncomplete) this._oncomplete();
    };
    obj._oncomplete=args._oncomplete||false;
    obj.duration = false;

    obj.getSize = function(d,s) {
        s=s||"height";
        if(d.style[s].indexOf('px')<0) {
            var n = (s=="height") ? d.offsetHeight - (parseFloat(_self.getStyle(d,'padding-top')) + parseFloat(_self.getStyle(d,'padding-bottom'))) : d.offsetWidth - (parseFloat(_self.getStyle(d,'padding-left')) + parseFloat(_self.getStyle(d,'padding-right')));
            var b = (s=="height") ? parseFloat(_self.getStyle(d,'border-top-width')) + parseFloat(_self.getStyle(d,'border-bottom-width')) : parseFloat(_self.getStyle(d,'border-left-width')) + parseFloat(_self.getStyle(d,'border-right-width'));
            if(b) n=n-b;
            if(n<=0) return 0;
            return n+"px";
        }else{
            return d.style[s];
        }
    }

    obj.getDuration = function(d,h) {
        var difference = Math.abs(parseInt(this.getSize(d)) - h);
        return (0.25 * (difference/300));
    }

    if(obj.coldiv) {
        obj.totaldivs++;
        obj.coldiv.style.overflow = "hidden";
        var collapse = new YAHOO.util.Anim(obj.coldiv, { height: { to: obj.colheight } }, obj.getDuration(obj.coldiv, obj.colheight));
        collapse.onComplete.subscribe(function(){
            obj.oncomplete();
            if(obj.coldiv.style.height=="0" || obj.coldiv.style.height=="0px") obj.coldiv.style.display="none";
        });
        collapse.animate();
    }

    if(obj.expdiv) {
        obj.totaldivs++;
        obj.expdiv.style.overflow = "hidden";
        if(!obj.expheight) {
            var oldstyle = obj.expdiv.style.cssText;
            obj.expdiv.style.height = "auto";
            if(obj.expdiv.style.display.indexOf("none")>=0||_self.getStyle(obj.expdiv,"display").indexOf("none")>=0){
                obj.expdiv.style.visibility = "hidden";
                obj.expdiv.style.display = "block";
            }
            if(obj.expdiv.offsetWidth>0) obj.expdiv.style.width = (obj.getSize(obj.expdiv,"width"));
            obj.expdiv.style.position = "absolute";
            obj.expheight = (obj.getSize(obj.expdiv)) ? obj.getSize(obj.expdiv).replace('px','') : obj.expdiv.offsetHeight;
            obj.expdiv.style.cssText = oldstyle;
        }
        if(obj.expdiv.style.display.indexOf("none")>=0||_self.getStyle(obj.expdiv,"display").indexOf("none")>=0||obj.expdiv.style.visibility.indexOf("hidden")>=0||_self.getStyle(obj.expdiv,"visibility").indexOf("hidden")>=0){
            obj.expdiv.style.height = 0;
            obj.expdiv.style.visibility = "visible";
            obj.expdiv.style.display = "block";
        }
        var expand = new YAHOO.util.Anim(obj.expdiv, { height: { to: obj.expheight } }, obj.getDuration(obj.expdiv, obj.expheight));
        expand.onComplete.subscribe(function(){ obj.oncomplete() });
        expand.animate();
    }
},

delightButton:function(id, args) {
    var CARE2 = this;
    var obj = {};
    
    obj.button = $(id);
    if(!obj.button || !swfobject.hasFlashPlayerVersion("6.0.0")) {
        return false;
    }
    
    obj.swf = {
        "url": args.swf,
        "width": args.width,
        "height": args.height    
    }
    obj.offset = args.offset||{x:0,y:0};
    obj.appended = false;
    obj.removeTime = args.removeTime||false;
    obj.showDelightCondition = args.showDelightCondition||false;
    
    // generate unique ID for the movie
    if(!CARE2.delightButtonCount) CARE2.delightButtonCount = 0;
    obj.uniqueID = "delightAnim_" + CARE2.delightButtonCount++;
    
    obj.getFlashCode = function(url,width,height,id,quality) {
        return '<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="'+width+'" height="'+height+'" name="'+id+'"><PARAM NAME=movie VALUE="'+url+'"><PARAM NAME=quality VALUE="'+quality+'"><PARAM NAME=wmode VALUE=transparent><EMBED src="'+url+'" quality=high wmode=transparent width="'+width+'" height="'+height+'" name="'+id+'" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT>';
    }
        
    obj.delightWrapper = CARE2.buildElement("div", {
        "style": {
            "visibility": "hidden",
            "position": "absolute",
            "top": "-9999px",
            "left": "-9999px",
            "width": obj.swf.width + "px",
            "height": obj.swf.height + "px",
            "zIndex": "9999"
        }
    });
    
    CARE2.appendToBody(obj.delightWrapper);
    obj.delightWrapper.innerHTML = obj.getFlashCode(obj.swf.url, obj.swf.width, obj.swf.height, obj.uniqueID, "low");
    
    // preload movie
    var img = new Image(); img.src = obj.swf.url;
    
    obj.delightFunction = function(e, obj) {
        this.blur();
        if(!obj.showDelightCondition) {
            obj.showDelight = true;
        } else {
            obj.showDelight = eval(obj.showDelightCondition);
        }
        
        if(obj.showDelight) {
            var elPosition = CARE2.getElementPosition(obj.button);
        
            obj.delightWrapper.innerHTML = obj.getFlashCode(obj.swf.url, obj.swf.width, obj.swf.height, obj.uniqueID, "high");
            obj.delightWrapper.style.top = (elPosition.top - (obj.swf.height - obj.offset.y)) + "px";
            obj.delightWrapper.style.left = (elPosition.left - (obj.swf.width - obj.offset.x)) + "px";
            obj.delightWrapper.style.visibility = "visible";
            
            swfobject.embedSWF(obj.swf.url, obj.uniqueID, obj.swf.width, obj.swf.height, "6.0.0", "expressInstall.swf", false, {wMode:'transparent'});
            
            if(obj.removeTime) {
                setTimeout(
                    function() {
                        obj.delightWrapper.style.visibility = "hidden";
                        obj.delightWrapper.style.top = "-9999px";
                        obj.delightWrapper.style.left = "-9999px";
                        obj.delightWrapper.innerHTML = "<div id=\"" + obj.uniqueID + "\"></div>";
                    },
                    obj.removeTime
                );
            };
        };
    }
    
    CARE2.addListener(obj.button, args.eventType||"click", obj.delightFunction, obj, false, false);
    
    return obj;
},

/*********************************************************************************************
    CARE2 Functions that should be un-globalized
**/

dragDrop:function(i,args){
    if(!(i=$(i))) return;
    if(!(args.handle=$(args.handle))) args.handle = i;

    var obj={};
    obj.dragObject=null;
    obj.mouseOffset=null;
    obj.onDrop=args.onDrop||false;
    obj.onMove=args.onMove||false;
    obj.onGrab=args.onGrab||false;
    obj.manual=args.manualAssign||false;
    obj.relativeOffset=args.relativeOffset||{x:0,y:0};
    obj.item=i;
    obj.handle=args.handle;

    obj.getMouseOffset = function(target, ev) {
        ev = ev || window.event;

        var docPos = obj.getPosition(target);
        var mousePos = obj.mouseCoords(ev);
        return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
    }

    obj.getPosition = function(e) {
        var left = 0;
        var top  = 0;

        while (e.offsetParent){
            left += e.offsetLeft;
            top += e.offsetTop;
            e = e.offsetParent;
        }

        left += e.offsetLeft;
        top += e.offsetTop;

        return {x:left, y:top};
    }

    obj.mouseMove = function(ev) {
        if(obj.dragObject){
            ev = ev || window.event;
            var mousePos = obj.mouseCoords(ev);

            obj.dragObject.style.position = 'absolute';
            obj.dragObject.style.top = (mousePos.y - obj.mouseOffset.y - obj.relativeOffset.y) + "px";
            obj.dragObject.style.left = (mousePos.x - obj.mouseOffset.x - obj.relativeOffset.x) + "px";

            if(obj.onMove) obj.onMove();

            return false;
        }
    }

    obj.mouseCoords = function(ev) {
        if(ev.pageX || ev.pageY){
            return {x:ev.pageX, y:ev.pageY};
        }
        return {
            x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
            y:ev.clientY + document.body.scrollTop - document.body.clientTop
        };
    }

    obj.mouseDown = function(ev) {
        obj.dragObject=obj.item;
        obj.mouseOffset=obj.getMouseOffset(obj.item,ev);
        if(obj.onGrab) obj.onGrab();
        return false;
    }

    obj.mouseUp = function() {
        if(obj.dragObject&&obj.onDrop) obj.onDrop();
        obj.dragObject = null;
    }

    this.addListener(document,"mousemove",obj.mouseMove);
    if(!obj.manual){
        this.addListener(obj.handle,"mousedown",obj.mouseDown);
        this.addListener(document,"mouseup",obj.mouseUp);
    }

    return obj;
},

/*********************************************************************************************
    CLOSING THE CARE2 OBJECT DECLARATION
**/

closeCare2:0}

/*********************************************************************************************
    Legacy Care2.js code
**/

// create references to CARE2 object
var Care2 = _Care2 = CARE2;

/* basic namespaces - utility, ajax, gui, dom, libraries */
CARE2.util=CARE2.ajax=CARE2.gui=CARE2.dom=CARE2.libraries={};

/**
 * create and/or retrieve a namespace.
 */
CARE2.namespace=function() {
    var namespace = CARE2;
    for(var i=0;i<arguments.length;++i) {
        var ptr = arguments[i];
        if(!namespace[ptr]) {
            namespace[ptr] = {};
        }
        namespace = namespace[ptr];
    }
    return namespace;
};

CARE2.parseLib=function(src) {
    var parsed = src.replace(/http:\/\//, '');
    var pieces = parsed.split(/\//);
    if(pieces[0] == 'js') {
        // relative, shared url
        pieces.shift();
    } else if(pieces[1] == 'js') {
        // check if care2 url
        var domain = pieces[0].split('.').reverse();
        var sld = domain[1].tolower();
        if(domain[1] == 'care2' || domain[1] == 'thepetitionsite') {
            // care2 url
            pieces.shift();
            pieces.shift();
        }
    }
    return pieces.join('/');
};

CARE2.include=function(src) {
    document.write('<script type="text/javascript" src="'+src+'"></script>');
};
CARE2.include_once=function(src) {
    var unq = this.parseLib(src);
    if(!this.libraries[unq]) {
        this.require(src);
        this.libraries[unq] = true;
    }
};

CARE2.gui.DefaultText = function (el, explicitDefault) {
    if(el) el = $(el); // allow id or element
    if(!el) {
        // we can create a faux one
        el = document.createElement('div');
        el.innerHTML = 'click to reset';
    }
    if(el.nodeName == 'INPUT' || el.nodeName == 'TEXTAREA') {
        this.ptr = 'value';
    } else {
        this.ptr = 'innerHTML';
    }

    this.el = el;
    if (typeof explicitDefault == 'string') {
        this.initialValue = explicitDefault;
    } else if(el.getAttribute("title")) {
        this.initialValue = el.getAttribute("title");
    } else {
        this.initialValue = this.getValue();
    }

    this.password = (el.type == "password");
    if(this.password && CARE2.isIE) {
        el.value = this.initialValue;
        this.newField = CARE2.buildElement('input', {'type': 'text', 'value': this.initialValue, 'className': el.className});
        this.newField.style.display = "none";
        CARE2.addClass(this.newField, 'default_entry');
        el.parentNode.insertBefore(this.newField, el);
        YAHOO.util.Event.addListener(this.newField, 'focus', this.clearDefault, this, true);
    }

    YAHOO.util.Event.addListener(el, 'focus', this.clearDefault, this, true);
    YAHOO.util.Event.addListener(el, 'blur', this.resetIfEmpty, this, true);

    if(this.getValue().trim() == "") {
        this.setValue(this.initialValue);
    }

    if(this.getValue() == this.initialValue) {
        CARE2.addClass(this.el, 'default_entry');

        if(this.password) {
            if(CARE2.isIE) {
                CARE2.addClass(this.newField, 'default_entry');
                var prevDispStyle = this.el.style.display;
                this.el.style.display = "none";
                this.newField.style.display = prevDispStyle;
            } else {
                this.el.type = "text";
            }
        }
    }

    // We don't want to submit the default value to a form!
    if (typeof el.form == 'object') {
        YAHOO.util.Event.addListener(el.form, 'submit', this.clearDefault, this, true);
    }
}

CARE2.gui.DefaultText.prototype = {
    getValue: function() {
        return this.el[this.ptr];
    },
    resetIfEmpty: function(e, obj) {
        if('' == this.getValue()) {
            this.reset(e, obj);
            CARE2.addClass(this.el, 'default_entry');

            if(this.password) {
                if(CARE2.isIE) {
                    var prevDispStyle = this.el.style.display;
                    this.el.style.display = "none";
                    this.newField.style.display = prevDispStyle;
                } else {
                    this.el.type = "text";
                }
            }
        }
    },
    reset: function(e, obj) {
        this.setValue(this.initialValue);
    },
    clearDefault: function(e, obj) {
        if(this.getValue() == this.initialValue) {
            this.setValue('');
            CARE2.removeClass(this.el, 'default_entry');

            if(this.password) {
                if(CARE2.isIE) {
                    var prevDispStyle = this.newField.style.display;
                    this.newField.style.display = "none";
                    this.el.style.display = prevDispStyle;
                    this.el.focus();
                } else {
                    this.el.type = "password";
                }
            }
        }

        return true;
    },
    setValue: function(value) {

        this.el[this.ptr] = value;
    }
}

CARE2.defaultEntry = function(el, en) {
    return new CARE2.gui.DefaultText(el, en);
}

/**
 * general XML to Javascript parser
 */
CARE2.util.JsFromXml = function() { }
CARE2.util.JsFromXml.prototype.objects = {};
CARE2.util.JsFromXml.prototype.parse = function(xml) {
    if(!xml) {
        return false;
    }
    var type = xml.nodeName;
    var val = false;
    if(type == 'true') {
        val = true;
    } else if(type == 'false') {
        val = false;
    } else if(type == 'array') {
        val = [];

        var c = xml.childNodes.length;
        for(var i=0;i<c;++i) {
            var node = xml.childNodes[i];
            var index = node.getAttribute("index");
            if ( (typeof index != 'undefined') && index ) {
                val[index] = this.parse(node);
            } else {
                val[i] = this.parse(node);
            }
        }
    } else if(type == 'hash') {
        var c = xml.childNodes.length;
        val = {};
        for(var i=0;i<c;++i) {
            var node = xml.childNodes[i];
            var mykey = node.getAttribute("key");
            val[ mykey ] = this.parse(node);
        }
    } else if(type == 'value') {
        val = this.parse(xml.firstChild);
    } else if(type == '#text') {
        val = xml.textContent || xml.text || xml.nodeValue;
    } else if(type == 'resource') {
        val = false;
    } else if(type == 'datetime') {
        val = new Date();

        var unixTimestamp = xml.getAttribute("unixTimestamp");
        if (typeof unixTimestamp != 'undefined') {
            val.setTime(parseInt(unixTimestamp) * 1000);

        } else {
            // perhaps add other methods of date storage/transfer here...?
        }
    } else if(type == 'object') {
        // check for a registered constructor
        var className = xml.getAttribute("className");

        if(className && this.objects[className]) {

            // we've got one; parse data packets, which are constructor arguments
            var c = xml.childNodes.length;
            var constructorArgs = [];
            for(var i=0;i<c;++i) {
                constructorArgs.push(this.parse(xml.childNodes[i]));
            }
           val = this.objects[className].apply(this, constructorArgs);

        } else {

            // a hash is a good default
            val = {};

        }
    } else if(type == 'error') {
        val = new CARE2.util.Error(this.parse(xml.firstChild));
    } else {
        // noop
    }
    return val;
}
CARE2.util.JsFromXml.prototype.addObject = function(name, constructor) {
    this.objects[name] = constructor;
}
/**
 * examples
 *

 *
 * register a custom function
 *
faultHandler.registerHandler(3,
  function(errno, error, fault) {
      window.alert('Error: '+error+' ['+errno + ']')
  }
);

 *
 * register a built-in function
 *
faultHandler.registerHandler(0, faultHandler.display);

 *
 */
CARE2.util.FaultHandler = function() {
        this.error = '';
        this.errno = 0;
        this.handlers = [];
        this.handlers[0] = this.noop;

        // default for 'display'
        this.node = YAHOO.util.Dom.get('status');
   };
CARE2.util.FaultHandler.prototype = {
   update: function(fault) {
      var errno = fault.errno;
      var error = fault.error;
      if(this.handlers[errno]) {
          this.handlers[errno](errno, error, fault);
      } else {
          // default handler is for errno 0
          this.handlers[0](errno, error, fault);
      }
   },

   alert: function(errno, error, fault) {
      window.alert('Error: ' + error + ' [' + errno + ']');
   },

   noop: function(errno, error, fault) {
      // do nothing
   },

   display: function(errno, error, fault) {
      if(this.node) {
          node.innerHTML = error + ' [' + errno + ']';
      } else {
        // noop
      }
   },

   registerHandler: function(errno, handler) {
       this.handlers[ errno ] = handler;
   },

    singleton: false,
    instance: function() {
        if(!CARE2.util.FaultHandler.prototype.singleton) {
            CARE2.util.FaultHandler.prototype.singleton = new CARE2.util.FaultHandler();
        }
        return CARE2.util.FaultHandler.prototype.singleton;
    },
    handle: function(fault) {
        var handler = this.instance().update(fault);
    }

};
/**
 * Exception model
 */
CARE2.util.Fault = function(error, errno, backtrace) {
    this.error = error;
    this.errno = errno;
    this.backtrace = backtrace;
    CARE2.util.FaultHandler.handle(this);
}

/**
 * manage the location bar
 */
CARE2.util.LocationHandler = function() {
        this.location = this.parseLocation();
    };
CARE2.util.LocationHandler.prototype = {

    parseLocation: function() {
        var data = {};
        var junk = window.location.href.split('#');
        if(!junk.length) {
            junk = Array(junk);
        }
        data.search = junk[1];
        var items = junk[0].split('?');
        if(!items.length) {
            items = Array(items);
        }
        data.baseURL = items[0];
        data.params = {};
        if(items.length < 2) {
            return data;
        }
        var params = items[1].split('&');
        var param = null;
        for(i=0;i<params.length;++i) {
            param = params[i].split('=');
            if(!param.length) {
                data.params[ param ] = null;
            } else {
                data.params[ param[0] ] = unescape(param[1]);
            }
        }
        return data;
    },

    /**
     * create a url
     * @param string hostname
     * @param string path
     * @param string get info (any number)
     */
    createURL: function() {
        // no parametes - use the current value
        if(0 == arguments.length) {
            var loc = this.parseLocation();
            return loc.baseUrl;
        }
        // host only
        if(1 == arguments.length) {
            return arguments[0];
        }
        // host
        var url = arguments[0] + '?'+ arguments[1];
        if(2 == arguments.length) {
            return url;
        }
        for(i=2;i<arguments.length;++i) {
            url = url + '&' + arguments[i];
        }
        return url;
    },

    redirectToURL: function(url) {
        window.location = url;
    },

    getURL: function() {
        var url = this.location.baseURL;
        var params = [];
        for(key in this.location.params) {
            var val = this.location.params[key];
            if(typeof(val) != 'function') {
                params.push( key + '=' + escape(val) );
            }
        }
        if(params.length) {
            url += '?' + params.join('&');
        }
        if(this.location.search) {
            url += '#' + this.location.search;
        }
        return url;
    },

    redirectToLocation: function() {
        this.redirectToURL( this.getURL() );
    }
}

/**
 * Singleton cookie jar
 */
CARE2.util.CookieJar = function() {
    var cookie = document.cookie;
    var crumbs = cookie.split(';');
    var crumb = null;
    for(i=0;i<crumbs.length;++i) {
        crumb = crumbs[i].split('=');
        var name = crumb[0].replace(/^\s*/,'');
        this.jar[name] = unescape(crumb[1]);
    }
}
CARE2.util.CookieJar.prototype = {
    jar: {},
    get: function(name) {
        return this.jar[name];
    },
    set: function(name, value) {
        this.jar[name] = value;
        var cookie = name + '=' + escape(value);
        if(arguments.length > 2) {
            cookie = cookie + ';';
            for(i=2;i<arguments.length;++i) {
               cookie = cookie + arguments[i] + ';';
            }
        }
        document.cookie = cookie;
    },
    unset: function(name) {
        document.cookie = name + "=" + escape(this.jar[name]) + "; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
    }
}

CARE2.util.popupWindow = {
    create: function(o) {
        var opt = ['status', 'toolbar', 'location',
                    'menubar', 'resizable', 'height', 'width'];

        var options = [];
        for(var i=0;i<opt.length;++i) {
            var key = opt[i];
            var val = parseInt(o[key]);
            if(isNaN(val)) val = this.defaults[key];
            options.push(''+key+'='+val);
        }
        var url = o.url || '';
        ++this.opened;
        var id = o.id || 'popup'+this.opened;
        var w = window.open(url, id, options.join(','));
        this.windows.push(w);
        return w;
    },
    windows: [],
    opened: 0,
    defaults: {
        status:     0,
        toolbar:    0,
        location:   0,
        menubar:    0,
        resizable:  1,
        height:     400,
        width:      400
    }
}

/**
 * a simple data source
 * that can be given a callback and sends it javascript data
 */

CARE2.ajax.SimpleDataSource = function(ini) {
    if(!ini) ini = {};
    this.name = ini.name?ini.name:'default';
    this.servletPath = ini.servletPath?ini.servletPath:'/servlets/';
    this.servlet = ini.servlet?ini.servlet:'default.php';
    this.scope = this;
    this.ini = ini;
};
CARE2.ajax.SimpleDataSource.prototype = {
    noop: function(data) {
        // do nothing
    },
    startRequest: function(paramStr) {
        var servlet = this.servletPath + this.servlet;
        YAHOO.util.Connect.asyncRequest('POST', servlet, this, paramStr);

    },
    xmlParser: new CARE2.util.JsFromXml,
    success: function(yahooResp) {
        var data;
        if(yahooResp.responseXML) {
            var xml = yahooResp.responseXML;
            try{
                xml.documentElement.normalize();
            }
            catch(e){}
            try{
                xml.firstChild.normalize();
            }
            catch(e){}

            data = this.xmlParser.parse(xml.documentElement||xml.firstChild);
        } else {
            data = yahooResp.responseText;
        }
        var scope = this.ini.scope?this.ini.scope:this;
        if(this.ini.handleSuccess) this.ini.handleSuccess.apply(scope, [data, yahooResp]);
    },
    failure: function(yahooResp) {
        var scope = this.ini.scope?this.ini.scope:this;
        if(this.ini.handleFailure) this.ini.handleFailure.apply(scope, [yahooResp]);
    },
    toQueryString: function(data, prefix) {
        return CARE2.ajax.toQueryString(data, prefix);
    }
}

/**
 * HTML updater
 */
CARE2.ajax.HTMLDataSource = function (ini) {
    if(!ini) ini = {};
    if(ini.container) {
        ini.container = YAHOO.util.Dom.get(ini.container);
    } else {
        ini.container = document.createElement('div');
    }
    this.dataSource = new CARE2.ajax.SimpleDataSource(ini);
    this.dataSource.success = function(yahooResp) {
        this.ini.container.innerHTML = yahooResp.responseText;
      };
    if(ini.params) {
        this.startRequest(this.dataSource.toQueryString(ini.params));
    }
}
CARE2.ajax.HTMLDataSource.prototype = {
    toQueryString: function(data, prefix) {
        return this.dataSource.toQueryString(data, prefix);
    },
    startRequest: function(paramStr) {
        this.dataSource.startRequest(paramStr);
    }
}

CARE2.ajax.toQueryString = function(data, prefix) {
    var dataType = typeof data;

    if ((dataType == 'object') || (dataType == 'array')) {
        var chunks = [];
        var thisPrefix;
        for (var key in data) {
            if (typeof prefix == 'string') {
                thisPrefix = prefix + '[' + key + ']';
            } else {
                thisPrefix = key;
            }
            chunks.push(CARE2.ajax.toQueryString(data[key], thisPrefix));
        }
        return chunks.join('&');
    } else if (dataType == 'function') {
        // Something weird... just skip it
    } else {
        var name = escape(prefix);
        var value;
        if (dataType == 'boolean') {
            value = data? '1' : '0';
        } else {
            value = escape(data);
        }
        return name + '=' + value;
    }
}

/**
 * a periodically refreshing data source
 */
CARE2.ajax.PeriodicDataSource = function(ini) {
    this.dataSource = new CARE2.ajax.SimpleDataSource(ini);
    this.paramStr = ini.paramStr?ini.paramStr:'';

    // people supply interval in seconds
    var interval = parseInt(ini.interval) * 1000;
    this.interval = interval || 60000; // default to one minute

    this.iterations = 0;
    this.iterationLimit = parseInt(ini.iterationLimit);
}
CARE2.ajax.PeriodicDataSource.prototype = {
    startRequest: function(now) {
        if(now) this.sendRequest();
        var clo = this;
        this.repeater = window.setInterval(function() {
                clo.dataSource.startRequest(clo.paramStr);
                ++clo.iterations;
                if(clo.iterations == clo.iterationLimit) {
                    clo.stop();
                }
            }, this.interval);
    },
    stop: function() {
        if(this.repeater) {
            clearInterval(this.repeater);
            this.repeater = false;
        }
    }
}

/**
 * manipulate forms
 */
var ns = CARE2.namespace('dom', 'form');
ns.elements = ['submit', 'hidden', 'password', 'text', 'checkbox', 'radio', 'button', 'input'];
ns.wrap = function(el) {
        switch (el.type.toLowerCase()) {
          case 'hidden':
          case 'password':
          case 'text':
          case 'textarea':
            return new CARE2.dom.form.FormInput(el);
          case 'checkbox':
          case 'radio':
            return new CARE2.dom.form.OptionFormInput(el);
          case 'select':
          case 'select-one':
          case 'select-multiple':
            return new CARE2.dom.form.SelectFormInput(el);
          case 'button':
          case 'submit':
            // skip these
            return false;
        }
        return false;
    };

/** simple .value elements **/
ns.FormInput = function(el) {
    this.el = YAHOO.util.Dom.get(el);
}
ns.FormInput.prototype = {
    getValue: function() {
        return this.el.value;
    },
    setValue: function(value) {
        this.el.value = value;
    },
    isCollection: false,
    isMultivalued: function() {
        return false;
    }
}

/**
 * option elements (on or off)
 * get value doesn't get the value, it gets it if the input is active
 * set value doesn't set the value, it determines if the input is active
 */
ns.OptionFormInput = function(el) {
    this.el = YAHOO.util.Dom.get(el);
}
ns.OptionFormInput.prototype = {
    getValue: function() {
        return this.el.checked?this.el.value:false;
    },
    setValue: function(value) {
        if(!value) {
            this.el.checked = false;
        } else {
            this.el.checked = value == this.el.value;
        }
    },
    isCollection: false,
    isMultivalued: function() {
        return false;
    }
}

/** collection of option elements, which can be treated as one element **/
ns.FormInputCollection = function(els) {
    this.els = els || [];
}
ns.FormInputCollection.prototype = {
    add: function(formInput) {
        this.els.push(formInput);
    },
    getValue: function() {
        var c = this.els.length;
        var values = [];
        for(var i=0; i<c; ++i) {
            var value = this.els[i].getValue();
            if(value) {
                 values.push(value);
            }
        }
        if(values.length == 0) {
            return false;
        }
        return values;
    },
    setValue: function(value) {
        var c = this.els.length;
        for(var i=0; i<c; ++i) {
            this.els[i].setValue(value);
        }
    },
    isCollection: true,
    isMultivalued: function() {
        return true;
    }
}

/** selects, single or multiple */
ns.SelectFormInput = function(el) {
    this.el = YAHOO.util.Dom.get(el);
}
ns.SelectFormInput.prototype = {
    getValue: function() {
        if(!this.el.multiple) {
            return this.el.options[this.el.selectedIndex].value;
        }
        var value = [];
        var c = this.el.options.length;
        for(var i=0;i<c;++i) {
            var opt = this.el.options[i];
            if(opt.selected) {
                value.push(opt.value);
            }
        }
        if(value.length == 0) {
            return false;
        }
        return value;
    },
    setValue: function(value) {
        var c = this.el.options.length;
        for(var i=0;i<c;++i) {
            var opt = this.el.options[i];
            if(opt.value == value) {
                opt.selected = true;
                if(!this.el.multiple) {
                    break;
                }
            }
        }
    },
    isMultivalued: function() {
        return this.el.multiple;
    },
    isCollection: false

}

ns.FormManager = function(form, helper) {
    form = YAHOO.util.Dom.get(form);
    this.form = form;
    this.helper = helper || {};
    this.helper.formManager = this;
    this.valueNames = [];  // names for form data inputs
    this.valueElements = {}; // wrapped form data inputs (FormInput)
    var c = form.elements.length;
    for(var i=0; i<c; ++i) {
        var el = form.elements[i];
        var name = el.name;
        var wrap = CARE2.dom.form.wrap(el);
        if(wrap) {
            var current = this.valueElements[name];
            if(current) {
                if(current.isCollection) {
                    current.add(wrap);
                } else {
                    this.valueElements[name] = new CARE2.dom.form.FormInputCollection([current, wrap]);
                }
            } else {
                this.valueElements[name] = wrap;
                this.valueNames.push(name);
            }
        } else {
            // not a value element; submit, button, etc
            YAHOO.util.Event.addListener(el, 'click', this.handle, this, true);
        }
    }
    YAHOO.util.Event.addListener(form, 'submit', this.handle, this, true);
    if(!this.helper.defaultController) {
        this.helper.defaultController = this.noop;
    }

    // Add click handlers to image inputs, which don't show up in the form.elements
    // array for some reason
    var inputs = form.getElementsByTagName('input');
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].type == 'image') {
            YAHOO.util.Event.addListener(inputs[i], 'click', this.handle, this, true);
        }
    }

    var actions = form.getAttribute('action').split('/');
    var servlet = actions.pop();
    var ini = {
            name: form.name,
            servletPath: actions.join('/'),
            servlet: '/' + servlet,
            scope: this
    };

    if(this.helper.handleSuccess) {
        ini.handleSuccess = this.helper.handleSuccess;
    } else {
        ini.handleSuccess = this.handleSuccess;
    }
    if(this.helper.handleFailure) {
        ini.handleFailure = this.helper.handleFailure;
    } else {
        ini.handleFailure = this.handleFailure;
    }
    this.servlet = new CARE2.ajax.SimpleDataSource(ini);
    if(this.helper.initialize) {
        this.helper.initialize.apply(this, []);
    }
};

ns.FormManager.prototype = {
    handle: function(event, obj) {
        var el = YAHOO.util.Event.getTarget(event);
        if( this.helper.controllers[el.id] ) {
            this.helper.controllers[el.id].apply(this, [event]);
        } else {
            this.helper.defaultController.apply(this, [event]);
        }
        YAHOO.util.Event.stopEvent(event);
    },
    setController: function(el, ctr) {
        el = YAHOO.util.Dom.get(el);
        this.helper.controllers[el.id] = ctr;
    },
    setDefaultController: function(ctr) {
        this.helper.defaultController = ctr;
    },
    noop: function(event) {
        // do nothing
    },
    collectValues: function(collector) {
        var values = {};
        var c = this.valueNames.length;
        for(var i=0;i<c;++i) {
            var name = this.valueNames[i];
            var value = this.valueElements[name].getValue();
            // could be multivalued
            if(collector) {
                collector(name, value);
            } else {
                values[name] = value;
            }
        }
        return values;
    },
    getValue: function(name) {
        return this.valueElements[name].getValue();
    },
    setValue: function(name, value) {
        this.valueElements[name].setValue(value);
    },
    collectForURL: function() {
        var get = '';
        var clo = this;
        var collector = function(name, value) {
            if(value.join) {
                // multivalued array
                for(var i=0;i<value.length;++i) {
                    get = get + '&' + name + '=' + clo.escape(value[i]);
                }
            } else {
                get = get + '&' + name + '=' + clo.escape(value);
            }
        }
        this.collectValues(collector);
        return get;
    },
    /**
     * escape values
     * return '' for boolean false,
     * else url escape
     */
    escape: function(value) {
        if(value == false) {
            return '';
        }
        return escape(value);
    },
    handleSuccess: function(data, yahooResp) {
        // noop
    },
    handleFailure: function(yahooResp) {
        // noop
    }
}

/**
 * Object for preloading images on a page
 */
CARE2.util.ImagePreloader = function() {
    this.timeout = 30;

    this.addImage = function(url) {
        if ( (this.getState() != 'ready') || this._already(url) ) {
            return;
        }

        this._urls.push(url);
    };

    this.addImages = function(urls) {
        if (this.getState() != 'ready') {
            return;
        }

        for (var i = 0; i < urls.length; i++) {
            if (!this._already(urls[i])) {
                this._urls.push(urls[i]);
            }
        }
    };

    this.getState = function() {
        return this._state;
    };

    this.stateChanged = new YAHOO.util.CustomEvent('stateChanged', this);

    this.getAllDone = function() {
        return this._allDone;
    }

    this.load = function() {
        this._nImages = this._urls.length;
        this._nImagesDone = 0;

        this._setState('loading');

        if (this.timeout > 0) {
            this._timeoutID = setTimeout(this._giveUp, Math.round(this.timeout * 1000));
        }

        for (i = 0; i < this._nImages; i++) {
            var img = new Image();
            YAHOO.util.Event.addListener(img, 'load', this._imageLoaded, this);
            img.src = this._urls[i];
        }
    };

    this.getUrls = function() {
        var urls = [];
        for (var i = 0; i < this._urls.length; i++) {
            urls[i] = this._urls[i];
        }
        return urls;
    };

    this._setState = function(newState) {
        this._state = newState;
        this.stateChanged.fire();
    };

    this._already = function(url) {
        for(var i = 0; i < this._urls.length; i++) {
            if(this._urls[i] == url) {
                return true;
            }
        }

        return false;
    };

    // We need kludgy scoping, since this is called via setTimeout
    var _me = this;
    this._giveUp = function() {
        _me._setState('done');
    };

    this._imageLoaded = function(e, obj) {
        _me._nImagesDone++;

        if (_me._nImagesDone == _me._nImages) {
            clearTimeout(_me._timeoutID);
            _me._allDone = true;
            _me._setState('done');
        }
    }

    this._urls = [];
    this._state = 'ready';
    this._allDone = false;
}

CARE2.util.numberFormat = function(number, decimals, decPoint, thousandsSep) {
    if (typeof number != 'number') {
        number = parseFloat(number);
    }
    if (typeof decimals == 'undefined') {
        decimals = false;
    }
    if (typeof decPoint == 'undefined') {
        decPoint = '.';
    }
    if (typeof thousnadsSep == 'undefined') {
        thousandsSep = ',';
    }

    var negative = (number < 0);
    number = Math.abs(number);
    var intPart = Math.floor(number);
    var fraction = number - intPart;

    string = '';

    intChunks = [];
    while (intPart >= 1000) {
        mod = intPart % 1000;
        intPart = (intPart - mod) / 1000;

        if (mod < 10) {
            intChunks.unshift('00' + mod);
        } else if (mod < 100) {
            intChunks.unshift('0' + mod);
        } else {
            intChunks.unshift('' + mod);
        }
    }
    intChunks.unshift(intPart);
    string = intChunks.join(thousandsSep);

    if (decimals == false) {
        if (fraction > 0) {
            decStr = '' + fraction;
            string += decPoint + decStr.substring(2);
        }
    } else if (decimals > 0) {
        var factor = Math.pow(10, decimals);
        var magicString = (factor + (factor * fraction)).toString();
        string += decPoint + magicString.substr(1, decimals);
    }

    return negative? '-' + string : string;
}

/**
 * Convert special characters to HTML entities.
 * Mimics this: http://www.php.net/htmlspecialchars
 * quote styles: ENT_COMPAT (default) converts double quotes, and leaves single quotes alone.
 *               ENT_QUOTES converts both double and single quotes.
 *               ENT_NOQUOTES converts no quotes.
 */
CARE2.util.htmlspecialchars = function(string, quote_style) {
    if (typeof quote_style == 'undefined') {
        quote_style = 'ENT_COMPAT';
    }

    string = string.replace(/\&/, "&amp;");
    string = string.replace(/\</, "&lt;");
    string = string.replace(/\>/, "&gt;");

    if (quote_style != 'ENT_NOQUOTES') {
        if (quote_style == 'ENT_QUOTES') {
            string = string.replace(/'/, "&#039;");
        }
        string = string.replace(/"/, "&quot;");
    }
    return string;
}


/**
 * Convert special HTML entities back to characters.
 * Mimics this: http://www.php.net/manual/en/function.htmlspecialchars-decode.php
 * quote styles: ENT_COMPAT (default) converts double quotes, and leaves single quotes alone.
 *               ENT_QUOTES converts both double and single quotes.
 *               ENT_NOQUOTES converts no quotes.
 */
CARE2.util.htmlspecialchars_decode = function(string, quote_style) {
    if (typeof quote_style == 'undefined') {
        quote_style = 'ENT_COMPAT';
    }

    string = string.replace(/\&amp;/, "&");
    string = string.replace(/\&lt;/, "<");
    string = string.replace(/\&gt;/, ">");

    if (quote_style != 'ENT_NOQUOTES') {
        if (quote_style == 'ENT_QUOTES') {
            string = string.replace(/\&#039;/, "'");
        }
        string = string.replace(/\&quot;/, "\"");
    }
    return string;
}


// Flash Player Version Detection - Rev 1.5.hacked - wrapped in an object, for namespace goodness
// Detect Client Browser type
// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
//
// See http://www.adobe.com/products/flashplayer/download/detection_kit/
//

CARE2.util.FlashDetect = {
    isIE: (navigator.appVersion.indexOf("MSIE") != -1) ? true : false,
    isWin: (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false,
    isOpera: (navigator.userAgent.indexOf("Opera") != -1) ? true : false,

    ControlVersion: function() {
        var version;
        var axo;
        var e;

        // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

        try {
            // version will be set for 7.X or greater players
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
            version = axo.GetVariable("$version");
        } catch (e) {
        }

        if (!version)
        {
            try {
                // version will be set for 6.X players only
                axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");

                // installed player is some revision of 6.0
                // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
                // so we have to be careful.

                // default to the first public version
                version = "WIN 6,0,21,0";

                // throws if AllowScripAccess does not exist (introduced in 6.0r47)
                axo.AllowScriptAccess = "always";

                // safe to call for 6.0r47 or greater
                version = axo.GetVariable("$version");

            } catch (e) {
            }
        }

        if (!version)
        {
            try {
                // version will be set for 4.X or 5.X player
                axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
                version = axo.GetVariable("$version");
            } catch (e) {
            }
        }

        if (!version)
        {
            try {
                // version will be set for 3.X player
                axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
                version = "WIN 3,0,18,0";
            } catch (e) {
            }
        }

        if (!version)
        {
            try {
                // version will be set for 2.X player
                axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
                version = "WIN 2,0,0,11";
            } catch (e) {
                version = -1;
            }
        }

        return version;
    },

    // JavaScript helper required to detect Flash Player PlugIn version information
    GetSwfVer: function() {
        // NS/Opera version >= 3 check for Flash plugin in plugin array
        var flashVer = -1;

        if (navigator.plugins != null && navigator.plugins.length > 0) {
            if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
                var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
                var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
                var descArray = flashDescription.split(" ");
                var tempArrayMajor = descArray[2].split(".");
                var versionMajor = tempArrayMajor[0];
                var versionMinor = tempArrayMajor[1];
                if ( descArray[3] != "" ) {
                    tempArrayMinor = descArray[3].split("r");
                } else {
                    tempArrayMinor = descArray[4].split("r");
                }
                var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
                var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
            }
        }
        // MSN/WebTV 2.6 supports Flash 4
        else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
        // WebTV 2.5 supports Flash 3
        else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
        // older WebTV supports Flash 2
        else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
        else if ( CARE2.util.FlashDetect.isIE && CARE2.util.FlashDetect.isWin && !CARE2.util.FlashDetect.isOpera ) {
            flashVer = CARE2.util.FlashDetect.ControlVersion();
        }
        return flashVer;
    },

    // When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
    DetectFlashVer: function(reqMajorVer, reqMinorVer, reqRevision) {
        versionStr = CARE2.util.FlashDetect.GetSwfVer();
        if (versionStr == -1 ) {
            return false;
        } else if (versionStr != 0) {
            if(CARE2.util.FlashDetect.isIE && CARE2.util.FlashDetect.isWin && !CARE2.util.FlashDetect.isOpera) {
                // Given "WIN 2,0,0,11"
                tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
                tempString        = tempArray[1];			// "2,0,0,11"
                versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
            } else {
                versionArray      = versionStr.split(".");
            }
            var versionMajor      = versionArray[0];
            var versionMinor      = versionArray[1];
            var versionRevision   = versionArray[2];

                // is the major.revision >= requested major.revision AND the minor version >= requested minor
            if (versionMajor > parseFloat(reqMajorVer)) {
                return true;
            } else if (versionMajor == parseFloat(reqMajorVer)) {
                if (versionMinor > parseFloat(reqMinorVer))
                    return true;
                else if (versionMinor == parseFloat(reqMinorVer)) {
                    if (versionRevision >= parseFloat(reqRevision))
                        return true;
                }
            }
            return false;
        }
    },

    AC_AddExtension: function(src, ext) {
      if (src.indexOf('?') != -1)
        return src.replace(/\?/, ext+'?');
      else
        return src + ext;
    },

    AC_Generateobj: function(objAttrs, params, embedAttrs) {
        var str = '';
        if (CARE2.util.FlashDetect.isIE && CARE2.util.FlashDetect.isWin && !CARE2.util.FlashDetect.isOpera) {
            str += '<object ';
            for (var i in objAttrs)
                str += i + '="' + objAttrs[i] + '" ';
            for (var i in params)
                str += '><param name="' + i + '" value="' + params[i] + '" /> ';
            str += '></object>';
        } else {
            str += '<embed ';
            for (var i in embedAttrs)
                str += i + '="' + embedAttrs[i] + '" ';
            str += '> </embed>';
        }

        // XXX: This will blow up if called after pageload is done!
        document.write(str);
    },

    AC_FL_RunContent: function() {
      var ret =
        CARE2.util.FlashDetect.AC_GetArgs
        (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
         , "application/x-shockwave-flash"
        );
      CARE2.util.FlashDetect.AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
    },

    AC_GetArgs: function(args, ext, srcParamName, classid, mimeType){
      var ret = new Object();
      ret.embedAttrs = new Object();
      ret.params = new Object();
      ret.objAttrs = new Object();
      for (var i=0; i < args.length; i=i+2){
        var currArg = args[i].toLowerCase();

        switch (currArg){
          case "classid":
            break;
          case "pluginspage":
            ret.embedAttrs[args[i]] = args[i+1];
            break;
          case "src":
          case "movie":
            args[i+1] = CARE2.util.FlashDetect.AC_AddExtension(args[i+1], ext);
            ret.embedAttrs["src"] = args[i+1];
            ret.params[srcParamName] = args[i+1];
            break;
          case "onafterupdate":
          case "onbeforeupdate":
          case "onblur":
          case "oncellchange":
          case "onclick":
          case "ondblClick":
          case "ondrag":
          case "ondragend":
          case "ondragenter":
          case "ondragleave":
          case "ondragover":
          case "ondrop":
          case "onfinish":
          case "onfocus":
          case "onhelp":
          case "onmousedown":
          case "onmouseup":
          case "onmouseover":
          case "onmousemove":
          case "onmouseout":
          case "onkeypress":
          case "onkeydown":
          case "onkeyup":
          case "onload":
          case "onlosecapture":
          case "onpropertychange":
          case "onreadystatechange":
          case "onrowsdelete":
          case "onrowenter":
          case "onrowexit":
          case "onrowsinserted":
          case "onstart":
          case "onscroll":
          case "onbeforeeditfocus":
          case "onactivate":
          case "onbeforedeactivate":
          case "ondeactivate":
          case "type":
          case "codebase":
          case "id":
            ret.objAttrs[args[i]] = args[i+1];
            break;
          case "width":
          case "height":
          case "align":
          case "vspace":
          case "hspace":
          case "class":
          case "title":
          case "accesskey":
          case "name":
          case "tabindex":
            ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
            break;
          default:
            ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
        }
      }
      ret.objAttrs["classid"] = classid;
      if (mimeType) ret.embedAttrs["type"] = mimeType;
      return ret;
    }
};

function blert(stuff) {
    var pre = document.createElement('pre');
    pre.innerHTML = stuff;
    document.body.appendChild(pre);
}

function blert_r(stuff, maxDepth) {
    if (!YAHOO.lang.isValue(maxDepth)) {
        maxDepth = 7;
    }

    blert(blert_r_helper(stuff, maxDepth, ''));
}

function blert_r_helper(stuff, maxDepth, indent) {
    if (YAHOO.lang.isArray(stuff)) {
        var newIndent = indent + '    ';
        var newDepth = maxDepth - 1;

        if (newDepth == 0) {
            return "array [ ... ]";
        } else {
            var value = "array [\n";
            for (var i = 0; i < stuff.length; i++) {
                value += newIndent + i + ": "
                       + blert_r_helper(stuff[i], newDepth, newIndent) + "\n";
            }
            return value + indent + "]";
        }
    } else if (YAHOO.lang.isObject(stuff)) {
        var newIndent = indent + '    ';
        var newDepth = maxDepth - 1;

        if (Care2.util.isDate(stuff)) {
            return "date ( " + stuff.toString() + " )";
        } else if (newDepth == 0) {
            return "object { ... }";
        } else {
            var value = "object {\n";
            for (var key in stuff) {
                value += newIndent + key + ": "
                       + blert_r_helper(stuff[key], newDepth, newIndent) + "\n";
            }
            return value + indent + "}";
        }
    } else if (YAHOO.lang.isString(stuff)) {
        return '"' + stuff + '"';
    } else {
        return stuff;
    }
}

/**
 * AJAX email checker with cookie-based caching
 *
 * @param callback Function to be called once we know how many messages the user has
 * @param int secondsUntilStale how old can the cache get before we refresh it with another AJAX request
 * @param bool getPMCount Should we also fetch a count of personal messages?
 *
 * The callback function should accept one integer argument for the number of emails the current
 * user has, unless getPMCount is true, in which case, it should accept a second integer argument
 * for the number of unread personal messages
 */
CARE2.util.checkMail = function(callback, secondsUntilStale, getPMCount) {
    var jar = new CARE2.util.CookieJar();
    var mailCookie = jar.get('c2mc');
    var tsNow = CARE2.util.unixTimestamp();

    if (typeof getPMCount == 'undefined') {
        getPMCount = false;
    }

    // See if we're even supposed to use the cookie
    var useCookie = (typeof secondsUntilStale != 'undefined') && (secondsUntilStale > 0);

    // See if we even have a cookie
    if ( useCookie && (typeof mailCookie != 'undefined') && mailCookie ) {

        // Try and parse the cookie
        var cookieArr = mailCookie.split('-');
        if (cookieArr.length == 4) {
            var passportID = parseInt(cookieArr[0]);
            var tsUpdated = parseInt(cookieArr[1]);
            var nEmails = cookieArr[2];
            var nPersonalMessages = cookieArr[3];
            var tsExpires = tsUpdated + secondsUntilStale;

            // See if the cookie's for this user, and has been updated recently enough
            if ( (tsExpires > tsNow) && CARE2.user && (passportID == CARE2.user.passportID) ) {

                // Cleared all the hoops? Run the callback on the cached count(s).
                if (getPMCount) {
                    callback(nEmails, nPersonalMessages);
                } else {
                    callback(nEmails);
                }
                return;
            } else {
                //blert("cookie is expired!");
            }
        } else {
            //blert("cookie '" + mailCookie + "' isn't valid!");
        }
    } else {
        //blert("no cookie!");
    }

    // No (valid) cached count? kick off an AJAX call to fetch the "real" count and cache
    // and return the result once the call comes back.
    //
    // Note that we always ask for the PM count, even if this particular run of checkMail
    // call doesn't need it, so that we can make sure the cache has the correct figure in
    // case the next checkMail call does want the PM count
    YAHOO.util.Connect.asyncRequest("GET", "/servlets/check_mail.php?get_personal_messages=1", {
        timeout: 15000,
        success: function (resp) {
            // Good response from the server? Cache as a cookie and run callback
            // We have to use a regex, instead of just presuming the response consists of the
            // two numbers we asked for, because various other code sticks crap on the end
            var matches = /^\s*(\d+)\s+(\d+)/.exec(resp.responseText);

            // We only cache if we got a valid response
            if (matches && CARE2.user) {
                var nEmails = matches[1];
                var nPersonalMessages = matches[2];
                var tsNow = CARE2.util.unixTimestamp();

                if (useCookie) {
                    var jar = new CARE2.util.CookieJar();
                    var cookieText = CARE2.user.passportID + '-' + tsNow + '-'
                                   + nEmails + '-' + nPersonalMessages;
                    jar.set('c2mc', cookieText, 'path=/');
                }
            } else {
                var nEmails = 0;
                var nPersonalMessages = 0;
            }

            if (getPMCount) {
                callback(nEmails, nPersonalMessages);
            } else {
                callback(nEmails);
            }
        },
        failure: function (resp) {
            // Bad response? Run call back for zero messages, but don't cache
            if (getPMCount) {
                callback(0, 0);
            } else {
                callback(0);
            }
        }
    });
};

CARE2.util.unixTimestamp = function(d) {
    if (typeof d == 'undefined') {
        d = new Date();
    }

    ms = d.getTime();
    return Math.round(ms / 1000);
};

Care2.ajax.objectToQueryString = function(obj, paramName) {
    if (typeof paramName == 'undefined') {
        var params = Care2.ajax.objectToQueryParams(obj);
    } else {
        var params = Care2.ajax.objectToQueryParams(obj, escape(paramName));
    }
    return params.join('&');
};
Care2.ajax.objectToQueryParams = function(obj, prefix) {
    var params = [];
    var keyPrefix;

    if (typeof prefix == 'undefined') {
        prefix = '';
    }

    for (var key in obj) {
        if (prefix == '') {
            keyPrefix = escape(key);
        } else {
            keyPrefix = prefix + '[' + escape(key) + ']';
        }

        switch (typeof obj[key]) {
            case 'number':
            case 'string':
                // scalars are easy
                params.push(keyPrefix + '=' + escape(obj[key]));
                break;

            case 'boolean':
                // booleans need some processing
                params.push(keyPrefix + '=' + (obj[key]? '1' : '0'));
                break;

            case 'object':
                if (Care2.util.isDate(obj[key])) {
                    // dates need special treatment
                    var d = obj[key];
                    var tc = [];
                    tc[tc.length] = d.getFullYear() + '-';
                    tc[tc.length] = ((d.getMonth() < 9)? '0' : '') + (d.getMonth() + 1) + '-';
                    tc[tc.length] = ((d.getDate() < 10)? '0' : '') + d.getDate() + ' ';
                    tc[tc.length] = ((d.getHours() < 10)? '0' : '') + d.getHours() + ':' ;
                    tc[tc.length] = ((d.getMinutes() < 10)? '0' : '') + d.getMinutes() + ':';
                    tc[tc.length] = ((d.getSeconds() < 10)? '0' : '') + d.getSeconds();
                    params.push(keyPrefix + '=' + tc.join(''));

                } else {
                    // recurse on normal objects
                    var these_params = Care2.ajax.objectToQueryParams(obj[key], keyPrefix);
                    params = params.concat(these_params);
                }
                break;

            default:
                // skip all others
                break;
        }
    }

    return params;
};

/**
 * Extract the values of inputs in a form and return as a JavaScript object
 *
 * XXX: This is rather incomplete...
 *
 * TODO: handle inputs other than <input> and <select>
 * TODO: handle radio buttons
 */
Care2.ajax.extractFormValues = function(form) {

    var flat_values = {};

    // Collect values from <input> tags
    var inputs = form.getElementsByTagName('input');
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].name) {

            // Figure out what the value is
            if (inputs[i].type == 'checkbox') {
                if (inputs[i].checked) {
                    flat_values[inputs[i].name] = inputs[i].value;
                } else {
                    flat_values[inputs[i].name] = false;
                }
            } else {
                flat_values[inputs[i].name] = inputs[i].value;
                value = inputs[i].value;
            }
        }
    }
    inputs = null;

    // Collect values from <select> tags
    var selects = form.getElementsByTagName('select');
    for (var i = 0; i < selects.length; i++) {
        if (selects[i].name) {
            flat_values[selects[i].name] =
                selects[i].options[selects[i].selectedIndex].value;
        }
    }
    selects = null;

    // Translate the flat values into a structured object
    var values = {};
    for (var name in flat_values) {
        // Assign the value
        var regex = /^(\w+)\[([\w\[\]]+)\]$/;
        var match = regex.exec(name);
        if (match) {
            var pieces = [match[1]];
            pieces = pieces.concat(match[2].split(']['));
            var ptr = values;
            var thisPiece;

            while (pieces.length > 1) {
                thisPiece = pieces.shift();
                if (!YAHOO.lang.isObject(ptr[thisPiece])) {
                    ptr[thisPiece] = {};
                }
                ptr = ptr[thisPiece];
            }

            thisPiece = pieces.shift();
            ptr[thisPiece] = flat_values[name];

        } else {
            values[name] = flat_values[name];
        }
    }

    return values;
};

/**
 * Allow one-liner Ajax requests
 *
 * The provided callback is passed the result of the AJAX request as its first argument, and
 * a helper object with the following public members as its second:
 *   - requestUrl: string; the URL the AJAX request ran against
 *   - requestParams: string; the paramater string sent along with the AJAX request
 *   - finished: bool; whether or not the AJAX request has come back yet
 *   - succeeded: bool; whether or not the AJAX request was successful
 *   - yahooResponse: object; the response handed back by the YUI AJAX library
 *   - simpleDataSource: object; the Care2 SimpleDataSource object that wrapped this request
 *
 * The args object may specify additional options with the following members:
 *   - expectJsonResponse: bool; expect the called servlet to return data as JSON, not XML
 *
 * @param string requestUrl The URL the AJAX request should be made against
 * @param mixed requestParams Paramater string, or object to be translated into a parameter string
 * @param function callback The callback function which should run when the request comes back
 * @param object callbackScope Option scope against which the callback function should be run
 * @param object args Optional parameters for finer-grained control
 */
Care2.ajax.simpleRequest = function(requestUrl, requestParams, callback, callbackScope, args) {

    var helper = new Care2.ajax._simpleRequestHelper(
        requestUrl, requestParams, callback, callbackScope, args);

    helper.exec();
};

Care2.ajax._simpleRequestHelper =
        function(requestUrl, requestParams, callback, callbackScope, args) {

    this.requestUrl = requestUrl;

    if (typeof(requestParams) == 'object') {
        this.requestParams = Care2.ajax.objectToQueryString(requestParams);
    } else if (typeof(requestParams) == 'string') {
        this.requestParams = requestParams;
    } else {
        this.requestParams = '';
    }

    this._callback = (typeof callback == 'undefined')? false : callback;
    this._callbackScope = (typeof callbackScope == 'undefined')? null : callbackScope;

    this.finished = false;

    if (YAHOO.lang.isObject(args)
            && YAHOO.lang.isValue(args.expectJsonResponse)
            && args.expectJsonResponse) {
        this.expectJsonResponse = true;
    } else {
        this.expectJsonResponse = false;
    }
};
Care2.ajax._simpleRequestHelper.prototype = {
    exec: function() {
        var dataSourceSpec = {
            name: 'simpleRequest',
            scope: this,

            // XXX: ugly hack to avoid annoying default behavior on empty servletPath argument
            servletPath: this.requestUrl.substr(0, 1),
            servlet: this.requestUrl.substr(1),

            handleSuccess: this._handleSuccess,
            handleFailure: this._handleFailure
        };

        this.simpleDataSource = new Care2.ajax.SimpleDataSource(dataSourceSpec);
        this.simpleDataSource.startRequest(this.requestParams);
    },

    _handleSuccess: function(data, yahooResp) {
        this.finished = true;
        this.succeeded = true;
        this.yahooResponse = yahooResp;

        if (this.expectJsonResponse) {
            data = eval("(" + yahooResp.responseText + ")");
        }

        this._runCallback(data);
    },

    _handleFailure: function(yahooResp) {
        this.finished = true;
        this.succeeded = false;
        this.yahooResponse = yahooResp;

        this._runCallback(false);
    },

    _runCallback: function(result) {
        if (this._callback) {
            this._callback.apply(this._callbackScope, [result, this]);
        }
    }
}

Care2.util.isDate = function(obj) {
    if (!YAHOO.lang.isObject(obj)) {
        return false;
    }

    if (!YAHOO.lang.isFunction(obj.getTime)) {
        return false;
    }

    if (obj.getTime != Date.prototype.getTime) {
        return false;
    }

    return true;
},

Care2.util.deepCopy = function(src) {
    // We depend on YAHOO.lang; fail over to the legacy partial implemenation
    // if YAHOO.lang is not avaliable for whatever reason
    if ((typeof(YAHOO) == 'undefined') || (typeof(YAHOO.lang) == 'undefined')) {
        return CARE2.cloneObj(obj);
    }

    if (YAHOO.lang.isArray(src)) {
        // If it's an array, copy each element
        var dst = [];
        for (var i = 0; i < src.length; i++) {
            dst[i] = Care2.util.deepCopy(src[i]);
        }

    } else if (Care2.util.isDate(src)) {
        // Dates are a pain in the ass, and can't be copied like normal objects
        dst = new Date(src.getTime());

    } else if (YAHOO.lang.isObject(src)) {
        // If it's an object, copy properties by key
        dst = {};
        for (var key in src) {
            dst[key] = Care2.util.deepCopy(src[key]);
        }

    } else {
        // Anything else *SHOULD* be a scalar which we can just return
        dst = src;
    }

    return dst;
};

Care2.util.escapeHTML = function(str) {
    if (typeof(str) != 'string') {
        return str;
    }

    str = str.replace(/&/g, '&amp;');
    str = str.replace(/</g, '&lt;');
    str = str.replace(/>/g, '&gt;');

    return str;
};

Care2.util.unescapeHTML = function(str) {
    if (typeof(str) != 'string') {
        return str;
    }

    str = str.replace(/&gt;/g, '>');
    str = str.replace(/&lt;/g, '<');
    str = str.replace(/&amp;/g, '&');

    return str;
};

CARE2.watermark = {
    add:function(e,el){
        if(el.value == ""){
            el.style.cssText = "";
        }else{
            this.remove(e,el);
        }
    },
    remove:function(e,el){
        el.style.cssText = "background-image: none";
    },
    init:function(d){
        d=$(d);
        CARE2.addListener(d,'blur',this.add,d,this);
        CARE2.addListener(d,'focus',this.remove,d,this);
    }
}

var memberRollover=CARE2.about_rollover({rightLimit:'care2_wrapper'});

YAHOO.util.Event.onDOMReady(function(){
    CARE2.bodyReady=true;
});


//////////////////////
// WebServices AJAX //
//////////////////////

CARE2.webService = function() {
    var _self = this;
    this._servicesURL = "/metal_web_service";
    
    this.publisherID = "1";
    this.origin = "petitionsite";
    this.flags = "0";
}
CARE2.webService.prototype = {
    buildXMLMessage: function(message, replacements) {
        var return_message = '<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope ';
        return_message += 'xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Care2WebService" ';
        return_message += 'xmlns:ns2="http://www.care2.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ';
        return_message += 'xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">';
        return_message += '<SOAP-ENV:Header><ns2:auth><ns2:publisherID>'+this.publisherID+'</ns2:publisherID>';
        return_message += '<ns2:origin>'+this.origin+'</ns2:origin><ns2:flags>'+this.flags+'</ns2:flags></ns2:auth>';
        return_message += '</SOAP-ENV:Header><SOAP-ENV:Body>'+message+'</SOAP-ENV:Body></SOAP-ENV:Envelope>';
        
        for(var i in replacements) return_message = return_message.replace(i, replacements[i]);
        return return_message;
    },
    connect: function(message, callback, attempt) {
        YAHOO.util.Connect._use_default_post_header = false;
        YAHOO.util.Connect.initHeader( 'Content-Type', 'text/xml', false );
        var service_call = YAHOO.util.Connect.asyncRequest('POST', this._servicesURL, callback, message);
    }
}


//////////////////////////////
// Added in for Easter Eggs //
//////////////////////////////
CARE2.easterEggs = [];

CARE2.addEasterEggCallback = function (callback)
{
    CARE2.easterEggs[CARE2.easterEggs.length] = callback;
}

CARE2.easterEggCallback = function ()
{
    for (var i=0; i<CARE2.easterEggs.length; i++)
    {
        CARE2.easterEggs[i]();
    }
}

CARE2.captureKeys = function (ev) {
    var ev = window.event || ev;             // gets the event in ie or ns
    kCode = ev.keyCode || ev.which;   // gets the keycode in ie or ns
    // alert(kCode); // debug

    if (ev.ctrlKey && ev.altKey && kCode == 101) { // ctrl+alt+e
        alert("Care2 Easter Eggs Enabled!");
        CARE2.easterEggCallback(); // or whatever you call your function
        return false;  // now make the browser ignore the key combo
    }
}

/*
    Sample Usage:

    var easterEggHandle = function () {
        // Your code here
    };
    var easterEggHandle2 = function () {
        // Your code here
    };
    CARE2.addEasterEggCallback(easterEggHandle);
    CARE2.addEasterEggCallback(easterEggHandle2);
    CARE2.addListener(window, 'load', function () { document.onkeypress=CARE2.captureKeys; } );
*/

////////////////////////
// End of Easter Eggs //
////////////////////////


///////////////////////////////////////////////
// ALL NAV JAVASCRIPT TO BE RUN ON PAGE LOAD //
///////////////////////////////////////////////

CARE2.footerFlies=function(){
    var _self=this;
    var obj={
        swfId:'footerbutterflies',
        frogswf:"http://dingo.care2.com/c2/swf/footer_frog.swf",
        frogswfId:'footerfrog',
        frogWrapper:_self.buildElement('div',{style:{position:'absolute'}}),
        width:75,
        height:78,
        frogwidth:420,
        frogheight:150,
        intvl:false,
        mouseOver:function(e,obj){
            obj.top=CARE2.getElementPosition($('care2_footer')).top+$('care2_footer').offsetHeight-obj.height-23;
            obj.left=CARE2.getElementPosition($('care2_footer')).left+$('care2_footer').offsetWidth-obj.width-10;
            CARE2.appendToBody(obj.frogWrapper);
            obj.frogWrapper.appendChild(CARE2.buildElement('div',{id:obj.frogswfId}));
            obj.frogWrapper.style.top=(obj.top-50)+"px";
            obj.frogWrapper.style.left=(obj.left-obj.frogwidth+obj.width+10)+"px";
            swfobject.embedSWF(obj.frogswf, obj.frogswfId, obj.frogwidth, obj.frogheight, "6.0.0", "expressInstall.swf", false, {wMode:'transparent'});
            setTimeout(function(){
                obj.frogWrapper.removeChild(obj.frogWrapper.firstChild);
                obj.frogWrapper.parentNode.removeChild(obj.frogWrapper);
            },5000);
        }
    }

    obj.wrapper=$(obj.swfId+'_wrapper');

    _self.addListener(obj.wrapper,"mouseover",obj.mouseOver,obj);
}

CARE2.checkLogin=function() {
    var callback = {
        success: function(o) {
            if(o.status==200){
                var json = o.responseText.replace(/(<([^>]+)>)/ig,'').trim();

                var resp = eval("("+json+")");
                dynamicNavObj.placeValues(resp);
                                
                if(typeof popup_im_setup=="function") popup_im_setup();
            }
        },
        timeout: 10000
    };

    if (CARE2.loggedIn()) {
        if(($(dynamicNavObj.divCredits).innerHTML == "" || dynamicNavObj.ajaxRefresh)) {
            CARE2.connect("GET","/servlets/get_user_data.php?echo_json=1",callback);
        } else {
            if(typeof popup_im_setup=="function") popup_im_setup();
        }
    }
}

CARE2.menuNavRendered=false;
CARE2.menuNav=function(){
    if(!CARE2.menuNavRendered){
        CARE2.menuNavRendered=true;

        // AJAX LOGIN INFO
        if($('care2_loginlinks')) {
            CARE2.checkLogin();
        }

        // SET UP THE DROPDOWN NAVIGATION
        if($('care2_main_nav')) {
            CARE2.menuDropDown();
        }

    	// SET UP THE FOOTER FROG DELIGHT
    	if($('footerbutterflies_wrapper')) {
    	   CARE2.footerFlies();
        }

        // GET CURRENT MEMBER COUNT
        if($('member_count_module_count') || $('member_count_header_count')) {
            var requrl = "/feeds/sitestats.xml";
            CARE2.connect("GET", requrl, {
                success: function(o) {
                    if(o.status == 200) {
                        var root = o.responseXML.documentElement;
                        var members = root.getElementsByTagName('members')[0].getElementsByTagName('total')[0].firstChild.nodeValue;

                        if($('member_count_module_count') && parseInt($('member_count_module_count').innerHTML.replace(/\,/g,"")) < members)
                                        $('member_count_module_count').innerHTML = CARE2.util.numberFormat(members);
                        if($('member_count_header_count') && parseInt($('member_count_header_count').innerHTML.replace(/\,/g,"")) < members)
                                        $('member_count_header_count').innerHTML = CARE2.util.numberFormat(members);
                    }
                }
            });
        }
    }
}

CARE2.menuDropDown=function(){
    if(!$("care2_slim_nav_dropdown"))return false;
    CARE2.mainNavActive = false;
    CARE2.mainNavFloater = $("care2_slim_nav_dropdown");
    CARE2.mainNavFloaterWidth = CARE2.getStyle(CARE2.mainNavFloater,"width",true);
    CARE2.mainNavFloater.style.visibility="visible";
    if(CARE2.isIE) {
        $("care2_dropdown_iframe").style.zIndex=CARE2.getStyle(CARE2.mainNavFloater,"zIndex")-1;
        CARE2.addClassName(document.getElementsByTagName("body")[0],"care2_isIE");
    }
    CARE2.mainNavFloater.style.display="none";

    CARE2.mainNavSetActive = function(c) {
        CARE2.mainNavActive = c;
        
        var li = $("care2_main_nav").getElementsByTagName("li");
        for(var i=0;i<li.length;i++){
            if(li[i].className.indexOf(c)>=0) {
                CARE2.addClassName(li[i].getElementsByTagName("a")[0],"active");
            }else{
                li[i].getElementsByTagName("a")[0].className="";
            }
            CARE2.mainNavFloater.className=c;
        }
    }

    CARE2.mainNavShowFloater = function() {
        if(CARE2.mainNavActive) {
            CARE2.setOpacity(CARE2.mainNavFloater,0);
            CARE2.mainNavFloater.style.display=$("care2_dropdown_iframe").style.display="block";
            var fadeOut = new YAHOO.util.Anim(CARE2.mainNavFloater, { opacity: { from: 0, to: 1 } }, 0.15);
            fadeOut.onComplete.subscribe(function(){ CARE2.mainNavFloater.style.filter="none"; });
            fadeOut.animate();
        }
    }

    CARE2.mainNavHideFloater = function() {
        if(!CARE2.mainNavActive) {
            var li = $("care2_main_nav").getElementsByTagName("a");
            for(var i=0;i<li.length;i++){
                li[i].className="";
            }
            var fadeOut = new YAHOO.util.Anim(CARE2.mainNavFloater, { opacity: { from: 1, to: 0 } }, 0.15);
            fadeOut.onComplete.subscribe(function(){CARE2.mainNavFloater.style.display=$("care2_dropdown_iframe").style.display="none"});
            fadeOut.animate();
        }
    }
    
    var li = $("care2_main_nav").getElementsByTagName("a");
    for(var i=0;i<=li.length;i++){
        var a = (i<li.length) ? li[i] : $("my_care2_link").getElementsByTagName("a")[0];
        
        a.onmouseover=function(){
            var hide=false;
            CARE2.mainNavSetActive(this.parentNode.className);
            
            var offset = CARE2.getElementPosition(this);

            var align_right = CARE2.getStyle(CARE2.mainNavFloater,"width",true) - this.offsetWidth - 7;
            if(CARE2.mainNavActive == "my_care2") align_right = 90;

            offset.top += (CARE2.mainNavActive == "my_care2") ? 22 : parseInt(CARE2.getStyle(this,"paddingTop"));
            offset.left -= (CARE2.mainNavActive == "rewards" || CARE2.mainNavActive == "my_care2") ? align_right : 5;
            /* cannot set offset in IE if div is hidden */
            if(CARE2.mainNavFloater.style.display="none") {
                CARE2.mainNavFloater.style.left="-1000px";
                CARE2.mainNavFloater.style.display="block";
                hide=true;
            }
            if(CARE2.isIE) {
                $("care2_dropdown_iframe").style.width=CARE2.getStyle(CARE2.mainNavFloater,"width");
                $("care2_dropdown_iframe").style.height=CARE2.mainNavFloater.offsetHeight+"px";
                $("care2_dropdown_iframe").style.top=offset.top+"px";
                $("care2_dropdown_iframe").style.left=offset.left+"px";
            }
            $("care2_nav_left_border").style.height=$("care2_nav_right_border").style.height=(CARE2.mainNavFloater.offsetHeight-9)+"px";
            $("care2_nav_bottom_border").style.width=(CARE2.getStyle(CARE2.mainNavFloater,"width",true)-18)+"px";
            CARE2.mainNavFloater.style.top=offset.top+"px";
            CARE2.mainNavFloater.style.left=offset.left+"px";
            if(hide) CARE2.mainNavFloater.style.display="none";
    
            if(CARE2.mainNavFloater.style.display="none") {
                setTimeout("CARE2.mainNavShowFloater()", 100);
            }
        }
        a.onmouseout=function(){
            CARE2.mainNavActive = false;
            setTimeout("CARE2.mainNavHideFloater()", 250);
        }
    }

    YAHOO.util.Event.on(CARE2.mainNavFloater,"mouseenter",function(){
        CARE2.mainNavSetActive(this.className);
    });

    YAHOO.util.Event.on(CARE2.mainNavFloater,"mouseleave",function(){
        CARE2.mainNavActive = false;
        setTimeout("CARE2.mainNavHideFloater()", 250);
    });
    
    $("care2WebSearchSubmit").onclick=$("care2MainSearchSubmit").onclick=function(){
        $("care2MainSearchParameter").value=this.value;
    }
    
    $("care2WebSearchSubmit").onmouseover=$("care2MainSearchSubmit").onmouseover=function(){
        CARE2.addClassName($("care2MainSearchForm"),this.id);
    }
    
    $("care2WebSearchSubmit").onmouseout=$("care2MainSearchSubmit").onmouseout=function(){
        CARE2.removeClassName($("care2MainSearchForm"),this.id);
    }
    
    CARE2.delightButton("care2WebSearchSubmit",{
        'swf':"http://dingo.care2.com/c2/swf/butterfly_click.swf?earnedPoints=%2B"+$('care2MainSearchCredits').value,
        'width':200,
        'height':200,
        'offset':{x:145,y:123},
        showDelightCondition:"$('care2MainSearchQuery').value != '' && CARE2.loggedIn()"
    });
}

YAHOO.util.Event.onDOMReady(function(){
    CARE2.menuNav();
});

//////////////////////////////////
// BUTTERFLY REWARDS JAVASCRIPT //
//////////////////////////////////

if (typeof(CARE2.prime) == 'undefined') {
    CARE2.prime = {};
}

CARE2.prime.creditBalanceChanged = new YAHOO.util.CustomEvent(
    "creditBalanceChanged", null, false, YAHOO.util.CustomEvent.FLAT);
CARE2.prime.adjustCreditBalance = function(newBalance) {

    var oldBalance = CARE2.prime.creditsAvailable;
    CARE2.prime.creditsAvailable = newBalance;

    CARE2.prime.creditBalanceChanged.fire({
        newBalance: newBalance,
        oldBalance: oldBalance
    });
}

CARE2.gui.NumericPeer = function(elementID, options) {
    if (typeof(options) == 'undefined') {
        options = {};
    }

    this._elementID = elementID;

    var elt = document.getElementById(elementID);
    var num = elt.innerHTML.replace(',', '').trim();
    var numericRegex = /^-?\d+(\.\d+)?$/;

    this._value = numericRegex.test(num)? num * 1.0 : 0.0;

    this.transitionDuration = (typeof(options.transitionDuration) == 'undefined')
                            ? 0.5 : options.transitionDuration;

    this._transition = {
        animation: false,
        sourceValue: 0,
        targetValue: 0,
        currentValue: 0
    };

    elt = null;
}
CARE2.gui.NumericPeer.prototype = {
    getValue: function() {
        return this._value;
    },
    setValue: function(value) {
        if (typeof(value) == 'number') {
            var oldValue = this._value;
            this._value = value;

            if (this.transitionDuration != 0) {
                this._doTransition(oldValue, value);
            } else {
                this._setDisplayedValue(value);
            }
        }
    },

    _doTransition: function(oldValue, newValue) {
        // If we're already doing a transition, we need to abort it, and do the transition
        // from where the aborted transition left off
        if (this._transition.animation) {
            oldValue = this._transition.currentValue;
            this._transition.animation.stop();
            this._cleanUpTransition();
        }

        // Initialize and kick off a new animation
        this._transition.sourceValue = oldValue;
        this._transition.currentValue = oldValue;
        this._transition.targetValue = newValue;

        this._transition.animation = new YAHOO.util.Anim();
        this._transition.animation.duration = this.transitionDuration;
        this._transition.animation.onTween.subscribe(this._tween, this);
        this._transition.animation.onComplete.subscribe(this._animationComplete, this);

        this._transition.animation.animate();
    },
    _cleanUpTransition: function() {
        if (this._transition.animation) {
            this._transition.animation.onTween.unsubscribeAll();
            this._transition.animation.onComplete.unsubscribeAll();
            this._transition.animation = false;
        }
    },

    _tween: function(evtType, tween, me) {
        var totalDifference = me._transition.targetValue - me._transition.sourceValue;
        var fractionDone = me._transition.animation.currentFrame
                         / me._transition.animation.totalFrames;
        me._transition.currentValue =
            Math.round(me._transition.sourceValue + (fractionDone * totalDifference));

        me._setDisplayedValue(me._transition.currentValue);
    },
    _animationComplete: function(evtType, animation, me) {
        me._cleanUpTransition();
    },

    _setDisplayedValue: function(value) {
        this._targetElt().innerHTML = CARE2.util.numberFormat(value);
    },

    _targetElt: function() {
        return document.getElementById(this._elementID);
    }
}


CARE2.prime.PillManager = function(idSuffix) {
    this._idSuffix = idSuffix;

    // Figure out widths
    this._expandedWidth = this._elt('note-text').offsetWidth; // width of note text
    this._collapsedWidth = Math.max(this._elt().offsetWidth - 34, 3); // width of content area of pill

    // Apply correct styles to hidden note
    this._elt('rollover').style.display = 'none';
    this._elt('note-text').style.position = 'absolute';
    this._elt('note-text').style.display = 'block';
    this._elt('note').style.width = this._collapsedWidth + 'px';

    // Set state
    this._state = 'collapsed';
    this._transitionWaitTimeout = false;
    this._expandDelay = 0.3;    // seconds
    this._collapseDelay = 0.25;  // seconds
    this._animationDuration = 0.5;  // seconds

    // Wire events
    YAHOO.util.Event.addListener(this._id(), 'mouseover', this._mouseOver, this);
    YAHOO.util.Event.addListener(this._id(), 'mouseout', this._mouseOut, this);
    YAHOO.util.Event.addListener(this._id('rollover'), 'mouseover', this._mouseOver, this);
    YAHOO.util.Event.addListener(this._id('rollover'), 'mouseout', this._mouseOut, this);
}
CARE2.prime.PillManager.prototype = {
    _mouseOver: function(e, me) {
        var msg = "mouseOver: " + this.nodeName;
        if ( (typeof(this.id) != 'undefined') && this.id ) {
            msg += "." + this.id;
        }
        //blert(msg);

        if (me._state == 'collapsed') {
            me._state = 'waitToExpand';
            me._transitionWaitTimeout = setTimeout(
                function() { me._transitionWaitCallback(); },
                Math.round(me._expandDelay * 1000));

        } else if (me._state == 'waitToCollapse') {
            me._state = 'expanded';
            me._clearWaitTimeout();
        }
    },
    _mouseOut: function(e, me) {
        var msg = "mouseOut: " + this.nodeName;
        if ( (typeof(this.id) != 'undefined') && this.id ) {
            msg += "." + this.id;
        }
        //blert(msg);

        if (me._state == 'expanded') {
            me._state = 'waitToCollapse';
            me._transitionWaitTimeout = setTimeout(
                function() { me._transitionWaitCallback(); },
                Math.round(me._collapseDelay * 1000));

        } else if (me._state == 'waitToExpand') {
            me._state = 'collapsed';
            me._clearWaitTimeout();
        }
    },

    _transitionWaitCallback: function() {
        if (this._state == 'waitToExpand') {
            this._doExpand();
        } else if (this._state == 'waitToCollapse') {
            this._doCollapse();
        }
    },
    _clearWaitTimeout: function() {
        clearTimeout(this._transitionWaitTimeout);
        this._transitionWaitTimeout = false;
    },

    _doExpand: function() {
        this._state = 'expanded';

        // Get position of pill element
        var pos = YAHOO.util.Dom.getXY(this._id());

        // Move the note into place
        pos[0] -= 11;
        pos[1] -= 10;

        this._elt('note').style.width = (this._expandedWidth - 22) + 'px';
        this._elt('note-text').style.width = this._expandedWidth + 'px';
        this._elt('rollover').style.display = 'block';
        YAHOO.util.Dom.setXY(this._id('rollover'), pos);
    },
    _doCollapse: function() {
        this._state = 'collapsed';

        this._elt('rollover').style.display = 'none';
        this._elt('note').style.width = this._collapsedWidth + 'px';
    },

    _elt: function(name) {
        return document.getElementById(this._id(name));
    },
    _id: function(name) {
        if (typeof(name) != 'undefined') {
            return "prime-pill-" + name + '-' + this._idSuffix;
        } else {
            return "prime-pill-" + this._idSuffix;
        }
    }
}
CARE2.months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
} /* END THE FILE WITH THIS WHICH CLOSES if(!CARE2) */

