//AJAX
if(typeof XCSKIES=="undefined"||!XCSKIES){var XCSKIES={};}XCSKIES.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=(""+A[C]).split(".");E=XCSKIES;for(B=(D[0]=="XCSKIES")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};XCSKIES.log=function(D,A,C){var B=XCSKIES.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};XCSKIES.register=function(A,E,D){var I=XCSKIES.env.modules,B,H,G,F,C;if(!I[A]){I[A]={versions:[],builds:[]};}B=I[A];H=D.version;G=D.build;F=XCSKIES.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{XCSKIES.log("mainClass is undefined for module "+A,"warn");}};XCSKIES.env=XCSKIES.env||{modules:[],listeners:[]};XCSKIES.env.getVersion=function(A){return XCSKIES.env.modules[A]||null;};XCSKIES.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:0},B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=B.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=A[0];}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}A=B.match(/Caja\/([^\s]*)/);if(A&&A[1]){C.caja=parseFloat(A[1]);}return C;}();(function(){XCSKIES.namespace("util","widget","example");if("undefined"!==typeof XCSKIES_config){var B=XCSKIES_config.listener,A=XCSKIES.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();XCSKIES.lang=XCSKIES.lang||{};(function(){var B=XCSKIES.lang,F="[object Array]",C="[object Function]",A=Object.prototype,E=["toString","valueOf"],D={isArray:function(G){return A.toString.apply(G)===F;},isBoolean:function(G){return typeof G==="boolean";},isFunction:function(G){return A.toString.apply(G)===C;},isNull:function(G){return G===null;},isNumber:function(G){return typeof G==="number"&&isFinite(G);},isObject:function(G){return(G&&(typeof G==="object"||B.isFunction(G)))||false;},isString:function(G){return typeof G==="string";},isUndefined:function(G){return typeof G==="undefined";},_IEEnumFix:(XCSKIES.env.ua.ie)?function(I,H){var G,K,J;for(G=0;G<E.length;G=G+1){K=E[G];J=H[K];if(B.isFunction(J)&&J!=A[K]){I[K]=J;}}}:function(){},extend:function(J,K,I){if(!K||!J){throw new Error("extend failed, please check that "+"all dependencies are included.");}var H=function(){},G;H.prototype=K.prototype;J.prototype=new H();J.prototype.constructor=J;J.superclass=K.prototype;if(K.prototype.constructor==A.constructor){K.prototype.constructor=K;}if(I){for(G in I){if(B.hasOwnProperty(I,G)){J.prototype[G]=I[G];}}B._IEEnumFix(J.prototype,I);}},augmentObject:function(K,J){if(!J||!K){throw new Error("Absorb failed, verify dependencies.");}var G=arguments,I,L,H=G[2];if(H&&H!==true){for(I=2;I<G.length;I=I+1){K[G[I]]=J[G[I]];}}else{for(L in J){if(H||!(L in K)){K[L]=J[L];}}B._IEEnumFix(K,J);}},augmentProto:function(J,I){if(!I||!J){throw new Error("Augment failed, verify dependencies.");}var G=[J.prototype,I.prototype],H;for(H=2;H<arguments.length;H=H+1){G.push(arguments[H]);}B.augmentObject.apply(this,G);},dump:function(G,L){var I,K,N=[],O="{...}",H="f(){...}",M=", ",J=" => ";if(!B.isObject(G)){return G+"";}else{if(G instanceof Date||("nodeType" in G&&"tagName" in G)){return G;}else{if(B.isFunction(G)){return H;}}}L=(B.isNumber(L))?L:3;if(B.isArray(G)){N.push("[");for(I=0,K=G.length;I<K;I=I+1){if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}if(N.length>1){N.pop();}N.push("]");}else{N.push("{");for(I in G){if(B.hasOwnProperty(G,I)){N.push(I+J);if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}}if(N.length>1){N.pop();}N.push("}");}return N.join("");},substitute:function(V,H,O){var L,K,J,R,S,U,Q=[],I,M="dump",P=" ",G="{",T="}",N;for(;;){L=V.lastIndexOf(G);if(L<0){break;}K=V.indexOf(T,L);if(L+1>=K){break;}I=V.substring(L+1,K);R=I;U=null;J=R.indexOf(P);if(J>-1){U=R.substring(J+1);R=R.substring(0,J);}S=H[R];if(O){S=O(R,S,U);}if(B.isObject(S)){if(B.isArray(S)){S=B.dump(S,parseInt(U,10));}else{U=U||"";N=U.indexOf(M);if(N>-1){U=U.substring(4);}if(S.toString===A.toString||N>-1){S=B.dump(S,parseInt(U,10));}else{S=S.toString();}}}else{if(!B.isString(S)&&!B.isNumber(S)){S="~-"+Q.length+"-~";Q[Q.length]=I;}}V=V.substring(0,L)+S+V.substring(K+1);}for(L=Q.length-1;L>=0;L=L-1){V=V.replace(new RegExp("~-"+L+"-~"),"{"+Q[L]+"}","g");}return V;},trim:function(G){try{return G.replace(/^\s+|\s+$/g,"");}catch(H){return G;}},merge:function(){var J={},H=arguments,G=H.length,I;for(I=0;I<G;I=I+1){B.augmentObject(J,H[I],true);}return J;},later:function(N,H,O,J,K){N=N||0;H=H||{};var I=O,M=J,L,G;if(B.isString(O)){I=H[O];}if(!I){throw new TypeError("method undefined");}if(!B.isArray(M)){M=[J];}L=function(){I.apply(H,M);};G=(K)?setInterval(L,N):setTimeout(L,N);return{interval:K,cancel:function(){if(this.interval){clearInterval(G);}else{clearTimeout(G);}}};},isValue:function(G){return(B.isObject(G)||B.isString(G)||B.isNumber(G)||B.isBoolean(G));}};B.hasOwnProperty=(A.hasOwnProperty)?function(G,H){return G&&G.hasOwnProperty(H);}:function(G,H){return !B.isUndefined(G[H])&&G.constructor.prototype[H]!==G[H];};D.augmentObject(B,D,true);XCSKIES.util.Lang=B;B.augment=B.augmentProto;XCSKIES.augment=B.augmentProto;XCSKIES.extend=B.extend;})();XCSKIES.register("yahoo",XCSKIES,{version:"2.7.0",build:"1799"});

XCSKIES.util.CustomEvent=function(D,C,B,A){this.type=D;this.scope=C||window;this.silent=B;this.signature=A||XCSKIES.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new XCSKIES.util.CustomEvent(E,this,true);}this.lastError=null;};XCSKIES.util.CustomEvent.LIST=0;XCSKIES.util.CustomEvent.FLAT=1;XCSKIES.util.CustomEvent.prototype={subscribe:function(A,B,C){if(!A){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(A,B,C);}this.subscribers.push(new XCSKIES.util.Subscriber(A,B,C));},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 K=[],E=this.subscribers.length;if(!E&&this.silent){return true;}var I=[].slice.call(arguments,0),G=true,D,J=false;if(!this.silent){}var C=this.subscribers.slice(),A=XCSKIES.util.Event.throwErrors;for(D=0;D<E;++D){var M=C[D];if(!M){J=true;}else{if(!this.silent){}var L=M.getScope(this.scope);if(this.signature==XCSKIES.util.CustomEvent.FLAT){var B=null;if(I.length>0){B=I[0];}try{G=M.fn.call(L,B,M.obj);}catch(F){this.lastError=F;if(A){throw F;}}}else{try{G=M.fn.call(L,this.type,I,M.obj);}catch(H){this.lastError=H;if(A){throw H;}}}if(false===G){if(!this.silent){}break;}}}return(G!==false);},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;}};XCSKIES.util.Subscriber=function(A,B,C){this.fn=A;this.obj=XCSKIES.lang.isUndefined(B)?null:B;this.overrideContext=C;};XCSKIES.util.Subscriber.prototype.getScope=function(A){if(this.overrideContext){if(this.overrideContext===true){return this.obj;}else{return this.overrideContext;}}return A;};XCSKIES.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};XCSKIES.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", overrideContext: "+(this.overrideContext||"no")+" }";};if(!XCSKIES.util.Event){XCSKIES.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F=[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};var K=XCSKIES.env.ua.ie?"focusin":"focus";var L=XCSKIES.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2000,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,lastError:null,isSafari:XCSKIES.env.ua.webkit,webkit:XCSKIES.env.ua.webkit,isIE:XCSKIES.env.ua.ie,_interval:null,_dri:null,DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){var M=this;var N=function(){M._tryPreloadAttach();};this._interval=setInterval(N,this.POLL_INTERVAL);}},onAvailable:function(S,O,Q,R,P){var M=(XCSKIES.lang.isString(S))?[S]:S;for(var N=0;N<M.length;N=N+1){F.push({id:M[N],fn:O,obj:Q,overrideContext:R,checkReady:P});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(P,M,N,O){this.onAvailable(P,M,N,O,true);},onDOMReady:function(M,N,O){if(this.DOMReady){setTimeout(function(){var P=window;if(O){if(O===true){P=N;}else{P=O;}}M.call(P,"DOMReady",[],N);},0);}else{this.DOMReadyEvent.subscribe(M,N,O);}},_addListener:function(O,M,Y,S,W,b){if(!Y||!Y.call){return false;}if(this._isValidCollection(O)){var Z=true;for(var T=0,V=O.length;T<V;++T){Z=this.on(O[T],M,Y,S,W)&&Z;}return Z;}else{if(XCSKIES.lang.isString(O)){var R=this.getEl(O);if(R){O=R;}else{this.onAvailable(O,function(){XCSKIES.util.Event.on(O,M,Y,S,W);});return true;}}}if(!O){return false;}if("unload"==M&&S!==this){J[J.length]=[O,M,Y,S,W];return true;}var N=O;if(W){if(W===true){N=S;}else{N=W;}}var P=function(c){return Y.call(N,XCSKIES.util.Event.getEvent(c,O),S);};var a=[O,M,Y,P,N,S,W];var U=I.length;I[U]=a;if(this.useLegacyEvent(O,M)){var Q=this.getLegacyIndex(O,M);if(Q==-1||O!=G[Q][0]){Q=G.length;B[O.id+M]=Q;G[Q]=[O,M,O["on"+M]];E[Q]=[];O["on"+M]=function(c){XCSKIES.util.Event.fireLegacyEvent(XCSKIES.util.Event.getEvent(c),Q);};}E[Q].push(a);}else{try{this._simpleAdd(O,M,P,b);}catch(X){this.lastError=X;this.removeListener(O,M,Y);return false;}}return true;},addListener:function(N,Q,M,O,P){return this._addListener(N,Q,M,O,P,false);},addFocusListener:function(N,M,O,P){return this._addListener(N,K,M,O,P,true);},removeFocusListener:function(N,M){return this.removeListener(N,K,M);},addBlurListener:function(N,M,O,P){return this._addListener(N,L,M,O,P,true);},removeBlurListener:function(N,M){return this.removeListener(N,L,M);},fireLegacyEvent:function(R,P){var T=true,M,V,U,N,S;V=E[P].slice();for(var O=0,Q=V.length;O<Q;++O){U=V[O];if(U&&U[this.WFN]){N=U[this.ADJ_SCOPE];S=U[this.WFN].call(N,R);T=(T&&S);}}M=G[P];if(M&&M[2]){M[2](R);}return T;},getLegacyIndex:function(N,O){var M=this.generateId(N)+O;if(typeof B[M]=="undefined"){return -1;}else{return B[M];}},useLegacyEvent:function(M,N){return(this.webkit&&this.webkit<419&&("click"==N||"dblclick"==N));},removeListener:function(N,M,V){var Q,T,X;if(typeof N=="string"){N=this.getEl(N);}else{if(this._isValidCollection(N)){var W=true;for(Q=N.length-1;Q>-1;Q--){W=(this.removeListener(N[Q],M,V)&&W);}return W;}}if(!V||!V.call){return this.purgeElement(N,false,M);}if("unload"==M){for(Q=J.length-1;Q>-1;Q--){X=J[Q];if(X&&X[0]==N&&X[1]==M&&X[2]==V){J.splice(Q,1);return true;}}return false;}var R=null;var S=arguments[3];if("undefined"===typeof S){S=this._getCacheIndex(N,M,V);}if(S>=0){R=I[S];}if(!N||!R){return false;}if(this.useLegacyEvent(N,M)){var P=this.getLegacyIndex(N,M);var O=E[P];if(O){for(Q=0,T=O.length;Q<T;++Q){X=O[Q];if(X&&X[this.EL]==N&&X[this.TYPE]==M&&X[this.FN]==V){O.splice(Q,1);break;}}}}else{try{this._simpleRemove(N,M,R[this.WFN],false);}catch(U){this.lastError=U;return false;}}delete I[S][this.WFN];delete I[S][this.FN];
I.splice(S,1);return true;},getTarget:function(O,N){var M=O.target||O.srcElement;return this.resolveTextNode(M);},resolveTextNode:function(N){try{if(N&&3==N.nodeType){return N.parentNode;}}catch(M){}return N;},getPageX:function(N){var M=N.pageX;if(!M&&0!==M){M=N.clientX||0;if(this.isIE){M+=this._getScrollLeft();}}return M;},getPageY:function(M){var N=M.pageY;if(!N&&0!==N){N=M.clientY||0;if(this.isIE){N+=this._getScrollTop();}}return N;},getXY:function(M){return[this.getPageX(M),this.getPageY(M)];},getRelatedTarget:function(N){var M=N.relatedTarget;if(!M){if(N.type=="mouseout"){M=N.toElement;}else{if(N.type=="mouseover"){M=N.fromElement;}}}return this.resolveTextNode(M);},getTime:function(O){if(!O.time){var N=new Date().getTime();try{O.time=N;}catch(M){this.lastError=M;return N;}}return O.time;},stopEvent:function(M){this.stopPropagation(M);this.preventDefault(M);},stopPropagation:function(M){if(M.stopPropagation){M.stopPropagation();}else{M.cancelBubble=true;}},preventDefault:function(M){if(M.preventDefault){M.preventDefault();}else{M.returnValue=false;}},getEvent:function(O,M){var N=O||window.event;if(!N){var P=this.getEvent.caller;while(P){N=P.arguments[0];if(N&&Event==N.constructor){break;}P=P.caller;}}return N;},getCharCode:function(N){var M=N.keyCode||N.charCode||0;if(XCSKIES.env.ua.webkit&&(M in D)){M=D[M];}return M;},_getCacheIndex:function(Q,R,P){for(var O=0,N=I.length;O<N;O=O+1){var M=I[O];if(M&&M[this.FN]==P&&M[this.EL]==Q&&M[this.TYPE]==R){return O;}}return -1;},generateId:function(M){var N=M.id;if(!N){N="yuievtautoid-"+A;++A;M.id=N;}return N;},_isValidCollection:function(N){try{return(N&&typeof N!=="string"&&N.length&&!N.tagName&&!N.alert&&typeof N[0]!=="undefined");}catch(M){return false;}},elCache:{},getEl:function(M){return(typeof M==="string")?document.getElementById(M):M;},clearCache:function(){},DOMReadyEvent:new XCSKIES.util.CustomEvent("DOMReady",this),_load:function(N){if(!H){H=true;var M=XCSKIES.util.Event;M._ready();M._tryPreloadAttach();}},_ready:function(N){var M=XCSKIES.util.Event;if(!M.DOMReady){M.DOMReady=true;M.DOMReadyEvent.fire();M._simpleRemove(document,"DOMContentLoaded",M._ready);}},_tryPreloadAttach:function(){if(F.length===0){C=0;if(this._interval){clearInterval(this._interval);this._interval=null;}return;}if(this.locked){return;}if(this.isIE){if(!this.DOMReady){this.startInterval();return;}}this.locked=true;var S=!H;if(!S){S=(C>0&&F.length>0);}var R=[];var T=function(V,W){var U=V;if(W.overrideContext){if(W.overrideContext===true){U=W.obj;}else{U=W.overrideContext;}}W.fn.call(U,W.obj);};var N,M,Q,P,O=[];for(N=0,M=F.length;N<M;N=N+1){Q=F[N];if(Q){P=this.getEl(Q.id);if(P){if(Q.checkReady){if(H||P.nextSibling||!S){O.push(Q);F[N]=null;}}else{T(P,Q);F[N]=null;}}else{R.push(Q);}}}for(N=0,M=O.length;N<M;N=N+1){Q=O[N];T(this.getEl(Q.id),Q);}C--;if(S){for(N=F.length-1;N>-1;N--){Q=F[N];if(!Q||!Q.id){F.splice(N,1);}}this.startInterval();}else{if(this._interval){clearInterval(this._interval);this._interval=null;}}this.locked=false;},purgeElement:function(Q,R,T){var O=(XCSKIES.lang.isString(Q))?this.getEl(Q):Q;var S=this.getListeners(O,T),P,M;if(S){for(P=S.length-1;P>-1;P--){var N=S[P];this.removeListener(O,N.type,N.fn);}}if(R&&O&&O.childNodes){for(P=0,M=O.childNodes.length;P<M;++P){this.purgeElement(O.childNodes[P],R,T);}}},getListeners:function(O,M){var R=[],N;if(!M){N=[I,J];}else{if(M==="unload"){N=[J];}else{N=[I];}}var T=(XCSKIES.lang.isString(O))?this.getEl(O):O;for(var Q=0;Q<N.length;Q=Q+1){var V=N[Q];if(V){for(var S=0,U=V.length;S<U;++S){var P=V[S];if(P&&P[this.EL]===T&&(!M||M===P[this.TYPE])){R.push({type:P[this.TYPE],fn:P[this.FN],obj:P[this.OBJ],adjust:P[this.OVERRIDE],scope:P[this.ADJ_SCOPE],index:S});}}}}return(R.length)?R:null;},_unload:function(T){var N=XCSKIES.util.Event,Q,P,O,S,R,U=J.slice(),M;for(Q=0,S=J.length;Q<S;++Q){O=U[Q];if(O){M=window;if(O[N.ADJ_SCOPE]){if(O[N.ADJ_SCOPE]===true){M=O[N.UNLOAD_OBJ];}else{M=O[N.ADJ_SCOPE];}}O[N.FN].call(M,N.getEvent(T,O[N.EL]),O[N.UNLOAD_OBJ]);U[Q]=null;}}O=null;M=null;J=null;if(I){for(P=I.length-1;P>-1;P--){O=I[P];if(O){N.removeListener(O[N.EL],O[N.TYPE],O[N.FN],P);}}O=null;}G=null;N._simpleRemove(window,"unload",N._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=XCSKIES.util.Event;EU.on=EU.addListener;EU.onFocus=EU.addFocusListener;EU.onBlur=EU.addBlurListener;
if(EU.isIE){XCSKIES.util.Event.onDOMReady(XCSKIES.util.Event._tryPreloadAttach,XCSKIES.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();})();}XCSKIES.util.EventProvider=function(){};XCSKIES.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(XCSKIES.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new XCSKIES.util.CustomEvent(G,H,E,XCSKIES.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].overrideContext);}}}return I[G];},fireEvent:function(E,D,A,C){this.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};(function(){var A=XCSKIES.util.Event,C=XCSKIES.lang;XCSKIES.util.KeyListener=function(D,I,E,F){if(!D){}else{if(!I){}else{if(!E){}}}if(!F){F=XCSKIES.util.KeyListener.KEYDOWN;}var G=new XCSKIES.util.CustomEvent("keyPressed");this.enabledEvent=new XCSKIES.util.CustomEvent("enabled");this.disabledEvent=new XCSKIES.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(XCSKIES.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=XCSKIES.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};})();XCSKIES.register("event",XCSKIES.util.Event,{version:"2.7.0",build:"1799"});

XCSKIES.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:{},_isFormSubmit:false,_isFileUpload:false,_formNode:null,_sFormData:null,_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,_submitElementValue:null,_hasSubmitListener:(function(){if(XCSKIES.util.Event){XCSKIES.util.Event.addListener(document,"click",function(C){var B=XCSKIES.util.Event.getTarget(C),A=B.nodeName.toLowerCase();if((A==="input"||A==="button")&&(B.type&&B.type.toLowerCase()=="submit")){XCSKIES.util.Connect._submitElementValue=encodeURIComponent(B.name)+"="+encodeURIComponent(B.value);}});return true;}return false;})(),startEvent:new XCSKIES.util.CustomEvent("start"),completeEvent:new XCSKIES.util.CustomEvent("complete"),successEvent:new XCSKIES.util.CustomEvent("success"),failureEvent:new XCSKIES.util.CustomEvent("failure"),uploadEvent:new XCSKIES.util.CustomEvent("upload"),abortEvent:new XCSKIES.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 E,A;try{A=new XMLHttpRequest();E={conn:A,tId:F};}catch(D){for(var B=0;B<this._msxml_progid.length;++B){try{A=new ActiveXObject(this._msxml_progid[B]);E={conn:A,tId:F};break;}catch(C){}}}finally{return E;}},getConnectionObject:function(A){var C;var D=this._transaction_id;try{if(!A){C=this.createXhrObject(D);}else{C={};C.tId=D;C.isUpload=true;}if(C){this._transaction_id++;}}catch(B){}finally{return C;}},asyncRequest:function(F,C,E,A){var D=(this._isFileUpload)?this.getConnectionObject(true):this.getConnectionObject();var B=(E&&E.argument)?E.argument:null;if(!D){return null;}else{if(E&&E.customevents){this.initCustomEvents(D,E);}if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(D,E,C,A);return D;}if(F.toUpperCase()=="GET"){if(this._sFormData.length!==0){C+=((C.indexOf("?")==-1)?"?":"&")+this._sFormData;}}else{if(F.toUpperCase()=="POST"){A=A?this._sFormData+"&"+A:this._sFormData;}}}if(F.toUpperCase()=="GET"&&(E&&E.cache===false)){C+=((C.indexOf("?")==-1)?"?":"&")+"rnd="+new Date().valueOf().toString();}D.conn.open(F,C,true);if(this._use_default_xhr_header){if(!this._default_headers["X-Requested-With"]){this.initHeader("X-Requested-With",this._default_xhr_header,true);}}if((F.toUpperCase()==="POST"&&this._use_default_post_header)&&this._isFormSubmit===false){this.initHeader("Content-Type",this._default_post_header);}if(this._has_default_headers||this._has_http_headers){this.setHeader(D);}this.handleReadyState(D,E);D.conn.send(A||"");if(this._isFormSubmit===true){this.resetFormState();}this.startEvent.fire(D,B);if(D.startEvent){D.startEvent.fire(D,B);}return D;}},initCustomEvents:function(A,C){var B;for(B in C.customevents){if(this._customEvents[B][0]){A[this._customEvents[B][0]]=new XCSKIES.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;var 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(F,G,A){var D,C;var B=(G&&G.argument)?G.argument:null;try{if(F.conn.status!==undefined&&F.conn.status!==0){D=F.conn.status;}else{D=13030;}}catch(E){D=13030;}if(D>=200&&D<300||D===1223){C=this.createResponseObject(F,B);if(G&&G.success){if(!G.scope){G.success(C);}else{G.success.apply(G.scope,[C]);}}this.successEvent.fire(C);if(F.successEvent){F.successEvent.fire(C);}}else{switch(D){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:C=this.createExceptionObject(F.tId,B,(A?A:false));if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}break;default:C=this.createResponseObject(F,B);if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}}this.failureEvent.fire(C);if(F.failureEvent){F.failureEvent.fire(C);}}this.releaseObject(F);C=null;},createResponseObject:function(A,G){var D={};var I={};try{var C=A.conn.getAllResponseHeaders();var F=C.split("\n");for(var E=0;E<F.length;E++){var B=F[E].indexOf(":");if(B!=-1){I[F[E].substring(0,B)]=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;var G="communication failure";var C=-1;var B="transaction aborted";var 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(XCSKIES.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(XCSKIES.lang.hasOwnProperty(this._http_headers,B)){A.conn.setRequestHeader(B,this._http_headers[B]);}}delete this._http_headers;this._http_headers={};this._has_http_headers=false;}},resetDefaultHeaders:function(){delete this._default_headers;this._default_headers={};this._has_default_headers=false;},setForm:function(M,H,C){var L,B,K,I,P,J=false,F=[],O=0,E,G,D,N,A;this.resetFormState();if(typeof M=="string"){L=(document.getElementById(M)||document.forms[M]);}else{if(typeof M=="object"){L=M;}else{return;}}if(H){this.createFrame(C?C:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=L;return;}for(E=0,G=L.elements.length;E<G;++E){B=L.elements[E];P=B.disabled;K=B.name;if(!P&&K){K=encodeURIComponent(K)+"=";I=encodeURIComponent(B.value);switch(B.type){case"select-one":if(B.selectedIndex>-1){A=B.options[B.selectedIndex];F[O++]=K+encodeURIComponent((A.attributes.value&&A.attributes.value.specified)?A.value:A.text);}break;case"select-multiple":if(B.selectedIndex>-1){for(D=B.selectedIndex,N=B.options.length;D<N;++D){A=B.options[D];if(A.selected){F[O++]=K+encodeURIComponent((A.attributes.value&&A.attributes.value.specified)?A.value:A.text);}}}break;case"radio":case"checkbox":if(B.checked){F[O++]=K+I;}break;case"file":case undefined:case"reset":case"button":break;case"submit":if(J===false){if(this._hasSubmitListener&&this._submitElementValue){F[O++]=this._submitElementValue;}J=true;}break;default:F[O++]=K+I;}}}this._isFormSubmit=true;this._sFormData=F.join("&");this.initHeader("Content-Type",this._default_form_header);return this._sFormData;},resetFormState:function(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormData="";},createFrame:function(A){var B="yuiIO"+this._transaction_id;var C;if(XCSKIES.env.ua.ie){C=document.createElement('<iframe id="'+B+'" name="'+B+'" />');if(typeof A=="boolean"){C.src="javascript:false";}}else{C=document.createElement("iframe");C.id=B;C.name=B;}C.style.position="absolute";C.style.top="-1000px";C.style.left="-1000px";document.body.appendChild(C);},appendPostData:function(A){var D=[],B=A.split("&"),C,E;for(C=0;C<B.length;C++){E=B[C].indexOf("=");if(E!=-1){D[C]=document.createElement("input");D[C].type="hidden";D[C].name=decodeURIComponent(B[C].substring(0,E));D[C].value=decodeURIComponent(B[C].substring(E+1));this._formNode.appendChild(D[C]);}}return D;},uploadFile:function(D,N,E,C){var I="yuiIO"+D.tId,J="multipart/form-data",L=document.getElementById(I),O=this,K=(N&&N.argument)?N.argument:null,M,H,B,G;var A={action:this._formNode.getAttribute("action"),method:this._formNode.getAttribute("method"),target:this._formNode.getAttribute("target")};this._formNode.setAttribute("action",E);this._formNode.setAttribute("method","POST");this._formNode.setAttribute("target",I);if(XCSKIES.env.ua.ie){this._formNode.setAttribute("encoding",J);}else{this._formNode.setAttribute("enctype",J);}if(C){M=this.appendPostData(C);}this._formNode.submit();this.startEvent.fire(D,K);if(D.startEvent){D.startEvent.fire(D,K);}if(N&&N.timeout){this._timeOut[D.tId]=window.setTimeout(function(){O.abort(D,N,true);},N.timeout);}if(M&&M.length>0){for(H=0;H<M.length;H++){this._formNode.removeChild(M[H]);}}for(B in A){if(XCSKIES.lang.hasOwnProperty(A,B)){if(A[B]){this._formNode.setAttribute(B,A[B]);}else{this._formNode.removeAttribute(B);}}}this.resetFormState();var F=function(){if(N&&N.timeout){window.clearTimeout(O._timeOut[D.tId]);delete O._timeOut[D.tId];}O.completeEvent.fire(D,K);if(D.completeEvent){D.completeEvent.fire(D,K);}G={tId:D.tId,argument:N.argument};try{G.responseText=L.contentWindow.document.body?L.contentWindow.document.body.innerHTML:L.contentWindow.document.documentElement.textContent;G.responseXML=L.contentWindow.document.XMLDocument?L.contentWindow.document.XMLDocument:L.contentWindow.document;}catch(P){}if(N&&N.upload){if(!N.scope){N.upload(G);}else{N.upload.apply(N.scope,[G]);}}O.uploadEvent.fire(G);if(D.uploadEvent){D.uploadEvent.fire(G);}XCSKIES.util.Event.removeListener(L,"load",F);setTimeout(function(){document.body.removeChild(L);O.releaseObject(D);},100);};XCSKIES.util.Event.addListener(L,"load",F);},abort:function(E,G,A){var D;var B=(G&&G.argument)?G.argument:null;if(E&&E.conn){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&&E.isUpload===true){var C="yuiIO"+E.tId;var F=document.getElementById(C);if(F){XCSKIES.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(B){if(B&&B.conn){return B.conn.readyState!==4&&B.conn.readyState!==0;}else{if(B&&B.isUpload===true){var A="yuiIO"+B.tId;return document.getElementById(A)?true:false;}else{return false;}}},releaseObject:function(A){if(A&&A.conn){A.conn=null;A=null;}}};XCSKIES.register("connection",XCSKIES.util.Connect,{version:"2.7.0",build:"1799"});

var isSafari = 0;
var ajaxNum = 0;
var ua = navigator.userAgent;
if (ua.indexOf("Safari") != -1) {isSafari=1}
var ajaxRequests = new Array();

function checkRequests(){//not used!
	for (var i = 0; i < ajaxRequests.length; i++){
		var o = ajaxRequests[i];
		alert(XCSKIES.util.Connect.isCallInProgress(o));
		if(o.conn){
			for (j in o.conn){
				alert(j + ' = ' + o[j]);
			}
		}
	}
	alert('done');
}

function ajaxRequest(meth,sUrl,callback,postParams){
	if(callback==ajaxCallback){callback=new ajC()}
	if(meth=='POST'){var request = XCSKIES.util.Connect.asyncRequest(meth,sUrl,callback,postParams);}
	if(meth=='GET'){var request = XCSKIES.util.Connect.asyncRequest(meth,sUrl+postParams,callback);}
	//ajaxRequests.push(request);
	//showWindow('wait');
	ajaxNum++;
}

var ajaxCallback=null;//{success:ajaxSuccess,failure:ajaxFailure,argument:[]};
var callback=null;

function ajC(){
	this.success= function(o){if(o.responseText !== 'undefined'){loadAJAXJS(o.responseText);ajaxNum--;}};//if(ajaxNum<=0){hideWindow('wait');}
	this.failure= function(o){alert('An error occurred while contacting the XC Skies server. Please try again.' + o.statusText);ajaxNum--;};//if(ajaxNum<=0){hideWindow('wait');}
	this.argument=[];
	this.cache=false;
}
function loadAJAXJS(code){
  if (window.execScript) {
	window.execScript(code);
	return null;
  } else {
	if (isSafari==1) {
		window.setTimeout( code, 0 );
	} else {
		xc_global.eval(code);
	}
  }
}

var xc_global = this;
var popup1;
function EpochPrime(targetelement,xmlconfig){var self=this;function setLang(){self.daylist=new Array('S','M','T','W','T','F','S','S','M','T','W','T','F','S');self.months_sh=new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');self.monthup_title='Go to the next month';self.monthdn_title='Go to the previous month';self.clearbtn_caption='Clear';self.clearbtn_title='Clears any dates selected on the calendar';self.maxrange_caption='This is the maximum range';self.closebtn_caption='Close';self.closebtn_title='Close the calendar';}function calConfig(){self.versionNumber='1.0.2';self.name='epochprime';self.mode='flat';self.selectMultiple=true;self.displayYearInitial=self.curDate.getFullYear();self.displayMonthInitial=self.curDate.getMonth();self.displayYear=self.displayYearInitial;self.displayMonth=self.displayMonthInitial;self.defDateFormat='Ymd';self.minDate=new Date(2008,8,8);self.maxDate=new Date((new Date().getTime() + (86400*1000*3.)));self.startDay=0;self.showWeeks=true;self.selCurMonthOnly=true;}function setDays(){self.daynames=new Array();var j=0;for(var i=self.startDay;i<self.startDay+7;i++){self.daynames[j++]=self.daylist[i];}self.monthDayCount=new Array(31,((self.curDate.getFullYear()- 2000)% 4?28:29),31,30,31,30,31,31,30,31,30,31);}function createCalendar(){var tbody,tr,td;self.calendar=document.createElement('table');self.calendar.setAttribute('id',self.name+'_calendar');setClass(self.calendar,'calendar');self.calendar.style.display='none';addEventHandler(self.calendar,'selectstart',function(){return false;});addEventHandler(self.calendar,'drag',function(){return false;});tbody=document.createElement('tbody');var tr_tmp=document.createElement('tr'),td_tmp=document.createElement('td');tr=tr_tmp.cloneNode(false);td=td_tmp.cloneNode(false);td.appendChild(createMainHeading());tr.appendChild(td);tbody.appendChild(tr);tr=tr_tmp.cloneNode(false);td=td_tmp.cloneNode(false);self.calendar.celltable=document.createElement('table');setClass(self.calendar.celltable,'cells');self.calendar.celltable.appendChild(createDayHeading());self.calendar.celltable.appendChild(createCalCells());td.appendChild(self.calendar.celltable);tr.appendChild(td);tbody.appendChild(tr);tr=tr_tmp.cloneNode(false);td=td_tmp.cloneNode(false);td.appendChild(createFooter());tr.appendChild(td);tbody.appendChild(tr);self.calendar.appendChild(tbody);addEventHandler(self.calendar,'mouseover',cal_onmouseover);addEventHandler(self.calendar,'mouseout',cal_onmouseout);}function createMainHeading(){var container=document.createElement('div');setClass(container,'mainheading');self.monthSelect=document.createElement('select');self.yearSelect=document.createElement('select');var monthDn=document.createElement('input'),monthUp=document.createElement('input');var opt_tmp=document.createElement('option'),opt,i;for(i=0;i<12;i++){opt=opt_tmp.cloneNode(false);opt.setAttribute('value',i);self.displayMonth==i?opt.setAttribute('selected','selected'):opt.removeAttribute('selected');opt.appendChild(document.createTextNode(self.months_sh[i]));self.monthSelect.appendChild(opt);}var yrMax=self.maxDate.getFullYear(),yrMin=self.minDate.getFullYear();for(i=yrMin;i<=yrMax;i++){opt=opt_tmp.cloneNode(false);opt.setAttribute('value',i);self.displayYear==i?opt.setAttribute('selected','selected'):opt.removeAttribute('selected');opt.appendChild(document.createTextNode(i));self.yearSelect.appendChild(opt);}monthUp.setAttribute('type','button');monthUp.setAttribute('value','>');monthUp.setAttribute('title',self.monthup_title);monthDn.setAttribute('type','button');monthDn.setAttribute('value','<');monthDn.setAttribute('title',self.monthdn_title);self.monthSelect.owner=self.yearSelect.owner=monthUp.owner=monthDn.owner=self;function selectonchange(){if(self.goToMonth(self.yearSelect.value,self.monthSelect.value)){self.displayMonth=self.monthSelect.value;self.displayYear=self.yearSelect.value;}else{self.monthSelect.value=self.displayMonth;self.yearSelect.value=self.displayYear;}}addEventHandler(monthUp,'click',function(){self.nextMonth();});addEventHandler(monthDn,'click',function(){self.prevMonth();});addEventHandler(self.monthSelect,'change',selectonchange);addEventHandler(self.yearSelect,'change',selectonchange);container.appendChild(monthDn);container.appendChild(self.monthSelect);container.appendChild(self.yearSelect);container.appendChild(monthUp);return container;}function createFooter(){var container=document.createElement('div');var clearSelected=document.createElement('input');clearSelected.setAttribute('type','button');clearSelected.setAttribute('value',self.clearbtn_caption);clearSelected.setAttribute('title',self.clearbtn_title);clearSelected.owner=self;addEventHandler(clearSelected,'click',function(){self.resetSelections(false);});if(self.mode=='popup'){var closeBtn=document.createElement('input');closeBtn.setAttribute('type','button');closeBtn.setAttribute('value',self.closebtn_caption);closeBtn.setAttribute('title',self.closebtn_title);addEventHandler(closeBtn,'click',function(){self.hide();});setClass(closeBtn,'closeBtn');container.appendChild(closeBtn);}return container;}function createDayHeading(){self.calHeading=document.createElement('thead');setClass(self.calHeading,'caldayheading');var tr=document.createElement('tr'),th_tmp=document.createElement('th'),th;self.cols=new Array(false,false,false,false,false,false,false);if(self.showWeeks){th=th_tmp.cloneNode(false);setClass(th,'wkhead');tr.appendChild(th);}for(var dow=0;dow<7;dow++){th=th_tmp.cloneNode(false);th.appendChild(document.createTextNode(self.daynames[dow]));if(self.selectMultiple){th.headObj=new CalHeading(self,th,(dow+self.startDay<7?dow+self.startDay:dow+self.startDay-7));}tr.appendChild(th);}self.calHeading.appendChild(tr);return self.calHeading;}function createCalCells(){self.rows=new Array(false,false,false,false,false,false);self.cells=new Array();var row=-1,totalCells =(self.showWeeks?48:42);var beginDate=new Date(self.displayYear,self.displayMonth,1);var endDate=new Date(self.displayYear,self.displayMonth,self.monthDayCount[self.displayMonth]);var sdt=new Date(beginDate);sdt.setDate(sdt.getDate()+(self.startDay-beginDate.getDay())-(self.startDay-beginDate.getDay()> 0?7:0));self.calCells=document.createElement('tbody');var tr_tmp=document.createElement('tr'),td_tmp=document.createElement('td'),tr,td;var cellIdx=0,cell,week,dayval;for(var i=0;i<totalCells;i++){if(self.showWeeks){if(i%8==0){row++;week=sdt.getWeek(self.startDay);tr=tr_tmp.cloneNode(false);td=td_tmp.cloneNode(false);self.selectMultiple?td.weekObj=new WeekHeading(self,td,week,row):setClass(td,'wkhead');td.appendChild(document.createTextNode(week));tr.appendChild(td);i++;}}else if(i%7==0){row++;week=sdt.getWeek(self.startDay);tr=tr_tmp.cloneNode(false);}dayval=sdt.getDate();td=td_tmp.cloneNode(false);td.appendChild(document.createTextNode(dayval));cell=new CalCell(self,td,sdt,row,week);self.cells[cellIdx]=cell;td.cellObj=cell;tr.appendChild(td);self.calCells.appendChild(tr);self.reDraw(cellIdx++);sdt.setDate(dayval+1);}return self.calCells;}function setMode(targetelement){if(self.mode=='popup'){self.calendar.style.position='absolute';}if(targetelement){switch(self.mode){case 'flat':self.tgt=targetelement;self.tgt.appendChild(self.calendar);self.visible=true;break;case 'popup':self.calendar.style.position='absolute';document.body.appendChild(self.calendar);self.setTarget(targetelement,false);break;}}else{document.body.appendChild(self.calendar);self.visible=false;}}function deleteCells(){self.calendar.celltable.removeChild(self.calendar.celltable.childNodes[1]);}function setClass(element,className){element.setAttribute('class',className);element.setAttribute('className',className);}function setCellProperties(cellindex){var cell=self.cells[cellindex];var date;idx=self.dateInArray(self.dates,cell.date);if(idx>-1){date=self.dates[idx];cell.date.selected=date.selected||false;cell.date.type=date.type;cell.date.canSelect=date.canSelect;cell.setTitle(date.title);cell.setURL(date.href);cell.setHTML(date.cellHTML);}else{cell.date.selected=false;}if(cell.date.getTime()< self.minDate.getTime()|| cell.date.getTime()> self.maxDate.getTime()){cell.date.canSelect=false;}cell.setClass();}function cal_onmouseover(){self.mousein=true;}function cal_onmouseout(){self.mousein=false;}function initXML(xml){try{self.xmlParser=new ActiveXObject('Microsoft.XMLDOM');self.domType='ie';}catch(E){self.xmlParser=new DOMParser();self.domType='mz';}if(xml){processXML(xml,true);}}function processXML(xml,init){var dateRegExp=new RegExp('(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)');var xmlobj;function tagVal(parent,tagName){var tag=parent.getElementsByTagName(tagName);return tag.length?tag[0].firstChild.nodeValue:null;}function tagHnd(parent,tagName){return parent?parent.getElementsByTagName(tagName)[0]:null;}if(typeof(xml)== 'string'){switch(self.domType){case 'ie':xmlobj=self.xmlParser;xmlobj.loadXML(xml);break;case 'mz':xmlobj=self.xmlParser.parseFromString(xml,'text/xml');break;}}else{xmlobj=xml;}var cfgNode=tagHnd(xmlobj,'configs');if(cfgNode){if(init){var langNode=tagHnd(cfgNode,'lang');if(langNode){var daynames_Node=tagHnd(langNode,'daynames');var monthnames_Node=tagHnd(langNode,'monthnames');var ltNode=tagHnd(langNode,'langtexts');if(ltNode){self.clearbtn_caption=tagVal(ltNode,'clearbtn_caption')|| self.clearbtn_caption;self.maxrange_caption=tagVal(ltNode,'maxrange_caption')|| self.maxrange_caption;self.closebtn_caption=tagVal(ltNode,'closebtn_caption')|| self.closebtn_caption;self.monthup_title=tagVal(ltNode,'monthup_title')|| self.monthup_title;self.monthdn_title=tagVal(ltNode,'monthdn_title')|| self.monthdn_title;self.clearbtn_title=tagVal(ltNode,'clearbtn_title')|| self.clearbtn_title;self.closebtn_title=tagVal(ltNode,'closebtn_title')|| self.closebtn_title;}if(daynames_Node){self.daylist=new Array();for(var i=0;i<7;i++){self.daylist[i]=daynames_Node.childNodes[i].getAttribute('sh');self.daylist[i+7]=self.daylist[i];}}if(monthnames_Node){self.months_sh=new Array();for(var i=0;i<12;i++){self.months_sh[i]=months_shNode.childNodes[i].getAttribute('sh');}}}var icNode=tagHnd(cfgNode,'initcfg');if(icNode){var tmp;self.name=tagVal(icNode,'name')|| self.name;self.mode=tagVal(icNode,'mode')|| self.mode;tmp=tagVal(icNode,'multiselect');if(tmp){self.selectMultiple =(tmp=='yes');}if(self.mode=='popup'){self.selectMultiple=false;}tmp=tagVal(icNode,'startday');if(tmp){self.startDay=parseInt(tmp);}tmp=tagVal(icNode,'showweeks');if(tmp){self.showWeeks =(tmp=='yes');}tmp=tagVal(icNode,'selcurmonthonly');if(tmp){self.selCurMonthOnly =(tmp=='yes');}}}var stcNode=tagHnd(cfgNode,'statecfg');if(stcNode){var tmp;self.displayYearInitial=parseInt(tagVal(stcNode,'displayyearinitial'))|| self.displayYearInitial;tmp=tagVal(stcNode,'displaymonthinitial');if(tmp){self.displayMonthInitial=parseInt(tmp)- 1;}self.displayYear=parseInt(tagVal(stcNode,'displayyear'))|| self.displayYear;tmp=tagVal(stcNode,'displaymonth');if(tmp){self.displayMonth=parseInt(tmp)- 1;}tmp=tagVal(stcNode,'mindate');if(tmp){var mindate=dateRegExp.exec(tmp);self.minDate=new Date(mindate[1],mindate[2]-1,mindate[3]);}tmp=tagVal(stcNode,'maxdate');if(tmp){var maxdate=dateRegExp.exec(tmp);self.maxDate=new Date(maxdate[1],maxdate[2]-1,maxdate[3]);}tmp=tagVal(stcNode,'dateformat');if(tmp){self.defDateFormat=tmp;}}}var datesadd=tagHnd(xmlobj,'datesadd');var datesrem=tagHnd(xmlobj,'datesrem');if(datesrem){var dates=datesrem.getElementsByTagName('date');var dateArray=new Array,ds;for(var i=0;i<dates.length;i++){ds=dateRegExp.exec(dates[i].getAttribute('value'));dateArray[i]=new Date(ds[1],ds[2]-1,ds[3]);}self.removeDates(dateArray,false);}if(datesadd){var dates=datesadd.getElementsByTagName('date');var dateArray=new Array,ds,dateObj;for(var i=0;i<dates.length;i++){ds=dateRegExp.exec(dates[i].getAttribute('value'));dateObj=new Date(ds[1],ds[2]-1,ds[3]);dateObj.type=dates[i].getAttribute('type')|| 'normal';dateObj.title=dates[i].getAttribute('title')|| '';dateObj.href=dates[i].getAttribute('href')|| '';var selected=dates[i].getAttribute('selected');dateObj.canSelect=dateObj.selected=true;try{switch(selected){case 'disabled':dateObj.canSelect=dateObj.selected=false;break;case 'no':dateObj.selected=false;break;default:if(selected&&selected!='yes'){dateObj.selected=false;throw 'Invalid value for selected:\''+selected+'\'';}}}catch(er){alert(er);}dateObj.cellHTML=dates[i].firstChild?dates[i].firstChild.nodeValue:'';dateArray[dateArray.length]=dateObj;}self.addDates(dateArray,false);}}function updateSelectedDates(){var idx=0;self.selectedDates=new Array();for(i=0;i<self.dates.length;i++){if(self.dates[i].selected){self.selectedDates[idx++]=self.dates[i];}}}self.dateInArray=function(arr,searchVal,startIndex){startIndex =(startIndex!=null?startIndex:0);for(var i=startIndex;i<arr.length;i++){if(searchVal.getUeDay()== arr[i].getUeDay()){return i;}}return -1;};self.setTarget=function(targetelement,focus){if(self.mode=='popup'){function popupFocus(){self.show();}function popupBlur(){if(!self.mousein){self.hide();}}function popupKeyDown(){self.hide();}if(self.tgt){removeEventHandler(self.tgt,'focus',popupFocus);removeEventHandler(self.tgt,'blur',popupBlur);removeEventHandler(self.tgt,'keydown',popupKeyDown);}self.tgt=targetelement;var dto=self.tgt.dateObj,pdateArr=new Array;if(dto){if(self.tgt.value.length){pdateArr[0]=dto;}self.goToMonth(dto.getFullYear(),dto.getMonth());}self.selectDates(pdateArr,true,true,true);self.topOffset=self.tgt.offsetHeight;self.leftOffset=0;self.updatePos(self.tgt);addEventHandler(self.tgt,'click',popupFocus);addEventHandler(self.tgt,'blur',popupBlur);addEventHandler(self.tgt,'keydown',popupKeyDown);if(focus!==false){popupFocus();}}else{if(self.tgt){self.tgt.removeChild(self.calendar);}self.tgt=targetelement;self.tgt.appendChild(self.calendar);self.show();}};self.nextMonth=function(){var month=self.displayMonth;var year=self.displayYear;if(self.displayMonth<11){month++;}else if(self.yearSelect.value<self.maxDate.getFullYear()){month=0;year++;}return self.goToMonth(year,month);};self.prevMonth=function(){var month=self.displayMonth;var year=self.displayYear;if(self.displayMonth>0){month--;}else{month=11;year--;}return self.goToMonth(year,month);};self.goToMonth=function(year,month){var testdatemin=new Date(year,month,31);var testdatemax=new Date(year,month,1);if(testdatemin>=self.minDate&&testdatemax<=self.maxDate){self.monthSelect.value=self.displayMonth=month;self.yearSelect.value=self.displayYear=year;createCalCells();deleteCells();self.calendar.celltable.appendChild(self.calCells);return true;}else{alert(self.maxrange_caption);return false;}};self.updatePos=function(target){if(self.mode=='popup'){}};self.show=function(){self.updatePos(self.tgt);self.calendar.style.display='block';self.visible=true;};self.hide=function(){self.calendar.style.display='none';self.visible=false;};self.toggle=function(){self.visible?self.hide():self.show();};self.addDates=function(dates,redraw){for(var i=0;i<dates.length;i++){if(self.dateInArray(self.dates,dates[i])== -1){self.dates[self.dates.length]=dates[i];}}updateSelectedDates();if(redraw!=false){self.reDraw();}};self.removeDates=function(dates,redraw){var idx;for(var i=0;i<dates.length;i++){idx=self.dateInArray(self.dates,dates[i]);if(idx!=-1){self.dates.splice(idx,1);}}updateSelectedDates();if(redraw!=false){self.reDraw();}};self.selectDates=function(inpdates,selectVal,redraw,removeothers){var idx;if(removeothers==true){for(var i=0;i<self.dates.length;i++){self.dates[i].selected=false;}}for(var i=0;i<inpdates.length;i++){idx=self.dateInArray(self.dates,inpdates[i]);if(selectVal==true){inpdates[i].selected=true;if(idx==-1){self.dates[self.dates.length]=inpdates[i];}else{self.dates[idx].selected=true;}}else{if(idx>-1){self.dates[idx].selected=inpdates[i].selected=false;if(self.dates[idx].type=='normal'){self.dates.splice(idx,1);}}}}updateSelectedDates();if(self.mode=='popup'&&self.selectedDates.length){self.tgt.value=self.selectedDates[0].getTime();changeDate();}if(redraw!=false){self.reDraw();}};self.sendForm=function(form,inputname){var inpname=inputname||'epochdates',f,inp;f =(typeof(form)== 'string'?document.getElementById(form):form);if(!f){alert('ERROR:Invalid form input');return false;}for(var i=0;i<self.dates.length;i++){if(self.dates[i].selected){inp=document.createElement('input');inp.setAttribute('type','hidden');inp.setAttribute('name',inpname+'['+i+']');inp.setAttribute('value',encodeURIComponent(self.dates[i].dateFormat('Y-m-d')));f.appendChild(inp);}}return true;};self.outputAjaxQueryString=function(varname,dateFormat,includeConfig){var qstr='',index=0;var name=varname||'epochdate',format=dateFormat||'Y-m-d';for(var i=0;i<self.dates.length;i++){if(self.dates[i].selected==true){qstr += name +'['+(index++)+']='+ encodeURIComponent(self.dates[i].dateFormat(format))+(self.dates[i+1]?'&':'');}}if(includeConfig===true){qstr += '&'+self.name+'_displayyearinitial='+self.displayYearInitial;qstr += '&'+self.name+'_displaymonthinitial=' +(self.displayMonthInitial+1);qstr += '&'+self.name+'_displayyear='+self.displayYear;qstr += '&'+self.name+'_displaymonth=' +(self.displayMonth+1);qstr += '&'+self.name+'_mindate='+encodeURIComponent(self.minDate.dateFormat(format));qstr += '&'+self.name+'_maxdate='+encodeURIComponent(self.maxDate.dateFormat(format));}return qstr;};self.importXML=function(xmldata){processXML(xmldata,false);self.goToMonth(self.displayYear,self.displayMonth);};self.exportXML=function(){var dt,selected;var xml='<?xml version="1.0" encoding="UTF-8"?>\n<importdata>\n';xml += ' <configs>\n  <statecfg>\n';xml += '   <displayyearinitial>'+self.displayYearInitial+'</displayyearinitial>\n';xml += '   <displaymonthinitial>' +(self.displayMonthInitial+1)+ '</displaymonthinitial>\n';xml += '   <displayyear>'+self.displayYear+'</displayyear>\n';xml += '   <displaymonth>' +(self.displayMonth+1)+ '</displaymonth>\n';xml += '   <mindate>'+self.minDate.dateFormat('Y-m-d')+ '<mindate>\n';xml += '   <maxdate>'+self.maxDate.dateFormat('Y-m-d')+ '<maxdate>\n';xml += '  </statecfg>\n  </configs>\n';xml += ' <datesadd>\n';for(var i=0;i<self.dates.length;i++){dt=self.dates[i];selected =(dt.selected?'yes':(dt.canSelect?'no':'disabled'));xml += '  <date value="'+dt.dateFormat('Y-m-d')+(dt.type.length?'" type="' +dt.type +'"':'')+(dt.title?' title="'+dt.title+'"':'')+' selected="'+selected +'">' +(dt.cellHTML?'<![CDATA[' +dt.cellHTML +']]>':'')+ '</date>\n';}xml += ' </datesadd>\n';xml += '</importdata>\n';return xml;};self.resetSelections=function(retMonth){var dateArray=new Array();var dt=self.dates;for(var i=0;i<dt.length;i++){if(dt[i].selected){dateArray[dateArray.length]=dt[i];}}self.selectDates(dateArray,false,false);self.rows=new Array(false,false,false,false,false,false,false);self.cols=new Array(false,false,false,false,false,false,false);if(self.mode=='popup'){self.tgt.value='';self.hide();}retMonth==true?self.goToMonth(self.displayYearInitial,self.displayMonthInitial):self.reDraw();};self.reDraw=function(index){self.state=1;var len=index?index+1:self.cells.length;for(var i=index||0;i<len;i++){setCellProperties(i);}self.state=2;};self.getCellIndex=function(date){for(var i=0;i<self.cells.length;i++){if(self.cells[i].date.getUeDay()== date.getUeDay()){return i;}}return -1;};self.versionNumber='2.0.0';self.state=0;self.curDate=new Date();self.dates=new Array();self.selectedDates=new Array();self.calendar;self.calHeading;self.calCells;self.rows;self.cols;self.cells=new Array();self.monthSelect;self.yearSelect;self.mousein=false;calConfig();setLang();initXML(xmlconfig);setDays();createCalendar();setMode(targetelement);self.state=2;self.visible?self.show():self.hide();}function CalHeading(owner,tableCell,dayOfWeek){function DayHeadingonclick(){var sdates=owner.dates;var cells=owner.cells;var dateArray=new Array();owner.cols[dayOfWeek]=!owner.cols[dayOfWeek];for(var i=0;i<cells.length;i++){if(cells[i].dayOfWeek==dayOfWeek&&cells[i].date.canSelect &&(!owner.selCurMonthOnly||cells[i].date.getMonth()== owner.displayMonth&&cells[i].date.getFullYear()== owner.displayYear)){dateArray[dateArray.length]=cells[i].date;}}owner.selectDates(dateArray,owner.cols[dayOfWeek],true);}var self=this;self.dayOfWeek=dayOfWeek;addEventHandler(tableCell,'mouseup',DayHeadingonclick);}function WeekHeading(owner,tableCell,week,tableRow){function weekHeadingonclick(){var cells=owner.cells;var sdates=owner.dates;var dateArray=new Array();owner.rows[tableRow]=!owner.rows[tableRow];for(var i=0;i<cells.length;i++){if(cells[i].tableRow==tableRow&&cells[i].date.canSelect &&(!owner.selCurMonthOnly||cells[i].date.getMonth()== owner.displayMonth&&cells[i].date.getFullYear()== owner.displayYear)){dateArray[dateArray.length]=cells[i].date;}}owner.selectDates(dateArray,owner.rows[tableRow],true);}var self=this;self.week=week;tableCell.setAttribute('class','wkhead');tableCell.setAttribute('className','wkhead');addEventHandler(tableCell,'mouseup',weekHeadingonclick);}function CalCell(owner,tableCell,dateObj,row,week){var self=this;function calCellonclick(){if(self.date.canSelect){if(owner.selectMultiple==true){owner.selectDates(new Array(self.date),!self.date.selected,false);self.setClass();}else{owner.selectDates(new Array(self.date),true,false,true);if(owner.mode=='popup'){owner.tgt.dateObj=new Date(self.date);owner.hide();}owner.reDraw();}}}function calCellonmouseover(){if(self.date.canSelect){tableCell.setAttribute('class',self.cellClass+' hover');tableCell.setAttribute('className',self.cellClass+' hover');}}function calCellonmouseout(){self.setClass();}self.setClass=function(){if(self.date.canSelect!==false){if(self.date.selected){self.cellClass='cell_selected';}else if(owner.displayMonth!=self.date.getMonth()){self.cellClass='notmnth';}else if(self.date.type=='holiday'){self.cellClass='hlday';}else if(self.dayOfWeek>0&&self.dayOfWeek<6){self.cellClass='wkday';}else{self.cellClass='wkend';}}else{self.cellClass='noselect';}if(self.date.getUeDay()== owner.curDate.getUeDay()){self.cellClass=self.cellClass+' curdate';}tableCell.setAttribute('class',self.cellClass);tableCell.setAttribute('className',self.cellClass);};self.setURL=function(href,type){if(href){if(type=='js'){addEventHandler(self.tableCell,'mousedown',function(){window.location.href=href;});}else{var url=document.createElement('a');url.setAttribute('href',href);url.appendChild(document.createTextNode(self.date.getDate()));self.tableCell.replaceChild(url,self.tableCell.firstChild);}}};self.setTitle=function(titleStr){if(titleStr&&titleStr.length>0){self.title=titleStr;self.tableCell.setAttribute('title',titleStr);}};self.setHTML=function(html){if(html&&html.length>0){if(self.tableCell.childNodes[1]){self.tableCell.childNodes[1].innerHTML=html;}else{var htmlCont=document.createElement('div');htmlCont.innerHTML=html;self.tableCell.appendChild(htmlCont);}}};self.cellClass;self.tableRow=row;self.tableCell=tableCell;self.date=new Date(dateObj);self.date.canSelect=true;self.date.type='normal';self.date.selected=false;self.date.cellHTML='';self.dayOfWeek=self.date.getDay();self.week=week;addEventHandler(tableCell,'click',calCellonclick);addEventHandler(tableCell,'mouseover',calCellonmouseover);addEventHandler(tableCell,'mouseout',calCellonmouseout);self.setClass();}Date.prototype.getDayOfYear=function(){return parseInt((this.getTime()- new Date(this.getFullYear(),0,1).getTime())/86400000+1);};Date.prototype.getWeek=function(dowOffset){dowOffset=typeof(dowOffset)== 'int'?dowOffset:0;var newYear=new Date(this.getFullYear(),0,1);var day=newYear.getDay()- dowOffset;day =(day>=0?day:day+7);var weeknum,daynum=Math.floor((this.getTime()- newYear.getTime()-(this.getTimezoneOffset()-newYear.getTimezoneOffset())*60000)/86400000)+ 1;if(day<4){weeknum=Math.floor((daynum+day-1)/7)+ 1;if(weeknum>52){nYear=new Date(this.getFullYear()+ 1,0,1);nday=nYear.getDay()- dowOffset;nday=nday>=0?nday:nday+7;weeknum=nday<4?1:53;}}else{weeknum=Math.floor((daynum+day-1)/7);}return weeknum;};Date.prototype.getUeDay=function(){return parseInt(Math.floor((this.getTime()- this.getTimezoneOffset()* 60000)/86400000));};Date.prototype.dateFormat=function(format){if(!format){format='d.m.Y';}LZ=function(x){return(x<0||x>9?'':'0')+ x};var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');var result="";var i_format=0;var c="";var token="";var y=this.getFullYear().toString();var M=this.getMonth()+1;var d=this.getDate();var E=this.getDay();var H=this.getHours();var m=this.getMinutes();var s=this.getSeconds();value ={Y:y.toString(),y:y.substring(2),n:M,m:LZ(M),F:MONTH_NAMES[M-1],M:MONTH_NAMES[M+11],j:d,d:LZ(d),D:DAY_NAMES[E+7],l:DAY_NAMES[E],G:H,H:LZ(H)};if(H==0){value['g']=12;}else if(H>12){value['g']=H-12;}else{value['g']=H;}value['h']=LZ(value['g']);if(H>11){value['a']='pm';value['A']='PM';}else{ value['a']='am';value['A']='AM';}value['i']=LZ(m);value['s']=LZ(s);while(i_format<format.length){c=format.charAt(i_format);token="";while((format.charAt(i_format)==c)&&(i_format<format.length)){token += format.charAt(i_format++);}if(value[token]!=null){ result=result+value[token];}else{ result=result+token;}}return result;};function addEventHandler(element,type,func){if(element.addEventListener){element.addEventListener(type,func,false);}else if(element.attachEvent){element.attachEvent('on'+type,func);}}function removeEventHandler(element,type,func){if(element.removeEventListener){element.removeEventListener(type,func,false);}else if(element.attachEvent){element.detachEvent('on'+type,func);}}function getTop(element){var oNode=element;var iTop=0;while(oNode.tagName!='HTML'){iTop += oNode.offsetTop||0;if(oNode.offsetParent){oNode=oNode.offsetParent;}else{break;}}return iTop;}function getLeft(element){var oNode=element;var iLeft=0;while(oNode.tagName!='HTML'){iLeft += oNode.offsetLeft||0;if(oNode.offsetParent){oNode=oNode.offsetParent;}else{break;}}return iLeft;}
var overlay=null;
var overlay2=null;
var windOverlay=null;
var map=null;
var mylat=41.;
var mylon=-112.;
var myzoom=8;
var latlng;
var currentLayer='xclift225';
var model = 'gfs';
var yyyymmdd_ff='';
var yyyymmdd_fflast='';
var load_yyyymmdd_ff='';
var myoffset=0;
var useTZO=1;
var daysBack=0;
var tileType=1;//2=256 tiles
var imPort = '8096';
var pid='';
var pidname='';

var vegTypeNames = ['','Urban and Built-Up Land','Dryland Cropland and Pasture','Irrigated Cropland and Pasture','Mixed Dryland/Irrigated Cropland and Pasture','Cropland/Grassland Mosaic','Cropland/Woodland Mosaic','Grassland','Shrubland','Mixed Shrubland/Grassland','Savanna','Deciduous Broadleaf Forest','Deciduous Needleleaf Forest','Evergreen Broadleaf Forest','Evergreen Needleleaf Forest','Mixed Forest','Water Bodies','Herbaceous Wetland','Wooded Wetland','Barren or Sparsely Vegetated','Herbaceous Tundra','Wooded Tundra','Mixed Tundra','Bare Ground Tundra','Snow or Ice'];
var colorBars = ['m3_colorbar','m3_colorbar','m3_colorbar','m0uncert_colorbar','wstar_colorbar','bs_colorbar','xcpot_written_colorbar','cape_colorbar','liftidx_colorbar','m3_colorbar','cloudtype_colorbar','skycond_colorbar','skycond_colorbar','skycond_colorbar','precip_colorbar','rh_colorbar','wspdm3_colorbar','wspdm3_colorbar','sfctemps_colorbar','sflux_colorbar','mslp_colorbar'];
var allParams = ['xclift225','xcbldepth','xcm0','xcuncert','xcwstar','xcbs','xcpot','xccape','xcliftidx','xccbase','xccdepth','xcskycond','xcskycondnohigh','xcskycondcnv','xcprecip','xcrhavg','xcwspd225','xcgust','xcstemp','xcsflux','xcslpress'];
var allParamNames = ['Top of usable lift','Lift above ground','Thermal tops','Thermal top uncertainty','Updraft velocity (average)','Buoyancy to shear ratio','XC Potential','CAPE','Lifted index','Cloud base','Cloud depth','Cloud cover','Cloud cover without high','Cloud cover (convective)','Precipitation','RH Avg. in BL','Wind speed at top of usable lift','Surface gust','Surface temps','Surface heat flux','Mean sea level pressure'];
var paramCBType = ['h','h','h','h','l','','','','','h','h','','','','p','','w','w','t','','ps',''];
var paramGroup =[0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,2,2,2];
var GFSParams = [1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1];
var NAMParams = [1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1];
var RUCParams = [1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1];
var groupColors = ['#DFDFA5','#A5C8DF','#BCDFA5','#FFFF99','#FFCCFF'];
var paramHeaders = ['Thermal / Lift','Cloud / Weather','Wind / Surface','',''];
var paramHelp = ['http://www.xcskies.com/science/products/xcmap/docs#thermal','http://www.xcskies.com/science/products/xcmap/docs#cloud','http://www.xcskies.com/science/products/xcmap/docs#surface','',''];
var routePlotNames={lift:'Lift / Temp',ti:'Thermal Index',dp:'Cloud / Dew Point',rh:'Relative Humidity',vel:'Vertical Velocity',wind:'Winds'};
var cbidx=-1;
var colorunit = '';
var windLabel = '';
var tLayers=0;
var routeMarkers = [];
var polyRoute=null;
var routeP=0;
var rt=false;
var pt=false;
var routeListener;
var d3Listener;
var d3Marker=null;
var d3infowindow;
var mcolor='#ebebeb';
var tcolor='yellow';
var currentSid='';
var togObj={sktog:0,pttog:0,rttog:0,hdtog:0}
var dynLayer = 'xccape,xcskycond,xcskycondnohigh,xcprecip,xcslpress,xcgust,xcliftidx,';
var currentProfileId;
var noFF = "alert(\'Forecast not available for this hour.\');";
var routeW = '600px';
var routeIW = '600px';//475
var routeIWD = '465';//475
var routeIH = '300px';//270
var pointW = '700px';
var pointIW = '700px';//475
var pointIH = '480px';//270
var old3Day=false;
var cloudmade;
var popup;
//ol
var proj;
var markerLayer;
latlng = new OpenLayers.LonLat(mylon,mylat);
var d3Point=null;
var mapPoint=null;
var skewTPoint=null;
var draggablePt;
var draggableRt;
var polyLayer;
var dragFeaturePt=null;
var dragFeatureRt=null;
var trackMarker;
var trackLayer;
var layerControl;
var lyrBaseClear;
var osm3,osm1,osm4,osm2,xcterrain,arcsat;
var tipobj;
var mapClickListener;
var is_webkit = false;

document.getElementsByClassName = function(cl) {var retnode = [];var myclass = new RegExp('\\b'+cl+'\\b');var elem = this.getElementsByTagName('*');for (var i = 0; i < elem.length; i++) {var classes = elem[i].className;if (myclass.test(classes)) retnode.push(elem[i]);}return retnode;};
if(ua.toLowerCase().indexOf('webkit') > -1 ){is_webkit=true}
function initialize() {
	var isIE6 = (ua.toLowerCase().indexOf('msie 6') != -1 && ua.toLowerCase().indexOf('msie 8') < 0);
	if(isIE6){alert('Your browser appears to be Internet Explorer 6. XC Skies no longer supports this browser. Please upgrade to IE7 or IE8. Thanks.');return;}
	if(useTZO==1){setBrowserTZO();}
	deviceSetup();
	//OpenLayers.Util.onImageLoadErrorColor = "#99B3CC";
	OpenLayers.ImgPath = "/javascript/ol_themes/dark/";
	OpenLayers.Util.onImageLoadError = function(){if(this.src.indexOf('cloudmade')==-1){this.src='/public/tiles/none.jpg';}}
	OpenLayers.Tile.Image.useBlankTile=false;
	OpenLayers.Util.IMAGE_RELOAD_ATTEMPTS=2;	
	proj = new OpenLayers.Projection("EPSG:4326");
	var extent = new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34);
	map = new OpenLayers.Map("map_canvas", {
		maxExtent: extent,
		eventListeners: {"zoomend": zoomEvent },
		restrictedExtent: extent,
		maxResolution:156543.0339,
		maxZoomLevel: 13,
		numZoomLevels: 14,
		units:'m',
		projection: new OpenLayers.Projection("EPSG:900913"),
		displayProjection: new OpenLayers.Projection("EPSG:4326"),
		controls: [new OpenLayers.Control.Navigation({'handleRightClicks':true}), new OpenLayers.Control.PanZoomBar(), new OpenLayers.Control.ScaleLine(),new OpenLayers.Control.MousePosition()]
		}
		);
		var attrib=new OpenLayers.Control.Attribution();
		attrib.draw=function(){OpenLayers.Control.prototype.draw.apply(this, arguments); OpenLayers.Control.prototype.draw.apply(this, arguments); 
			this.div.style.fontSize="8pt"; 
			this.div.style.right="3px"; 
			this.div.style.bottom="1.5em"; 
			this.div.style.position="absolute"; 
			this.map.events.register('changelayer', this, this.updateAttribution); 
			this.map.events.register('changebaselayer', this, this.updateAttribution); 
			return this.div; }
	map.addControl(attrib);
	xcterrain = new OpenLayers.Layer.XYZ(
	    "Terrain",
	    ["http://tiles.xcskies.s3.amazonaws.com/terrain/${z}/${x}_${y}.jpg"],
	    {'buffer': 0,'sphericalMecator':true}
	);
	
	osm1 = new OpenLayers.Layer.OSM(
	    "Map",
	    ["http://a.tile.openstreetmap.org/${z}/${x}/${y}.png",
	    "http://b.tile.openstreetmap.org/${z}/${x}/${y}.png"],
	    {'buffer': 0}
	);
    osm4 = new OpenLayers.Layer.OSM(
	    "Contours",
	    ["http://a.andy.sandbox.cloudmade.com/tiles/cycle/${z}/${x}/${y}.png",
	    "http://b.andy.sandbox.cloudmade.com/tiles/cycle/${z}/${x}/${y}.png"],
	    {'buffer': 0}
	);
	cloudmade = new OpenLayers.Layer.CloudMade("Roads Overlay", {
    	key: 'e32215604ae446f8b9132807dcc071ee',
    	styleId: 11706,
    	styleId2: 13079,
    	isBaseLayer: false
	});
	arcsat = new OpenLayers.Layer.OSM(
        "Satellite",
        "http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/${z}/${y}/${x}.jpg",
        {'buffer': 0}
    );
    
	map.addLayer(cloudmade);
		
	lyrBaseClear = new OpenLayers.Layer.Image(
		"None",
		'/images/clear_block.gif',
		new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
		new OpenLayers.Size(8, 8),
		{isBaseLayer: true,maxResolution: 156543.0339});
	
	map.addLayers([xcterrain,arcsat,osm1,osm4,lyrBaseClear]);
	map.setBaseLayer(xcterrain);
	
	layerControl = new OpenLayers.Control.LayerSwitcher();
	map.addControl(layerControl);
	d3Listener = new OpenLayers.Control.ClickPoint();
	map.addControl(d3Listener);
	skewTListener = new OpenLayers.Control.ClickSkewT();
	map.addControl(skewTListener);
	routeListener = new OpenLayers.Control.ClickRoute();
	map.addControl(routeListener);
	mapClickListener = new OpenLayers.Control.ClickMap();
	map.addControl(mapClickListener);
	endInit();
	highlightName('trans');
	resizeMap();
	tipobj=document.getElementById("dhtmltooltip");
	document.onmousemove=positiontip;
	OpenLayers.Event.observe(document.getElementById('mapTop'),"click", function(evt) {var e = evt ? evt : window.event;OpenLayers.Event.stop(e);return false;});

}
function zoomEvent(){if (map.getZoom()<=2){map.zoomTo(2)}}
function markMap(o){
	var m = document.getElementsByName('mapLayer');
	for (var i = 0; i < m.length; i++) {
		m[i].className='layerOff';
	}
	o.parentNode.className='layerOn';
	if(is_webkit){webkitfix()}
}

function mapClick(ll){
	removeMapPoint();
	if(draggablePt){map.removeLayer(draggablePt);}
	//currentSid='';
	draggablePt = new OpenLayers.Layer.Vector(
		"Marker",
		{
		    styleMap: new OpenLayers.StyleMap({
		        externalGraphic:
		            "/images/marker.png",
		        pointRadius: 15
		    })
		}
	);
    map.addLayer(draggablePt);
    mapPoint=new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(ll.lon, ll.lat));
	mapPoint.ll=ll;
	draggablePt.addFeatures([mapPoint]);
    dragFeaturePt = new OpenLayers.Control.DragFeature(draggablePt,{onComplete: function(f,p){
	    currentSid='';
	    var ll = map.getLonLatFromPixel(p); 
	    f.ll=ll;
	    if(popup){map.removePopup(popup);popup=null;}
	    makeClickPopup(ll);
	}});
	map.addControl(dragFeaturePt);
	dragFeaturePt.activate();
	makeClickPopup(ll);
	
}
function makeClickPopup(ll){
	var html = '<div class="popOptH">Options for this Point</div>';
	html+='<div class="popOpt"><div>&bull; <a href="javascript:void(0)" onclick="old3Day=false;togglePoint();placeMarker(mapPoint.ll);removeMapPoint();plotPoint();">Get 3 day point forecast (new).</a></div>';
	html+='<div>&bull; <a href="javascript:void(0)" onclick="old3Day=true;togglePoint();placeMarker(mapPoint.ll);removeMapPoint();plotPoint();">Get 3 day point forecast (orig).</a></div>';
	html+='<div>&bull; <a href="javascript:void(0)" onclick="toggleRoute();routeNode(mapPoint.ll);removeMapPoint();">Start a route here.</a></div>';
	html+='<div>&bull; <a href="javascript:void(0)" onclick="toggleSkewT();skewTMarker(mapPoint.ll);removeMapPoint();callSkewT();">Get Skew-T for here.</a></div>';
	html+='<br><div><a href="javascript:void(0)" onclick="removeMapPoint()">Remove this marker</a></div></div>';
	popup = new OpenLayers.Popup("Options",
           ll,
           new OpenLayers.Size(200,200),
           html,
           true);
	map.addPopup(popup);
}
function removeMapPoint(){
	if (mapPoint){
		draggablePt.destroyFeatures([mapPoint]);
		if(popup){map.removePopup(popup);popup=null;}
		mapPoint=null;
	}
}
function enableRoute(){
	draggableRt = new OpenLayers.Layer.Vector(
	    "Route forecast markers",
	    {
	        styleMap: new OpenLayers.StyleMap({
	            externalGraphic:
	                "/images/red-square.gif",
	            pointRadius: 5
	        })
	    }
	);
	polyLayer = new OpenLayers.Layer.Vector("Route Polyline Layer");
	map.addLayer(polyLayer);
    map.addLayer(draggableRt);
    dragFeatureRt = new OpenLayers.Control.DragFeature(draggableRt,{onComplete: function(f,p){
	    f.ll=map.getLonLatFromPixel(p);
	    drawRoutePoly();
	    if(document.getElementById('plotDiv').innerHTML!='' || document.getElementById('plotDivAdv').style.visibility=='visible'){plotRoute()}}});
	map.addControl(dragFeatureRt);
	dragFeatureRt.activate();
	routeListener.activate();
}

function drawRoutePoly(){
	if (routeMarkers.length<1){return;}
	var lls = [];
	for (var i = 0; i < routeMarkers.length; i++) {
		var ll = routeMarkers[i].ll;
		lls.push(new OpenLayers.Geometry.Point(ll.lon, ll.lat));
		routeMarkers[i].p=i;
	}
	clearPoly();
	var routeStyle= {
		strokeColor: "#000000",
		strokeOpacity: 1.0,
		strokeWidth: 2};
	var lineString = new OpenLayers.Geometry.LineString(lls);
	polyRoute = new OpenLayers.Feature.Vector(lineString,null,routeStyle);
	polyLayer.addFeatures([polyRoute]);
	document.getElementById('rlength').innerHTML=parseInt(lineString.getLength()/10.)/100.;
}

function clearPoly(){
	if(polyRoute){polyLayer.destroyFeatures([polyRoute]);polyRoute=null;};
	currentSid='';
}
	
function removeRoutePoly(){
	clearPoly();
	if(draggableRt){map.removeLayer(draggableRt);}
	draggableRt=null;
	if(polyLayer){map.removeLayer(polyLayer);}
	polyLayer=null;
	routeListener.deactivate();
	dragFeatureRt.deactivate();
	routeMarkers=[];
	routeP=0;
	removeRtTog('rttog');
	clearWS();
	plotToggle();
}

OpenLayers.Control.ClickPoint=OpenLayers.Class(OpenLayers.Control,{defaultHandlerOptions:{'single':true,'double':false,'pixelTolerance':0,'stopSingle':false,'stopDouble':false},initialize:function(options){this.handlerOptions=OpenLayers.Util.extend({},this.defaultHandlerOptions);OpenLayers.Control.prototype.initialize.apply(this,arguments);this.handler=new OpenLayers.Handler.Click(this,{'click':this.trigger},this.handlerOptions);},trigger:function(e){var ll=map.getLonLatFromPixel(e.xy);placeMarker(ll);}});
OpenLayers.Control.ClickRoute=OpenLayers.Class(OpenLayers.Control,{defaultHandlerOptions:{'single':true,'double':false,'pixelTolerance':0,'stopSingle':false,'stopDouble':false},initialize:function(options){this.handlerOptions=OpenLayers.Util.extend({},this.defaultHandlerOptions);OpenLayers.Control.prototype.initialize.apply(this,arguments);this.handler=new OpenLayers.Handler.Click(this,{'click':this.trigger},this.handlerOptions);},trigger:function(e){var ll=map.getLonLatFromPixel(e.xy);routeNode(ll);},triggerLL:function(e){routeNode(e);}});
OpenLayers.Control.ClickSkewT=OpenLayers.Class(OpenLayers.Control,{defaultHandlerOptions:{'single':true,'double':false,'pixelTolerance':0,'stopSingle':false,'stopDouble':false},initialize:function(options){this.handlerOptions=OpenLayers.Util.extend({},this.defaultHandlerOptions);OpenLayers.Control.prototype.initialize.apply(this,arguments);this.handler=new OpenLayers.Handler.Click(this,{'click':this.trigger},this.handlerOptions);},trigger:function(e){var ll=map.getLonLatFromPixel(e.xy);skewTMarker(ll);}});
OpenLayers.Control.ClickMap=OpenLayers.Class(OpenLayers.Control,{defaultHandlerOptions:{'single':true,'double':false,'pixelTolerance':0,'stopSingle':false,'stopDouble':false},initialize:function(options){this.handlerOptions=OpenLayers.Util.extend({},this.defaultHandlerOptions);OpenLayers.Control.prototype.initialize.apply(this,arguments);this.handler=new OpenLayers.Handler.Click(this,{'click':this.trigger},this.handlerOptions);},trigger:function(e){var ll=map.getLonLatFromPixel(e.xy);mapClick(ll);}});

function clearWS(){
	document.getElementById('actionspace').innerHTML='';
	mapClickListener.activate();
}
function toggleSkewT(){
	clearActions();
	if (pt==false){
		//turn on
		pt=true;
		setRtTog('sktog');
		enableSkewT();
		var opt = '<div align="center"><div class="selOpt"><a href="javascript:void(0)" onclick="callSkewT()">View SkewT forecast</a></div>';
		opt += '<div class="selOpt"><a href="javascript:void(0)" onclick="removeSkewT();pt=false;">Close SkewT</a></div>';
		opt += '</div>';
		document.getElementById('actionspace').innerHTML = opt;
	}
	updateSize();
}

function callSkewT(){
	if(skewTPoint!=null){
		var ll = getLL(skewTPoint.ll);
		getSkewt(ll.lat,ll.lon,null);
	} else {
		alert('Place a marker on the map by clicking a location first.');
	}
}
function enableSkewT(){
	setRtTog('sktog');
	draggablePt = new OpenLayers.Layer.Vector(
		"SkewT forecast marker",
		{
		    styleMap: new OpenLayers.StyleMap({
		        externalGraphic:
		            "/images/marker.png",
		        pointRadius: 15
		    })
		}
	);
    map.addLayer(draggablePt);
    dragFeaturePt = new OpenLayers.Control.DragFeature(draggablePt,{onComplete: function(f,p){
	    currentSid='';
	    f.ll=map.getLonLatFromPixel(p);
	}});
	map.addControl(dragFeaturePt);
	dragFeaturePt.activate();
	skewTListener.activate();
	
}
function removeSkewT(){
	if(draggablePt){map.removeLayer(draggablePt);}
	draggablePt=null;
	skewTPoint=null;
	skewTListener.deactivate();
	dragFeaturePt.deactivate();
	removeRtTog('sktog');
	currentSid='';
	clearWS();
	plotToggle();
}

function skewTMarker(location){
	if (skewTPoint){
		draggablePt.destroyFeatures([skewTPoint]);
		skewTPoint=null;
	}
	skewTPoint=new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(location.lon, location.lat));
	skewTPoint.ll=location;
	draggablePt.addFeatures([skewTPoint]);
}

function enable3Day(){
	setRtTog('pttog');
	draggablePt = new OpenLayers.Layer.Vector(
		"Point forecast marker",
		{
		    styleMap: new OpenLayers.StyleMap({
		        externalGraphic:
		            "/images/marker.png",
		        pointRadius: 15
		    })
		}
	);
    map.addLayer(draggablePt);
    dragFeaturePt = new OpenLayers.Control.DragFeature(draggablePt,{onComplete: function(f,p){
	    currentSid='';
	    f.ll=map.getLonLatFromPixel(p);
	    if(document.getElementById('plotDiv').innerHTML!=''){plotPoint()}
	}});
	map.addControl(dragFeaturePt);
	dragFeaturePt.activate();
	d3Listener.activate();
}

function placeMarker(location) {
	if (d3Point){
		draggablePt.destroyFeatures([d3Point]);
		d3Point=null;
	}
	currentSid='';
	d3Point=new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(location.lon, location.lat));
	d3Point.ll=location;
	draggablePt.addFeatures([d3Point]);
}

function remove3Day(){
	if(draggablePt){map.removeLayer(draggablePt);}
	draggablePt=null;
	d3Point=null;
	d3Listener.deactivate();
	dragFeaturePt.deactivate();
	removeRtTog('pttog');
	currentSid='';
	clearWS();
	plotToggle();
}

function clearActions(){
	if(isTogActive('sktog')){removeSkewT();pt=false;}
	if(isTogActive('pttog')){remove3Day();pt=false;}
	if(isTogActive('rttog')){removeRoutePoly();rt=false;}
	//old3Day=false;
	mapClickListener.deactivate();
}
function togglePoint(){
	var c='';
	if (old3Day==true){c = ' checked'}
	clearActions();
	if (pt==false){
		//turn on
		pt=true;
		setRtTog('pttog');
		var opt = '<div align="center"><div class="selOpt"><a href="javascript:void(0)" onclick="plotPoint()">View point forecast</a></div>';
		opt += '<div class="selOpt"><a href="javascript:void(0)" onclick="remove3Day();pt=false;">Close point</a></div>';
		opt += '<div style="font-size:75%"><input type="checkbox" onclick="set3DayOld();"'+c+'> Use old format (new window)</div>';
		opt += '</div>';
		document.getElementById('actionspace').innerHTML = opt;
		enable3Day();
	}
	updateSize();
}
function set3DayOld(){
	if(old3Day==true){old3Day=false}else{old3Day=true}
}
function routeNode(ll){
	var rPoint=new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(ll.lon, ll.lat));
	rPoint.ll=ll;
	routeP++;
	rPoint.p=routeP;
	routeMarkers.push(rPoint);
	draggableRt.addFeatures([rPoint]);
	drawRoutePoly();
}

function doOverlay(){
	if(tLayers==1){return}
	clearOverlay();
	if((document.getElementById('plotDiv').innerHTML!='' || document.getElementById('plotDivAdv').style.visibility=='visible') && routeMarkers.length>1 && yyyymmdd_fflast!=yyyymmdd_ff){currentSid='';plotRoute();}
	addLayer();
	raiseLayers();
}
function overlayRoads(){
	if(cloudmade.visibility==true){
		cloudmade.setVisibility(false);
		//cloudmade.display(false);
	} else{
		cloudmade.setVisibility(true);
		//cloudmade.display(true);
	}
	var o = document.getElementById('hide_roads');
	if(cloudmade.visibility==true){o.checked=false}else{o.checked=true}
}
function raiseLayers(){
	if(polyLayer){map.raiseLayer(polyLayer,3);}
	if(trackLayer){map.raiseLayer(polyLayer,3);}
    if(draggableRt){map.raiseLayer(draggableRt,4);}
    if(draggablePt){map.raiseLayer(draggablePt,4);}
    if(cloudmade){map.raiseLayer(cloudmade,5);}
}
function positionError(err) {
    var msg;
    switch(err.code) {
      case 0:
        msg = "Unable to find your location";
        break;
      case 1:
        msg = "Permission denied in finding your location";
        break;
      case 2:
        msg = "Your location is currently unknown";
        break;
      case 3:
        msg = "Attempt to find location took too long";
        break;
      default:
        msg = "Location detection not supported in browser";
    }
    alert(msg + '. '+ err.message);
	useTZO=1;
	finishMapSetup();
  }

function getPosition(position){
	mylat=position.coords.latitude;
	mylon=position.coords.longitude;
	myzoom=10;
	latlng = new OpenLayers.LonLat(mylon,mylat);
	useTZO=1;
	finishMapSetup();
}
function finishMapSetup(){
	loadCal();
	commonSetup();
}
function commonSetup(){
	map.setCenter(latlng.transform(proj, map.getProjectionObject()),myzoom);
	makeParamOptions();
	setModelOpt();
	if(myTrans>.8){myTrans=.8}
	if(myTrans<.3){myTrans=.3}
	changeOpacity(myTrans);
}

function finishMapLoad(){
	commonSetup();
	callTimestamp();
}
function setModelOpt(){
	var m = document.getElementById('model');
	for (i=0;i<m.options.length;i++){
     	if (m.options[i].value==model) {
         	m.options[i].selected = true;
     	}
 	}
}
function setLname(){
	var d = allParamNames[cbidx];
	if (!d){d='No Layer'}
	document.getElementById('lName').innerHTML=model.toUpperCase()+' '+d;
}
function setBrowserTZO(){
	var dt = new Date();
	var tzo = dt.getTimezoneOffset()/60. * (-1.);
	setOffset(tzo)
}

function makeParamOptions(){
	if (model=='gfs'){var myParams = GFSParams}
	if (model=='nam'){var myParams = NAMParams}
	if (model=='ruc'){var myParams = RUCParams}
	var optionHTML = '';
	var lastGroup = '';
	var thisGroup = '';
	for (var i = 0; i < myParams.length; i++) {
		thisGroup = paramGroup[i];
		if (thisGroup != lastGroup || i==0){
			optionHTML+='<br><div class="groupHead"><a style="float:right;" href="http://www.xcskies.com/science/products/xcmap/docs" target="new"><small>Help?</small></a><a target="new" href="'+paramHelp[paramGroup[i]]+'">'+paramHeaders[paramGroup[i]]+'</a></div>';
		}
		if(myParams[i]==1){
			optionHTML+='<div><a onmouseover="showHelp(\''+allParams[i]+'\')" onmouseout="hideddrivetip()" href="javascript:void(0)" name="layers" id="'+allParams[i]+'" onclick="setLayer(\''+allParams[i]+'\',\'layers\','+i+');">'+allParamNames[i]+'</a></div>';
		}
		lastGroup = thisGroup;
	}
	optionHTML += '<div><a href="javascript:void(0)" name="layers" onclick="setLayer(\'\',\'layers\',-1);">No Layers</a></div>';
	document.getElementById('layersTD').innerHTML = optionHTML;
	setLayer(currentLayer,'',cbidx);
	//selectHour();
	makeHours()
	//setLname();
}
function makeWindOptions(sel){
	var v = ['10m','225','600','1200','1800','2400','3000','3600','4200','4800','5400','6000','6600','7200','7800','8400','9000'];
	var vt = ['Surface (10m)','Top of lift','2000','4000','6000','8000','10000','12000','14000','16000','18000','20000','22000','24000','26000','28000','30000'];
	var wind_levels = document.getElementById('wind_levels');
	var i;
	for(i=wind_levels.options.length-1;i>0;i--){
		if(sel=='undefined'){if(wind_levels.options[i].selected==true){sel=wind_levels.options[i].value;}}
		wind_levels.remove(i);
	}
	for (var i = 0; i < v.length; i++) {
		var optn = document.createElement("OPTION");
		if(i>1){
			if(unitObj.height_unit=='meters'){
				optn.text = v[i] + ' m';
			} else {
				optn.text = vt[i] + ' ft';
			}
		} else {
			optn.text = vt[i];
		}
		if(v[i]==sel){
			optn.selected=true;
			windLabel = optn.text;
		}
		optn.value = v[i];
		wind_levels.options.add(optn);
	}
	setWLabel();
}

function niceDate(d,t){
	var myDate = new Date(Date.UTC(parseFloat(d.substr(0,4)),parseFloat(d.substr(4,2)-1),parseFloat(d.substr(6,2)),parseFloat(d.substr(9,2)),0,0));
	myDate = new Date(myDate.getTime() + ((60*60*parseFloat(myoffset))*1000) )
	if (t){
		return myDate.toUTCString().substr(0,16) + ' ' + myDate.getUTCHours() + ':' + padZero(myDate.getUTCMinutes());
	} else{
		return myDate.toUTCString().substr(0,16);
	}
}

function padZero(xx){
	if (parseFloat(xx)<10){return '0'+xx}else{return xx}
}

function myToday(){
        //var myDate = new Date();
        var tzo = getTZO();
        var myDate = new Date();
		var myDate = new Date(myDate.getTime()+(-tzo*3600*1000.));
        
        var yyyy = myDate.getFullYear().toString();
        var mm = padZero(myDate.getMonth()+1);
        var dd = padZero(myDate.getDate());
        var ff = padZero(parseInt((myDate.getHours()+0)/3.)*3.);
        yyyymmdd_ff = yyyy+mm+dd+'_'+ff;
        load_yyyymmdd_ff=yyyymmdd_ff;
        //alert(yyyymmdd_ff);
}

function getTZO(){var myDate = new Date();return myDate.getTimezoneOffset()/60. * (-1.);}

function newFF(n,d){
	if(!d){d=yyyymmdd_ff}
	var myDate = new Date(Date.UTC(parseFloat(d.substr(0,4)),parseFloat(d.substr(4,2)-1),parseFloat(d.substr(6,2)),parseFloat(d.substr(9,2)),0,0));
	var myDate = new Date(myDate.getTime() + (3600*1000*n) );
	var yyyy = myDate.getUTCFullYear().toString();
	var mm = padZero(myDate.getUTCMonth()+1);
	var dd = padZero(myDate.getUTCDate());
	var ff = padZero(myDate.getUTCHours());
	return yyyy+mm+dd+'_'+ff;
}

function makeHours(){
	//make 29 fhours to show in a row...
	var fhour='';
	var lastDay='';
	var thisDay='';
	var runTimesX = getModelRunObject();
	var fhtml = '<table border=0 cellpadding=3 cellspacing=0><tr valign="bottom"><td><a href="javascript:void(0)" onclick="newDay(-1)"></a></td><td>';
	for (var i = -11; i < 19; i++) {
		fhour=newFF(i*3.,load_yyyymmdd_ff);
		thisDay = niceDate(fhour);
		if (lastDay!=thisDay){fhtml += '<td nowrap>'+thisDay+'<br>'}
		
		var localDate = new Date(Date.UTC(parseFloat(fhour.substr(0,4)),parseFloat(fhour.substr(4,2)-1),parseFloat(fhour.substr(6,2)),parseFloat(fhour.substr(9,2))+parseFloat(myoffset),(myoffset % 1.)*60.,0));
		var lHour = localDate.getUTCHours();
		var lMin = localDate.getUTCMinutes();
		var cl='hour_ran_off';
		var suf='';
		var act = noFF;
		if ('f'+fhour in runTimesX){cl='hour_ran';act = 'yyyymmdd_ff=\''+fhour+'\';selectHour();doOverlay();';}
		if(yyyymmdd_ff==fhour){cl='fhoursel';}
		if (lMin != 0){
			var suf = ':' + lMin;
		} else {
			if(lHour<10){lHour='0'+lHour;}
		}
		fhtml += '<span class="'+cl+'" id="f'+fhour+'" name="time"><a href="javascript:void(0)" onclick="'+act+'">'+lHour+suf+'</a></span>';
		lastDay=thisDay;
	}
	fhtml += '</td><td><a href="javascript:void(0)" onclick="callTimestamp();"></a></td></tr></table>';
	document.getElementById('htable').innerHTML='';
	var newdiv = document.createElement("div");
	newdiv.innerHTML = fhtml;
	var container = document.getElementById("htable");
	container.appendChild(newdiv);
}

function newDay(n){
	//takes +1 -1 or some other variation from calendar changeDate
	currentSid='';
	var nd = new Date();
	var nowD = nd.getTime();
	
	var d=yyyymmdd_ff;
	var myDate = new Date(Date.UTC(parseFloat(d.substr(0,4)),parseFloat(d.substr(4,2)-1),parseFloat(d.substr(6,2)),0,0,0));
	var myDate = new Date(myDate.getTime() + (86400*1000*n) );
	daysBack = parseFloat((myDate.getTime()-nowD)/(86400*1000));
	var yyyy = myDate.getUTCFullYear().toString();
	var mm = padZero(myDate.getUTCMonth()+1);
	var dd = padZero(myDate.getUTCDate());
	//alert(daysBack + ' ' +d+ ' ' + yyyy+mm+dd+d.substr(8,3));
	yyyymmdd_ff = yyyy+mm+dd+d.substr(8,3);
	makeHours();
	return;
}

function changeDate() {
	var h = yyyymmdd_ff.substring(9,11);
	var off = myoffset;//parseInt(document.getElementById('offset').value);
	if(h==''){
		h = 12 - off;
		h = h.toString();
		if(h.length==1){h = '0'+h;}
	}
	var epoch = parseInt(parseInt(document.getElementById('mycal').value)/1000.);
	if((parseInt(h)+off)<=0){epoch = epoch+(86400);}
	if((parseInt(h)+off)>=24){epoch = epoch-(86400);}
	var myDate = new Date((epoch)*1000);
	yyyymmdd = myDate.dateFormat('Ymd');
	yyyymmdd_ff = yyyymmdd + '_' + h;
	load_yyyymmdd_ff = yyyymmdd_ff;
	var d=yyyymmdd;
	if(parseFloat(d)<20080910){alert('Archive data starts on Sept 10, 2008. Try another day.');return}
	var myDate = new Date(Date.UTC(parseFloat(d.substr(0,4)),parseFloat(d.substr(4,2)-1),parseFloat(d.substr(6,2)),0,0,0));
	//alert(parseFloat(d.substr(0,4)) + ' ' + (parseFloat(d.substr(4,2)-1)) + ' ' + parseFloat(d.substr(6,2)));
	var myDate = new Date(myDate.getTime());
	var d=yyyymmdd_ff;
	var myD = new Date(Date.UTC(parseFloat(d.substr(0,4)),parseFloat(d.substr(4,2)-1),parseFloat(d.substr(6,2)),0,0,0));
	var myD = new Date(myD.getTime());
	
	var n = parseFloat((myD.getTime() - myDate.getTime())/(86400*1000.));
	newDay(n*(-1.));
	//makeHours();
	//reload the timestamps based on this center date
	callTimestamp();
	doOverlay();
}
function callTimestamp(n){
	if(n){var myN='&n='+n}else{var myN=''}
	ajaxRequest('POST','/cgi-bin/openlayers/ol_hours.cgi',ajaxCallback,'model='+model+'&yyyymmdd_ff='+yyyymmdd_ff+myN);
}
function setOffset(o){
	document.getElementById('offsetDisplay').innerHTML='TZ Offset: ' + o;
	myoffset = o;
	newDay(0);
}
function getModelRunObject(){
	if(model=='gfs'){
		return runTimesGFS;
	} else if(model=='nam'){
		return runTimesNAM;
	} else if(model=='ruc'){
		return runTimesRUC;
	}
}
function setTimeStamp(){
	var runTimesX = getModelRunObject();
	var parts = runTimesX['f'+yyyymmdd_ff].split(',');
	var p = parts[0].split('_');
	if (p.length>0){
		var note = 'Using model run '+p[1]+'Z on day '+p[0]+'. Forecast Hour: '+p[2];
	} else {
		var note = 'No forecast available for this time.';
	}
	document.getElementById('runstamp').innerHTML=note;
}
function selectHour(){
	setTimeStamp();
	var runTimesX = getModelRunObject();
	var hours = document.getElementsByTagName('span');
	//alert(hours.length);
	for (var i = 0; i < hours.length; i++) {
		var cl='hour_ran_off';
		if (hours[i].getAttribute('id') in runTimesX){
			cl='hour_ran';
			if(hours[i].getAttribute('id') == 'f'+yyyymmdd_ff){cl='fhoursel';}
			hours[i].className=cl;
		}
	}
}

function highlightTime(id) {
  var oTime = document.getElementsByTagName('span');
  for (var k = 0; k < oTime.length; k++) {
     var oT = oTime[k];
     if (oT.className!='hour_ran'){
     	oT.style.backgroundColor="transparent";
     	oT.style.border="none";
 	}
     if (oT.id == id) {
        oT.style.backgroundColor="yellow";
        oT.style.border="1px solid #999999";
     }
  }
}
function doWindOverlay(){
	clearWindOv();
	addLayer();
	raiseLayers();
}
function clearWindOv(){
	if(windOverlay){if(windOverlay.type_){map.removeLayer(windOverlay,true);windOverlay=null;}}
}
function clearOverlay(){
  if(overlay){if(overlay.type_){map.removeLayer(overlay,true);overlay=null;}}
  clearWindOv();
  document.getElementById('lWind').innerHTML='Wind: None';
}
function toggleLayers(){
	if(overlay){overlay.setVisibility(tLayers)}
	if(windOverlay){windOverlay.setVisibility(tLayers)}
	if(tLayers==1){
		tLayers=0
		document.getElementById('tog').style.background=mcolor;
	} else{
		tLayers=1;
		document.getElementById('tog').style.background=tcolor;
	}
	var o = document.getElementById('hide_labels');
	if(tLayers==0){o.checked=false}else{o.checked=true}
}
function menuToggle(id){
	var div = document.getElementById(id);
	if (div.style.visibility=="visible"){
		div.style.visibility="hidden";
	} else {
		div.style.visibility="visible";
	}
}

function overlayMakeParams(p,a) {
    var tileType=0;
    //var bounds = this.map.getExtent();
    var parts = p.BBOX.toString();
    parts = parts.split(',');
    var bounds = new OpenLayers.Bounds(parts[0],parts[1],parts[2],parts[3]);
    bounds.transform(this.map.getProjectionObject(),proj);
    var bbox = bounds.toBBOX(12);
    var daysBack=-10;
    
    var day = yyyymmdd_ff.substring(0,8);
	if(daysBack<-14){var archive='/xccomp1/archive2/mapserver'}else{var archive='/var/www/mapserver'}
	if(parseFloat(day)<=20090630){var archive='/xccomp1/archive/mapserver'}
	
	var params = new Object();
	params.height=(p.HEIGHT);
	params.width=(p.WIDTH);
	if(this.type_=='wind' || document.getElementById('wind_levels').value!=''){
		//essential params for wind
		params.bboxw=bbox;
		if(document.getElementById('barbnum').checked==false){
			params.barbnum='0';
		}else{
			params.barbnum='1';
		}
		if(document.getElementById('mergewind').checked==true){params.wmerge=1}
		var level=document.getElementById('wind_levels').value;
		params.level=level;
		params.windunit=unitObj.windspeed_unit;
		if(document.getElementById('windsymbol').value=='arrows'){params.wsymbol='arrows'}else{params.wsymbol='barbs'}
		if(document.getElementById('windcolor').checked==true && currentLayer==''){params.wcolor=1}else{params.wcolor=0}
	}
	//params.width='+width2d+'&height='+height2d+'&
	params.model=model;
	params.yyyymmdd_ff=yyyymmdd_ff;
	params.archiveDir=archive;
	params.zoom=map.getZoom();
	var centerll = this.map.getCenter();
	centerll.transform(this.map.getProjectionObject(),proj);
	params.centerlat=centerll.lat;
	params.centerlon=centerll.lon;
	//if we need to merge wind with base layer then do so
	if(this.type_=='wind'){
		// just call wind and stop
		var baseUrl = 'http://www.xcskies.com/'+imPort+'/?';
		params.xc='.xcwind';
	} else {
		if (this.map.getZoom() >= 6){
			params.BBOX=bbox;
			params.SRS='EPSG:4326';
			var baseUrl = 'http://www.xcskies.com/'+imPort+'/?';
			params.xc='.xcsmooth';
			
		} else {
			var b = bounds.toArray();//{Array} array of left, bottom, right, top
			if(b[0]>b[2] ){var adjLon = -360.}else{var adjLon=0}
			var bbox = (dd2MercMetersLng(b[0]+adjLon))+","+dd2MercMetersLat(b[1])+","+dd2MercMetersLng(b[2])+","+dd2MercMetersLat(b[3]);
			//alert(bbox);
			params.BBOX=bbox;
			params.map='/var/www/mapserver/xc_py'+model+'.map';
			params.SRS='EPSG:54004';
			var baseUrl = 'http://www.xcskies.com/cgi-bin/ms/mapserv?service=WMS&REQUEST=GetMap&VERSION=1.1.1&';
		}
		
		params.basePath='py'+model+'_data';
		params.layername=currentLayer;
		params.z_fhour=yyyymmdd_ff;
		params.LAYERS='py'+model+'_layer,countries';
		params.yyyymmdd=day;
		params.FORMAT='image/gif';
		params.TRANSPARENT='TRUE';
		
	}
	var str='';
	for(prop in params)
	{
		str+='&'+prop.toUpperCase() +'='+ params[prop];
	}
	return baseUrl+str;
	changeOpacity(myTrans);
}

function addLayer(){
	if (tileType==2 && overlay2==null){
		//256 tiles
		overlay2=new SparseTileLayerOverlay('layer');
		overlay2.setMap(map);
		overlay2.setUrl=SetUrl;
		google.maps.event.addListener(map,"idle",function(){overlay2.idle();});
		return;
	}
	if (tileType==2){return;}
	if(map.getZoom() >= 6){
		var baseUrl = 'http://www.xcskies.com/'+imPort+'/?';
	}else{
		var baseUrl = 'http://www.xcskies.com/cgi-bin/ms/mapserv?';
	}
	
	if(currentLayer!='' && overlay==null){
		if(dynLayer.indexOf(currentLayer+',')>=0 || document.getElementById('mergewind').checked==true){var single=true;} else {var single=false;}
		overlay = new OpenLayers.Layer.WMS( document.getElementById('lName').innerHTML, 
	              baseUrl,
	              {	layers: 'basic',srs: 'x', bbox: '123'},
	              	{
	              		singleTile: single,
	              		isBaseLayer: false,
	              		'buffer': 0}
	              	);
		overlay.type_='layer';
		overlay.getFullRequestString=overlayMakeParams;
		map.addLayer(overlay);
		overlay.setOpacity(myTrans);
		overlay.setVisibility(true);
	}
	
	setWLabel();
	setCB();
	if(document.getElementById('wind_levels').value!=''){
		if(document.getElementById('mergewind').checked==false || map.getZoom() <6 || currentLayer==''){
			//separate wind layer requested
			windOverlay = new OpenLayers.Layer.WMS( document.getElementById('lWind').innerHTML, 
              baseUrl,
              {	layers: 'basic',srs: 'x', bbox: '123'},
              	{
              		singleTile: true,
              		isBaseLayer: false,
              		buffer: 0}
              	);
            windOverlay.type_='wind'; 
			windOverlay.getFullRequestString=overlayMakeParams;
			map.addLayer(windOverlay);
			windOverlay.setOpacity(1);
			windOverlay.setVisibility(true);
		}
	}
}
function setWLabel(){
	document.getElementById('lWind').innerHTML='Wind: ' + windLabel + ' ' + unitObj.windspeed_unit;
}
function setCB(){
	if(currentLayer=='' && document.getElementById('wind_levels').value!=''){
		document.getElementById('my2dcbar').src='/images/colorbars/barb_colorbar'+unitObj.windspeed_unit+'.gif';
	} else {
		//alert(paramCBType[cbidx]);
		//determine unit for cb // ugly logic hack for now
		if(paramCBType[cbidx]=='h'){
			colorunit=unitObj.height_unit;
		}else if (paramCBType[cbidx]=='l'){
			colorunit=unitObj.vertspeed_unit;
		}else if (paramCBType[cbidx]=='w'){
			colorunit=unitObj.windspeed_unit;
		}else if (paramCBType[cbidx]=='ps'){
			colorunit=unitObj.press_unit;
		}else if (paramCBType[cbidx]=='t'){
			colorunit=unitObj.temp_unit;
		}else if (paramCBType[cbidx]=='p'){
			colorunit=unitObj.precip_unit;
		} else {
			colorunit='';
		}
		//alert(colorBars[cbidx]+' '+colorunit);
		if(colorunit=='feet' || colorunit=='f' || colorunit=='fpm' || colorunit=='mm'){colorunit='';}
		if(colorunit=='ms' || colorunit=='meters'){colorunit='m'}
		
		document.getElementById('my2dcbar').src='/images/colorbars/'+colorBars[cbidx]+colorunit+'.gif';
	}
}
function setLayer(myLayer,menuId,pos){
	tLayers=0;
	cbidx=pos;
	if(currentLayer!=''){
		if(document.getElementById(currentLayer)){document.getElementById(currentLayer).className='';
		} else {currentLayer=''}
	}
	if(myLayer!=''){
		if(document.getElementById(myLayer)){document.getElementById(myLayer).className='layersel';
		} else {myLayer='';}
	}
	setLname();
	currentLayer = myLayer;
	doOverlay();
}

function changeOpacity(n){
	myTrans=n;
	if(overlay){overlay.setOpacity(myTrans)}
	//if (windOverlay){windOverlay.setOpacity(myTrans)}
	var c = document.getElementById('my2dcbar');
	if(document.getElementById('cbtrans').checked==true){
		c.style.opacity=n;
		c.style.filter  = "alpha(opacity=" + (n*100) + ")";
		ajaxRequest('POST', '/cgi-bin/map/my_save_user_setting.pl', ajaxCallback, 'name=CBTRANS&value=1');
	}else{
		c.style.opacity='1';
		c.style.filter  = "alpha(opacity=" + (100) + ")";
		ajaxRequest('POST', '/cgi-bin/map/my_save_user_setting.pl', ajaxCallback, 'name=CBTRANS&value=0');
	}
	highlightName('trans');
	ajaxRequest('POST', '/cgi-bin/map/my_save_user_setting.pl', ajaxCallback, 'name=TRANSPARENCY&value='+n);
}
function highlightName(nm) {
  var objs = document.getElementsByName(nm);
  for (var k = 0; k < objs.length; k++) {
	   objs[k].style.border='1px solid black';
	   var val = parseInt(myTrans*10.);
	   if (objs[k].innerHTML == val){objs[k].style.border='2px solid red'}
  }
}

function dd2MercMetersLng(p_lng) {
	return p_lng * 20037508.34 / 180;
}
function dd2MercMetersLat(p_lat) {
	var y = Math.log(Math.tan((90 + p_lat) * Math.PI / 360)) / (Math.PI / 180);
	return y * 20037508.34 / 180;
}

function loadCal() {
	var xml1 = '<configs><initcfg><name>popup1</name><mode>popup</mode></initcfg></configs>';
	popup1 = new EpochPrime(document.getElementById('mycal'),xml1);
}
function loadProfile(){
	ajaxRequest('POST','/cgi-bin/openlayers/ol_ajax_mapProfiles.pl',ajaxCallback,'action=listProfiles&profile_id='+currentProfileId);showWindow();
}
function saveProfile(p){
	ajaxRequest('POST','/cgi-bin/openlayers/ol_ajax_mapSave.pl',ajaxCallback,'action=savemapForm&pid='+pid+'&'+p);showWindow();
}
function searchMap(){
	alert('todo on the search');
}
function toggleMenu(){
	var div = document.getElementById('leftMenu');
	var tog = document.getElementById('hdtog');
	if(togObj.hdtog==0){
		togObj.hdtog=1;
		setRtTog('hdtog');
		tog.style.visibility='visible';
		div.style.position='absolute';
		div.style.visibility='hidden';
		div.style.left='-3000px';
	} else {
		removeRtTog('hdtog');
		togObj.hdtog=0;
		div.style.position='static';
		div.style.visibility='visible';
		div.style.left='';
		tog.style.visibility='hidden';
	}
	updateSize();
}
function plotToggle(){
	var div = document.getElementById('plotDiv');
	var divAdv = document.getElementById('plotDivAdv');
	var divThumbs = document.getElementById('plotDivThumbs');
	document.getElementById('plotImg').src='/images/clear_block.gif';
	div.innerHTML='';
	divThumbs.innerHTML='';
	div.style.width='0px';
	divAdv.style.visibility='hidden';
	divAdv.style.position='absolute';
	divAdv.style.left='-3000px';
	clearTrackMarker();
	if(togObj.hdtog==1){toggleMenu()}else{updateSize();}
}
function toggleRoute(){
	clearActions();
	if(rt==false){
		//open it
		rt=true;
		setRtTog('rttog');
		var opt = '<div align="center"><div class="selOpt"><a href="javascript:void(0)" onclick="plotRoute()">View route forecast</a></div>';
		opt += '<div class="selOpt"><a href="javascript:void(0)" onclick="removeRoutePoly();rt=false;">Close route</a></div>';
		opt += '<small>Route length: <span id="rlength">0</span> km</small>';
		opt += '</div>';
		document.getElementById('actionspace').innerHTML = opt;
		enableRoute();
	}
	updateSize();
}

function plotRoute(){
	yyyymmdd_fflast = yyyymmdd_ff;
	if(currentSid!='' && document.getElementById('withdata').checked==false){setRouteOptionsSimple(currentSid,'lift',null);return;}
	if(routeMarkers.length>1){
		//var grate='&grate=1.2';
		var rLats = [];
		var rLons = [];
		for (var i = 0; i < routeMarkers.length; i++) {
			var myll = getLL(routeMarkers[i].ll);
			rLats.push(myll.lat);
			rLons.push(myll.lon);
			getLLRev(routeMarkers[i].ll);
		}
		
		var pLat = '&lats='+rLats.join(',');
		var pLon = '&lons='+rLons.join(',');
		var plots = '&plots=lift,ti,dp,rh,vel,wind';
		var cb='';
		if(document.getElementById('withdata').checked==true){
			var withdata = '&withdata=1';
		} else {var withdata='';}
		if (document.getElementById('startHour').value!='' && document.getElementById('endHour').value!=''){
			var startMinute = document.getElementById('startMinute').value;
			var startHour = document.getElementById('startHour').value;
			var endMinute=document.getElementById('endMinute').value;
			var endHour = document.getElementById('endHour').value;
			var d = yyyymmdd_ff;
			var myDate = new Date(Date.UTC(parseFloat(d.substr(0,4)),parseFloat(d.substr(4,2)-1),parseFloat(d.substr(6,2)),parseFloat(startHour-myoffset),parseFloat(startMinute),0));
			var startTime = (myDate.getTime())/1000.;
			var endTime = startTime + ((endHour-startHour)*60*60) + (60*endMinute);
			var timeSpan = '&starttime='+startTime+'&endtime='+endTime;
		} else {
			var timeSpan='';
		}
		if (parseFloat(document.getElementById('grate').value)>0){
			var grate = '&grate='+document.getElementById('grate').value;
		} else {
			var grate = '1.2';
		}
		
		currentSid=(new Date).getTime()+''+Math.random();//.substring(0,4)
		//alert(sid);
		var device = 'mobile';
		var urlBase = 'http://www.xcskies.com/8094/';
		var sUrl = '&llElev=0&yyyymmdd_ff='+yyyymmdd_ff+grate+pLat+pLon+plots+cb+'&tunit='+unitObj.temp_unit+'&wunit='+unitObj.windspeed_unit+'&lunit='+unitObj.vertspeed_unit+'&timeoffset='+myoffset+'&mod=x&hunit='+unitObj.height_unit+'&moretemps=0&solar=0&tracklog=&sid='+currentSid+timeSpan+'&device='+device+withdata+'&.xccross';
		//if withdata then ajax the call and wait for return else just an image
		if(withdata!=''){
			var callback ={success:csSuccess,failure:csFailure,argument: { yyyymmdd_ff:"D"+yyyymmdd_ff, bar:"bar" }};
			var cb='';
			var innerNum = '&innerNum='+routeIWD;
			if (isSafari==1){cb='&callback=csSuccess2'}
			//alert(urlBase+cb+sUrl);
			//var request = XCSKIES.util.Connect.asyncRequest('GET', urlBase+cb+sUrl, callback);
			ajaxRequest('POST',urlBase+cb+innerNum+sUrl,callback,'');
			
		} else{
			var img = document.createElement("img");
	    	img.src = urlBase+sUrl;
	    	setRouteOptionsSimple(currentSid,'lift',img);
    	}
    	showLoading();
    } else {
	    alert('Please click at least 2 points on the map for a route');
    }
}
var csSuccess = function(o){
	if(o.responseText !== 'undefined'){
		//load up the params for this hour into the table with IDs that should match
		loadAJAXJS(o.responseText);
		if (isSafari==1){return}
		var myyyyymmdd_ff = o.argument.yyyymmdd_ff;
		csSuccess2(myyyyymmdd_ff);
		//alert('csSuccess finished');
		return;
	}
}

function csSuccess2(myyyyymmdd_ff){
	var div = document.getElementById('plotDiv');
	div.innerHTML='';
	div.style.width='0px';
	var myyyyymmdd_ff = csObj.key;
	var yyyymmdd_ff = csObj[myyyyymmdd_ff].csyyyymmdd_ff;
	var divAdv = document.getElementById('plotDivAdv');
	var divThumbs = document.getElementById('plotDivThumbs');
	var plotImg = document.getElementById('plotImg');
	divAdv.style.visibility='visible';
	divAdv.style.position='static';

    plotImg.src = '/tmp/lift'+'_'+currentSid+'.gif';
	plotImg.style.height = routeIH;
    plotImg.style.width = routeIW;
	var thumbHtml='<img src="/images/clear_block.gif" width="150" height="1"/>';
	
	for (i=0;i<csObj[myyyyymmdd_ff].csThumbs.length;i++){
		var yyyymmdd_ff = csObj[myyyyymmdd_ff].csyyyymmdd_ff;
		var str = csObj[myyyyymmdd_ff].csThumbs[i];
		var myParam = str.split('_')[0];
		var myDesc = routePlotNames[myParam];
		thumbHtml+='<div align="center"><a href="javascript:void(0)" onclick="popcross(\''+csObj[myyyyymmdd_ff].csThumbs[i]+'\',\''+yyyymmdd_ff+'\')"><img border=0 src="/tmp/thumb_'+csObj[myyyyymmdd_ff].csThumbs[i]+'"></a><br>'+myDesc+'</div>';
	}
	divThumbs.innerHTML=thumbHtml;
	map.zoomToExtent(polyLayer.getDataExtent());
    map.zoomOut();
	makeTrackMarker(csObj.csLats[0],csObj.csLons[0]);
	clearLoading();
	if(document.getElementById('map_canvas').offsetWidth<250 && togObj.hdtog==0){toggleMenu();}else{updateSize();}
}
function popcross(im,ff){
	var myUrl = '/tmp/'+im;
	//document.getElementById('plotImg').onload=clearLoading;
	document.getElementById('plotImg').src=myUrl;
	return;
}
var csFailure = function(o){
	document.getElementById('plotDiv').innerHTML='<div class="error">Error: Route cannot be loaded. Please check that your time selected has forecasts available or that the route is less than 2500 km.</div>';
	clearLoading();
}

function makeTrackMarker(myLat,myLon){
	clearTrackMarker();
	trackLayer = new OpenLayers.Layer.Markers( "Track Marker" );
	map.addLayer(trackLayer);
	var size = new OpenLayers.Size(20,34);
	var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
	var icon = new OpenLayers.Icon('/images/marker.png',size,offset);
	trackMarker = new OpenLayers.Marker(getLLRev(new OpenLayers.LonLat(myLon,myLat)),icon);
	trackLayer.addMarker(trackMarker);
}
function clearTrackMarker(){
	if(trackLayer){
		map.removeLayer(trackLayer);
		trackLayer=null;
		trackMarker=null;
	}
}

function setRouteOptionsSimple(sid,plot,img){
	if(!img){
		var img = document.createElement("img");
    	img.src = '/tmp/'+plot+'_'+sid+'.gif';
	}
	img.onload=clearLoading;
	img.style.height = routeIH;
    img.style.width = routeIW;
	var div = document.getElementById('plotDiv');
	div.style.width=routeW;
	div.innerHTML='';
	div.style.visibility='visible';
	var html = '';
	
	html += '<div align="center">' + niceDate(yyyymmdd_ff,true) + '</div>';
	div.innerHTML = html;
	div.appendChild(img);
	var myplots = ['lift','ti','dp','rh','vel','wind'];
	var myplotsN = ['Temp/Lift','TI','Dp','RH','Vert Vel','Wind'];
	var html='<table width="100%" cellpadding="3" bgcolor="white" style="font-size:75%"><tr><td><div>Legend:</div></td><td><img src="/images/windkey.gif"/></td><td>Red - Top of usable lift (1.2 m/s)<br>Black - Thermal tops (TI~0)</td><td>White - Thermal top sensitivity(+2&deg;C)<br>Pink - Cu CCL (dew pt.)</td></tr></table>';
	html+='<div class="plot3dopt" align="center">';
	for (var i=0; i<myplots.length; i++) {
		html+= '<a href="javascript:void(0)" onclick="setRouteOptionsSimple(\''+sid+'\',\''+myplots[i]+'\',null)">'+myplotsN[i]+'</a>&nbsp;';
	}
	html+='</div>';
	var div3d = document.createElement("div");
	//div3d.setAttribute('id')='plotImg';
	div3d.innerHTML=html;
	div.appendChild(div3d);
	div3d.innerHTML+='<br><div class="selOpt" align="center"><a style="background:#999999" href="javascript:void(0)" onclick="plotToggle();">Close</a></div>';
	map.zoomToExtent(polyLayer.getDataExtent());
    map.zoomOut();
    if(document.getElementById('map_canvas').offsetWidth<250 && togObj.hdtog==0){toggleMenu();}else{updateSize();}
}
function getLL(ll){
	return ll.transform(map.getProjectionObject(),proj);
}
function getLLRev(ll){
	return ll.transform(proj,map.getProjectionObject());
}
function plotPoint(){
	if(old3Day==true){
		var ll = getLL(d3Point.ll);
		var pLat = ll.lat;
		var pLon = ll.lon;
		getLLRev(d3Point.ll);
		var yyyymmdd = yyyymmdd_ff.substr(0,8);
		var xcastURL = '/cgi-bin/map/3dayxc.cgi?date='+yyyymmdd+'&date_fcast='+yyyymmdd_ff+'&lat='+pLat+'&lon='+pLon+'&units='+unitObj.height_unit+'&windunits='+unitObj.windspeed_unit+'&offset='+myoffset;
     	myWindow = window.open(xcastURL, "xcWindow", 'scrollbars,resizable=1,width=1000,height=670');
     	return;
	}
	if(currentSid!=''){set3DayOptions(currentSid,'3daytmp',null);return;}
	if(d3Point!=null){
		//&plots=3daytmp,3dayti,3daydp,3dayrh,3dayvel,3daywind&tunit=f&wunit=mph&lunit=fpm&timeoffset=-6&mod=x&hunit=feet&tracklog=&sid=&.xcpoint
		var ll = getLL(d3Point.ll);
		var grate='&grate=1.2';
		var pLat = '&lat='+ll.lat;
		var pLon = '&lon='+ll.lon;
		getLLRev(d3Point.ll);
		var plots = '&plots=3daytmp,3dayti,3daydp,3dayrh,3dayvel,3daywind';
		var cb='';
		currentSid=(new Date).getTime()+''+Math.random();//.substring(0,4)
		var device = 'mobile';
		var sUrl = 'http://www.xcskies.com/8094/?&yyyymmdd_ff='+yyyymmdd_ff+grate+pLat+pLon+plots+cb+'&tunit='+unitObj.temp_unit+'&wunit='+unitObj.windspeed_unit+'&lunit='+unitObj.vertspeed_unit+'&timeoffset='+myoffset+'&mod=x&hunit='+unitObj.height_unit+'&tracklog=&sid='+currentSid+'&device='+device+'&.xcpoint';
		var img = document.createElement("img");
	    img.src = sUrl;
	    showLoading();
	    set3DayOptions(currentSid,'3daytmp',img);
	    
    } else {
		alert('Place a marker on the map by clicking a location first.');
	}
}

function set3DayOptions(sid,plot,img){
	if(!img){
		var img = document.createElement("img");
    	img.src = '/tmp/'+plot+'_'+sid+'.gif';
	}
	img.onload=clearLoading;
	img.style.height = pointIH;
    img.style.width = pointIW;
	var div = document.getElementById('plotDiv');
	div.style.width=pointW;
	div.innerHTML='';
	div.style.visibility='visible';
	var html = '<div align="center"><a style="font-size:70%" href="javascript:void(0)" onclick="plotToggle();">Close Plot Window</a></div>';
	div.innerHTML = html;
	div.appendChild(img);
	var myplots = ['3daytmp','3dayti','3dayvel','3daydp','3daybs','3dayrh','3daywind'];
	var myplotsN = ['Temp/Lift','TI','Vert Vel','Dp','BS Ratio','RH','Wind'];
	html='<table width="100%" cellpadding="3" bgcolor="white" style="font-size:75%"><tr><td><div>Legend:</div></td><td><img src="/images/windkey.gif"/></td><td>Red - Top of usable lift (1.2 m/s)<br>Black - Thermal tops (TI~0)</td><td>White - Thermal top sensitivity(+2&deg;C)<br>Pink - Cu CCL (dew pt.)</td></tr></table>';
	html+='<div class="plot3dopt" align="center">';
	for (var i=0; i<myplots.length; i++) {
		html+= '<a href="javascript:void(0)" onclick="set3DayOptions(\''+sid+'\',\''+myplots[i]+'\',null)">'+myplotsN[i]+'</a>&nbsp;';
	}
	html+='</div>';
	var div3d = document.createElement("div");
	var ll = getLL(d3Point.ll);
	html+='<div align="center" style="font-size:80%;"><a href="javascript:void(0)" onclick="getSkewt('+ll.lat+','+ll.lon+');">View skewT plot(s) for this location.</a></div>';
	getLLRev(d3Point.ll);
	div3d.innerHTML=html;
	div.appendChild(div3d);
	div3d.innerHTML+='<br><div class="selOpt" align="center"><a style="background:#999999" href="javascript:void(0)" onclick="plotToggle();">Close</a></div>';
	
	if(document.getElementById('map_canvas').offsetWidth<250 && togObj.hdtog==0){toggleMenu();}else{updateSize();}
	
}
function toggleRaob(){
	alert('todo');
}

function setRtTog(e){document.getElementById(e).style.background=tcolor;togObj[e]=1}
function removeRtTog(e){document.getElementById(e).style.background=mcolor;togObj[e]=0}
function isTogActive(e){if(togObj[e]==1){removeRtTog(e);return true}else{return false}}

function resizeMap() {
  var offset = 100.;
  var e = document.getElementById("map_canvas");
  //var e2 = document.getElementById("map2");
  var leftMenu = document.getElementById("layers");
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
     //Non-IE
     myWidth = window.innerWidth;
     myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
     //IE 6+ in 'standards compliant mode'
     myWidth = document.documentElement.clientWidth;
     myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
     //IE 4 compatible
     myWidth = document.body.clientWidth;
     myHeight = document.body.clientHeight;
  }
  var height = myHeight - offset - 55.;//-23
  e.style.height = (height-adHeight+20) + "px";
  //e2.style.height = (height-adHeight) + "px";
  leftMenu.style.height = (height+10) + "px";
  updateSize();
}
function webkitfix(){var z = map.getZoom();if(z<12){var i=1}else{var i=-1}map.zoomTo(z+i);map.zoomTo(z);}
window.onresize= resizeMap;

function updateSize(){
	map.updateSize();
	if(is_webkit){webkitfix()}
}

function getSkewt(lat,lon,wmoid) {
	if (wmoid==null){wmoid=''}
	if (lat==null){lat=''}
	if (lon==null){lon=''}
	var yyyymmdd = yyyymmdd_ff.substr(0,8);
	var xcastURL = '/cgi-bin/map/xcgmap_skewt.cgi?date='+yyyymmdd+'&date_fcast='+yyyymmdd_ff+'&lat='+lat+'&lon='+lon+'&offset='+myoffset+'&wmoid='+wmoid;
	myWindow = window.open(xcastURL, "skewtWindow", 'scrollbars,resizable=1,width=750,height=720');
}
function updateCsPos(e){
	if(!e) var e = window.event;
	var targetID='plotImg';
	var pos_x = e.offsetX ? (e.offsetX) : e.layerX - document.getElementById('plotImg').offsetLeft;
	var ofs = document.getElementById('plotImg').offsetLeft;
	if (pos_x < ofs+76 || pos_x > ofs+540-3){return}
	document.getElementById('myLine').style.left = pos_x.toString()+'px';
	var ix = pos_x-ofs-76+3;
	//make lat/long for overlay on map
	if (csObj.key=='undefined' || csObj['csLats'] == 'undefined'){return}
	var k = csObj.key;
	var thisLat = csObj['csLats'][ix];
	var thisLon = csObj['csLons'][ix];
	var thisElev = csObj['csElevs'][ix];
	var thisAngle = csObj['csAngles'][ix];
	var thisBlTop = csObj[k].csBltops[ix];
	var thisBlTopSens = csObj[k].csBltopsSens[ix];
	var thisLifttop = csObj[k].csLifttops[ix];
	var thisCutop = csObj[k].csCutops[ix];
	var thisDplevel = csObj[k].csDplevel[ix];
	var thisStemp = csObj[k].csStemps[ix];
	var thisVeg = csObj[k].csVegtypes[ix];
	var uh = unitObj.height_unit;
	if (uh=='feet'){
		thisElev = thisElev*3.28;
		thisBlTop = thisBlTop*3.28;
		thisBlTopSens = thisBlTopSens*3.28;
		thisLifttop = thisLifttop*3.28;
		thisCutop = thisCutop*3.28;
		thisDplevel = thisDplevel*3.28;
	}
	if (unitObj.temp_unit=='f'){
		thisStemp = (thisStemp * (9/5.)) + 32.;
	}
	if(uh=='feet'){uh='ft'}else{uh='m'}
	thisElev = Math.round(thisElev);
	thisBlTop = Math.round(thisBlTop);
	thisBlTopSens = Math.round(thisBlTopSens);
	thisLifttop = Math.round(thisLifttop);
	thisCutop = Math.round(thisCutop);
	thisDplevel = Math.round(thisDplevel);
	thisAngle = Math.round(thisAngle);
	if (thisCutop==thisDplevel){
		thisCutop = 'N/A';
	} else {
		thisCutop = thisCutop + ' / ' + (thisCutop-thisDplevel) +' ' + uh;;
	}
	thisStemp = Math.round(thisStemp*100)/100;
	
	
	document.getElementById('csMoLat').innerHTML = thisLat;
	document.getElementById('csMoLon').innerHTML = thisLon;
	document.getElementById('csMoElev').innerHTML = thisElev + ' ' + uh;
	document.getElementById('csMoBltop').innerHTML = thisBlTop + ' ' + uh;
	document.getElementById('csMoBltopSens').innerHTML = thisBlTopSens + ' ' + uh;
	document.getElementById('csMoLifttop').innerHTML = thisLifttop + ' ' + uh;
	document.getElementById('csMoCutop').innerHTML = thisCutop;
	document.getElementById('csMoDplevel').innerHTML = thisDplevel + ' ' + uh;
	document.getElementById('csMoStemp').innerHTML = thisStemp + ' ' + unitObj.temp_unit;
	document.getElementById('csMoVegtype').innerHTML = vegTypeNames[thisVeg];// + ' ' + thisVeg;
	document.getElementById('csMoAngle').innerHTML = thisAngle;
	
	//showPoint(thisLat,thisLon);
	trackMarker.moveTo(map.getLayerPxFromLonLat(getLLRev(new OpenLayers.LonLat(thisLon,thisLat))));
}

function mouseUpdate(e){
 document.onmousemove=updateCsPos;
}

function disableSelection(element) {
	element.onselectstart = function() {
	return false;
	};
	element.unselectable = "on";
	element.style.MozUserSelect = "none";
	element.style.cursor = "default";
}
function myLoad(){
	disableSelection(document.getElementById("myLine"));
	disableSelection(document.getElementById("plotImg"));
}

function mouseStop(e){
	//document.onmousemove=null;
	document.onmousemove=positiontip;
	document.onmousedown = null;
	document.onmouseup = null; 
}
function clearLoading(){
	var lds = document.getElementsByName('loadingBox');
	for (i=0;i<lds.length;i++){
		lds[i].parentNode.removeChild(lds[i]);
	}
}
function showLoading(){
	var d = document.createElement('a');
	d.name='loadingBox';
	d.setAttribute('name', 'loadingBox');
	d.setAttribute('id', 'loadingBox');
	d.innerHTML='Loading...';
	d.className='loading';
	document.body.appendChild(d);
}
function showWindow(i) {
	if (typeof(i)=='undefined'){i='popupWindow'}
   document.getElementById(i).style.visibility='visible';
   document.getElementById(i).style.left='280px';
   document.getElementById(i).style.top='70px';
}
function hideWindow(i) {
	if (typeof(i)=='undefined'){i='popupWindow'}
   document.getElementById(i).style.visibility='hidden';
   document.getElementById(i).style.left='-1000px';
   document.getElementById(i).style.top='-1000px';
}
