var gadgets={};;
var gadgets=gadgets||{};
gadgets.config=function(){var A=[];
return{register:function(D,C,B){var E=A[D];
if(!E){E=[];
A[D]=E
}E.push({validators:C||{},callback:B})
},get:function(B){if(B){return configuration[B]||{}
}return configuration
},init:function(D,K){configuration=D;
for(var B in A){if(A.hasOwnProperty(B)){var C=A[B],H=D[B];
for(var G=0,F=C.length;
G<F;
++G){var I=C[G];
if(H&&!K){var E=I.validators;
for(var J in E){if(E.hasOwnProperty(J)){if(!E[J](H[J])){throw new Error('Invalid config value "'+H[J]+'" for parameter "'+J+'" in component "'+B+'"')
}}}}if(I.callback){I.callback(D)
}}}}},EnumValidator:function(E){var D=[];
if(arguments.length>1){for(var C=0,B;
(B=arguments[C]);
++C){D.push(B)
}}else{D=E
}return function(G){for(var F=0,H;
(H=D[F]);
++F){if(G===D[F]){return true
}}}
},RegExValidator:function(B){return function(C){return B.test(C)
}
},ExistsValidator:function(B){return typeof B!=="undefined"
},NonEmptyStringValidator:function(B){return typeof B==="string"&&B.length>0
},BooleanValidator:function(B){return typeof B==="boolean"
},LikeValidator:function(B){return function(D){for(var E in B){if(B.hasOwnProperty(E)){var C=B[E];
if(!C(D[E])){return false
}}}return true
}
}}
}();;
var gadgets=gadgets||{};
gadgets.util=function(){function G(){var L;
var K=document.location.href;
var I=K.indexOf("?");
var J=K.indexOf("#");
if(J===-1){L=K.substr(I+1)
}else{L=[K.substr(I+1,J-I-1),"&",K.substr(J+1)].join("")
}return L.split("&")
}var E=null;
var D={};
var C={};
var F=[];
var A={0:false,10:true,13:true,34:true,39:true,60:true,62:true,92:true,8232:true,8233:true};
function B(I,J){return String.fromCharCode(J)
}function H(I){D=I["core.util"]||{}
}if(gadgets.config){gadgets.config.register("core.util",null,H)
}return{getUrlParameters:function(){if(E!==null){return E
}E={};
var L=G();
var O=window.decodeURIComponent?decodeURIComponent:unescape;
for(var J=0,I=L.length;
J<I;
++J){var N=L[J].indexOf("=");
if(N===-1){continue
}var M=L[J].substring(0,N);
var K=L[J].substring(N+1);
K=K.replace(/\+/g," ");
E[M]=O(K)
}return E
},makeClosure:function(L,N,M){var K=[];
for(var J=2,I=arguments.length;
J<I;
++J){K.push(arguments[J])
}return function(){var O=K.slice();
for(var Q=0,P=arguments.length;
Q<P;
++Q){O.push(arguments[Q])
}return N.apply(L,O)
}
},makeEnum:function(J){var L={};
for(var K=0,I;
(I=J[K]);
++K){L[I]=I
}return L
},getFeatureParameters:function(I){return typeof D[I]==="undefined"?null:D[I]
},hasFeature:function(I){return typeof D[I]!=="undefined"
},getServices:function(){return C
},registerOnLoadHandler:function(I){F.push(I)
},runOnLoadHandlers:function(){for(var J=0,I=F.length;
J<I;
++J){F[J]()
}},escape:function(I,M){if(!I){return I
}else{if(typeof I==="string"){return gadgets.util.escapeString(I)
}else{if(typeof I==="array"){for(var L=0,J=I.length;
L<J;
++L){I[L]=gadgets.util.escape(I[L])
}}else{if(typeof I==="object"&&M){var K={};
for(var N in I){if(I.hasOwnProperty(N)){K[gadgets.util.escapeString(N)]=gadgets.util.escape(I[N],true)
}}return K
}}}}return I
},escapeString:function(M){var J=[],L,N;
for(var K=0,I=M.length;
K<I;
++K){L=M.charCodeAt(K);
N=A[L];
if(N===true){J.push("&#",L,";")
}else{if(N!==false){J.push(M.charAt(K))
}}}return J.join("")
},unescapeString:function(I){return I.replace(/&#([0-9]+);/g,B)
}}
}();
gadgets.util.getUrlParameters();;
var shindig=shindig||{};
shindig.Auth=function(){var authToken=null;
var trusted=null;
function addParamsToToken(urlParams){var args=authToken.split("&");
for(var i=0;
i<args.length;
i++){var nameAndValue=args[i].split("=");
if(nameAndValue.length===2){var name=nameAndValue[0];
var value=nameAndValue[1];
if(value==="$"){value=encodeURIComponent(urlParams[name]);
args[i]=name+"="+value
}}}authToken=args.join("&")
}function init(configuration){var urlParams=gadgets.util.getUrlParameters();
var config=configuration["shindig.auth"]||{};
if(config.authToken){authToken=config.authToken
}else{if(urlParams.st){authToken=urlParams.st
}}if(authToken!==null){addParamsToToken(urlParams)
}if(config.trustedJson){trusted=eval("("+config.trustedJson+")")
}}gadgets.config.register("shindig.auth",null,init);
return{getSecurityToken:function(){return authToken
},updateSecurityToken:function(newToken){authToken=newToken
},getTrustedData:function(){return trusted
}}
};;
var shindig=shindig||{};
shindig.auth=new shindig.Auth();;
var gadgets=gadgets||{};
if(window.JSON){gadgets.json={parse:function(B){try{return window.JSON.parse(B)
}catch(A){return false
}},stringify:function(B){try{return window.JSON.stringify(B)
}catch(A){return null
}}}
}else{gadgets.json=function(){function f(n){return n<10?"0"+n:n
}Date.prototype.toJSON=function(){return[this.getUTCFullYear(),"-",f(this.getUTCMonth()+1),"-",f(this.getUTCDate()),"T",f(this.getUTCHours()),":",f(this.getUTCMinutes()),":",f(this.getUTCSeconds()),"Z"].join("")
};
var m={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};
function stringify(value){var a,i,k,l,r=/["\\\x00-\x1f\x7f-\x9f]/g,v;
switch(typeof value){case"string":return r.test(value)?'"'+value.replace(r,function(a){var c=m[a];
if(c){return c
}c=a.charCodeAt();
return"\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16)
})+'"':'"'+value+'"';
case"number":return isFinite(value)?String(value):"null";
case"boolean":case"null":return String(value);
case"object":if(!value){return"null"
}a=[];
if(typeof value.length==="number"&&!value.propertyIsEnumerable("length")){l=value.length;
for(i=0;
i<l;
i+=1){a.push(stringify(value[i])||"null")
}return"["+a.join(",")+"]"
}for(k in value){if(value.hasOwnProperty(k)){if(typeof k==="string"){v=stringify(value[k]);
if(v){a.push(stringify(k)+":"+v)
}}}}return"{"+a.join(",")+"}"
}}return{stringify:stringify,parse:function(text){if(/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/b-u]/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){return eval("("+text+")")
}return false
}}
}()
};;
var gadgets=gadgets||{};
gadgets.io=function(){var config={};
var oauthState;
function makeXhr(){if(window.XMLHttpRequest){return new window.XMLHttpRequest()
}else{if(window.ActiveXObject){var x=new ActiveXObject("Msxml2.XMLHTTP");
if(!x){x=new ActiveXObject("Microsoft.XMLHTTP")
}return x
}}}function hadError(xobj,callback){if(xobj.readyState!==4){return true
}try{if(xobj.status!==200){callback({errors:["Error "+xobj.status]});
return true
}}catch(e){callback({errors:["Error not specified"]});
return true
}return false
}function processNonProxiedResponse(url,callback,params,xobj){if(hadError(xobj,callback)){return 
}var data={body:xobj.responseText};
callback(transformResponseData(params,data))
}var UNPARSEABLE_CRUFT="throw 1; < don't be evil' >";
function processResponse(url,callback,params,xobj){if(hadError(xobj,callback)){return 
}var txt=xobj.responseText;
txt=txt.substr(UNPARSEABLE_CRUFT.length);
var data=eval("("+txt+")");
data=data[url];
if(data.oauthState){oauthState=data.oauthState
}if(data.st){shindig.auth.updateSecurityToken(data.st)
}callback(transformResponseData(params,data))
}function transformResponseData(params,data){var resp={text:data.body,rc:data.rc,headers:data.headers,oauthApprovalUrl:data.oauthApprovalUrl,oauthError:data.oauthError,oauthErrorText:data.oauthErrorText,errors:[]};
if(resp.text){switch(params.CONTENT_TYPE){case"JSON":case"FEED":resp.data=gadgets.json.parse(resp.text);
if(!resp.data){resp.errors.push("failed to parse JSON");
resp.data=null
}break;
case"DOM":var dom;
if(window.ActiveXObject){dom=new ActiveXObject("Microsoft.XMLDOM");
dom.async=false;
dom.validateOnParse=false;
dom.resolveExternals=false;
if(!dom.loadXML(resp.text)){resp.errors.push("failed to parse XML")
}else{resp.data=dom
}}else{var parser=new DOMParser();
dom=parser.parseFromString(resp.text,"text/xml");
if("parsererror"===dom.documentElement.nodeName){resp.errors.push("failed to parse XML")
}else{resp.data=dom
}}break;
default:resp.data=resp.text;
break
}}return resp
}function makeXhrRequest(realUrl,proxyUrl,callback,paramData,method,params,processResponseFunction,opt_contentType){var xhr=makeXhr();
if(proxyUrl.indexOf("//")==0){proxyUrl=document.location.protocol+proxyUrl
}xhr.open(method,proxyUrl,true);
if(callback){xhr.onreadystatechange=gadgets.util.makeClosure(null,processResponseFunction,realUrl,callback,params,xhr)
}if(paramData!==null){xhr.setRequestHeader("Content-Type",opt_contentType||"application/x-www-form-urlencoded");
xhr.send(paramData)
}else{xhr.send(null)
}}function respondWithPreload(postData,params,callback){if(gadgets.io.preloaded_&&postData.httpMethod==="GET"){for(var i=0;
i<gadgets.io.preloaded_.length;
i++){var preload=gadgets.io.preloaded_[i];
if(preload&&(preload.id===postData.url)){delete gadgets.io.preloaded_[i];
if(preload.rc!==200){callback({errors:["Error "+preload.rc]})
}else{if(preload.oauthState){oauthState=preload.oauthState
}var resp={body:preload.body,rc:preload.rc,headers:preload.headers,oauthApprovalUrl:preload.oauthApprovalUrl,oauthError:preload.oauthError,oauthErrorText:preload.oauthErrorText,errors:[]};
callback(transformResponseData(params,resp))
}return true
}}}return false
}function init(configuration){config=configuration["core.io"]||{}
}var requiredConfig={proxyUrl:new gadgets.config.RegExValidator(/.*%(raw)?url%.*/),jsonProxyUrl:gadgets.config.NonEmptyStringValidator};
gadgets.config.register("core.io",requiredConfig,init);
return{makeRequest:function(url,callback,opt_params){var params=opt_params||{};
var httpMethod=params.METHOD||"GET";
var refreshInterval=params.REFRESH_INTERVAL;
var auth,st;
if(params.AUTHORIZATION&&params.AUTHORIZATION!=="NONE"){auth=params.AUTHORIZATION.toLowerCase();
st=shindig.auth.getSecurityToken()
}else{if(httpMethod==="GET"&&refreshInterval===undefined){refreshInterval=3600
}}var signOwner=true;
if(typeof params.OWNER_SIGNED!=="undefined"){signOwner=params.OWNER_SIGNED
}var signViewer=true;
if(typeof params.VIEWER_SIGNED!=="undefined"){signViewer=params.VIEWER_SIGNED
}var headers=params.HEADERS||{};
if(httpMethod==="POST"&&!headers["Content-Type"]){headers["Content-Type"]="application/x-www-form-urlencoded"
}var urlParams=gadgets.util.getUrlParameters();
var paramData={url:url,httpMethod:httpMethod,headers:gadgets.io.encodeValues(headers,false),postData:params.POST_DATA||"",authz:auth||"",st:st||"",contentType:params.CONTENT_TYPE||"TEXT",numEntries:params.NUM_ENTRIES||"3",getSummaries:!!params.GET_SUMMARIES,signOwner:signOwner,signViewer:signViewer,gadget:urlParams.url,container:urlParams.container||urlParams.synd||"default",bypassSpecCache:gadgets.util.getUrlParameters().nocache||""};
if(auth==="oauth"||auth==="signed"){paramData.oauthState=oauthState||"";
for(opt in params){if(params.hasOwnProperty(opt)){if(opt.indexOf("OAUTH_")===0){paramData[opt]=params[opt]
}}}}var proxyUrl=config.jsonProxyUrl.replace("%host%",document.location.host);
if(!respondWithPreload(paramData,params,callback,processResponse)){if(httpMethod==="GET"&&refreshInterval>0){var extraparams="?refresh="+refreshInterval+"&"+gadgets.io.encodeValues(paramData);
makeXhrRequest(url,proxyUrl+extraparams,callback,null,"GET",params,processResponse)
}else{makeXhrRequest(url,proxyUrl,callback,gadgets.io.encodeValues(paramData),"POST",params,processResponse)
}}},makeNonProxiedRequest:function(relativeUrl,callback,opt_params,opt_contentType){var params=opt_params||{};
makeXhrRequest(relativeUrl,relativeUrl,callback,params.POST_DATA,params.METHOD,params,processNonProxiedResponse,opt_contentType)
},clearOAuthState:function(){oauthState=undefined
},encodeValues:function(fields,opt_noEscaping){var escape=!opt_noEscaping;
var buf=[];
var first=false;
for(var i in fields){if(fields.hasOwnProperty(i)){if(!first){first=true
}else{buf.push("&")
}buf.push(escape?encodeURIComponent(i):i);
buf.push("=");
buf.push(escape?encodeURIComponent(fields[i]):fields[i])
}}return buf.join("")
},getProxyUrl:function(url,opt_params){var params=opt_params||{};
var refresh=params.REFRESH_INTERVAL;
if(refresh===undefined){refresh="3600"
}var urlParams=gadgets.util.getUrlParameters();
return config.proxyUrl.replace("%url%",encodeURIComponent(url)).replace("%host%",document.location.host).replace("%rawurl%",url).replace("%refresh%",encodeURIComponent(refresh)).replace("%gadget%",encodeURIComponent(urlParams.url)).replace("%container%",encodeURIComponent(urlParams.container||urlParams.synd))
}}
}();
gadgets.io.RequestParameters=gadgets.util.makeEnum(["METHOD","CONTENT_TYPE","POST_DATA","HEADERS","AUTHORIZATION","NUM_ENTRIES","GET_SUMMARIES","REFRESH_INTERVAL","OAUTH_SERVICE_NAME","OAUTH_USE_TOKEN","OAUTH_TOKEN_NAME","OAUTH_REQUEST_TOKEN","OAUTH_REQUEST_TOKEN_SECRET"]);
gadgets.io.MethodType=gadgets.util.makeEnum(["GET","POST","PUT","DELETE","HEAD"]);
gadgets.io.ContentType=gadgets.util.makeEnum(["TEXT","DOM","JSON","FEED"]);
gadgets.io.AuthorizationType=gadgets.util.makeEnum(["NONE","SIGNED","OAUTH"]);;
var gadgets=gadgets||{};
gadgets.rpc=function(){var R="__cb";
var P="";
var d="__g2c_rpc";
var F="__c2g_rpc";
var H="GRPC____NIXVBS_wrapper";
var B="GRPC____NIXVBS_get_wrapper";
var Y="GRPC____NIXVBS_handle_message";
var O="GRPC____NIXVBS_create_channel";
var J={};
var C={};
var W=[];
var D={};
var U={};
var K={};
var M=0;
var e={};
var T={};
var E={};
var c={};
var I;
if(gadgets.util){c=gadgets.util.getUrlParameters()
}K[".."]=c.rpctoken||c.ifpctok||0;
function Z(){return typeof window.postMessage==="function"?"wpm":typeof document.postMessage==="function"?"dpm":window.ActiveXObject?"nix":navigator.product==="Gecko"?"fe":"ifpc"
}I=Z();
function S(h){if(h&&typeof h.s==="string"&&typeof h.f==="string"&&h.a instanceof Array){if(K[h.f]){if(K[h.f]!==h.t){throw new Error("Invalid auth token. "+K[h.f]+" vs "+h.t)
}}if(h.c){h.callback=function(i){gadgets.rpc.call(h.f,R,null,h.c,i)
}
}var g=(C[h.s]||C[P]).apply(h,h.a);
if(h.c&&typeof g!=="undefined"){gadgets.rpc.call(h.f,R,null,h.c,g)
}}}function b(){if(I==="dpm"||I==="wpm"){window.addEventListener("message",function(i){S(gadgets.json.parse(i.data))
},false)
}if(I==="nix"){if(typeof window[B]!=="unknown"){window[Y]=function(i){window.setTimeout(function(){S(gadgets.json.parse(i))
},0)
};
window[O]=function(i,k,j){if(K[i]===j){J[i]=k
}};
var g="Class "+H+"\n Private m_Intended\nPrivate m_Auth\nPublic Sub SetIntendedName(name)\n If isEmpty(m_Intended) Then\nm_Intended = name\nEnd If\nEnd Sub\nPublic Sub SetAuth(auth)\n If isEmpty(m_Auth) Then\nm_Auth = auth\nEnd If\nEnd Sub\nPublic Sub SendMessage(data)\n "+Y+"(data)\nEnd Sub\nPublic Function GetAuthToken()\n GetAuthToken = m_Auth\nEnd Function\nPublic Sub CreateChannel(channel, auth)\n Call "+O+"(m_Intended, channel, auth)\nEnd Sub\nEnd Class\nFunction "+B+"(name, auth)\nDim wrap\nSet wrap = New "+H+"\nwrap.SetIntendedName name\nwrap.SetAuth auth\nSet "+B+" = wrap\nEnd Function";
try{window.execScript(g,"vbscript")
}catch(h){I="ifpc"
}}}}b();
C[P]=function(){if(window.console&&window.console["log"]){window.console["log"]("Unknown RPC service: "+this.s)
}};
C[R]=function(h,g){var i=e[h];
if(i){delete e[h];
i(g)
}};
function N(h,g){var k;
if(T[h]){return 
}if(I==="fe"){try{k=document.getElementById(h);
k[d]=function(m){S(gadgets.json.parse(m))
}
}catch(j){}}if(I==="nix"){try{k=document.getElementById(h);
var l=window[B](h,g);
k.contentWindow.opener=l
}catch(i){}}T[h]=true
}function V(k){var m=gadgets.json.stringify;
var g=[];
for(var l=0,h=k.length;
l<h;
++l){g.push(encodeURIComponent(m(k[l])))
}return g.join("&")
}function L(k){var h;
for(var g=W.length-1;
g>=0;
--g){var l=W[g];
try{if(l&&(l.recyclable||l.readyState==="complete")){l.parentNode.removeChild(l);
if(window.ActiveXObject){W[g]=l=null;
W.splice(g,1)
}else{l.recyclable=false;
h=l;
break
}}}catch(j){}}if(!h){h=document.createElement("iframe");
h.style.border=h.style.width=h.style.height="0px";
h.style.visibility="hidden";
h.style.position="absolute";
h.onload=function(){this.recyclable=true
};
W.push(h)
}h.src=k;
setTimeout(function(){document.body.appendChild(h)
},0)
}function a(g,h,m,i,j){var l=gadgets.rpc.getRelayUrl(g);
if(!l){if(window.console&&window.console["log"]){window.console["log"]("No relay file assigned for IFPC")
}}var k=null;
if(U[g]){k=[l,"#",V([m,M,1,0,V([m,h,"","",m].concat(j))])].join("")
}else{k=[l,"#",g,"&",m,"@",M,"&1&0&",encodeURIComponent(i)].join("")
}L(k)
}function f(g,j,m,k){try{if(m!==".."){var i=J[".."];
if(!i&&window.opener&&"GetAuthToken" in window.opener){i=window.opener;
if(i.GetAuthToken()===K[".."]){var h=K[".."];
i.CreateChannel(window[B]("..",h),h);
J[".."]=i;
window.opener=null
}}if(i){i.SendMessage(k);
return 
}}else{if(J[g]){J[g].SendMessage(k);
return 
}}}catch(l){}a(g,j,m,k)
}function A(h,i,n,j,l){try{if(n!==".."){var g=window.frameElement;
if(typeof g[d]==="function"){if(typeof g[d][F]!=="function"){g[d][F]=function(o){S(gadgets.json.parse(o))
}
}g[d](j);
return 
}}else{var m=document.getElementById(h);
if(typeof m[d]==="function"&&typeof m[d][F]==="function"){m[d][F](j);
return 
}}}catch(k){}a(h,i,n,j,l)
}function G(h,j){if(typeof E[h]==="undefined"){E[h]=false;
var i=null;
if(h===".."){i=parent
}else{i=frames[h]
}try{E[h]=i.gadgets.rpc.receiveSameDomain
}catch(g){}}if(typeof E[h]==="function"){E[h](j);
return true
}return false
}if(gadgets.config){function X(g){if(g.rpc.parentRelayUrl.substring(0,7)==="http://"){D[".."]=g.rpc.parentRelayUrl
}else{var i=gadgets.util.getUrlParameters();
var h=i.parent||"";
if(h!==""){D[".."]=h+g.rpc.parentRelayUrl
}}U[".."]=!!g.rpc.useLegacyProtocol
}var Q={parentRelayUrl:gadgets.config.NonEmptyStringValidator};
gadgets.config.register("rpc",Q,X)
}return{register:function(h,g){if(h===R){throw new Error("Cannot overwrite callback service")
}if(h===P){throw new Error("Cannot overwrite default service: use registerDefault")
}C[h]=g
},unregister:function(g){if(g===R){throw new Error("Cannot delete callback service")
}if(g===P){throw new Error("Cannot delete default service: use unregisterDefault")
}delete C[g]
},registerDefault:function(g){C[""]=g
},unregisterDefault:function(){delete C[""]
},forceParentVerifiable:function(){if(I!=="wpm"){I="ifpc"
}},call:function(o,k,p,n){++M;
o=o||"..";
if(p){e[M]=p
}var m="..";
if(o===".."){m=window.name
}var j={s:k,f:m,c:p?M:0,a:Array.prototype.slice.call(arguments,3),t:K[o]};
if(G(o,j)){return 
}var h=gadgets.json.stringify(j);
var i=I;
if(U[o]){i="ifpc"
}switch(i){case"dpm":var q=o===".."?parent.document:frames[o].document;
q.postMessage(h);
break;
case"wpm":var l=o===".."?parent:frames[o];
var g=gadgets.rpc.getRelayUrl(o);
if(g){l.postMessage(h,g)
}break;
case"nix":f(o,k,m,h);
break;
case"fe":A(o,k,m,h,j.a);
break;
default:a(o,k,m,h,j.a);
break
}},getRelayUrl:function(h){var g=D[h];
if(g.indexOf("//")==0){g=document.location.protocol+g
}return g
},setRelayUrl:function(h,g,i){D[h]=g;
U[h]=!!i
},setAuthToken:function(g,h){h=h||"";
K[g]=String(h);
N(g,h)
},getRelayChannel:function(){return I
},receive:function(g){if(g.length>4){S(gadgets.json.parse(decodeURIComponent(g[g.length-1])))
}},receiveSameDomain:function(g){g.a=Array.prototype.slice.call(g.a);
window.setTimeout(function(){S(g)
},0)
}}
}();;
