if(window.jstiming){window.jstiming.beaconImageReferences_={};window.jstiming.nextImageId_=1;function getTick(k,b,j){var f=k.t[b];if(!f)return undefined;if(j!=undefined)var i=j;else i=k.t.start;return f-i}window.jstiming.report=function(k,b,j){var f="";if(window.jstiming.pt){f+="&srt="+window.jstiming.pt;delete window.jstiming.pt}try{if(window.external.tran)f+="&tran="+window.external.tran}catch(i){}var o=k.t,l=o.start,r=[];for(var D in o)D=="start"||l&&r.push(D+"."+getTick(k,D));delete o.start;if(b)for(var F in b)f+=
"&"+F+"="+b[F];var H=new Image,A=window.jstiming.nextImageId_++;window.jstiming.beaconImageReferences_[A]=H;H.onload=H.onerror=function(){delete window.jstiming.beaconImageReferences_[A]};H.src=[j?j:"http://csi.gstatic.com/csi","?v=3","&s="+(window.jstiming.sn?window.jstiming.sn:"codesite")+"&action=",k.name,f,"&rt=",r.join(",")].join("");H=null}};/*
 jQuery 1.2.3 - New Wave Javascript

 Copyright (c) 2008 John Resig (jquery.com)
 Dual licensed under the MIT (MIT-LICENSE.txt)
 and GPL (GPL-LICENSE.txt) licenses.

 $Date: 2008/07/03 $
 $Rev: 4663 $
*/
(function(){if(window.jQuery)var k=window.jQuery;var b=window.jQuery=function(a,c){return new b.prototype.init(a,c)};if(window.$)var j=window.$;window.$=b;var f=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,i=/^.[^:#\[\.]*$/;b.fn=b.prototype={init:function(a,c){a=a||document;if(a.nodeType){this[0]=a;this.length=1;return this}else if(typeof a=="string"){var d=f.exec(a);if(d&&(d[1]||!c))if(d[1])a=b.clean([d[1]],c);else{var e=document.getElementById(d[3]);if(e)if(e.id!=d[3])return b().find(a);else{this[0]=e;this.length=
1;return this}else a=[]}else return(new b(c)).find(a)}else if(b.isFunction(a))return(new b(document))[b.fn.ready?"ready":"load"](a);return this.setArray(a.constructor==Array&&a||(a.jquery||a.length&&a!=window&&!a.nodeType&&a[0]!=undefined&&a[0].nodeType)&&b.makeArray(a)||[a])},jquery:"1.2.3",size:function(){return this.length},length:0,get:function(a){return a==undefined?b.makeArray(this):this[a]},pushStack:function(a){var c=b(a);c.prevObject=this;return c},setArray:function(a){this.length=0;Array.prototype.push.apply(this,
a);return this},each:function(a,c){return b.each(this,a,c)},index:function(a){var c=-1;this.each(function(d){if(this==a)c=d});return c},attr:function(a,c,d){var e=a;if(a.constructor==String)if(c==undefined)return this.length&&b[d||"attr"](this[0],a)||undefined;else{e={};e[a]=c}return this.each(function(g){for(a in e)b.attr(d?this.style:this,a,b.prop(this,e[a],d,g,a))})},css:function(a,c){if((a=="width"||a=="height")&&parseFloat(c)<0)c=undefined;return this.attr(a,c,"curCSS")},text:function(a){if(typeof a!=
"object"&&a!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(a));var c="";b.each(a||this,function(){b.each(this.childNodes,function(){if(this.nodeType!=8)c+=this.nodeType!=1?this.nodeValue:b.fn.text([this])})});return c},wrapAll:function(a){this[0]&&b(a,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){for(var c=this;c.firstChild;)c=c.firstChild;return c}).append(this);return this},wrap:function(a){return this.each(function(){b(this).wrapAll(a)})},
append:function(){return this.domManip(arguments,true,false,function(a){this.nodeType==1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,true,function(a){this.nodeType==1&&this.insertBefore(a,this.firstChild)})},before:function(){return this.domManip(arguments,false,false,function(a){this.parentNode.insertBefore(a,this)})},end:function(){return this.prevObject||b([])},find:function(a){var c=b.map(this,function(d){return b.find(a,d)});return this.pushStack(/[^+>] [^+>]/.test(a)||
a.indexOf("..")>-1?b.unique(c):c)},clone:function(a){var c=this.map(function(){if(b.browser.msie&&!b.isXMLDoc(this)){var e=this.cloneNode(true),g=document.createElement("div");g.appendChild(e);return b.clean([g.innerHTML])[0]}else return this.cloneNode(true)}),d=c.find("*").andSelf().each(function(){if(this[l]!=undefined)this[l]=null});a===true&&this.find("*").andSelf().each(function(e){if(!(this.nodeType==3)){var g=b.data(this,"events");for(var h in g)for(var m in g[h])b.event.add(d[e],h,g[h][m],
g[h][m].data)}});return c},filter:function(a){return this.pushStack(b.isFunction(a)&&b.grep(this,function(c,d){return a.call(c,d)})||b.multiFilter(a,this))},not:function(a){if(a.constructor==String)if(i.test(a))return this.pushStack(b.multiFilter(a,this,true));else a=b.multiFilter(a,this);var c=a.length&&a[a.length-1]!==undefined&&!a.nodeType;return this.filter(function(){return c?b.inArray(this,a)<0:this!=a})},add:function(a){return!a?this:this.pushStack(b.merge(this.get(),a.constructor==String?
b(a).get():a.length!=undefined&&(!a.nodeName||b.nodeName(a,"form"))?a:[a]))},is:function(a){return a?b.multiFilter(a,this).length>0:false},hasClass:function(a){return this.is("."+a)},val:function(a){if(a==undefined){if(this.length){var c=this[0];if(b.nodeName(c,"select")){var d=c.selectedIndex,e=[],g=c.options,h=c.type=="select-one";if(d<0)return null;for(var m=h?d:0,v=h?d+1:g.length;m<v;m++){var q=g[m];if(q.selected){a=b.browser.msie&&!q.attributes.value.specified?q.text:q.value;if(h)return a;e.push(a)}}return e}else return(this[0].value||
"").replace(/\r/g,"")}return undefined}return this.each(function(){if(!(this.nodeType!=1))if(a.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=b.inArray(this.value,a)>=0||b.inArray(this.name,a)>=0;else if(b.nodeName(this,"select")){var t=a.constructor==Array?a:[a];b("option",this).each(function(){this.selected=b.inArray(this.value,t)>=0||b.inArray(this.text,t)>=0});if(!t.length)this.selectedIndex=-1}else this.value=a})},html:function(a){return a==undefined?this.length?this[0].innerHTML:
null:this.empty().append(a)},eq:function(a){return this.slice(a,a+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments))},map:function(a){return this.pushStack(b.map(this,function(c,d){return a.call(c,d,c)}))},andSelf:function(){return this.add(this.prevObject)},data:function(a,c){var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(c==null){var e=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(e==undefined&&this.length)e=b.data(this[0],a);return e==null&&d[1]?this.data(d[0]):
e}else return this.trigger("setData"+d[1]+"!",[d[0],c]).each(function(){b.data(this,a,c)})},removeData:function(a){return this.each(function(){b.removeData(this,a)})},domManip:function(a,c,d,e){var g=this.length>1,h;return this.each(function(){if(!h){h=b.clean(a,this.ownerDocument);d&&h.reverse()}var m=this;if(c&&b.nodeName(this,"table")&&b.nodeName(h[0],"tr"))m=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var v=b([]);b.each(h,function(){var q=
g?b(this).clone(true)[0]:this;if(b.nodeName(q,"script"))v=v.add(q);else{if(q.nodeType==1)v=v.add(b("script",q).remove());e.call(m,q)}});v.each(o)})}};b.prototype.init.prototype=b.prototype;function o(a,c){c.src?b.ajax({url:c.src,async:false,dataType:"script"}):b.globalEval(c.text||c.textContent||c.innerHTML||"");c.parentNode&&c.parentNode.removeChild(c)}b.extend=b.fn.extend=function(){var a=arguments[0]||{},c=1,d=arguments.length,e=false,g;if(a.constructor==Boolean){e=a;a=arguments[1]||{};c=2}if(typeof a!=
"object"&&typeof a!="function")a={};if(d==1){a=this;c=0}for(;c<d;c++)if((g=arguments[c])!=null)for(var h in g)if(!(a===g[h]))if(e&&g[h]&&typeof g[h]=="object"&&a[h]&&!g[h].nodeType)a[h]=b.extend(a[h],g[h]);else if(g[h]!=undefined)a[h]=g[h];return a};var l="jQuery"+(new Date).getTime(),r=0,D={},F=/z-?index|font-?weight|opacity|zoom|line-?height/i;b.extend({noConflict:function(a){window.$=j;if(a)window.jQuery=k;return b},isFunction:function(a){return!!a&&typeof a!="string"&&!a.nodeName&&a.constructor!=
Array&&/function/i.test(a+"")},isXMLDoc:function(a){return a.documentElement&&!a.body||a.tagName&&a.ownerDocument&&!a.ownerDocument.body},globalEval:function(a){if(a=b.trim(a)){var c=document.getElementsByTagName("head")[0]||document.documentElement,d=document.createElement("script");d.type="text/javascript";if(b.browser.msie)d.text=a;else d.appendChild(document.createTextNode(a));c.appendChild(d);c.removeChild(d)}},nodeName:function(a,c){return a.nodeName&&a.nodeName.toUpperCase()==c.toUpperCase()},
cache:{},data:function(a,c,d){a=a==window?D:a;var e=a[l];e||(e=a[l]=++r);if(c&&!b.cache[e])b.cache[e]={};if(d!=undefined)b.cache[e][c]=d;return c?b.cache[e][c]:e},removeData:function(a,c){a=a==window?D:a;var d=a[l];if(c){if(b.cache[d]){delete b.cache[d][c];c="";for(c in b.cache[d])break;c||b.removeData(a)}}else{try{delete a[l]}catch(e){a.removeAttribute&&a.removeAttribute(l)}delete b.cache[d]}},each:function(a,c,d){if(d)if(a.length==undefined)for(var e in a){if(c.apply(a[e],d)===false)break}else for(var g=
0,h=a.length;g<h;g++){if(c.apply(a[g],d)===false)break}else if(a.length==undefined)for(e in a){if(c.call(a[e],e,a[e])===false)break}else{g=0;h=a.length;for(var m=a[0];g<h&&c.call(m,g,m)!==false;m=a[++g]);}return a},prop:function(a,c,d,e,g){if(b.isFunction(c))c=c.call(a,e);return c&&c.constructor==Number&&d=="curCSS"&&!F.test(g)?c+"px":c},className:{add:function(a,c){b.each((c||"").split(/\s+/),function(d,e){if(a.nodeType==1&&!b.className.has(a.className,e))a.className+=(a.className?" ":"")+e})},remove:function(a,
c){if(a.nodeType==1)a.className=c!=undefined?b.grep(a.className.split(/\s+/),function(d){return!b.className.has(c,d)}).join(" "):""},has:function(a,c){return b.inArray(c,(a.className||a).toString().split(/\s+/))>-1}},swap:function(a,c,d){var e={};for(var g in c){e[g]=a.style[g];a.style[g]=c[g]}d.call(a);for(g in c)a.style[g]=e[g]},css:function(a,c,d){if(c=="width"||c=="height"){var e,g={position:"absolute",visibility:"hidden",display:"block"},h=c=="width"?["Left","Right"]:["Top","Bottom"];function m(){e=
c=="width"?a.offsetWidth:a.offsetHeight;var v=0,q=0;b.each(h,function(){v+=parseFloat(b.curCSS(a,"padding"+this,true))||0;q+=parseFloat(b.curCSS(a,"border"+this+"Width",true))||0});e-=Math.round(v+q)}b(a).is(":visible")?m():b.swap(a,g,m);return Math.max(0,e)}return b.curCSS(a,c,d)},curCSS:function(a,c,d){var e;function g(X){if(!b.browser.safari)return false;var T=document.defaultView.getComputedStyle(X,null);return!T||T.getPropertyValue("color")==""}if(c=="opacity"&&b.browser.msie){e=b.attr(a.style,
"opacity");return e==""?"1":e}if(b.browser.opera&&c=="display"){var h=a.style.outline;a.style.outline="0 solid black";a.style.outline=h}if(c.match(/float/i))c=A;if(!d&&a.style&&a.style[c])e=a.style[c];else if(document.defaultView&&document.defaultView.getComputedStyle){if(c.match(/float/i))c="float";c=c.replace(/([A-Z])/g,"-$1").toLowerCase();var m=document.defaultView.getComputedStyle(a,null);if(m&&!g(a))e=m.getPropertyValue(c);else{for(var v=[],q=[],t=a;t&&g(t);t=t.parentNode)q.unshift(t);for(var B=
0;B<q.length;B++)if(g(q[B])){v[B]=q[B].style.display;q[B].style.display="block"}e=c=="display"&&v[q.length-1]!=null?"none":m&&m.getPropertyValue(c)||"";for(B=0;B<v.length;B++)if(v[B]!=null)q[B].style.display=v[B]}if(c=="opacity"&&e=="")e="1"}else if(a.currentStyle){var x=c.replace(/\-(\w)/g,function(X,T){return T.toUpperCase()});e=a.currentStyle[c]||a.currentStyle[x];if(!/^\d+(px)?$/i.test(e)&&/^\d/.test(e)){var Q=a.style.left,R=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;a.style.left=
e||0;e=a.style.pixelLeft+"px";a.style.left=Q;a.runtimeStyle.left=R}}return e},clean:function(a,c){var d=[];c=c||document;if(typeof c.createElement=="undefined")c=c.ownerDocument||c[0]&&c[0].ownerDocument||document;b.each(a,function(e,g){if(g){if(g.constructor==Number)g=g.toString();if(typeof g=="string"){g=g.replace(/(<(\w+)[^>]*?)\/>/g,function(B,x,Q){return Q.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?B:x+"></"+Q+">"});var h=b.trim(g).toLowerCase(),m=c.createElement("div"),
v=!h.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!h.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||h.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!h.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!h.indexOf("<td")||!h.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!h.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||b.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];for(m.innerHTML=v[1]+g+v[2];v[0]--;)m=
m.lastChild;if(b.browser.msie){for(var q=!h.indexOf("<table")&&h.indexOf("<tbody")<0?m.firstChild&&m.firstChild.childNodes:v[1]=="<table>"&&h.indexOf("<tbody")<0?m.childNodes:[],t=q.length-1;t>=0;--t)b.nodeName(q[t],"tbody")&&!q[t].childNodes.length&&q[t].parentNode.removeChild(q[t]);/^\s/.test(g)&&m.insertBefore(c.createTextNode(g.match(/^\s*/)[0]),m.firstChild)}g=b.makeArray(m.childNodes)}if(!(g.length===0&&!b.nodeName(g,"form")&&!b.nodeName(g,"select")))if(g[0]==undefined||b.nodeName(g,"form")||
g.options)d.push(g);else d=b.merge(d,g)}});return d},attr:function(a,c,d){if(!a||a.nodeType==3||a.nodeType==8)return undefined;var e=b.isXMLDoc(a)?{}:b.props;if(e[c]){if(d!=undefined)a[e[c]]=d;return a[e[c]]}else if(b.browser.msie&&c=="style")return b.attr(a.style,"cssText",d);else if(d==undefined&&b.browser.msie&&b.nodeName(a,"form")&&(c=="action"||c=="method"))return a.getAttributeNode(c).nodeValue;else if(a.tagName){if(d!=undefined){if(c=="type"&&b.nodeName(a,"input")&&a.parentNode)throw"type property can't be changed";
a.setAttribute(c,""+d)}if(b.browser.msie&&/href|src/.test(c)&&!b.isXMLDoc(a))return a.getAttribute(c,2);return a.getAttribute(c)}else{if(c=="opacity"&&b.browser.msie){if(d!=undefined){a.zoom=1;a.filter=(a.filter||"").replace(/alpha\([^)]*\)/,"")+(parseFloat(d).toString()=="NaN"?"":"alpha(opacity="+d*100+")")}return a.filter&&a.filter.indexOf("opacity=")>=0?(parseFloat(a.filter.match(/opacity=([^)]*)/)[1])/100).toString():""}c=c.replace(/-([a-z])/ig,function(g,h){return h.toUpperCase()});if(d!=undefined)a[c]=
d;return a[c]}},trim:function(a){return(a||"").replace(/^\s+|\s+$/g,"")},makeArray:function(a){var c=[];if(typeof a!="array")for(var d=0,e=a.length;d<e;d++)c.push(a[d]);else c=a.slice(0);return c},inArray:function(a,c){for(var d=0,e=c.length;d<e;d++)if(c[d]==a)return d;return-1},merge:function(a,c){if(b.browser.msie)for(var d=0;c[d];d++)c[d].nodeType!=8&&a.push(c[d]);else for(d=0;c[d];d++)a.push(c[d]);return a},unique:function(a){var c=[],d={};try{for(var e=0,g=a.length;e<g;e++){var h=b.data(a[e]);
if(!d[h]){d[h]=true;c.push(a[e])}}}catch(m){c=a}return c},grep:function(a,c,d){for(var e=[],g=0,h=a.length;g<h;g++)if(!d&&c(a[g],g)||d&&!c(a[g],g))e.push(a[g]);return e},map:function(a,c){for(var d=[],e=0,g=a.length;e<g;e++){var h=c(a[e],e);if(h!==null&&h!=undefined){if(h.constructor!=Array)h=[h];d=d.concat(h)}}return d}});var H=navigator.userAgent.toLowerCase();b.browser={version:(H.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(H),opera:/opera/.test(H),msie:/msie/.test(H)&&
!/opera/.test(H),mozilla:/mozilla/.test(H)&&!/(compatible|webkit)/.test(H)};var A=b.browser.msie?"styleFloat":"cssFloat";b.extend({boxModel:!b.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":A,cssFloat:A,styleFloat:A,innerHTML:"innerHTML",className:"className",value:"value",disabled:"disabled",checked:"checked",readonly:"readOnly",selected:"selected",maxlength:"maxLength",selectedIndex:"selectedIndex",defaultValue:"defaultValue",tagName:"tagName",
nodeName:"nodeName"}});b.each({parent:function(a){return a.parentNode},parents:function(a){return b.dir(a,"parentNode")},next:function(a){return b.nth(a,2,"nextSibling")},prev:function(a){return b.nth(a,2,"previousSibling")},nextAll:function(a){return b.dir(a,"nextSibling")},prevAll:function(a){return b.dir(a,"previousSibling")},siblings:function(a){return b.sibling(a.parentNode.firstChild,a)},children:function(a){return b.sibling(a.firstChild)},contents:function(a){return b.nodeName(a,"iframe")?
a.contentDocument||a.contentWindow.document:b.makeArray(a.childNodes)}},function(a,c){b.fn[a]=function(d){var e=b.map(this,c);if(d&&typeof d=="string")e=b.multiFilter(d,e);return this.pushStack(b.unique(e))}});b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,c){b.fn[a]=function(){var d=arguments;return this.each(function(){for(var e=0,g=d.length;e<g;e++)b(d[e])[c](this)})}});b.each({removeAttr:function(a){b.attr(this,a,"");
this.nodeType==1&&this.removeAttribute(a)},addClass:function(a){b.className.add(this,a)},removeClass:function(a){b.className.remove(this,a)},toggleClass:function(a){b.className[b.className.has(this,a)?"remove":"add"](this,a)},remove:function(a){if(!a||b.filter(a,[this]).r.length){b("*",this).add(this).each(function(){b.event.remove(this);b.removeData(this)});this.parentNode&&this.parentNode.removeChild(this)}},empty:function(){for(b(">*",this).remove();this.firstChild;)this.removeChild(this.firstChild)}},
function(a,c){b.fn[a]=function(){return this.each(c,arguments)}});b.each(["Height","Width"],function(a,c){var d=c.toLowerCase();b.fn[d]=function(e){return this[0]==window?b.browser.opera&&document.body["client"+c]||b.browser.safari&&window["inner"+c]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+c]||document.body["client"+c]:this[0]==document?Math.max(Math.max(document.body["scroll"+c],document.documentElement["scroll"+c]),Math.max(document.body["offset"+c],document.documentElement["offset"+
c])):e==undefined?this.length?b.css(this[0],d):null:this.css(d,e.constructor==String?e:e+"px")}});var C=b.browser.safari&&parseInt(b.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uffff*_-]|\\\\.)",z=new RegExp("^>\\s*("+C+"+)"),K=new RegExp("^("+C+"+)(#)("+C+"+)"),M=new RegExp("^([#.]?)("+C+"*)");b.extend({expr:{"":function(a,c,d){return d[2]=="*"||b.nodeName(a,d[2])},"#":function(a,c,d){return a.getAttribute("id")==d[2]},":":{lt:function(a,c,d){return c<d[3]-0},gt:function(a,c,d){return c>
d[3]-0},nth:function(a,c,d){return d[3]-0==c},eq:function(a,c,d){return d[3]-0==c},first:function(a,c){return c==0},last:function(a,c,d,e){return c==e.length-1},even:function(a,c){return c%2==0},odd:function(a,c){return c%2},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a},"last-child":function(a){return b.nth(a.parentNode.lastChild,1,"previousSibling")==a},"only-child":function(a){return!b.nth(a.parentNode.lastChild,2,"previousSibling")},parent:function(a){return a.firstChild},
empty:function(a){return!a.firstChild},contains:function(a,c,d){return(a.textContent||a.innerText||b(a).text()||"").indexOf(d[3])>=0},visible:function(a){return"hidden"!=a.type&&b.css(a,"display")!="none"&&b.css(a,"visibility")!="hidden"},hidden:function(a){return"hidden"==a.type||b.css(a,"display")=="none"||b.css(a,"visibility")=="hidden"},enabled:function(a){return!a.disabled},disabled:function(a){return a.disabled},checked:function(a){return a.checked},selected:function(a){return a.selected||b.attr(a,
"selected")},text:function(a){return"text"==a.type},radio:function(a){return"radio"==a.type},checkbox:function(a){return"checkbox"==a.type},file:function(a){return"file"==a.type},password:function(a){return"password"==a.type},submit:function(a){return"submit"==a.type},image:function(a){return"image"==a.type},reset:function(a){return"reset"==a.type},button:function(a){return"button"==a.type||b.nodeName(a,"button")},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},has:function(a,
c,d){return b.find(d[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},animated:function(a){return b.grep(b.timers,function(c){return a==c.elem}).length}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+C+"+)")],multiFilter:function(a,c,d){for(var e,g=[];a&&a!=e;){e=a;var h=b.filter(a,c,d);a=h.t.replace(/^\s*,\s*/,"");g=d?(c=h.r):b.merge(g,h.r)}return g},find:function(a,c){if(typeof a!="string")return[a];
if(c&&c.nodeType!=1&&c.nodeType!=9)return[];c=c||document;for(var d=[c],e=[],g,h;a&&g!=a;){var m=[];g=a;a=b.trim(a);var v=false,q=z,t=q.exec(a);if(t){h=t[1].toUpperCase();for(var B=0;d[B];B++)for(var x=d[B].firstChild;x;x=x.nextSibling)if(x.nodeType==1&&(h=="*"||x.nodeName.toUpperCase()==h))m.push(x);d=m;a=a.replace(q,"");if(a.indexOf(" ")==0)continue;v=true}else{q=/^([>+~])\s*(\w*)/i;if((t=q.exec(a))!=null){m=[];var Q={};h=t[2].toUpperCase();t=t[1];for(var R=0,X=d.length;R<X;R++)for(var T=t=="~"||
t=="+"?d[R].nextSibling:d[R].firstChild;T;T=T.nextSibling)if(T.nodeType==1){var ka=b.data(T);if(t=="~"&&Q[ka])break;if(!h||T.nodeName.toUpperCase()==h){if(t=="~")Q[ka]=true;m.push(T)}if(t=="+")break}d=m;a=b.trim(a.replace(q,""));v=true}}if(a&&!v)if(a.indexOf(",")){var ga=K;if(t=ga.exec(a))t=[0,t[2],t[3],t[1]];else{ga=M;t=ga.exec(a)}t[2]=t[2].replace(/\\/g,"");var ca=d[d.length-1];if(t[1]=="#"&&ca&&ca.getElementById&&!b.isXMLDoc(ca)){var ba=ca.getElementById(t[2]);if((b.browser.msie||b.browser.opera)&&
ba&&typeof ba.id=="string"&&ba.id!=t[2])ba=b('[@id="'+t[2]+'"]',ca)[0];d=m=ba&&(!t[3]||b.nodeName(ba,t[3]))?[ba]:[]}else{for(B=0;d[B];B++){var ha=t[1]=="#"&&t[3]?t[3]:t[1]!=""||t[0]==""?"*":t[2];if(ha=="*"&&d[B].nodeName.toLowerCase()=="object")ha="param";m=b.merge(m,d[B].getElementsByTagName(ha))}if(t[1]==".")m=b.classFilter(m,t[2]);if(t[1]=="#"){var da=[];for(B=0;m[B];B++)if(m[B].getAttribute("id")==t[2]){da=[m[B]];break}m=da}d=m}a=a.replace(ga,"")}else{c==d[0]&&d.shift();e=b.merge(e,d);m=d=[c];
a=" "+a.substr(1,a.length)}if(a){var qa=b.filter(a,m);d=m=qa.r;a=b.trim(qa.t)}}if(a)d=[];d&&c==d[0]&&d.shift();return e=b.merge(e,d)},classFilter:function(a,c,d){c=" "+c+" ";for(var e=[],g=0;a[g];g++){var h=(" "+a[g].className+" ").indexOf(c)>=0;if(!d&&h||d&&!h)e.push(a[g])}return e},filter:function(a,c,d){for(var e;a&&a!=e;){e=a;for(var g=b.parse,h,m=0;g[m];m++)if(h=g[m].exec(a)){a=a.substring(h[0].length);h[2]=h[2].replace(/\\/g,"");break}if(!h)break;if(h[1]==":"&&h[2]=="not")c=i.test(h[3])?b.filter(h[3],
c,true).r:b(c).not(h[3]);else if(h[1]==".")c=b.classFilter(c,h[2],d);else if(h[1]=="["){var v=[],q=h[3];m=0;for(var t=c.length;m<t;m++){var B=c[m],x=B[b.props[h[2]]||h[2]];if(x==null||/href|src|selected/.test(h[2]))x=b.attr(B,h[2])||"";if((q==""&&!!x||q=="="&&x==h[5]||q=="!="&&x!=h[5]||q=="^="&&x&&!x.indexOf(h[5])||q=="$="&&x.substr(x.length-h[5].length)==h[5]||(q=="*="||q=="~=")&&x.indexOf(h[5])>=0)^d)v.push(B)}c=v}else if(h[1]==":"&&h[2]=="nth-child"){var Q={};v=[];var R=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(h[3]==
"even"&&"2n"||h[3]=="odd"&&"2n+1"||!/\D/.test(h[3])&&"0n+"+h[3]||h[3]),X=R[1]+(R[2]||1)-0;e=R[3]-0;m=0;for(t=c.length;m<t;m++){var T=c[m],ka=T.parentNode,ga=b.data(ka);if(!Q[ga]){for(var ca=1,ba=ka.firstChild;ba;ba=ba.nextSibling)if(ba.nodeType==1)ba.nodeIndex=ca++;Q[ga]=true}var ha=false;if(X==0){if(T.nodeIndex==e)ha=true}else if((T.nodeIndex-e)%X==0&&(T.nodeIndex-e)/X>=0)ha=true;ha^d&&v.push(T)}c=v}else{var da=b.expr[h[1]];if(typeof da=="object")da=da[h[2]];if(typeof da=="string")da=eval("false||function(a,i){return "+
da+";}");c=b.grep(c,function(qa,Ga){return da(qa,Ga,h,c)},d)}}return{r:c,t:a}},dir:function(a,c){for(var d=[],e=a[c];e&&e!=document;){e.nodeType==1&&d.push(e);e=e[c]}return d},nth:function(a,c,d){c=c||1;for(var e=0;a;a=a[d])if(a.nodeType==1&&++e==c)break;return a},sibling:function(a,c){for(var d=[];a;a=a.nextSibling)if(a.nodeType==1&&(!c||a!=c))d.push(a);return d}});b.event={add:function(a,c,d,e){if(!(a.nodeType==3||a.nodeType==8)){if(b.browser.msie&&a.setInterval!=undefined)a=window;if(!d.guid)d.guid=
this.guid++;if(e!=undefined){var g=d;d=function(){return g.apply(this,arguments)};d.data=e;d.guid=g.guid}var h=b.data(a,"events")||b.data(a,"events",{}),m=b.data(a,"handle")||b.data(a,"handle",function(){var v;if(typeof b=="undefined"||b.event.triggered)return v;return v=b.event.handle.apply(arguments.callee.elem,arguments)});m.elem=a;b.each(c.split(/\s+/),function(v,q){var t=q.split(".");q=t[0];d.type=t[1];var B=h[q];if(!B){B=h[q]={};if(!b.event.special[q]||b.event.special[q].setup.call(a)===false)if(a.addEventListener)a.addEventListener(q,
m,false);else a.attachEvent&&a.attachEvent("on"+q,m)}B[d.guid]=d;b.event.global[q]=true});a=null}},guid:1,global:{},remove:function(a,c,d){if(!(a.nodeType==3||a.nodeType==8)){var e=b.data(a,"events"),g;if(e){if(c==undefined||typeof c=="string"&&c.charAt(0)==".")for(var h in e)this.remove(a,h+(c||""));else{if(c.type){d=c.handler;c=c.type}b.each(c.split(/\s+/),function(v,q){var t=q.split(".");q=t[0];if(e[q]){if(d)delete e[q][d.guid];else for(d in e[q])if(!t[1]||e[q][d].type==t[1])delete e[q][d];for(g in e[q])break;
if(!g){if(!b.event.special[q]||b.event.special[q].teardown.call(a)===false)if(a.removeEventListener)a.removeEventListener(q,b.data(a,"handle"),false);else a.detachEvent&&a.detachEvent("on"+q,b.data(a,"handle"));g=null;delete e[q]}}})}for(g in e)break;if(!g){var m=b.data(a,"handle");if(m)m.elem=null;b.removeData(a,"events");b.removeData(a,"handle")}}}},trigger:function(a,c,d,e,g){c=b.makeArray(c||[]);if(a.indexOf("!")>=0){a=a.slice(0,-1);var h=true}if(d){if(d.nodeType==3||d.nodeType==8)return undefined;
var m,v,q=b.isFunction(d[a]||null),t=!c[0]||!c[0].preventDefault;t&&c.unshift(this.fix({type:a,target:d}));c[0].type=a;if(h)c[0].exclusive=true;if(b.isFunction(b.data(d,"handle")))m=b.data(d,"handle").apply(d,c);if(!q&&d["on"+a]&&d["on"+a].apply(d,c)===false)m=false;t&&c.shift();if(g&&b.isFunction(g)){v=g.apply(d,m==null?c:c.concat(m));if(v!==undefined)m=v}if(q&&e!==false&&m!==false&&!(b.nodeName(d,"a")&&a=="click")){this.triggered=true;try{d[a]()}catch(B){}}this.triggered=false}else this.global[a]&&
b("*").add([window,document]).trigger(a,c);return m},handle:function(a){var c;a=b.event.fix(a||window.event||{});var d=a.type.split(".");a.type=d[0];var e=b.data(this,"events")&&b.data(this,"events")[a.type],g=Array.prototype.slice.call(arguments,1);g.unshift(a);for(var h in e){var m=e[h];g[0].handler=m;g[0].data=m.data;if(!d[1]&&!a.exclusive||m.type==d[1]){var v=m.apply(this,g);if(c!==false)c=v;if(v===false){a.preventDefault();a.stopPropagation()}}}if(b.browser.msie)a.target=a.preventDefault=a.stopPropagation=
a.handler=a.data=null;return c},fix:function(a){var c=a;a=b.extend({},c);a.preventDefault=function(){c.preventDefault&&c.preventDefault();c.returnValue=false};a.stopPropagation=function(){c.stopPropagation&&c.stopPropagation();c.cancelBubble=true};if(!a.target)a.target=a.srcElement||document;if(a.target.nodeType==3)a.target=c.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement==a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){var d=document.documentElement,
e=document.body;a.pageX=a.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d.clientLeft||0);a.pageY=a.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},special:{ready:{setup:function(){U()},teardown:function(){}},mouseenter:{setup:function(){if(b.browser.msie)return false;
b(this).bind("mouseover",b.event.special.mouseenter.handler);return true},teardown:function(){if(b.browser.msie)return false;b(this).unbind("mouseover",b.event.special.mouseenter.handler);return true},handler:function(a){if(N(a,this))return true;arguments[0].type="mouseenter";return b.event.handle.apply(this,arguments)}},mouseleave:{setup:function(){if(b.browser.msie)return false;b(this).bind("mouseout",b.event.special.mouseleave.handler);return true},teardown:function(){if(b.browser.msie)return false;
b(this).unbind("mouseout",b.event.special.mouseleave.handler);return true},handler:function(a){if(N(a,this))return true;arguments[0].type="mouseleave";return b.event.handle.apply(this,arguments)}}}};b.fn.extend({bind:function(a,c,d){return a=="unload"?this.one(a,c,d):this.each(function(){b.event.add(this,a,d||c,d&&c)})},one:function(a,c,d){return this.each(function(){b.event.add(this,a,function(e){b(this).unbind(e);return(d||c).apply(this,arguments)},d&&c)})},unbind:function(a,c){return this.each(function(){b.event.remove(this,
a,c)})},trigger:function(a,c,d){return this.each(function(){b.event.trigger(a,c,this,true,d)})},triggerHandler:function(a,c,d){if(this[0])return b.event.trigger(a,c,this[0],false,d);return undefined},toggle:function(){var a=arguments;return this.click(function(c){this.lastToggle=0==this.lastToggle?1:0;c.preventDefault();return a[this.lastToggle].apply(this,arguments)||false})},hover:function(a,c){return this.bind("mouseenter",a).bind("mouseleave",c)},ready:function(a){U();b.isReady?a.call(document,
b):b.readyList.push(function(){return a.call(this,b)});return this}});b.extend({isReady:false,readyList:[],ready:function(){if(!b.isReady){b.isReady=true;if(b.readyList){b.each(b.readyList,function(){this.apply(document)});b.readyList=null}b(document).triggerHandler("ready")}}});var G=false;function U(){if(!G){G=true;document.addEventListener&&!b.browser.opera&&document.addEventListener("DOMContentLoaded",b.ready,false);b.browser.msie&&window==top&&function(){if(!b.isReady){try{document.documentElement.doScroll("left")}catch(c){setTimeout(arguments.callee,
0);return}b.ready()}}();b.browser.opera&&document.addEventListener("DOMContentLoaded",function(){if(!b.isReady){for(var c=0;c<document.styleSheets.length;c++)if(document.styleSheets[c].disabled){setTimeout(arguments.callee,0);return}b.ready()}},false);if(b.browser.safari){var a;(function(){if(!b.isReady)if(document.readyState!="loaded"&&document.readyState!="complete")setTimeout(arguments.callee,0);else{if(a===undefined)a=b("style, link[rel=stylesheet]").length;document.styleSheets.length!=a?setTimeout(arguments.callee,
0):b.ready()}})()}b.event.add(window,"load",b.ready)}}b.each("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,change,select,submit,keydown,keypress,keyup,error".split(","),function(a,c){b.fn[c]=function(d){return d?this.bind(c,d):this.trigger(c)}});var N=function(a,c){for(var d=a.relatedTarget;d&&d!=c;)try{d=d.parentNode}catch(e){d=c}return d==c};b(window).bind("unload",function(){b("*").add(document).unbind()});b.fn.extend({load:function(a,c,d){if(b.isFunction(a))return this.bind("load",
a);var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}d=d||function(){};var h="GET";if(c)if(b.isFunction(c)){d=c;c=null}else{c=b.param(c);h="POST"}var m=this;b.ajax({url:a,type:h,dataType:"html",data:c,complete:function(v,q){if(q=="success"||q=="notmodified")m.html(g?b("<div/>").append(v.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(g):v.responseText);m.each(d,[v.responseText,q,v])}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return b.nodeName(this,
"form")?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type))}).map(function(a,c){var d=b(this).val();return d==null?null:d.constructor==Array?b.map(d,function(e){return{name:c.name,value:e}}):{name:c.name,value:d}}).get()}});b.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(a,c){b.fn[c]=function(d){return this.bind(c,d)}});var aa=
(new Date).getTime();b.extend({get:function(a,c,d,e){if(b.isFunction(c)){d=c;c=null}return b.ajax({type:"GET",url:a,data:c,success:d,dataType:e})},getScript:function(a,c){return b.get(a,null,c,"script")},getJSON:function(a,c,d){return b.get(a,c,d,"json")},post:function(a,c,d,e){if(b.isFunction(c)){d=c;c={}}return b.ajax({type:"POST",url:a,data:c,success:d,dataType:e})},ajaxSetup:function(a){b.extend(b.ajaxSettings,a)},ajaxSettings:{global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",
processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(a){var c,d=/=\?(&|$)/g,e,g;a=b.extend(true,a,b.extend(true,{},b.ajaxSettings,a));if(a.data&&a.processData&&typeof a.data!="string")a.data=b.param(a.data);if(a.dataType=="jsonp"){if(a.type.toLowerCase()=="get")a.url.match(d)||
(a.url+=(a.url.match(/\?/)?"&":"?")+(a.jsonp||"callback")+"=?");else if(!a.data||!a.data.match(d))a.data=(a.data?a.data+"&":"")+(a.jsonp||"callback")+"=?";a.dataType="json"}if(a.dataType=="json"&&(a.data&&a.data.match(d)||a.url.match(d))){c="jsonp"+aa++;if(a.data)a.data=(a.data+"").replace(d,"="+c+"$1");a.url=a.url.replace(d,"="+c+"$1");a.dataType="script";window[c]=function(ca){g=ca;ka();ga();window[c]=undefined;try{delete window[c]}catch(ba){}v&&v.removeChild(q)}}if(a.dataType=="script"&&a.cache==
null)a.cache=false;if(a.cache===false&&a.type.toLowerCase()=="get"){var h=(new Date).getTime(),m=a.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+h+"$2");a.url=m+(m==a.url?(a.url.match(/\?/)?"&":"?")+"_="+h:"")}if(a.data&&a.type.toLowerCase()=="get"){a.url+=(a.url.match(/\?/)?"&":"?")+a.data;a.data=null}a.global&&!b.active++&&b.event.trigger("ajaxStart");if((!a.url.indexOf("http")||!a.url.indexOf("//"))&&a.dataType=="script"&&a.type.toLowerCase()=="get"){var v=document.getElementsByTagName("head")[0],q=document.createElement("script");
q.src=a.url;if(a.scriptCharset)q.charset=a.scriptCharset;if(!c){var t=false;q.onload=q.onreadystatechange=function(){if(!t&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){t=true;ka();ga();v.removeChild(q)}}}v.appendChild(q);return undefined}var B=false,x=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest;x.open(a.type,a.url,a.async,a.username,a.password);try{a.data&&x.setRequestHeader("Content-Type",a.contentType);if(a.ifModified)x.setRequestHeader("If-Modified-Since",
b.lastModified[a.url]||"Thu, 01 Jan 1970 00:00:00 GMT");x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",a.dataType&&a.accepts[a.dataType]?a.accepts[a.dataType]+", */*":a.accepts._default)}catch(Q){}a.beforeSend&&a.beforeSend(x);a.global&&b.event.trigger("ajaxSend",[x,a]);var R=function(ca){if(!B&&x&&(x.readyState==4||ca=="timeout")){B=true;if(X){clearInterval(X);X=null}e=ca=="timeout"&&"timeout"||!b.httpSuccess(x)&&"error"||a.ifModified&&b.httpNotModified(x,a.url)&&
"notmodified"||"success";if(e=="success")try{g=b.httpData(x,a.dataType)}catch(ba){e="parsererror"}if(e=="success"){var ha;try{ha=x.getResponseHeader("Last-Modified")}catch(da){}if(a.ifModified&&ha)b.lastModified[a.url]=ha;c||ka()}else b.handleError(a,x,e);ga();if(a.async)x=null}};if(a.async){var X=setInterval(R,13);a.timeout>0&&setTimeout(function(){if(x){x.abort();B||R("timeout")}},a.timeout)}try{x.send(a.data)}catch(T){b.handleError(a,x,null,T)}a.async||R();function ka(){a.success&&a.success(g,
e);a.global&&b.event.trigger("ajaxSuccess",[x,a])}function ga(){a.complete&&a.complete(x,e);a.global&&b.event.trigger("ajaxComplete",[x,a]);a.global&&!--b.active&&b.event.trigger("ajaxStop")}return x},handleError:function(a,c,d,e){a.error&&a.error(c,d,e);a.global&&b.event.trigger("ajaxError",[c,a,e])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol=="file:"||a.status>=200&&a.status<300||a.status==304||a.status==1223||b.browser.safari&&a.status==undefined}catch(c){}return false},
httpNotModified:function(a,c){try{var d=a.getResponseHeader("Last-Modified");return a.status==304||d==b.lastModified[c]||b.browser.safari&&a.status==undefined}catch(e){}return false},httpData:function(a,c){var d=a.getResponseHeader("content-type"),e=c=="xml"||!c&&d&&d.indexOf("xml")>=0,g=e?a.responseXML:a.responseText;if(e&&g.documentElement.tagName=="parsererror")throw"parsererror";c=="script"&&b.globalEval(g);if(c=="json")g=eval("("+g+")");return g},param:function(a){var c=[];if(a.constructor==
Array||a.jquery)b.each(a,function(){c.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value))});else for(var d in a)a[d]&&a[d].constructor==Array?b.each(a[d],function(){c.push(encodeURIComponent(d)+"="+encodeURIComponent(this))}):c.push(encodeURIComponent(d)+"="+encodeURIComponent(a[d]));return c.join("&").replace(/%20/g,"+")}});b.fn.extend({show:function(a,c){return a?this.animate({height:"show",width:"show",opacity:"show"},a,c):this.filter(":hidden").each(function(){this.style.display=
this.oldblock||"";if(b.css(this,"display")=="none"){var d=b("<"+this.tagName+" />").appendTo("body");this.style.display=d.css("display");if(this.style.display=="none")this.style.display="block";d.remove()}}).end()},hide:function(a,c){return a?this.animate({height:"hide",width:"hide",opacity:"hide"},a,c):this.filter(":visible").each(function(){this.oldblock=this.oldblock||b.css(this,"display");this.style.display="none"}).end()},_toggle:b.fn.toggle,toggle:function(a,c){return b.isFunction(a)&&b.isFunction(c)?
this._toggle(a,c):a?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},a,c):this.each(function(){b(this)[b(this).is(":hidden")?"show":"hide"]()})},slideDown:function(a,c){return this.animate({height:"show"},a,c)},slideUp:function(a,c){return this.animate({height:"hide"},a,c)},slideToggle:function(a,c){return this.animate({height:"toggle"},a,c)},fadeIn:function(a,c){return this.animate({opacity:"show"},a,c)},fadeOut:function(a,c){return this.animate({opacity:"hide"},a,c)},fadeTo:function(a,
c,d){return this.animate({opacity:c},a,d)},animate:function(a,c,d,e){var g=b.speed(c,d,e);return this[g.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var h=b.extend({},g),m=b(this).is(":hidden"),v=this;for(var q in a){if(a[q]=="hide"&&m||a[q]=="show"&&!m)return b.isFunction(h.complete)&&h.complete.apply(this);if(q=="height"||q=="width"){h.display=b.css(this,"display");h.overflow=this.style.overflow}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=b.extend({},
a);b.each(a,function(t,B){var x=new b.fx(v,h,t);if(/toggle|show|hide/.test(B))x[B=="toggle"?m?"show":"hide":B](a);else{var Q=B.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),R=x.cur(true)||0;if(Q){var X=parseFloat(Q[2]),T=Q[3]||"px";if(T!="px"){v.style[t]=(X||1)+T;R=(X||1)/x.cur(true)*R;v.style[t]=R+T}if(Q[1])X=(Q[1]=="-="?-1:1)*X+R;x.custom(R,X,T)}else x.custom(R,B,"")}});return true})},queue:function(a,c){if(b.isFunction(a)||a&&a.constructor==Array){c=a;a="fx"}if(!a||typeof a=="string"&&!c)return S(this[0],
a);return this.each(function(){if(c.constructor==Array)S(this,a,c);else{S(this,a).push(c);S(this,a).length==1&&c.apply(this)}})},stop:function(a,c){var d=b.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem==this){c&&d[e](true);d.splice(e,1)}});c||this.dequeue();return this}});var S=function(a,c,d){if(!a)return undefined;c=c||"fx";var e=b.data(a,c+"queue");if(!e||d)e=b.data(a,c+"queue",d?b.makeArray(d):[]);return e};b.fn.dequeue=function(a){a=a||"fx";return this.each(function(){var c=
S(this,a);c.shift();c.length&&c[0].apply(this)})};b.extend({speed:function(a,c,d){var e=a&&a.constructor==Object?a:{complete:d||!d&&c||b.isFunction(a)&&a,duration:a,easing:d&&c||c&&c.constructor!=Function&&c};e.duration=(e.duration&&e.duration.constructor==Number?e.duration:{slow:600,fast:200}[e.duration])||400;e.old=e.complete;e.complete=function(){e.queue!==false&&b(this).dequeue();b.isFunction(e.old)&&e.old.apply(this)};return e},easing:{linear:function(a,c,d,e){return d+e*a},swing:function(a,
c,d,e){return(-Math.cos(a*Math.PI)/2+0.5)*e+d}},timers:[],timerId:null,fx:function(a,c,d){this.options=c;this.elem=a;this.prop=d;if(!c.orig)c.orig={}}});b.fx.prototype={update:function(){this.options.step&&this.options.step.apply(this.elem,[this.now,this]);(b.fx.step[this.prop]||b.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var c=parseFloat(b.css(this.elem,
this.prop,a));return c&&c>-10000?c:parseFloat(b.curCSS(this.elem,this.prop))||0},custom:function(a,c,d){this.startTime=(new Date).getTime();this.start=a;this.end=c;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var e=this;function g(h){return e.step(h)}g.elem=this.elem;b.timers.push(g);if(b.timerId==null)b.timerId=setInterval(function(){for(var h=b.timers,m=0;m<h.length;m++)h[m]()||h.splice(m--,1);if(!h.length){clearInterval(b.timerId);b.timerId=null}},13)},show:function(){this.options.orig[this.prop]=
b.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var c=(new Date).getTime();if(a||c>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();var d=this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==
true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(b.css(this.elem,"display")=="none")this.elem.style.display="block"}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var g in this.options.curAnim)b.attr(this.elem.style,g,this.options.orig[g])}d&&b.isFunction(this.options.complete)&&this.options.complete.apply(this.elem);return false}else{var h=c-this.startTime;
this.state=h/this.options.duration;this.pos=b.easing[this.options.easing||(b.easing.swing?"swing":"linear")](this.state,h,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};b.fx.step={scrollLeft:function(a){a.elem.scrollLeft=a.now},scrollTop:function(a){a.elem.scrollTop=a.now},opacity:function(a){b.attr(a.elem.style,"opacity",a.now)},_default:function(a){a.elem.style[a.prop]=a.now+a.unit}};b.fn.offset=function(){var a=0,c=0,d=this[0],e;if(d)with(b.browser){var g=
d.parentNode,h=d,m=d.offsetParent,v=d.ownerDocument,q=safari&&parseInt(version)<522&&!/adobeair/i.test(H),t=b.css(d,"position")=="fixed";if(d.getBoundingClientRect){var B=d.getBoundingClientRect();Q(B.left+Math.max(v.documentElement.scrollLeft,v.body.scrollLeft),B.top+Math.max(v.documentElement.scrollTop,v.body.scrollTop));Q(-v.documentElement.clientLeft,-v.documentElement.clientTop)}else{for(Q(d.offsetLeft,d.offsetTop);m;){Q(m.offsetLeft,m.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(m.tagName)||
safari&&!q)x(m);if(!t&&b.css(m,"position")=="fixed")t=true;h=/^body$/i.test(m.tagName)?h:m;m=m.offsetParent}for(;g&&g.tagName&&!/^body|html$/i.test(g.tagName);){/^inline|table.*$/i.test(b.css(g,"display"))||Q(-g.scrollLeft,-g.scrollTop);mozilla&&b.css(g,"overflow")!="visible"&&x(g);g=g.parentNode}if(q&&(t||b.css(h,"position")=="absolute")||mozilla&&b.css(h,"position")!="absolute")Q(-v.body.offsetLeft,-v.body.offsetTop);t&&Q(Math.max(v.documentElement.scrollLeft,v.body.scrollLeft),Math.max(v.documentElement.scrollTop,
v.body.scrollTop))}e={top:c,left:a}}function x(R){Q(b.curCSS(R,"borderLeftWidth",true),b.curCSS(R,"borderTopWidth",true))}function Q(R,X){a+=parseInt(R)||0;c+=parseInt(X)||0}return e}})();(function(){window.CODESITE_CSITimer={};CODESITE_CSITimer.load=window.jstiming.load;window.CODESITE_CSIReportDelay=500;window.CODESITE_reportedToCSI=false;function k(){if(jQuery('body[@class~="gc-documentation"]').length>0)return"product_doc";if(window._homepageGadgetData_)return"codesite_home";if(jQuery('div[@id="gc-home"]').length>0)return"product_home";return"other"}function b(){var f=["codesite","sc"],i=k(),o=CODESITE_getProduct();if(o)if(o=="more")f.push("site_directory");else if(o=="search")f.push("cse");
else if(o=="support")f.push(o);else if(o=="events")f.push(o);else if(i=="product_doc"){f.push(i);f.push(o+"_doc")}else{if(i=="product_home"){f.push(i);f.push(o+"_home")}}else i=="codesite_home"&&f.push(i);f.push("intl_"+CODESITE_langLoc);return f.join(",")}function j(){if(!CODESITE_reportedToCSI){var f=b();CODESITE_CSITimer.load.name=f;CODESITE_CSITimer.toc.name=f;window.setTimeout(function(){for(var i in CODESITE_CSITimer)window.jstiming.report(CODESITE_CSITimer[i])},CODESITE_CSIReportDelay);window.CODESITE_reportedToCSI=
true}}jQuery(document).ready(function(){CODESITE_CSITimer.load.tick("dom")});jQuery(window).load(function(){CODESITE_CSITimer.load.tick("plt");j()})})(jQuery);window.CODESITE_msgs={imagebar:{POSTED_ON:"Posted on"},treelist:{EXPAND:"Expand @1",EXPAND_DEFAULT:"Expand branch",COLLAPSE:"Collapse @1",COLLAPSE_DEFAULT:"Collapse branch"},search:{SUGGESTIONS:"Suggestions",MORE:"more",NO_RESULTS_FOUND:"No search results found. Search query: ",SUGGESTIONS_TITLE:"Suggestions",SUGGESTIONS_ITEMS:["Make sure all words are spelled correctly.","Try different keywords.","Try more general keywords."],TRY_WEBSEARCH:"Or try web search",SEARCH_URL:"http://www.google.com/search?q="}};window.CODESITE_langCode={en:"English",de:"Deutsch",es:"Espa\u00f1ol",ja:"\u65e5\u672c\u8a9e",ko:"\ud55c\uad6d\uc5b4","pt-BR":"Portugu\u00eas (Brasil)",ru:"P\u0443\u0441\u0441\u043a\u0438\u0439",vi:"Ti\u1ebfng Vi\u1ec7t","zh-CN":"\u4e2d\u6587 (\u7b80\u4f53)","zh-TW":"\u4e2d\u6587 (\u7e41\u9ad4)"};window.CODESITE_prodLang=[{url:"/apis/orkut/",langloc:["en","es","ja","ko","pt-BR","ru","vi","zh-CN","zh-TW"]},{url:"/apis/maps/",langloc:["en","es","de","ja","ko","pt-BR","ru","zh-CN","zh-TW"]}];(function(){var k=/\/\/([^\/]*)?(\/intl\/[^\/]*)?(\/.*)?/,b=/\/intl\/(([a-zA-Z]+)(-[a-zA-Z]+)?)(_[a-zA-Z]+)?/,j=b.exec(window.location.href);if(j==null){window.CODESITE_langLoc="en";window.CODESITE_langUrl=""}else{window.CODESITE_langLoc=j[1];window.CODESITE_langUrl=j[0].replace(/_ALL/,"")}jQuery(document).ready(window.CODESITE_langSelectInit=function(f,i){var o=f("#lang-dropdown")[0];if(o){for(var l=null,r=i||window.location,D=k.exec(r.href),F=0;F<window.CODESITE_prodLang.length;F++)if(D[3].indexOf(window.CODESITE_prodLang[F].url)>=
0){l=window.CODESITE_prodLang[F].langloc;break}l||(l=["en","es","ja","ko","pt-BR","ru","zh-CN","zh-TW"]);for(var H=new Menu(o,null,null,function(){CODESITE_click("/gb/sc/langselect/"+CODESITE_langLoc)}),A=0;A<l.length;A++){var C=l[A],z=CODESITE_localeRedirect(C,window.location,false);H.addItem(window.CODESITE_langCode[C],z)}f("body").append(H.menu)}});window.CODESITE_localeRedirect=function(f,i,o){var l=i||window.location,r=k.exec(l.href),D=o==null?true:false,F=l.href;if(r){F=r[3]?"http://"+r[1]+
"/intl/"+f+r[3]:"http://"+r[1]+"/intl/"+f+"/";if(D)l.href=F}return F};window.CODESITE_redirectToI18nContent=function(f,i){var o=i||CODESITE_localeRedirect,l=b.exec(f.href),r=l&&l[1]||"en";o(r,null);return false}})(jQuery);(function(){var k="Menu";window[k]=function(b,j,f,i){this.iid=window[k].instance.length;window[k].instance[this.iid]=this;this.target=typeof b=="string"?document.getElementById(b):b;j=typeof j=="string"?document.getElementById(j):j;this.onShow=i&&typeof i=="function"?i:null;this.trigger=j||b;this.items=[];this.onOpenEvents=[];this.triggerType=f||"click";this.menu=this.createElement("div","menuDiv instance"+this.iid);this.targetId=this.target.getAttribute("id");var o=this.targetId!=null?"menuDiv-"+
this.targetId:"menuDiv-instance"+this.iid;this.menu.setAttribute("id",o);this.icon=this.createIcon();this.hide();this.addCategory("default");this.addEvent(this.trigger,this.triggerType,this.wrap(this.toggle));this.addEvent(window,"resize",this.wrap(this.adjustSizeAndLocation));this.addEvent(document,"click",this.wrap(this.hide));this.addEvent(this.menu,"click",this.stopPropagation());this.addEvent(this.trigger,"click",this.stopPropagation());this.addEvent(this.icon,"click",this.stopPropagation())};
window[k].prototype={target:null,targetId:null,trigger:null,triggerType:null,menu:null,onShow:null,icon:null,categories:null,iid:-1,items:null,onOpenEvents:null,createElement:function(b,j,f){var i=document.createElement(b);i.className=j;f&&this.append(f,i);return i},createIcon:function(){var b=this.createElement("img","menuIcon off instance"+this.iid),j=this.targetId!=null?"menuIcon-"+this.targetId:"menuIcon-instance"+this.iid;b.setAttribute("id",j);b.setAttribute("src","http://www.gstatic.com/codesite/ph/images/cleardot.gif");
b.setAttribute("height","14");b.setAttribute("width","14");b.style.verticalAlignment="middle";this.target.parentNode.insertBefore(b,this.target.nextSibling);this.addEvent(this.trigger,"mouseover",this.wrap(this.iconOver,b));this.addEvent(this.trigger,"mouseout",this.wrap(this.iconOut,b));this.addEvent(b,"mouseover",this.wrap(this.iconOver,b));this.addEvent(b,"mouseout",this.wrap(this.iconOut,b));this.addEvent(b,"mousedown",this.wrap(this.toggle));return b},iconOver:function(){if(this.className)this.className=
this.className.replace(/ off/g," on")},iconOut:function(b){if(this.className){if(b)var j=/ (on|down)/g;else j=/ on/g;this.className=this.className.replace(j," off")}},iconDown:function(){if(this.className)this.className=this.className.replace(/ (off|on)/g," down")},addEvent:function(b,j,f){if(b.addEventListener)b.addEventListener(j,f,false);else try{b.attachEvent("on"+j,f)}catch(i){b["on"+j]=f}},wrap:function(b,j){var f=b,i=j||this;return function(){f.apply(i)}},addCategory:function(b,j){this.categories=
this.categories||[];var f=this.createElement("div","menuCategory "+b);f._categoryName=b;if(j){var i=this.createElement("b","categoryTitle "+b,j);i.style.display="block";this.append(i)}this.append(f);return this.categories[this.categories.length]=this.categories[b]=f},clear:function(){for(var b=0;b<this.categories.length;b++)this.categories[this.categories[b]._categoryName]=null;this.items.splice(0,this.items.length);this.categories.splice(0,this.categories.length);this.categories=[];this.items=[];
this.menu.innerHTML=""},addItem:function(b,j,f,i){var o=f?this.categories[f]||this.addCategory(f,i):this.categories["default"],l=this.createElement("a","menuItem",b),r=j||"#",D=typeof b=="string"?b:b.innerText||"ERROR";l.style.display="block";l.setAttribute("href",r);l._index=this.items.length;this.append(l,o);this.items[this.items.length]={item:l,text:D};return l},adjustSizeAndLocation:function(){var b=this.menu.style;b.position="absolute";for(var j=null,f=0;f<this.categories.length;f++){this.categories[f].className=
this.categories[f].className.replace(/ first/,"");if(this.categories[f].childNodes.length==0)this.categories[f].style.display="none";else{this.categories[f].style.display="";if(!j){j=this.categories[f];j.className+=" first"}}}var i=b.display!="none"&&b.visibility!="hidden",o=document.documentElement.clientWidth,l=document.documentElement.clientHeight,r={w:(window.innerWidth||o&&o>0?o:document.body.clientWidth)||1,h:(window.innerHeight||l&&l>0?l:document.body.clientHeight)||1},D=this.find(this.icon),
F={w:this.icon.offsetWidth,h:this.icon.offsetHeight},H=this.find(this.target),A={w:this.target.offsetWidth,h:this.target.offsetHeight},C={w:this.menu.offsetWidth,h:this.menu.offsetHeight};if(!i){var z=b.visibility,K=b.display;b.visibility="hidden";b.display="";b.height="";b.width="";C={w:this.menu.offsetWidth,h:this.menu.offsetHeight};b.display=K;b.visibility=z}var M=this.menu.offsetHeight/r.h>0.8;if(M){C.h=parseInt(r.h*0.8,10);b.height=C.h+"px";b.overflowX="hidden";b.overflowY="auto"}else b.height=
b.overflowY=b.overflowX="";b.top=H.y+A.h+"px";b.left=H.x+"px";if(C.w<175)b.width="175px";if(M)b.width=parseInt(b.width,10)+13+"px";if(H.x+C.w>r.w)b.left=D.x-(C.w-F.w)+"px"},html:function(b){var j=this.menu.innerHTML;if(b)this.menu.innerHTML=b;return j},append:function(b,j){var f=j||this.menu;if(typeof j=="string"&&this.categories[j])f=this.categories[j];if(typeof b=="string")f.innerHTML+=b;else f.appendChild(b)},stopPropagation:function(){return function(b){if(!b)b=window.event;b.cancelBubble=true;
b.stopPropagation&&b.stopPropagation()}},toggle:function(){this.menu.style.display=="none"?this.show():this.hide()},show:function(){if(this.menu.style.display!=""){for(var b=0;b<this.onOpenEvents.length;b++)this.onOpenEvents[b].call(null,this);this.menu.style.visibility="hidden";this.menu.style.display="";this.adjustSizeAndLocation();this.iconDown.apply(this.icon);this.trigger.nodeName&&this.trigger.nodeName=="A"&&this.trigger.blur();this.menu.style.visibility="visible";for(b=0;b<window[k].instance.length;b++){var j=
window[k].instance[b];j!=this&&j.hide()}this.onShow&&this.onShow()}},hide:function(){this.iconOut.apply(this.icon,[true]);this.menu.style.display="none"},find:function(b){var j=0,f=0;if(b.offsetParent){do{j+=b.offsetLeft;f+=b.offsetTop}while((b=b.offsetParent)&&b.style&&b.style.position!="relative"&&b.style.position!="absolute")}return{x:j,y:f}}};window[k].instance=[]})();(function(){try{document.execCommand("BackgroundImageCache",false,true)}catch(k){}function b(i){return window.encodeURIComponent?encodeURIComponent(i):escape(i)}function j(i){return window.decodeURIComponent?decodeURIComponent(i):unescape(i)}RegExp.escape=function(){var i=["/",".","*","+","?","|","(",")","[","]","{","}","\\"],o=new RegExp("(\\"+i.join("|\\")+")","g");return function(l){return l.replace(o,"\\$1")}}();window.CODESITE_minWidth=function(){var i=[],o=function(){if(CODESITE_minWidth)for(var l=
0,r=i[0]||null;l<i.length;++l,r=i[l])try{if(r.parent_.offsetWidth<=r.minWidth_){r.style.width=r.minWidth_+"px";r.style.overflow="hidden"}else{r.style.width="";r.style.overflow=""}}catch(D){}};if(jQuery.browser.msie){jQuery(window).resize(o);jQuery(o)}return function(l,r){if(jQuery.browser.msie){var D=jQuery(l)[0];D.minWidth_=r-0;D.parent_=D.parentNode;i.push(D)}}}();window.CODESITE_createImageBar=function(i,o){var l=new google.feeds.Feed(i);l.setResultFormat(google.feeds.Feed.XML_FORMAT);l.setNumEntries(2);
l.load(function(r){if(!r.error){var D=jQuery(o),F=jQuery("item",r.xmlDocument),H=0;if(F.length>=2)H=2;for(var A=['<div class="post techtalk"><div class="screenshot"><a href="@link"><img alt="@origTitle" src="@thumb" height="80" width="90"></a></div><div class="info"><div class="name"><a href="@link" title="@origTitle">@title</a></div><div class="author videodateformat">',CODESITE_msgs.imagebar.POSTED_ON," @date</div></div></div>"].join(""),C=jQuery('<div class="g-section g-tpl-50-50 gc-techtalk"><div class="g-unit g-first">&nbsp;</div><div class="g-unit">&nbsp;</div></div>'),
z=0;z<H;z++){var K=jQuery("title:first",F[z]).text(),M=K,G=jQuery("link:first",F[z]).text(),U=G.substring("http://www.youtube.com/watch?v=".length),N;if((N=F.eq(z).find("atom\\:updated, updated")).length){var aa=N.eq(0).text().replace(/(\d{4})-(\d{2})-(\d{2})T.*/,"$2 $3 $1").split(" ");N=new Date;N.setFullYear(aa[2],aa[0]-1,aa[1])}else if((N=F.eq(z).find("dc\\:date, date")).length)N=new Date(N.eq(0).text());var S=google.feeds.getElementsByTagNameNS(F[z],"http://search.yahoo.com/mrss/","thumbnail")[0],
a=S.getAttribute("url");S.getAttribute("width");S.getAttribute("height");N=N.getMonth()+1+"/"+N.getDate()+"/"+N.getFullYear();var c=jQuery(A.replace(/@link/g,G).replace(/@videoid/g,U).replace(/@thumb/g,a).replace(/@origTitle/g,K).replace(/@title/g,M).replace(/@date/g,N));jQuery(".g-unit:eq("+z+")",C).prepend(c)}D.append(C)}})};window.CODESITE_loadFeedAPI=function(){google.load("feeds","1",{callback:CODESITE_initFeedAPI})};jQuery(function(){jQuery("#searchForm").show();jQuery("#searchForm2").hide()});
window.CODESITE_initFeedAPI=function(){if(CODESITE_codeVideoDiv.length){CODESITE_createImageBar(_homepageGadgetData_.homepageVideoFeedUrl,"#gc-codevideo");CODESITE_minWidth("#codesiteContent",1000)}if(CODESITE_macRecentChangesDiv.length){var i=new BlogPreview(document.getElementById("recentchanges"));i.show("http://googlemacplayground.blogspot.com/atom.xml","changes")}};function f(){var i=/\/intl\/(.*?)\//.exec(document.location);i=i?["&lang=",i[1],"#"].join(""):"#";function o(a){var c="",d;if(typeof a==
"string"){if(a!="")c="&"+b(a)}else for(d in a)c+=["&",d,"=",b(a[d])].join("");return c}if(CODESITE_codeBlogDiv.length){var l=[],r=window._apiGadgetData_||window._homepageGadgetData_,D=r.blogOptions,F=400,H="100%",A="__MSG_blogs__",C="";if(D){H=D.width||H;F=D.height||F;A=D.up_gadgetTitle||A;C=D.xtraFeeds||C}if(r.blogFeedUrl&&r.blogFeedUrl.length){if(!r.blogFeedName||r.blogFeedName.length==0)r.blogFeedName="__MSG_blogs__";l.push(b([r.blogFeedName,":",r.blogFeedUrl].join("")))}r.googleCodeBlogIntlFeedUrl&&
r.googleCodeBlogIntlFeedUrl.length&&l.push(b(["__MSG_blogs.local__:",r.googleCodeBlogIntlFeedUrl].join("")));r.googleCodeBlogFeedUrl&&r.googleCodeBlogFeedUrl.length&&l.push(b(["__MSG_blogs.googleCode__:",r.googleCodeBlogFeedUrl].join("")));r.relatedDeveloperBlogsFeedUrl&&r.relatedDeveloperBlogsFeedUrl.length&&l.push(b(["__MSG_blogs.related__:",r.relatedDeveloperBlogsFeedUrl].join("")));if(C.length)for(var z=j(C).split("|"),K=0;K<z.length;K++)l.push(b(z[K]));if(l.length)jQuery('<iframe frameborder="0">').attr({src:["http://www.gmodules.com/ig/ifr?url=http://code.google.com/gadgets/FeedGadget/gadget.xml",
i,"up_showaddbutton=true&up_random=true&up_defer=true&up_gadgetTitle=",b(A),"&up_feeds=",l.join("|"),o(D||"")].join(""),frameborder:"0",width:H,height:F}).css({border:"none"}).appendTo(CODESITE_codeBlogDiv)}if(CODESITE_featuredDiv.length){var M=[],G=window._apiGadgetData_||window._homepageGadgetData_,U=G.groupOptions,N=400,aa="100%",S="__MSG_groups.community__";C="";if(U){aa=U.width||aa;N=U.height||N;S=U.up_gadgetTitle||S;C=U.xtraFeeds||C}G.featuredProjectsFeedUrl&&G.featuredProjectsFeedUrl.length&&
M.push(b(["featured:__MSG_featured.projects__:",G.featuredProjectsFeedUrl].join("")));if(G.groupFeedUrl&&G.groupFeedUrl.length){if(!G.groupFeedName||G.groupFeedName.length==0)G.groupFeedName="__MSG_groups.community__";M.push(b([G.groupFeedName,":",G.groupFeedUrl].join("")))}G.featureFeedUrl&&G.featureFeedUrl.length&&M.push(b(["featured:__MSG_featured.projects__:",G.featureFeedUrl].join("")));G.articleFeedUrl&&G.articleFeedUrl.length&&M.push(b(["__MSG_articles__:",G.articleFeedUrl].join("")));G.userGroupsFeedUrl&&
G.userGroupsFeedUrl.length&&M.push(b(["__MSG_groups.user__:",G.userGroupsFeedUrl].join("")));if(C.length){z=j(C).split("|");for(K=0;K<z.length;K++)M.push(b(z[K]))}if(M.length)jQuery('<iframe frameborder="0">').attr({src:["http://www.gmodules.com/ig/ifr?url=http://code.google.com/gadgets/FeedGadget/gadget.xml",i,"up_showaddbutton=true&up_defer=true&up_gadgetTitle=",b(S),"&up_feeds=",M.join("|"),o(U||"")].join(""),frameborder:"0",width:aa,height:N}).css({border:"none"}).appendTo(CODESITE_featuredDiv)}}
jQuery(function(){try{prettyPrint()}catch(i){}});jQuery(function(){var i=jQuery("#gc-pagecontent"),o=jQuery("#gc-toc");if(i.length){var l=jQuery('<div id="gc-collapsible-arrow">'),r=jQuery('<div id="gc-collapsible">'),D=function(F){var H=i.offset();l.css({left:H.left+"px",top:(F.pageY||F.clientY)+"px"})};i.css("position","relative").append(r);jQuery(document.body).append(l);jQuery.browser.msie&&jQuery.browser.version<7&&i.css("left","-5px");i.is(".skip-collapsible")||r.mouseover(function(F){r.addClass("hover");
if(o.is(":hidden")){r.css("left","-3px");l.addClass("collapsed")}else l.removeClass("collapsed");l.show();D(F)}).mousemove(function(F){D(F)}).mouseout(function(){r.removeClass("hover");r.css("left","");l.hide()}).click(function(){l.hide();r.removeClass("hover").css("left","");o.toggle();if(o.is(":visible")){i.css("margin-left","");jQuery.browser.msie&&jQuery.browser.version<7&&i.css("left","-5px")}else{i.css("margin-left","0px");jQuery.browser.msie&&jQuery.browser.version<7&&i.css("left","")}});r.height(i.height())}});
jQuery(window.CODESITE_createVideoAndGadgets=function(){CODESITE_codeBlogDiv=jQuery("#gc-blog-gadget");CODESITE_featuredDiv=jQuery("#gc-community-gadget");CODESITE_codeVideoDiv=jQuery("#gc-codevideo");CODESITE_macRecentChangesDiv=jQuery("#recentchanges");if(CODESITE_codeVideoDiv.length||CODESITE_macRecentChangesDiv.length)if(window.google)CODESITE_loadFeedAPI();else{var i=document.createElement("script");i.src="http://www.google.com/jsapi?key=internal-codesite&callback=CODESITE_loadFeedAPI";i.type=
"text/javascript";document.getElementsByTagName("head")[0].appendChild(i)}if(CODESITE_codeBlogDiv.length||CODESITE_featuredDiv.length)f()});window.CODESITE_getIntlUrl=function(i){var o=["/intl/","/p/","/u/","/hosting/","/support/","/soc/","/codejam/","/apis/youtube/dashboard/"];if(i.indexOf("/")==0){for(var l in o)if(i.indexOf(o[l])>=0)return i;return CODESITE_langUrl+i}else return i};window.CODESITE_derivePath=function(i){var o=window.ORIGINAL_PAGE_PATH;if(!o)return i;var l=window.location.href;
l=l.substring(0,l.lastIndexOf("/"));var r=o.substring(0,o.lastIndexOf("/"));l=l.substring(0,l.length-r.length);return l+i};window.CODESITE_docEarlyProcessing=function(){CODESITE_buildTreelistWidget()};window.CODESITE_getProduct=function(i){i=i||window.location.href;var o=/https?:\/\/[^\/]*(\/intl\/[^\/]*)?(\/apis)?(\/([a-z0-9]*))?\//,l=o.exec(i);if(!l)return"";var r=l[4];return r?r:""};jQuery(window).load(function(){window.setTimeout(function(){jQuery.getScript("http://www.google-analytics.com/ga.js",
function(){var i=window._gat._getTracker("UA-18071-1");i._setAllowAnchor(true);i._initData();i._trackPageview()})},0)});window.CODESITE_click=function(i){if(window._gat){var o=window._gat._getTracker("UA-18071-1");o._initData();o._trackPageview(i)}}})(jQuery);(function(){var k={products:{sectionTitle:"Products",labels:["All","Ads","AJAX","Browser","Geo","Product APIs","Search","Social","Labs"],labelsMapExternalToInternal:{All:"products",Ads:"ads",AJAX:"ajax",Browser:"browser",Geo:"geo","Product APIs":"apis",Search:"search",Social:"social",Labs:"labs"},labelsMapInternalToExternal:{products:"All",ads:"Ads",ajax:"AJAX",browser:"Browser",geo:"Geo",apis:"Product APIs",search:"Search",social:"Social",labs:"Labs"},resourceKeys:["home","doc","group","blog","faq",
"samplecode","articles","terms","appgallery"],resourceKeysMap:{home:"Home",doc:"Documentation",group:"Group",blog:"Blog",faq:"FAQ",samplecode:"Sample Code",articles:"Articles & Tutorials",terms:"Terms",appgallery:"App Gallery"}},programs:{sectionTitle:"Resources",labels:["Open Source","Education","Events"],labelsMapExternalToInternal:{"Open Source":"opensource",Education:"education",Events:"events"},labelsMapInternalToExternal:{opensource:"Open Source",education:"Education",events:"Events"}},messages:{NEW:"New!",
LONG_DESC_PANEL_TITLE:"Details",FOR_MORE:"For more information",LABS_NOTICE:'This is a <a href="/labs/">Labs API</a>.'}};window.CODESITE_siteDirectoryMetaData=k;var b={dictionariesList:["products","programs","searchSuggest","searchResultTabs"],products:{dictionaryType:"products",includeInSiteDirectory:true,includeInSearchSuggest:true,siteDirectoryMetaData:k.products,keys:["accounts","adsense","adwords","ajax","ajaxfeeds","ajaxlanguage","ajaxsearch","analytics","android","appengine","googleapps","apps",
"base","blogger","books","calendar","chart","checkout","chromium","csearch","codesearch","contacts","coupons","customsearch","gdata","desktop","documents","in-stream","earth","eclipse","feedburner","finance","friendconnect","gadgets","gears","health","igoogle","themes","kml","mapplets","maps","flashmaps","o3d","opensocial","orkut","picasa","picasaweb","safebrowsing","sdc","sitemaps","sketchup","socialgraph","spreadsheets","staticmaps","talk","toolbar","transit","v8","visualization","webtoolkit","webmastertools",
"youtube"],entries:{android:{title:"Android",groupsTitle:"Android Groups",url:"/android/",productId:"android",labels:["products"],keywords:{mobile:10},shortDesc:"Build mobile apps for Android, a software stack for mobile devices.",longDesc:'Android is a software stack for mobile devices including an operating system, middleware and key applications. It is being developed by the <a href="http://www.openhandsetalliance.com/">Open Handset Alliance</a>, a group of more than 30 technology and mobile companies. Android was built from the ground-up to enable developers to create compelling mobile applications that take full advantage of all a handset has to offer.  Developers can create applications for the platform using the Android SDK.',
resources:{home:"/android/",doc:"/android/documentation.html",group:"http://groups.google.com/group/android-developers",blog:"http://android-developers.blogspot.com/",faq:"/android/kb/index.html",terms:"/android/terms.html"}},gdata:{title:"Google Data APIs",groupsTitle:"Google Data APIs Groups",url:"/apis/gdata/",productId:"gdata",labels:["products","apis"],keywords:{apis:1,feed:1,entries:6,gentries:10,"data apis":10,java:1},shortDesc:"A simple, standard protocol for reading and writing data on the web.",
longDesc:"The Google Data APIs provide a simple, standard protocol for reading and writing data on the web. Google Data API is a protocol based on the Atom 1.0 and RSS 2.0 syndication formats, plus the Atom Publishing Protocol. Several Google services provide a Google Data API, including Google Base, Blogger, Google Calendar, Google Spreadsheets and Picasa Web Albums.",resources:{home:"/apis/gdata/",doc:"/apis/gdata/overview.html",group:"http://groups.google.com/group/google-help-dataapi",blog:"http://googledataapis.blogspot.com/",
samplecode:"/apis/gdata/clientlibs.html",terms:"http://www.google.com/terms_of_service.html"}},blogger:{title:"Blogger Data API (Labs)",groupsTitle:"Blogger Data API Groups",url:"/apis/blogger/",productId:"blogger",labels:["products","apis","social","labs"],keywords:{apis:1,feed:1,entries:2,gentries:1,"data apis":4},shortDesc:"Enable your apps to view and update Blogger content.",longDesc:"The Blogger Data API allows client applications to view and update Blogger content in the form of Google Data API feeds. Your client application can use the Google Data API to create new blog posts, edit or delete existing posts, and query for posts that match particular criteria.",
resources:{home:"/apis/blogger/",doc:"/apis/blogger/developers_guide_protocol.html",group:"http://groups.google.com/group/bloggerDev",blog:"http://googledataapis.blogspot.com/",samplecode:"/apis/blogger/code.html",articles:"/apis/blogger/articles/",terms:"http://www.blogger.com/terms.g"}},chromium:{title:"Chromium",groupsTitle:"Chromium Groups",url:"/chromium/",productId:"chromium",labels:["products","browser"],keywords:{browser:1,chrome:1,chromium:1,v8:1},shortDesc:"Contribute to the open source project behind Google Chrome.",
longDesc:'Chromium is the open source browser project behind <a href="http://www.google.com/chrome">Google Chrome</a>. Built from components that include the Apple WebKit renderer and the new V8 JavaScript engine, Chromium provides all the elements of a functional web browser. The UI of Chromium is unobtrusive, providing more space for content. Chromium\'s multi-process architecture improves stability and security by isolating web pages in separate processes that run in a sandbox.',resources:{home:"/chromium/",
doc:"http://dev.chromium.org",group:"http://groups.google.com/group/chromium-discuss",blog:"http://blog.chromium.org",faq:"http://dev.chromium.org/developers/faq",terms:"/chromium/terms.html"}},feedburner:{title:"Feedburner APIs (Labs)",groupsTitle:"FeedBurner Groups",url:"/apis/feedburner/",productId:"feedburner",labels:["products","apis","labs"],keywords:{feed:10},shortDesc:"Interact with FeedBurner's feed management and awareness-generating capabilities.",longDesc:"FeedBurner offers web services for interacting with their feed management and awareness-generating capabilities. Using the features this library provides, anyone with a FeedBurner account may perform some of the most common actions available on the FeedBurner service programmatically.",
resources:{home:"/apis/feedburner/",doc:"/apis/feedburner/developers_guide.html",group:"http://forums.feedburner.com",blog:"http://blogs.feedburner.com",terms:"http://www.feedburner.com/fb/a/tos"}},accounts:{title:"Google Account Authentication",groupsTitle:"Google Account Authentication Groups",url:"/apis/accounts/",productId:"accounts",labels:["products"],keywords:{apis:1,feed:1,entries:1,gentries:1},shortDesc:"Get access into desktop or mobile applications.",longDesc:"Writing mashups or other applications that exchange data with your user's Google services? Use the Authentication service to simplify the  process of getting permission from your users. Libraries are available for desktop applications and web applications. The Authentication service now supports the OAuth open standard.",
resources:{home:"/apis/accounts/index.html",group:"http://groups.google.com/group/Google-Accounts-API",terms:"http://www.google.com/terms_of_service.html"}},adsense:{title:"Google AdSense API",groupsTitle:"Google AdSense API Groups",url:"/apis/adsense/",productId:"adsense",labels:["products","ads"],keywords:{ads:1,apis:1},shortDesc:"Generate revenue for you and your users by placing ads on your website.",longDesc:"The AdSense API enables you to integrate AdSense signup, ad unit management, and reporting into your web or blog hosting platform. You and your users can generate revenue from your users' web content on your site by showing relevant ads and referring products.",
resources:{home:"/apis/adsense/",doc:"/apis/adsense/developer/index.html",group:"http://groups.google.com/group/adsense-api",blog:"http://adsense.blogspot.com/",faq:"/apis/adsense/faq/index.html",samplecode:"/apis/adsense/developer/adsense_api_samples.html",articles:"/apis/adsense/articles/index.html",terms:"/apis/adsense/terms.html"}},adwords:{title:"Google AdWords API",groupsTitle:"Google AdWords API Groups",url:"/apis/adwords/",productId:"adwords",labels:["products","ads"],keywords:{ads:2,apis:1},
shortDesc:"Automate and streamline your campaign management activities.",longDesc:"The AdWords API enables advertisers and third parties alike to integrate directly with the AdWords advertising platform. Armed with direct access, you can design a suite of applications that automate reporting, data integration, campaign and bid management.",resources:{home:"/apis/adwords/",doc:"/apis/adwords/docs/developer/",group:"http://groups.google.com/group/adwords-api",blog:"http://adwordsapi.blogspot.com/",
faq:"http://www.google.com/support/adwordsapi/",samplecode:"/apis/adwords/docs/samples.html",terms:"/apis/adwords/docs/terms.html"}},ajax:{title:"Google AJAX APIs",groupsTitle:"Google AJAX APIs Groups",url:"/apis/ajax/",productId:"ajax",labels:["products","ajax"],keywords:{ajax:10,apis:10},shortDesc:"Implement rich, dynamic web sites entirely in JavaScript and HTML.",longDesc:"Google's AJAX APIs let you implement rich, dynamic web sites entirely in JavaScript and HTML. You can add a map to your site, a dynamic search box, or download feeds with just a few lines of JavaScript.",
resources:{home:"/apis/ajax/",doc:"/apis/ajax/documentation/",group:"http://groups.google.com/group/Google-AJAX-Search-API",blog:"http://googleajaxsearchapi.blogspot.com/",faq:"/support/bin/topic.py?topic=10021",terms:"/tos.html"}},ajaxfeeds:{title:"Google AJAX Feed API",groupsTitle:"Google AJAX Feed API Groups",url:"/apis/ajaxfeeds/",productId:"ajaxfeeds",labels:["products","ajax"],keywords:{ajax:8,apis:5,feed:6},shortDesc:"Easily mash up public feeds using JavaScript.",longDesc:"The AJAX Feed API makes it easy to access and use data feeds in your JavaScript applications. You used to need a server to proxy feeds before you could read and manipulate them in mashups; now you can load RSS and Atom feeds from different sources with a few lines of JavaScript code.",
resources:{home:"/apis/ajaxfeeds/",doc:"/apis/ajaxfeeds/documentation/",group:"http://groups.google.com/group/Google-AJAX-Search-API",blog:"http://googleajaxsearchapi.blogspot.com/",faq:"/support/bin/topic.py?topic=10021",samplecode:"/apis/ajaxfeeds/examples.html",terms:"/apis/ajaxfeeds/terms.html"}},ajaxlanguage:{title:"Google AJAX Language API",groupsTitle:"Google AJAX Language API Groups",url:"/apis/ajaxlanguage/",productId:"ajaxlanguage",labels:["products","ajax"],keywords:{ajax:8,apis:5,language:10},
shortDesc:"Easily translate and detect multiple languages using JavaScript.",longDesc:"The AJAX Language API make it easy to translate and detect multiple languages in your JavaScript applications.",resources:{home:"/apis/ajaxlanguage/",doc:"/apis/ajaxlanguage/documentation/",group:"http://groups.google.com/group/Google-AJAX-Search-API",blog:"http://googleajaxsearchapi.blogspot.com/",faq:"/support/bin/topic.py?topic=10021",samplecode:"/apis/ajaxlanguage/documentation#Examples",terms:"/apis/ajaxlanguage/terms.html"}},
ajaxsearch:{title:"Google AJAX Search API",groupsTitle:"Google AJAX Search API Groups",url:"/apis/ajaxsearch/",productId:"ajaxsearch",labels:["products","ajax","search","apis"],keywords:{ajax:9,apis:10,search:6,translate:5},shortDesc:"Put a Google Search box and results on your own site.",longDesc:"The Google AJAX Search API lets you use JavaScript to embed a simple, dynamic Google search box and display search results in your own web pages, or use search results programmatically in innovative ways. If you don't feel like coding, you can even use our code wizards to add custom AJAX search controls to your web page in just a few steps.",
resources:{home:"/apis/ajaxsearch/",doc:"/apis/ajaxsearch/documentation/",group:"http://groups.google.com/group/Google-AJAX-Search-API",blog:"http://googleajaxsearchapi.blogspot.com/",faq:"/support/bin/topic.py?topic=10021",samplecode:"/apis/ajaxsearch/samples.html",articles:"/support/bin/topic.py?topic=11530",terms:"/apis/ajaxsearch/terms.html"}},analytics:{title:"Google Analytics",groupsTitle:"Google Analytics Groups",url:"/apis/analytics/",productId:"analytics",labels:["products","apis","ads"],
keywords:{tools:1,apis:1,"data apis":1},shortDesc:"Track your site traffic, and write your own client applications that use Analytics data in the form of Google Data API feeds.",longDesc:"Google Analytics allows you gather, view, and analyze data about your website traffic, such as content popularity, aggregated visitor behavior, and much more. By embedding our basic JavaScript snippet into your website, you enable your site to send key information to Google Analytics for each pageview. Our powerful servers process your site's data and generate over 80 reports that you can use, interpret, and act upon. Or, use our Data Export API to pull Analytics data into custom apps you design for your own purpose. The best part: this sophisticated, full-featured web analytics package is free.",
resources:{home:"/apis/analytics/",doc:"/apis/analytics/docs/",group:"/apis/analytics/groups.html",blog:"http://analytics.blogspot.com/",terms:"http://www.google.com/analytics/tos.html"}},appengine:{title:"Google App Engine",groupsTitle:"Google App Engine Groups",url:"/appengine/",productId:"appengine",labels:["products"],keywords:{apis:5,tools:1,java:8,eclipse:1,app:8,"app engine":10,plugin:1},shortDesc:"Run your web applications on Google's infrastructure.",longDesc:"Google App Engine lets you run your web applications on Google's infrastructure.  App Engine applications are easy to build, easy to maintain, and easy to scale as your traffic and data storage needs grow.  With App Engine, there are no servers to maintain: You just upload your application, and it's ready to serve your users.",
resources:{home:"/appengine/",doc:"/appengine/docs/",group:"/appengine/groups.html",faq:"/appengine/kb/",articles:"/appengine/articles/",terms:"/appengine/terms.html",appgallery:"http://appgallery.appspot.com/"}},googleapps:{title:"Google Apps Developer Tools",url:"/googleapps/",productId:"googleapps",labels:["products","apis"],keywords:{"google apps":10,gadgets:1,enterprise:1,"app engine":1,business:1,firewall:1,sdc:1},shortDesc:"Extend Google Apps, integrate with other systems, or build new apps.",
longDesc:"Google Apps provides businesses with powerful communication, collaboration, and productivity apps right in the browser. With Google's developer tools, you can extend the functionality of Google Apps, integrate with other systems, or build new applications for your company and other businesses.",resources:{home:"/googleapps/",faq:"/googleapps/faq.html"}},apps:{title:"Google Apps APIs",groupsTitle:"Google Apps APIs Groups",url:"/apis/apps/",productId:"apps",labels:["products","apis"],keywords:{apis:1},
shortDesc:"Provides domain administration for Premier and Education Edition customers.",longDesc:"Google Apps also universally supports individual service extensibility with Gadgets, Calendar, Spreadsheets, and Talk.",resources:{home:"/apis/apps/",doc:"/apis/apps/overview.html",group:"http://groups.google.com/group/google-apps-apis",faq:"/support/bin/topic.py?topic=11279",samplecode:"/apis/apps/libraries_and_samples.html",articles:"/support/bin/topic.py?topic=12142",terms:"http://www.google.com/terms_of_service.html"}},
base:{title:"Google Base Data API (Labs)",groupsTitle:"Google Base Data API Groups",url:"/apis/base/",productId:"base",labels:["products","labs"],keywords:{apis:1,feed:1,entries:2,gentries:1,"data apis":2},shortDesc:"Manage Google Base content programmatically.",longDesc:"With the Google Base Data API, you can query Google Base data to create applications and mashups, as well as input and manage Google Base items programmatically. Your application can upload new data, update or delete existing items, and execute specialized queries to find matches for complex attribute criteria. For more information, please see the section on Google Data APIs.",
resources:{home:"/apis/base/",doc:"/apis/base/starting-out.html",group:"http://groups.google.com/group/Google-Base-data-API",blog:"http://googlebase.blogspot.com",faq:"/apis/base/faq.html",samplecode:"/apis/base/sample-apps.html",articles:"/support/bin/topic.py?topic=11983",terms:"http://www.google.com/terms_of_service.html"}},books:{title:"Google Book Search APIs (Labs)",groupsTitle:"Google Book Search APIs Groups",url:"/apis/books/",productId:"books",labels:["products","ajax","apis","search","labs"],
keywords:{ajax:9,apis:10,search:1,feeds:1,books:1},shortDesc:"Search the complete index of Book Search and integrate with its social features.",longDesc:"Google Book Search is our effort to make book content more discoverable on the Web. You can easily and reliably integrate with this repository from your site in a number of ways:<ul><li>Embed book previews on your site</li><li>Integrate search results and social features into your application</li><li>Link reliably to Book Search</li></ul>",resources:{home:"/apis/books/",
doc:"/apis/books/docs/getting-started.html",group:"http://groups.google.com/group/booksearch-apis-main",blog:"http://booksearch.blogspot.com",terms:"/apis/books/terms.html"}},calendar:{title:"Google Calendar APIs and Tools",groupsTitle:"Google Calendar APIs and Tools Groups",url:"/apis/calendar/",productId:"calendar",labels:["products","apis","social"],keywords:{apis:1,feed:5,entries:2,gadgets:3,gentries:1,"data apis":3,tools:1},shortDesc:"Create and manage events, calendars, and gadgets for Google Calendar.",
longDesc:"The Google Calendar Data API and other tools enable you to do many things: create a web front end for your group's calendar, generate a public calendar based on your organization's event database, create Calendar Gadgets, and much more.",resources:{home:"/apis/calendar/",doc:"/apis/calendar/developers_guide_protocol.html",group:"http://groups.google.com/group/google-calendar-help-dataapi",blog:"http://googledataapis.blogspot.com/",faq:"/apis/calendar/faq.html",samplecode:"/apis/calendar/code.html",
articles:"/apis/calendar/articles/",terms:"/apis/calendar/terms.html"}},chart:{title:"Google Chart API",groupsTitle:"Google Chart API Groups",url:"/apis/chart/",productId:"chart",labels:["products"],keywords:{apis:1,charts:1},shortDesc:"Dynamically embed charts in your webpage.",longDesc:"The Google Chart API is a simple tool that lets you create many types of charts. Send an HTTP request that includes data and formatting parameters and the Chart API returns a PNG image of the chart. Embed in a webpage with an image tag and you're done!",
resources:{home:"/apis/chart/",group:"http://groups.google.com/group/google-chart-api",faq:"/apis/chart/faq.html",terms:"/apis/chart/terms.html"}},checkout:{title:"Google Checkout API",groupsTitle:"Google Checkout API Groups",url:"/apis/checkout/",productId:"checkout",labels:["products"],keywords:{apis:5},shortDesc:"Start selling on your website.",longDesc:"Google Checkout provides a streamlined e-commerce checkout process that can be integrated with Google AdWords and Analytics to attract more leads and drive better conversion rates. The Checkout API allows you to integrate your site with Google Checkout, either by spending 5 minutes and dropping in simple \"Buy Now\" buttons, or by stepping through a complete integration of your order management system with Checkout. It's a message-based REST XML API involving synchronous and asynchronous interactions between Google and the merchant's server.",
resources:{home:"/apis/checkout/",doc:"/apis/checkout/developer/Google_Checkout_Basic_HTML_Overview.html",group:"http://groups.google.com/group/google-checkout-developers-forum",blog:"http://googlecheckoutapi.blogspot.com/",faq:"/support/bin/topic.py?topic=10026",samplecode:"/apis/checkout/samplecode.html",articles:"http://checkout.google.com/support/sell/bin/topic.py?topic=11964",terms:"http://checkout.google.com/termsOfService"}},csearch:{title:"Google Code Search (Labs)",url:"http://www.google.com/codesearch",
productId:"csearch",labels:["products","search","labs"],keywords:{search:1},shortDesc:"Search public source code.",longDesc:"Google Code Search helps you find function definitions and sample code by giving you one place to search publicly accessible source code hosted on the Internet. With Google Code Search, you can: <ul><li>Use regular expressions to search more precisely</li><li>Restrict your search by language, license or filename</li> <li>View the source file with links back to the entire package and the webpage where it came from</li></ul>",
resources:{home:"http://www.google.com/codesearch",group:"http://groups.google.com/group/Google-Code-Search",faq:"http://www.google.com/help/faq_codesearch.html",terms:"/tos.html"}},codesearch:{title:"Google Code Search Data API (Labs)",groupsTitle:"Google Code Search Data API Groups",url:"/apis/codesearch/",productId:"codesearch",labels:["products","search","labs"],keywords:{apis:1,feed:1,entries:1,gentries:1,search:1},shortDesc:"Enable your apps to view data from Code Search.",longDesc:"The Google Code Search Data API allows client applications to view data from Code Search in the form of Google Data API feeds. Your client application can use the Google Code Search Data API to query for public source code, function definitions, and sample code.",
resources:{home:"/apis/codesearch/",doc:"/apis/codesearch/gdata.html",group:"http://groups.google.com/group/Google-Code-Search",blog:"http://googledataapis.blogspot.com/",faq:"/support/bin/topic.py?topic=10441",samplecode:"/apis/gdata/clientlibs.html",terms:"/tos.html"}},customsearch:{title:"Google Custom Search API",groupsTitle:"Google Custom Search API Groups",url:"/apis/customsearch/",productId:"customsearch",labels:["products","ads","apis","search"],keywords:{apis:1,ads:1,custom:1,search:3,cse:1},
shortDesc:"Create a custom search engine for your website or a collection of websites",longDesc:"Google Custom Search enables you to create a search engine for your website, your blog, or a collection of websites within minutes. You can harness the power of Google to create a search engine tailored to your needs and interests and present the results in your website. You can fine-tune the ranking, customize the look and feel of the search results, and invite your friends or trusted users to help you build your custom search engine. You can even make money from your search engine by using your Google AdSense account.",
resources:{home:"/apis/customsearch/",doc:"/apis/customsearch/docs/start.html",group:"http://groups.google.com/group/google-custom-search",blog:"http://googlecustomsearch.blogspot.com/",terms:"http://www.google.com/coop/docs/cse/tos.html"}},contacts:{title:"Google Contacts APIs",groupsTitle:"Google Contacts APIs Groups",url:"/apis/contacts/",productId:"contacts",labels:["products","social"],keywords:{apis:1,feed:1,entries:2,gentries:1,contacts:1,"data apis":4},shortDesc:"Allow your apps to view and update user contacts.",
longDesc:"The Google Contacts APIs allow client applications and other data consumers to request Google Contacts content. If read-only access is sufficient for your needs, then consider using the Portable Contacts API. If you need write access to Google Contacts, then use the Data API. Here are some of the things you can do with the Google Contacts APIs:<li>Synchronize Google contacts with contacts on a mobile device</li><li>Maintain relationships between people in social applications</li><li>Give users the ability to communicate directly with their friends from external applications using phone, email, and IM</li></ul>",
resources:{home:"/apis/contacts/",doc:"/apis/contacts/developers_guide_protocol.html",group:"http://groups.google.com/group/google-contacts-api",blog:"http://googledataapis.blogspot.com",terms:"/apis/contacts/api-terms.html"}},coupons:{title:"Google Coupon Feeds (Labs)",url:"/apis/coupons/",productId:"coupons",labels:["products","labs"],keywords:{feed:1},shortDesc:"Provide coupon listings that are included in Google search results.",longDesc:"Google coupon feeds enable businesses to provide coupon listings that will be included in Google search results. Coupon feeds enable merchants to easily distribute coupons for free via the web. Consumers can also search for, print and redeem coupons for free.",
resources:{home:"/apis/coupons/",doc:"/apis/coupons/",terms:"http://www.google.com/terms_of_service.html"}},desktop:{title:"Google Desktop APIs (Labs)",searchTabTitle:"Google Desktop APIs",groupsTitle:"Google Desktop APIs Groups",url:"/apis/desktop/",productId:"desktop",labels:["products","search","labs"],keywords:{gadgets:1,search:1},shortDesc:"Create gadgets and indexing plug-ins for Google Desktop.",longDesc:"The Google Desktop APIs let you create gadgets and indexing plug-ins for Google Desktop. You can also integrate Google Desktop search into your own applications.",
resources:{home:"/apis/desktop/",doc:"/apis/desktop/docs/",group:"http://groups.google.com/group/Google-Desktop-Developer",blog:"http://googledesktopapis.blogspot.com/",samplecode:"/apis/desktop/docs/examples.html",terms:"http://desktop.google.com/dev/apiterms.html"}},documents:{title:"Google Documents List Data API",groupsTitle:"Google Documents List Data API Groups",url:"/apis/documents/",productId:"documents",labels:["products","apis"],keywords:{apis:1,feed:1,entries:2,gentries:1,"data apis":3},
shortDesc:"Enable your apps to view and update your list of Google Documents.",longDesc:'The Google Documents List Data API allows client applications to view and search through documents stored in <a href="http://docs.google.com/">Google Documents</a> using Google Data API feeds. Your client application can request a list of a user\'s word processing documents and/or spreadsheets and upload existing documents to Google Documents.',resources:{home:"/apis/documents/",doc:"/apis/documents/developers_guide_protocol.html",
group:"http://groups.google.com/group/Google-Docs-Data-APIs",blog:"http://googledataapis.blogspot.com/",faq:"/apis/documents/faq.html",samplecode:"/apis/documents/code.html",articles:"/apis/documents/articles/",terms:"http://www.google.com/google-d-s/terms.html"}},"in-stream":{title:"DoubleClick In-Stream (Labs)",url:"/apis/in-stream/",productId:"in-stream",labels:["products","ads","labs"],keywords:{apis:1,DoubleClick:10,ads:1,vidoe:1,flash:1},shortDesc:"DoubleClick In-Stream enables publishers to serve in-stream advertisements in your video content.",
longDesc:"DoubleClick In-Stream helps keep ad operations efficient by integrating with the trusted trafficking, targeting, forecasting and reporting features of the DART for Publishers (DFP) platform. DoubleClick In-Stream has support for industry standard formats including pre-rolls, overlays and companions as well as IAB compliant reporting metrics.",resources:{home:"/apis/in-stream/",doc:"/apis/in-stream/docs/",terms:"/apis/in-stream/terms.html"}},earth:{title:"Google Earth API",groupsTitle:"Google Earth API Groups",
url:"/apis/earth/",productId:"earth",labels:["products","apis","geo","ajax"],keywords:{apis:4,developer:1,"developer day":1,geo:6,maps:6,kml:6},shortDesc:"Embed Google Earth into your web page.",longDesc:"The Google Earth Plug-in and its JavaScript API let you embed Google Earth, a true 3D digital globe, into your web pages. Using the API you can draw markers and lines, drape images over the terrain, add 3D models, or load KML files, allowing you to build sophisticated 3D map applications. If you have an existing Maps API site, you can 3D-enable your page with as little as one line of code.",
resources:{home:"/apis/earth/",doc:"/apis/earth/documentation/",group:"http://groups.google.com/group/kml-support/topics",blog:"http://googlegeodevelopers.blogspot.com/"}},eclipse:{title:"Google Plugin for Eclipse",url:"/eclipse/",productId:"eclipse",labels:["products"],keywords:{java:3,gwt:1,"app engine":1,"plug-in":10},shortDesc:"Simplifies development of GWT and App Engine projects in the Eclipse IDE.",longDesc:'The Google Plugin for Eclipse is the fastest way to start developing Google Web Toolkit and App Engine applications, allowing you to go from installing the plugin to deploying an Ajax "Hello World" in a matter of minutes. Simply install the plugin and get started. If you don\'t have the GWT and App Engine SDKs installed, the plugin can take care of that for you.',
resources:{home:"/eclipse/",doc:"/eclipse/docs/users_guide.html",faq:"/eclipse/docs/faq.html",terms:"/eclipse/terms.html"}},finance:{title:"Google Finance Data API (Labs)",url:"/apis/finance/",productId:"finance",labels:["products","apis","labs"],keywords:{apis:4,feeds:1,"data apis":1},shortDesc:"View and update Finance content in the form of Google Data API feeds.",longDesc:"The Google Finance Portfolio Data API allows client applications to view and update Finance content in the form of Google Data API feeds.<br> <br>Your client application can use the Finance Data API to create new portfolio and transaction entries, request a list of entries, and edit or delete existing entries.",
resources:{home:"/apis/finance/",doc:"/apis/finance/developers_guide_java.html"}},flashmaps:{title:"Google Maps API For Flash",url:"/apis/maps/documentation/flash/",productId:"flashmaps",labels:["products","geo"],keywords:{ajax:7,apis:4,actionscript:1,geo:6,maps:6},shortDesc:"Integrate Google Maps in Flash applications.",longDesc:"The Google Maps API for Flash allows you to add maps to Flash applications.  Based on ActionScript 3.0, this API enables Flex developers to easily customize maps through a variety of services.",
resources:{home:"/apis/maps/documentation/flash/index.html",doc:"/apis/maps/documentation/flash/intro.html",group:"http://groups.google.com/group/google-maps-api-for-flash",blog:"http://googlegeodevelopers.blogspot.com/",faq:"/apis/maps/faq.html",terms:"/apis/maps/terms.html"}},friendconnect:{title:"Google Friend Connect APIs (Labs)",url:"/apis/friendconnect/",productId:"friendconnect",labels:["products","apis","social","labs"],keywords:{apis:5,gadgets:5,social:10,friend:10},shortDesc:"JS and REST/RPC API's to Google Friend Connect",
longDesc:"Google Friend Connect lets  any web site instantly attain social capabilities including: <ul><li>Visitor sign in via existing Google and OpenID credentials</li><li>Profile creation, friend graph management, and activity generation</li><li>Integration of profiles, friend graphs, and activity publish from existiting social networks</li><li>Embedding of OpenSocial gadgets</li></ul><br>Google Friend Connect for developers  provides JavaScript and REST API's to Google Friend Connect services allowing seamless integration with existing sites and login systems as well as gadgets that can be embedded in Friend Connect enabled sites.",
resources:{home:"/apis/friendconnect/",doc:"/apis/friendconnect/getting_started.html",group:"http://groups.google.com/group/google-friend-connect-developers/",blog:"http://googlesocialweb.blogspot.com/",articles:"/apis/friendconnect/articles/",terms:"/apis/friendconnect/terms.html"}},gadgets:{title:"Gadgets API",groupsTitle:"Gadgets API Groups",url:"/apis/gadgets/",productId:"gadgets",labels:["products","apis","social"],keywords:{finance:1,apis:8,gadgets:6},shortDesc:"Build mini-apps that run on multiple sites including iGoogle, Google Desktop, or any webpage.",
longDesc:"Gadgets are simple HTML and JavaScript mini-applications served in iFrames that can be embedded in webpages and other apps. Built-in JavaScript libraries make it easy to create gadgets that include tabs, Flash content, persistent storage, dynamic resizing, and more. Many gadgets are viewed millions of times per week and generate significant traffic for their authors.",resources:{home:"/apis/gadgets/",doc:"/apis/gadgets/docs/dev_guide.html",group:"http://groups.google.com/group/Google-Gadgets-API",
blog:"http://googlegadgetsapi.blogspot.com",faq:"/support/bin/topic.py?topic=10027",terms:"/apis/gadgets/docs/terms.html"}},gears:{title:"Gears (Labs)",groupsTitle:"Gears Groups",url:"/apis/gears/",productId:"gears",labels:["products","ajax","browser","labs"],keywords:{ajax:5,apis:9,tools:1},shortDesc:"Enable web applications to work offline, from your desktop PC or your mobile device.",longDesc:"Gears is an open source browser extension that lets you create web applications that run offline. It lets you store and serve application resources locally, store data locally in a fully-searchable relational database, and run asynchronous JavaScript to improve application responsiveness.",
resources:{home:"/apis/gears/",doc:"/apis/gears/design.html",group:"http://groups.google.com/group/google-gears/",blog:"http://gearsblog.blogspot.com/",faq:"/support/bin/topic.py?topic=11628",samplecode:"/apis/gears/sample.html",articles:"/apis/gears/tutorial.html",terms:"http://gears.google.com/tos.html"}},health:{title:"Google Health API",groupsTitle:"Google Health Developers Groups",url:"/apis/health/",productId:"health",labels:["products","apis"],keywords:{"data apis":3,feed:1,health:1,java:1},
shortDesc:"Manage your personal health information with Google.",longDesc:"The Google Health Data API allows client applications to view and send Health content in the form of Google Data API feeds. Your client application can use the Health Data API to create new medical records, request a list of medical records and query for medical records that match particular criteria. <br> <br>Here are some of the things you can do with the Health Data API:<br> <br> <ul> <li>Upload patient medical records</li> <li>Get patient medical data and provide personalized functionality based on that data </li>",
resources:{home:"/apis/health/",doc:"/apis/health/developers_guide_protocol.html",group:"http://groups.google.com/group/googlehealthdevelopers/",faq:"/apis/health/faq.html",terms:"http://www.google.com/health/html/terms.html"}},igoogle:{title:"iGoogle Developer Home (Labs)",groupsTitle:"iGoogle Developers Groups",url:"/apis/igoogle/",productId:"igoogle",labels:["products","apis","social","labs"],keywords:{ads:3,apis:1,gadgets:1,social:1},shortDesc:"Build and test your gadget in the new sandbox for iGoogle.",
longDesc:"Gadgets on iGoogle now support canvas view and OpenSocial, a common set of APIs, HTML, and JavaScript designed to let you easily build social applications. Build and test your gadget in the new sandbox for iGoogle.",resources:{home:"/apis/igoogle/",doc:"/apis/igoogle/docs/igoogledevguide.html",group:"http://groups.google.com/group/Google-Gadgets-API/",blog:"http://googlegadgetsapi.blogspot.com/",faq:"/apis/igoogle/faq.html",terms:"/apis/gadgets/docs/terms.html"}},themes:{title:"iGoogle Themes API (Labs)",
url:"/apis/themes/",productId:"themes",labels:["products","labs"],keywords:{apis:1},shortDesc:"Design a dynamic theme for the iGoogle homepage.",longDesc:"The iGoogle Themes API allows you to further personalize the iGoogle homepage by specifying your own background images and colors in an XML file.  Themes can change throughout the day, making it easy to create a visual story, a landscape that changes as the sun rises and sets, or a dynamic piece of art.",resources:{home:"/apis/themes/",doc:"/apis/themes/docs/dev_guide.html",
terms:"/apis/themes/docs/terms.html"}},kml:{title:"KML",groupsTitle:"KML Groups",url:"/apis/kml/",productId:"kml",labels:["products","geo"],keywords:{apis:1,geo:4,maps:1},shortDesc:"Create and share content with Google Earth, Maps, and Maps for mobile.",longDesc:"KML is a file format used to display geographic data in an Earth browser, such as Google Earth, Google Maps and Google Maps for mobile. KML uses a tag-based structure with nested elements and attributes and is XML-based. Google Earth and Google Maps have millions of users, so there's already a wide audience awaiting your content.",
resources:{home:"/apis/kml/",doc:"/apis/kml/documentation/",group:"http://groups.google.com/group/kml-support",blog:"http://googlegeodevelopers.blogspot.com/",faq:"/support/bin/topic.py?topic=10426",samplecode:"/apis/kml/documentation/kml_tut.html",articles:"/support/bin/topic.py?topic=11367",terms:"http://www.google.com/terms_of_service.html"}},mapplets:{title:"Google Mapplets",url:"/apis/maps/documentation/mapplets/",productId:"mapplets",labels:["products","geo"],keywords:{apis:1,gadgets:1,geo:5,
maps:1},shortDesc:"Build mini-applications to embed within the Google Maps site.",longDesc:"Google Mapplets are mini-applications that you can embed within the Google Maps site. Examples include real estate search, current weather conditions, and distance measurement. Mapplets are Gadgets that can manipulate the map using JavaScript calls that are derived from the Google Maps API.",resources:{home:"/apis/maps/documentation/mapplets/",doc:"/apis/maps/documentation/mapplets/guide.html",group:"http://groups.google.com/group/Google-Maps-API",
blog:"http://googlegeodevelopers.blogspot.com/",faq:"/apis/maps.faq.html",articles:"/apis/maps/articles/",terms:"/apis/maps/terms.html"}},maps:{title:"Google Maps API",groupsTitle:"Google Maps API Groups",url:"/apis/maps/",productId:"maps",labels:["products","ajax","apis","geo"],keywords:{ajax:7,apis:4,geo:6,maps:6},shortDesc:"Integrate Google's interactive maps with data on your site.",longDesc:"The Google Maps API allows you to create innovative online mapping applications and helps integrate maps and geo-coding into your websites. With it, you can easily present your geo-referenced content in any web browser.",
resources:{home:"/apis/maps/",doc:"/apis/maps/documentation/index.html",group:"http://groups.google.com/group/Google-Maps-API",blog:"http://googlegeodevelopers.blogspot.com/",faq:"/apis/maps/faq.html",samplecode:"/apis/maps/documentation/examples/index.html",articles:"/apis/maps/articles",terms:"/apis/maps/terms.html"}},o3d:{title:"O3D API (Labs)",groupsTitle:"O3D Groups",url:"/apis/o3d/",productId:"o3d",labels:["products","browser","labs"],keywords:{graphics:10,"open source":1,javascript:1,"3d":10},
shortDesc:"Create rich, interactive 3D web applications entirely in HTML and JavaScript.",longDesc:"O3D is an open-source web API for creating rich, interactive 3D applications in the browser. This API is shared at an early stage as part of a conversation with the broader developer community about establishing an open web standard for 3D graphics.",resources:{home:"/apis/o3d/",doc:"/apis/o3d/docs/",group:"/apis/o3d/docs/groups.html",blog:"http://o3d.blogspot.com",faq:"/apis/o3d/docs/faqs.html",terms:"/apis/o3d/docs/terms.html"}},
opensocial:{title:"OpenSocial",groupsTitle:"OpenSocial Groups",url:"/apis/opensocial/",productId:"opensocial",labels:["products","ajax","social"],keywords:{social:10,"open source":2,apis:8},shortDesc:"Build social applications that work across many websites.",longDesc:"OpenSocial defines a common API for social applications across multiple websites. With standard JavaScript and HTML, developers can create apps that access a social network's friends and update feeds. <br><br>A common API means you have less to learn to build for multiple websites. OpenSocial is currently being developed by a broad set of members of the web community. The ultimate goal is for any social website to be able to implement the API and host 3rd party social applications.",
resources:{home:"/apis/opensocial/",doc:"/apis/opensocial/docs/index.html",group:"http://groups.google.com/group/opensocial-api/",blog:"http://opensocialapis.blogspot.com/",faq:"/apis/opensocial/faq.html",articles:"/apis/opensocial/articles/",terms:"/apis/opensocial/terms.html"}},orkut:{title:"Orkut Developer Home",searchTabTitle:"Orkut",groupsTitle:"Orkut Groups",url:"/apis/orkut/",productId:"orkut",labels:["products","apis","social"],keywords:{social:8},shortDesc:"Create social applications for the millions of global Orkut users.",
longDesc:'As a developer, you can create social applications for Orkut users. Orkut supports <a href="/apis/opensocial/">OpenSocial</a>, a common set of APIs, HTML, and JavaScript designed to let developers easily build social applications.',resources:{home:"/apis/orkut/"}},safebrowsing:{title:"Google Safe Browsing APIs (Labs)",groupsTitle:"Google Safe Browsing APIs Groups",url:"/apis/safebrowsing/",productId:"safebrowsing",labels:["products","labs"],keywords:{apis:1,feed:1,entries:1,gentries:1},
shortDesc:"Download lists of suspected phishing and malware URLs.",longDesc:"The Safe Browsing API is an experimental API that allows client applications to check URLs against Google's constantly-updated blacklists of suspected phishing and malware pages. Your client application can use the API to download an encrypted table for local, client-side lookups of URLs that you would like to check.",resources:{home:"/apis/safebrowsing/",doc:"/apis/safebrowsing/developers_guide.html",group:"http://groups.google.com/group/google-safe-browsing-api",
blog:"http://googleonlinesecurity.blogspot.com/",terms:"/apis/safebrowsing/terms.html"}},sdc:{title:"Google Secure Data Connector",groupsTitle:"Google Apps API Discussion Groups",url:"/securedataconnector/",productId:"sdc",labels:["products","apis"],keywords:{"data apis":3,sdc:10,gadgets:1,firewall:10,enterprise:1,"app engine":1,network:1,"google apps":2},shortDesc:"Connect data from behind the firewall to Google Apps.",longDesc:"Google Apps provides powerful communication, collaboration, and productivity tools right from the browser. But even if your business uses Google Apps, much of your enterprise's data is probably still stored behind a firewall - making it inaccessible to your users when they're not connected to the corporate network.<br><br>The Secure Data Connector (SDC) helps you build custom applications so that your Google Apps users can request access to this data.",
resources:{home:"/securedataconnector/",doc:"/securedataconnector/docs/",faq:"/securedataconnector/faq.html",group:"http://www.google.com/support/forum/p/apps-apis/",terms:"http://www.google.com/apps/intl/en/terms/api_terms.html"}},sitemaps:{title:"Google Sitemaps",url:"https://www.google.com/webmasters/tools/docs/en/about.html",productId:"sitemaps",labels:["products","search"],keywords:{search:1,tools:1},shortDesc:"Enables Google to quickly crawl your website.",longDesc:'Enables Google crawlers to quickly find what pages are present and which have recently changed. You create a file conforming to the Sitemap Protocol on your webserver; this file informs and direct Google crawlers, improving the time to inclusion in the index.  We have an open-source <a href="http://goog-sitemapgen.sourceforge.net/">project</a> that helps in the creation of these sitemaps, and many <a href="/sm_thirdparty.html">third party Sitemap tools</a> are available.',
resources:{home:"https://www.google.com/webmasters/tools/docs/en/about.html",doc:"https://www.google.com/webmasters/tools/docs/en/protocol.html",group:"http://groups.google.com/group/Google_Webmaster_Help",blog:"http://googlewebmastercentral.blogspot.com/",terms:"http://www.google.com/accounts/TOS"}},sketchup:{title:"Google SketchUp Ruby API",groupsTitle:"Google SketchUp Ruby API Groups",url:"/apis/sketchup/",productId:"sketchup",labels:["products","geo"],keywords:{apis:1,geo:3},shortDesc:"Extend Google SketchUp with Ruby.",
longDesc:'Google SketchUp Ruby API allows you to manipulate SketchUp models and extend the behavior of Google SketchUp.  You can write macros for repeated tasks.  You can also write customs tools for Google SketchUp and other plugins. <a href="http://groups.google.com/group/sketchupruby/topics">Show off a little</a>.',resources:{home:"/apis/sketchup/",doc:"/apis/sketchup/docs/gsrubyapi_examples.html",group:"http://groups.google.com/group/sketchupruby/topics",blog:"http://sketchupapi.blogspot.com/",
terms:"/apis/sketchup/docs/tos.html"}},socialgraph:{title:"Social Graph API (Labs)",groupsTitle:"Social Graph API Groups",url:"/apis/socialgraph/",productId:"socialgraph",labels:["products","social","labs"],keywords:{social:9},shortDesc:"Enable users to quickly add their public social connections to your site.",longDesc:'The Social Graph API makes information about the public connections between people on the Web easily available and useful for developers.  Developers can query this public information to offer their users dramatically streamlined "add friends" functionality and other useful features.',
resources:{home:"/apis/socialgraph/",doc:"/apis/socialgraph/docs/",group:"http://groups.google.com/group/social-graph-api",faq:"apis/socialgraph/faq.html",terms:"/apis/socialgraph/terms.html"}},spreadsheets:{title:"Google Spreadsheets Data API (Labs)",groupsTitle:"Google Spreadsheets Data API Groups",url:"/apis/spreadsheets/",productId:"spreadsheets",labels:["products","apis","labs"],keywords:{apis:1,feed:1,entries:2,gentries:1,"data apis":4},shortDesc:"Enable your apps to view and update Google Spreadsheets content.",
longDesc:"The Google Spreadsheets Data API allows client applications to view and update Spreadsheets content in the form of Google Data API feeds. Your client application can request a list of a user's spreadsheets, edit or delete content in an existing Spreadsheets worksheet, and query the content in an existing Spreadsheets worksheet.",resources:{home:"/apis/spreadsheets/",doc:"/apis/spreadsheets/developers_guide_protocol.html",group:"http://groups.google.com/group/Google-Docs-Data-APIs",blog:"http://googledataapis.blogspot.com/",
faq:"/apis/spreadsheets/faq.html",samplecode:"/apis/spreadsheets/code.html",articles:"/apis/spreadsheets/articles/",terms:"/apis/maps/terms.html"}},staticmaps:{title:"Google Static Maps API",url:"/apis/maps/documentation/staticmaps/",productId:"staticmaps",labels:["products","geo"],keywords:{apis:1,geo:6,maps:2},shortDesc:"Embed a Google Maps image on your webpage without requiring JavaScript or any dynamic page loading.",longDesc:"The Google Static Maps API lets you embed a Google Maps image on your webpage without requiring JavaScript or any dynamic page loading. The Google Static Map service creates your map based on URL parameters sent through a standard HTTP request and returns the map as an image you can display on your web page!",
resources:{home:"/apis/maps/documentation/staticmaps/",doc:"/apis/maps/documentation/staticmaps/",group:"http://groups.google.com/group/Google-Maps-API",blog:"http://googlegeodevelopers.blogspot.com/",terms:"/apis/maps/terms.html"}},talk:{title:"Google Talk for Developers (Labs)",groupsTitle:"Google Talk XMPP Groups",url:"/apis/talk/",productId:"talk",labels:["products","apis","social","labs"],keywords:{apis:1},shortDesc:"Connect your client or network to the Google Talk network, add chatback, or customize the Google Talk gadget.",
longDesc:'The Google Talk network uses <a href="http://www.xmpp.org/specs/">XMPP</a> for its communications protocol, making it easy for client developers to connect and other networks to federate. There are some non-standard XMPP extensions, which are covered in the <a href="/apis/talk/jep_extensions/extensions.html">Google Talk XMPP Extensions</a> section. Google also offers Libjingle, a set of C++ components to interoperate with Google Talk\'s peer-to-peer and voice calling capabilities. For details, see the <a href="/apis/talk/libjingle/index.html">Libjingle Developer Guide</a>. There are multiple interfaces in a great variety of languages including Python, PHP, Java, and C#. <br><br>Web developers may be interested in <a href="http://www.google.com/talk/service/badge/New">chatback</a> and in the <a href="/apis/talk/talk_gadget.html">Google Talk Gadget</a>, a browser-based instant messaging client for the Google Talk network.',
resources:{home:"/apis/talk/",doc:"/apis/talk/talk_developers_home.html",group:"http://groups.google.com/group/google-talk-open",faq:"/apis/talk/developer_faq.html",samplecode:"/apis/talk/libjingle/index.html",terms:"http://www.google.com/terms_of_service.html"}},toolbar:{title:"Google Toolbar API (Labs)",url:"http://www.google.com/tools/toolbar/buttons/apis",productId:"toolbar",labels:["products","apis","labs"],keywords:{apis:1,tools:1},shortDesc:"Lets you create custom buttons for the Google Toolbar.",
longDesc:"The Google Toolbar API lets you create custom buttons for the Google Toolbar (version 4 and above) using XML.  Buttons can navigate to and search a site, display an RSS feed in a menu, and change their icon dynamically.",resources:{home:"http://www.google.com/tools/toolbar/buttons/apis",doc:"http://www.google.com/tools/toolbar/buttons/apis/howto_guide.html",group:"http://groups.google.com/group/Google-Custom-Buttons",faq:"/support/bin/topic.py?topic=10037",samplecode:"http://toolbar.google.com/buttons",
terms:"http://www.google.com/terms_of_service.html"}},transit:{title:"Google Transit Feed Specification",groupsTitle:"Google Transit Feed Groups",url:"/transit/spec/transit_feed_specification.html",productId:"transit",labels:["products","geo"],keywords:{feed:1,geo:1,maps:1},shortDesc:"Provide public transit route and schedule information for Google Maps and more.",longDesc:"The Google Transit Feed Specification is a common format that transit agencies and other interested parties can use to make public transportation information available through Google Transit Trip Planner, Google Earth, Google Maps, and other tools.",
resources:{home:"/transit/spec/transit_feed_specification.html",doc:"/transit/spec/transit_feed_specification.html",group:"http://groups.google.com/group/googletransit/",samplecode:"http://spreadsheets.google.com/pub?key=puMHBiWYEbXT0UxQGLDpuBA&gid=11",terms:"http://www.google.com/terms_of_service.html"}},visualization:{title:"Google Visualization API",groupsTitle:"Google Visualization API Groups",url:"/apis/visualization/",productId:"visualization",labels:["products","ajax"],keywords:{ajax:1,apis:3,
gentries:1,gadgets:3},shortDesc:"Create visualizations and reporting applications that access structured data in a common format.",longDesc:"The Google Visualization API allows you to create visualization and reporting applications over structured data and helps integrate these into your websites or Gadgets. With this API, you can easily create visualizations that provide insights from relevant content and embed those in any web browser.<br><br>This API is also used to create Spreadsheet Gadgets which: <ul><li>Add new features to Google Spreadsheets.</li><li>Use a Google Spreadsheet as a data source for iGoogle or other gadget-enabled sites.</li></ul>",
resources:{home:"/apis/visualization/",doc:"/apis/visualization/documentation/",group:"http://groups.google.com/group/google-visualization-api",faq:"/apis/visualization/faq.html",terms:"/apis/visualization/terms.html"}},webtoolkit:{title:"Google Web Toolkit",groupsTitle:"Google Web Toolkit Groups",url:"/webtoolkit/",productId:"webtoolkit",labels:["products","ajax","browser"],keywords:{ajax:6,java:1,tools:6,eclipse:1,gwt:10},shortDesc:"Build AJAX apps in the Java language.",longDesc:"The Google Web Toolkit (GWT) is an open source Java software development framework that helps you produce user-friendly AJAX applications. With GWT, you can use your favorite Java development tools to build AJAX applications without having to tackle the steep learning curve of JavaScript/CSS browser quirks.",
resources:{home:"/webtoolkit/",doc:"/webtoolkit/documentation/",group:"http://groups.google.com/group/Google-Web-Toolkit",blog:"http://googlewebtoolkit.blogspot.com/",faq:"/support/bin/topic.py?topic=10034",samplecode:"/webtoolkit/download.html",articles:"/support/bin/topic.py?topic=11368",terms:"/tos.html"}},picasa:{title:"Picasa APIs (Labs)",groupsTitle:"Picasa APIs Groups",url:"/apis/picasa/",productId:"picasa",labels:["products","apis","social","labs"],keywords:{apis:3,gentries:1},shortDesc:"Create custom buttons and upload files to 3rd party service.",
longDesc:"The Picasa APIs enable you to create buttons users can install in the  Picasa client user interface (see image below). Once installed, the button  exports selected images from Picasa to another desktop application or  web-based service.",resources:{home:"/apis/picasa/",doc:"/apis/picasa/docs/button_api.html",group:"http://groups.google.com/group/google-picasa-apis",faq:"/apis/picasa/faq.html",terms:"/apis/picasa/terms.html"}},picasaweb:{title:"Picasa Web Albums Data API",groupsTitle:"Picasa Web Albums Data API Groups",
url:"/apis/picasaweb/",productId:"picasaweb",labels:["products","apis","social"],keywords:{feed:1,entries:1,gentries:1,"data apis":3},shortDesc:"Include Picasa Web Albums in your application or website.",longDesc:"The Picasa Web Albums Data API allows websites and client applications to view and update Picasa Web Albums content. Using Google Data API feeds, you can retrieve and update photo albums, add new comments and photos, and even tag photos automatically. It's the easy way to get photos and albums into your own website or application.",
resources:{home:"/apis/picasaweb/",doc:"/apis/picasaweb/gdata.html",group:"http://groups.google.com/group/Google-Picasa-Data-API",blog:"http://googledataapis.blogspot.com/",faq:"/apis/picasaweb/faq.html",samplecode:"/apis/picasaweb/code.html",articles:"/apis/picasaweb/articles/",terms:"/apis/picasaweb/terms.html"}},v8:{title:"V8",url:"/apis/v8/",productId:"v8",labels:["products","browser"],keywords:{apis:1,browser:1,chrome:1,chromium:1,tools:1},shortDesc:"Google's high performance, open source, JavaScript engine.",
longDesc:"Embed V8 in your own C++ application to make your application's objects and methods available to JavaScript, and to make JavaScript objects and functions available to your application.",resources:{home:"/apis/v8/",doc:"/apis/v8/intro.html",terms:"/apis/v8/terms.html"}},webmastertools:{title:"Google Webmaster Tools Data API (Labs)",groupsTitle:"Webmaster Tools Data API Groups",url:"/apis/webmastertools/",productId:"webmastertools",labels:["products","search","labs"],keywords:{"data apis":1,
search:1,tools:1},shortDesc:"View and update site information and Sitemaps in the form of feeds.",longDesc:'Google Webmaster Tools Data API allows client applications to view and update site information and <a href="http://www.google.com/support/webmasters/bin/answer.py?answer=40318">Sitemaps</a> in the form of Google Webmaster Tools Data API feeds. Your client application can use the Google Webmaster Tools Data API to view sites in your account, add and remove sites, verify site ownership, and submit and delete Sitemaps.',
resources:{home:"/apis/webmastertools/",doc:"/apis/webmastertools/docs/developers_guide.html",group:"http://groups.google.com/group/Google_Webmaster_Help",blog:"http://googlewebmastercentral.blogspot.com/",terms:"/apis/webmastertools/docs/terms.html"}},youtube:{title:"YouTube APIs",groupsTitle:"YouTube Data API Groups",url:"/apis/youtube/",productId:"youtube",labels:["products","apis","social"],keywords:{feed:4,entries:2,gentries:6},shortDesc:"Integrate YouTube videos into your website or application.",
longDesc:"YouTube offers open access to key parts of the YouTube video repository and user community, via an open API interface and RSS feeds. Using our APIs, you can easily integrate online videos from YouTube's rapidly growing repository of videos into your application.",resources:{home:"/apis/youtube/",doc:"/apis/youtube/developers_guide_protocol.html",group:"http://groups.google.com/group/youtube-api",blog:"http://apiblog.youtube.com/",faq:"/apis/youtube/faq.html",samplecode:"/apis/youtube/code.html",
articles:"/apis/youtube/articles/",terms:"/apis/youtube/terms.html"}}}},programs:{dictionaryType:"programs",includeInSiteDirectory:true,includeInSearchSuggest:true,siteDirectoryMetaData:k.programs,keys:["projectHosting","opensource","soc","ghop","mac","edu","doctype","events","campfire"],entries:{opensource:{title:"OpenSource",url:"/opensource/",productId:"opensource",labels:["opensource"],keywords:{"open source":10},shortDesc:"Google's contribution back to the Open Source community.",longDesc:'Google is a proud user and supporter of open source software and development methodologies. As a company, Google contributes back to the Open Source community in a variety of ways.<br><br>Key Links: <ul><li><a href="/projects.html">Source Code</a> - From our <a href="/p/google-perftools/">performance tools</a> to application layer projects like <a href="http://gears.google.com/">Gears</a>, Google releases internally developed code as open source.</li><li><a href="/hosting/">Project Hosting on Google Code</a> - Project Hosting on Google Code is a free service to the open source community.</li><li><a href="/soc/">Google Summer of Code</a> - Now in its third year, Google Summer of Code is our program to introduce students to open source development and real-world programming challenges.</li></ul>'},
soc:{title:"Google Summer of Code",url:"/soc/",productId:"soc",labels:["opensource"],keywords:{"open source":5},shortDesc:"Introduce students to open source development",longDesc:'<p><i>Google Summer of Code</i> is a program that offers student developers stipends to write code for various open source projects. Google will be working with several open source, free software, and technology-related groupsto identify and fund several projects over a three month period. Historically, the program has brought together over 1,500 students with over 130 open source projects to create millions of lines of code.   </p>  <p>We\'ll be regularly posting news and updates about the program to the   <a href="http://google-opensource.blogspot.com/search/label/gsoc">Google Open Source Blog</a>.   If you\'re interested in participating in the program in the future, you can still   check out our <a href="/opensource/gsoc/2008/faqs.html">FAQs</a>.   Many of our mentoring organizations have also added program write ups to their websites.  </p>  <p>The program, which kicked off in <a href="/soc/2005/">2005</a>, is now in its fourth year. If you\'re feeling nostalgic or are interested in learning more about the projects we have worked with in the past, check out the   <a href="/soc/2006/">2006</a> and   <a href="/soc/2007/">2007</a> program pages.  </p>'},
ghop:{title:"Highly Open Participation Contest",url:"/opensource/ghop/2007-8/",productId:"ghop",labels:["opensource"],keywords:{"open source":2},shortDesc:"Get young people involved in open source development",longDesc:'Following on from the success of the <a href="http://code.google.com/soc/">Google Summer of Code</a> program, Google is pleased to announce this new effort to get young people involved in open source development.  We\'ve teamed up with the open source projects listed here to give student contestants the opportunity to learn more about and contribute to all aspects of open source software development, from writing code and documentation to preparing training materials and conducting user experience research.'},
projectHosting:{title:"Project Hosting",url:"/hosting/",productId:"projectHosting",labels:["opensource"],keywords:{"open source":6},shortDesc:"Host your open source project on Google Code.",longDesc:'Project Hosting on Google Code is a free service to the open source community. Featuring a Subversion back-end, wiki support, file downloads, issue tracking and a clean, Google-style interface, our project hosting service is the world\'s second largest open source hosting site after <a href="http://sourceforge.net/index.php">SourceForge.net</a>.'},
mac:{title:"Google Mac Developer Playground",url:"/mac/",productId:"mac",labels:["opensource"],keywords:{"open source":2,osx:6,apple:6,iphone:6},shortDesc:"Download open-source Mac software.",longDesc:"The Google Mac Developer Playground is a collection of open-source projects Mac developers at Google work on during their 20% time or on their own time."},edu:{title:"Google Code University",groupsTitle:"Google Code University Groups",url:"/edu/",productId:"edu",labels:["education"],keywords:{educators:1},
shortDesc:"Materials Created Especially for CS educators.",longDesc:'This website provides tutorials and sample course content so CS        students and educators can learn more about current computing        technologies and paradigms.         In particular, this content is Creative Commons licensed which makes it        easy for CS educators to use in their own classes.        <br><br>  Key Links:  <ul>    <li><a href="/edu/index.html">Home</a></li>    <li><a href="http://groups.google.com/group/Google-Code-for-Educators">Groups</a></li>    <li><a href="/edu/curriculumsearch/index.html">CS Curriculum Search</a></li>  </ul>  <p>  Course materials:  <ul>    <li><a href="/edu/ajax/index.html">Ajax Programming</a></li>    <li><a href="/edu/parallel/index.html">Distributed Systems</a></li>    <li><a href="/edu/security/index.html">Web Security</a></li>    <li><a href="/edu/languages/index.html">Languages</a></li>    <li><a href="/edu/tools101/index.html">Tools 101</a></li>  </ul>'},
doctype:{title:"Google DocType",groupsTitle:"Google DocType Groups",url:"/doctype/",productId:"doctype",labels:["education"],keywords:{educators:1},shortDesc:"An encyclopedia of the open web.",longDesc:"Google Doctype is an 100% open encyclopedia -- by web developers, for web developers. It includes sample code, test cases, and articles on web security, JavaScript, and CSS."},events:{title:"Developer Events",url:"/events/",productId:"events",labels:["events"],keywords:{developer:1,gdd:1,"developer day":1},
shortDesc:"Learn about upcoming developer events.",longDesc:"Learn more about developer events like Google I/O, a two-day developer gathering in San Francisco, and Google Developer Days, a series of events around the globe.  The Google Developer Events Calendar can be used to find upcoming developer events, including hackathons, meetups, and presentations on all things code.<br><br>You can add the Google Developer Events Calendar to your Google Calendar or you can add it to your feed reader.</div></p>"},
campfire:{title:"Google Campfire One",url:"/campfire/",productId:"campfire",labels:["events"],keywords:{developer:1},shortDesc:"Conversations with the developer community.",longDesc:'Every once in a while we\'ll invite members of the developer community on campus to talk shop, share some news, and eat S\'mores. We\'re calling this "Google Campfire One."   <br><br>  Key Links:  <ul>    <li><a href="/campfire/">Home</a></li>  </ul>'}}},searchSuggest:{dictionaryType:"searchSuggest",includeInSiteDirectory:false,
includeInSearchSuggest:true,keys:["googleio","support","developerday","codeblog","featuredprojects","opensourceprojects","protocolbuffers"],entries:{adsenseforaudio:{title:"Google AdSense for Audio API (Deprecated)",url:"/apis/adsenseforaudio/",keywords:{ads:1,apis:1}},gme:{title:"Google Mashup Editor (Deprecated)",url:"/gme/",keywords:{ajax:2,entries:1,gentries:1,tools:5}},notebook:{title:"Google Notebook Data API (Deprecated)",url:"/apis/notebook/",keywords:{apis:1,feed:1,entries:1,gentries:1,"data apis":3}},
gra:{title:"Google Radio Automation API (Deprecated)",url:"/apis/gra/",keywords:{java:1,apis:1,radio:10,automation:3}},soapsearch:{title:"Google SOAP Search API (Deprecated)",url:"/apis/soapsearch/",keywords:{soap:1,apis:1,search:1}},googleio:{title:"Google I/O",url:"/events/io/",keywords:{apis:1,gentries:1,"google io":1,io:1}},support:{title:"Knowledge Base",url:"/support/",keywords:{faq:1}},developerday:{title:"Developer Day 2009",url:"/events/developerday/",keywords:{developer:1}},codeblog:{title:"Google Code Blog",
url:"http://google-code-updates.blogspot.com/",keywords:{developer:1}},featuredprojects:{title:"Featured Projects",url:"http://google-code-featured.blogspot.com/",keywords:{developer:1}},opensourceprojects:{title:"Open Source Projects",url:"/hosting/projects.html",keywords:{"open source":1}},protocolbuffers:{title:"Protocol Buffers",groupsTitle:"Protocol Buffers Groups",url:"/apis/protocolbuffers/",productId:"protocolbuffers",keywords:{serialization:10,"open source":4,apis:8,"structured data":10,
data:1}}}},searchResultTabs:{dictionaryType:"searchResultTabs",includeInSiteDirectory:false,includeInSearchSuggest:false,keys:["google_code","discussion","project_hosting","developer_videos"],entries:{google_code:{title:"Google Code Website"},discussion:{title:"Google Code Groups",groupsTitle:"Google Code Groups"},project_hosting:{title:"Project Hosting"},developer_videos:{title:"Developer Videos"}}}};window.CODESITE_productDictionary_default=b;window.CODESITE_productDictionary=b})();var CSE={QUERY_REGEX_HASH:/([^\#]*)\#(p=([^&]*)&)?q=(.*)$/,QUERY_REGEX_QUES:/([^\?]*)\?(p=([^&]*)&)?q=(.*)$/,CSE_URL:"http://code.google.com/cse/googlecode-context.xml",searchControl:{},recentQuery:"",showingSearchResults:false,iframeUrlInSync:true,init:function(){CSE.searchControl=new GSearchControl;CSE.searchControl.setResultSetSize(GSearch.LARGE_RESULTSET);CSE.searchControl.setLinkTarget(GSearch.LINK_TARGET_TOP);var k=CSE.getProductParam();if(CODESITE_getSearchTabTitle(k)!=null){CSE.addSearcher(k,
false);CODESITE_getSearchTabTitle(k,true)!=null&&CSE.addSearcher(k,true)}CSE.addSearcher("google_code",false);CSE.addSearcher("discussion",true);CSE.addSearcher("project_hosting",false);var b=new GvideoSearch;b.setQueryAddition("ytchannel:GoogleDevelopers");b.setResultSetSize(GSearch.SMALL_RESULTSET);b.setUserDefinedLabel(CODESITE_getSearchTabTitle("developer_videos"));CSE.searchControl.addSearcher(b);var j=document.getElementById("searchControl"),f=new GdrawOptions;f.setDrawMode(GSearchControl.DRAW_MODE_TABBED);
CSE.searchControl.draw(j,f);CSE.checkHash(CSE.QUERY_REGEX_HASH,window.location.href)},addSearcher:function(k,b){var j=new GwebSearch;b?j.setSiteRestriction({crefUrl:CSE.CSE_URL},k+"_groups"):j.setSiteRestriction({crefUrl:CSE.CSE_URL},k);j.setUserDefinedLabel(CODESITE_getSearchTabTitle(k,b));CSE.searchControl.addSearcher(j)},checkHash:function(k,b){var j=k.exec(b);if(j){var f=decodeURI(j[4]);if(f!=""&&f!=CSE.recentQuery){jQuery("#gsearchInput").attr("value",f);CSE.executeQuery(f)}}else{if(CSE.showingSearchResults){jQuery("#searchControl").hide();
jQuery("#codesiteContent").show();CSE.recentQuery="";CSE.showingSearchResults=false;window.history.back(-1)}return false}return true},getProductParam:function(){var k=CSE.QUERY_REGEX_HASH.exec(window.location.href),b="";if(k&&k[4]){b=decodeURI(k[3]);if(CODESITE_getSearchTabTitle(b)==null)b=""}return b},executeQuery:function(k){if(!(k==""))if(CSE.iframeUrlInSync){var b=CSE.getProductParam();CSE.handleAnalytics(k,b);var j=b!=""?"p="+encodeURI(b)+"&q="+encodeURI(k):"q="+encodeURI(k);jQuery.browser.msie&&
CSE.handleIeHistory(j);CSE.recentQuery=k;CODESITE_setURL("#"+j);jQuery("#searchControl").show();jQuery("#codesiteContent").hide();CSE.showingSearchResults=true;var f=CSE.makeNoResultsHtml(k);CSE.searchControl.setNoResultsString(f);CSE.searchControl.execute(k)}},handleIeHistory:function(k){CSE.iframeUrlInSync=false;window.backiFrame.location.search=k;var b=window.setInterval(j,window.CODESITE_backButton.IFRAME_POLLING_INTERVAL);function j(){if(window.backiFrame.location.search.substring(1)==k){CSE.iframeUrlInSync=
true;window.clearInterval(b)}}},makeNoResultsHtml:function(k){for(var b=[CODESITE_msgs.search.NO_RESULTS_FOUND,"<b>",CSE.escapeHtml(k),"</b><br><br>",CODESITE_msgs.search.SUGGESTIONS_TITLE,":<br><br><ul>"].join(""),j=0,f=CODESITE_msgs.search.SUGGESTIONS_ITEMS.length;j<f;j++)b=[b,"<li>",CODESITE_msgs.search.SUGGESTIONS_ITEMS[j],"</li>"].join("");return[b,'</ul><br><a href="',CODESITE_msgs.search.SEARCH_URL,encodeURI(k),'">',CODESITE_msgs.search.TRY_WEBSEARCH,"</a>."].join("")},handleAnalytics:function(k,
b){var j=jQuery("#searchControl").css("display")=="block"?jQuery('div[@class*="gsc-tabhActive"]').text():"",f="/search/?q="+k+"&product="+b+"&tab="+j;if(window.pageTracker)try{pageTracker._initData();pageTracker._trackPageview(f)}catch(i){}},escapeHtml:function(k){return k.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\'/g,"&#039;").replace(/\"/g,"&quot;")},pollHash:function(){if(jQuery.browser.msie)CSE.iframeUrlInSync&&CSE.checkHash(CSE.QUERY_REGEX_QUES,window.backiFrame.location.href)&&
CSE.checkHash(CSE.QUERY_REGEX_HASH,window.location.href);else CSE.checkHash(CSE.QUERY_REGEX_HASH,window.location.href)}};window.CODESITE_CSE=CSE;window.CODESITE_setURL=function(k){location.href=k};
window.executeGSearch=function(k){if(!(k==""))if(CODESITE_CSE.iframeUrlInSync){var b=CODESITE_getProduct();if(b=="search")CODESITE_CSE.executeQuery(k);else{if(CODESITE_getSearchTabTitle(b)==null)b="";var j=b!=""?"p="+encodeURI(b)+"&q="+encodeURI(k):"q="+encodeURI(k);CODESITE_setURL(CODESITE_langUrl+"/search/#"+j)}}};
window.CODESITE_getSearchTabTitle=function(k,b){if(!k)return null;var j=CODESITE_productDictionary.dictionariesList;for(var f in j){var i=CODESITE_productDictionary[j[f]].entries[k];if(i)if(b){if(i.groupsTitle)return i.groupsTitle}else return i.searchTabTitle||i.title}j=CODESITE_productDictionary.dictionariesList;for(f in j)if(i=CODESITE_productDictionary_default[j[f]].entries[k])if(b){if(i.groupsTitle)return i.groupsTitle}else return i.searchTabTitle||i.title;return null};(function(){function k(b,j){this.results_=[];this.buttonEl_=jQuery("#"+j);this.inputFieldEl_=jQuery("#"+b);var f=this;jQuery(this.buttonEl_).focus(function(){f.hideResultsWindow_()});this.searchResultsEl_=jQuery('<div id="cs-searchresults">');this.searchResultsEl_.click(function(l){(event||l).cancelBubble=true});this.searchResultsEl_.appendTo(document.body);jQuery('<div id="cs-recommended">').html(CODESITE_msgs.search.SUGGESTIONS).appendTo(this.searchResultsEl_);for(var i=0,o=1;i<this.MAX_RESULTS_;i++,
o++)jQuery('<div id="searchResult'+o+'">').appendTo(this.searchResultsEl_);jQuery(document.body).click(function(l){return f.handleBodyClick_.call(f,l)});jQuery(document).keydown(function(l){return f.handleBodyKeyDown_.call(f,l)}).keypress(function(l){return f.handleBodyKeyPress_.call(f,l)}).keyup(function(l){return f.handleBodyKeyUp_.call(f,l)});jQuery(window).resize(function(l){f.handleBodyResize_.call(f,l)});window.onpageshow=function(l){l.persisted&&f.hideResultsWindow_()};this.inputFieldEl_.keyup(function(l){return f.handleInputKeyUp_.call(f,
l)}).focus(function(l){return f.handleInputFocus_.call(f,l)}).blur(function(l){return f.handleInputBlur_.call(f,l)}).click(function(l){return f.handleInputClick_.call(f,l)}).attr("autocomplete","off");this.initialized_=!!(this.inputFieldEl_.length&&this.searchResultsEl_.length&&this.buttonEl_.length)}k.prototype={results_:null,initialized_:false,searchActive_:true,resultsWindowHidden_:true,inputFieldEl_:0,searchResultsEl_:0,inputFieldHasFocus_:0,activeResult_:0,arrowKeyProcessed_:false,typedQuery_:"",
backgroundHover:"#3366CC",backgroundOff:"#ffffff",foregroundOff:"#000000",MAX_RESULTS_:7,FIRST_RESULT_:1,getQueryFromInputField_:function(){return jQuery.trim(this.inputFieldEl_.val().toLowerCase())},querySearch_:function(){if(this.searchActive_)if(this.typedQuery_.length==0)this.hideResultsWindow_();else{this.results_.splice(0,this.results_.length);var b=CODESITE_productDictionary.dictionariesList;for(var j in b){var f=CODESITE_productDictionary[b[j]];if(f.includeInSearchSuggest)for(var i in f.entries){var o=
f.entries[i],l=0,r=new RegExp("(?:\\s|^)"+RegExp.escape(this.typedQuery_)),D=o.title.toLowerCase().match(r);if(D!=null)l=2;for(var F in o.keywords){var H=F.match(r);if(H!=null)l+=o.keywords[F];var A=this.typedQuery_.split(" ");if(A.length>1)for(i=0;i<A.length;i++){var C=new RegExp("(?:\\s|^)"+A[i]),z=F.match(C);if(z!=null)l+=o.keywords[F]}}l>0&&this.results_.push({match:l,title:o.title,url:CODESITE_getIntlUrl(o.url)})}}this.results_.sort(this.sortMatches_);this.results_.length=Math.min(this.results_.length,
6);this.prepareResultsWindow_()}},sortMatches_:function(b,j){var f=j.match,i=b.match;return f<i?-1:f>i?1:0},createSearchResultDiv:function(b){var j=b+1,f=this,i=jQuery("#searchResult"+j);i.attr("class","cs-searchresult").css({display:"block",textAlign:"left",zoom:"1"}).html(['<a tabindex="-1" id="searchResultLink',j,'" href="',this.results_[b].url,'">',this.results_[b].title,"</a>"].join("")).unbind().mouseover(function(){f.deactivateAllResults_();f.activateSearchResult_(j)}).mouseout(function(){f.deactivateSearchResult_(j)}).click(function(){window.location.href=
f.results_[b].url})},prepareResultsWindow_:function(){this.activeResult_=0;if(this.results_.length==0)this.hideResultsWindow_();else{for(var b=0;b<this.results_.length;b++)this.createSearchResultDiv(b);this.deactivateAllResults_();var j=this.results_.length+1,f=jQuery("#searchResult"+j),i=this;f.attr("class","").css({textAlign:"right",display:"block",zoom:"1"}).html('<a style="color: #0000ff; text-decoration: underline;" id="searchResultLink'+j+'"> '+CODESITE_msgs.search.MORE+" &raquo;</a>").unbind().mouseup(function(){i.hideResultsWindow_();
executeGSearch(i.inputFieldEl_.val())}).mouseover(function(){i.deactivateAllResults_();i.activateSearchResult_(j)}).mouseout(function(){i.deactivateSearchResult_(j)});for(b=j+1;b<=this.MAX_RESULTS_;b++)jQuery("#searchResult"+b).hide();this.resultsWindowHidden_&&this.showResultsWindow_()}},updateDimensions_:function(){if(this.searchActive_){var b=this.inputFieldEl_.offset();b.left+=3;this.searchResultsEl_.css({left:b.left+"px",top:b.top+this.inputFieldEl_[0].offsetHeight+2+"px",width:this.inputFieldEl_.css("width")})}},
showResultsWindow_:function(){if(this.searchActive_){this.searchResultsEl_.css("visibility","hidden");this.updateDimensions_();this.searchResultsEl_.css("display","block");this.searchResultsEl_.css("visibility","visible");this.resultsWindowHidden_=false}},hideResultsWindow_:function(){if(!this.resultsWindowHidden_){this.searchResultsEl_.hide();this.resultsWindowHidden_=true;this.activeResult_=0}},activateSearchResult_:function(b){this.inputFieldEl_[0].blur();var j=jQuery("#searchResult"+b),f=jQuery("#searchResultLink"+
b);j.length&&j.css("backgroundColor",this.backgroundHover);f.length&&f.css("color","white")},deactivateSearchResult_:function(b){var j=jQuery("#searchResult"+b),f=jQuery("#searchResultLink"+b);j&&j.css("background",this.backgroundOff);if(f&&b==this.results_.length+1)f.css("color","#0000ff");else f&&f.css("color",this.foregroundOff)},deactivateAllResults_:function(){for(var b=0,j=this.results_.length+1;b<j;b++)this.deactivateSearchResult_(b+1)},activateNextSearchResult_:function(){if(this.results_.length>
0)if(this.activeResult_<=this.results_.length){this.deactivateSearchResult_(this.activeResult_);this.activeResult_++;this.activateSearchResult_(this.activeResult_)}},activatePrevSearchResult_:function(){if(this.results_.length>0)if(this.activeResult_==this.FIRST_RESULT_){this.deactivateSearchResult_(this.activeResult_);this.activeResult_=0;this.inputFieldEl_[0].focus()}else if(this.activeResult_>this.FIRST_RESULT_){this.deactivateSearchResult_(this.activeResult_);this.activeResult_--;this.activateSearchResult_(this.activeResult_)}},
handleInputKeyUp_:function(b){if(this.initialized_)if(this.searchActive_){b=b||window.event;var j=b.which?b.which:b.keyCode;if(j==13){this.hideResultsWindow_();executeGSearch(this.inputFieldEl_.val())}else{var f=this.getQueryFromInputField_();if(f!=this.typedQuery_){this.typedQuery_=f;this.querySearch_()}return true}}},handleBodyKeyDown_:function(b){var j=true,f=false;if(this.initialized_){b=b||window.event;for(var i=b.which?b.which:b.keyCode,o=b.target?b.target:b.srcElement,l=jQuery("#searchResultLink"+
this.activeResult_),r=[this.inputFieldEl_[0],document.documentElement,document.body],D=0;D<r.length;D++)if(o==r[D])f=true;if(!f)return true;switch(i){case 13:if(this.activeResult_>=0){if(this.activeResult_==this.results_.length+1){this.hideResultsWindow_();executeGSearch(this.inputFieldEl_.val())}else if(l.length)location.href=l.attr("href");j=false}break;case 27:if(this.searchActive_)if(this.resultsWindowHidden_){this.inputFieldEl_.val("");j=false}else{this.hideResultsWindow_();j=false}else{this.searchActive_=
true;this.inputFieldEl_[0].focus();j=true}break;case 40:case 63233:if(this.resultsWindowHidden_&&this.inputFieldHasFocus_&&i!=39){this.searchActive_=true;this.querySearch_();j=false}else if(!this.resultsWindowHidden_&&(this.activeResult_>0||i!=39)){this.deactivateAllResults_();this.activateNextSearchResult_();j=false;this.arrowKeyProcessed_=true}break;case 38:case 63235:if(!this.resultsWindowHidden_){this.deactivateAllResults_();this.activatePrevSearchResult_();j=false;this.arrowKeyProcessed_=true}break;
case 37:case 39:if(!this.inputFieldHasFocus_&&!this.resultsWindowHidden_){this.arrowKeyProcessed_=false;this.inputFieldEl_[0].focus()}}}return j},handleBodyKeyPress_:function(b){if(this.initialized_){b=b||window.event;var j=b.which?b.which:b.keyCode;if(this.arrowKeyProcessed_&&j>=37&&j<=40)return false;return true}},handleBodyKeyUp_:function(b){var j=true;b=b||window.event;this.arrowKeyProcessed_=false;return j},handleBodyResize_:function(){this.updateDimensions_();return true},handleInputBlur_:function(){this.inputFieldHasFocus_=
0},handleInputFocus_:function(){this.inputFieldHasFocus_=0.5;this.initialized_&&this.deactivateAllResults_()},handleInputClick_:function(b){b=b||window.event;this.searchActive_=b.cancelBubble=true;if(this.inputFieldHasFocus_==1)this.resultsWindowHidden_&&this.querySearch_();else this.inputFieldHasFocus_=1},handleBodyClick_:function(b){b=b||window.event;var j=b.target?b.target:b.srcElement;j&&j.parentNode&&this.hideResultsWindow_()}};window.CODESITE_asYouTypeSearch=k;jQuery(function(){try{new k("gsearchInput",
"gsearchButton")}catch(b){}})})(jQuery);(function(){var k={POLLING_INTERVAL:450,IFRAME_POLLING_INTERVAL:50,init:function(){var b=window.location.href.match(/\/search/);if(jQuery.browser.msie||jQuery.browser.mozilla||navigator.userAgent.indexOf("Chrome")!=-1||jQuery.browser.safari&&navigator.userAgent.indexOf("Version/")!=-1)k.poll(b)},poll:function(b){b&&window.setInterval(function(){b&&window.CODESITE_CSE.pollHash()},k.POLLING_INTERVAL)}};window.CODESITE_backButton=k})(jQuery);jQuery(document).ready(function(){window.CODESITE_backButton.init()});(function(){var k=null,b=true;window.PR_SHOULD_USE_CONTINUATION=b;window.PR_TAB_WIDTH=8;window.PR_normalizedHtml=window.PR=window.prettyPrintOne=window.prettyPrint=void 0;window._pr_isIE6=function(){var Aa=navigator&&navigator.userAgent&&/\bMSIE 6\./.test(navigator.userAgent);window._pr_isIE6=function(){return Aa};return Aa};var j="a",f="z",i="A",o="Z",l="!",r="!=",D="!==",F="#",H="%",A="%=",C="&",z="&&",K="&&=",M="&=",G="(",U="*",N="*=",aa="+=",S=",",a="-=",c="->",d="/",e="/=",g=":",h="::",m=";",
v="<",q="<<",t="<<=",B="<=",x="=",Q="==",R="===",X=">",T=">=",ka=">>",ga=">>=",ca=">>>",ba=">>>=",ha="?",da="@",qa="[",Ga="^",nb="^=",ob="^^",pb="^^=",qb="{",Qa="|",rb="|=",sb="||",tb="||=",ub="~",vb="break",wb="case",xb="continue",yb="delete",zb="do",Ab="else",Bb="finally",Cb="instanceof",Db="return",Eb="throw",Fb="try",Gb="typeof",Hb="(?:(?:(?:^|[^0-9.])\\.{1,3})|(?:(?:^|[^\\+])\\+)|(?:(?:^|[^\\-])-)",Ib="|\\b",Jb="\\$1",Kb="|^)\\s*$",Ra="&amp;",Sa="&lt;",Ta="&gt;",Lb="&quot;",Mb="&#",Nb="x",Ua=
"'",Ha='"',Va=" ",Ob="XMP",Pb="</",Qb='="',Ia="PRE",Rb='<!DOCTYPE foo PUBLIC "foo bar">\n<foo />',oa="",Sb="\t",Wa="\n",Xa="nocode",Tb=' $1="$2$3$4"',ma="pln",Ba="lang-",Ca="src",Ja="default-markup",Ka="default-code",ra="com",Ya="dec",xa="pun",Ub="lang-js",Vb="lang-css",sa="tag",ta="atv",Wb="<>/=",La="atn",Xb=" \t\r\n",ya="str",Yb="'\"",Zb="'\"`",$b="\"'",Za=" \r\n",Da="lit",ac="123456789",bc=".",$a="kwd",ab="typ",cc="break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try alignof align_union asm axiom bool concept concept_map const_cast constexpr decltype dynamic_cast explicit export friend inline late_check mutable namespace nullptr reinterpret_cast static_assert static_cast template typeid typename typeof using virtual wchar_t where break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient as base by checked decimal delegate descending event fixed foreach from group implicit in interface internal into is lock object out override orderby params readonly ref sbyte sealed stackalloc string select uint ulong unchecked unsafe ushort var break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try debugger eval export function get null set undefined var with Infinity NaN caller delete die do dump elsif eval exit foreach for goto if import last local my next no our print package redo require sub undef unless until use wantarray while BEGIN END break continue do else for if return while and as assert class def del elif except exec finally from global import in is lambda nonlocal not or pass print raise try with yield False True None break continue do else for if return while alias and begin case class def defined elsif end ensure false in module next nil not or redo rescue retry self super then true undef unless until when yield BEGIN END break continue do else for if return while case done elif esac eval fi function in local set then until ",
Ma="</span>",dc='<span class="',ec='">',fc="$1&nbsp;",gc="<br />",bb="console",hc="cannot override language handler %s",ic="htm",jc="html",kc="mxml",lc="xhtml",mc="xml",nc="xsl",oc="break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try alignof align_union asm axiom bool concept concept_map const_cast constexpr decltype dynamic_cast explicit export friend inline late_check mutable namespace nullptr reinterpret_cast static_assert static_cast template typeid typename typeof using virtual wchar_t where ",
pc="c",qc="cc",rc="cpp",sc="cxx",tc="cyc",uc="m",vc="break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient as base by checked decimal delegate descending event fixed foreach from group implicit in interface internal into is lock object out override orderby params readonly ref sbyte sealed stackalloc string select uint ulong unchecked unsafe ushort var ",
wc="cs",xc="break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient ",yc="java",zc="break continue do else for if return while case done elif esac eval fi function in local set then until ",
Ac="bsh",Bc="csh",Cc="sh",Dc="break continue do else for if return while and as assert class def del elif except exec finally from global import in is lambda nonlocal not or pass print raise try with yield False True None ",Ec="cv",Fc="py",Gc="caller delete die do dump elsif eval exit foreach for goto if import last local my next no our print package redo require sub undef unless until use wantarray while BEGIN END ",Hc="perl",Ic="pl",Jc="pm",Kc="break continue do else for if return while alias and begin case class def defined elsif end ensure false in module next nil not or redo rescue retry self super then true undef unless until when yield BEGIN END ",
Lc="rb",Mc="break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try debugger eval export function get null set undefined var with Infinity NaN ",Nc="js",cb="pre",db="code",eb="xmp",fb="prettyprint",Oc="class",Pc="br";(function(){function Aa(p){p=p.split(/ /g);for(var n=
{},u=p.length;--u>=0;){var s=p[u];if(s)n[s]=k}return n}function Qc(p){return p>=j&&p<=f||p>=i&&p<=o}function Ea(p,n,u,s){p.unshift(u,s||0);try{n.splice.apply(n,p)}finally{p.splice(0,2)}}var Rc=function(){for(var p=[l,r,D,F,H,A,C,z,K,M,G,U,N,aa,S,a,c,d,e,g,h,m,v,q,t,B,x,Q,R,X,T,ka,ga,ca,ba,ha,da,qa,Ga,nb,ob,pb,qb,Qa,rb,sb,tb,ub,vb,wb,xb,yb,zb,Ab,Bb,Cb,Db,Eb,Fb,Gb],n=Hb,u=0;u<p.length;++u){var s=p[u];n+=Qc(s.charAt(0))?Ib+s:Qa+s.replace(/([^=<>:&])/g,Jb)}n+=Kb;return new RegExp(n)}(),gb=/&/g,hb=/</g,
ib=/>/g,Sc=/\"/g;function Tc(p){return p.replace(gb,Ra).replace(hb,Sa).replace(ib,Ta).replace(Sc,Lb)}function Na(p){return p.replace(gb,Ra).replace(hb,Sa).replace(ib,Ta)}var Uc=/&lt;/g,Vc=/&gt;/g,Wc=/&apos;/g,Xc=/&quot;/g,Yc=/&amp;/g,Zc=/&nbsp;/g;function $c(p){var n=p.indexOf(C);if(n<0)return p;for(--n;(n=p.indexOf(Mb,n+1))>=0;){var u=p.indexOf(m,n);if(u>=0){var s=p.substring(n+3,u),E=10;if(s&&s.charAt(0)===Nb){s=s.substring(1);E=16}var w=parseInt(s,E);isNaN(w)||(p=p.substring(0,n)+String.fromCharCode(w)+
p.substring(u+1))}}return p.replace(Uc,v).replace(Vc,X).replace(Wc,Ua).replace(Xc,Ha).replace(Yc,C).replace(Zc,Va)}function jb(p){return Ob===p.tagName}function Fa(p,n){switch(p.nodeType){case 1:var u=p.tagName.toLowerCase();n.push(v,u);for(var s=0;s<p.attributes.length;++s){var E=p.attributes[s];if(E.specified){n.push(Va);Fa(E,n)}}n.push(X);for(var w=p.firstChild;w;w=w.nextSibling)Fa(w,n);if(p.firstChild||!/^(?:br|link|img)$/.test(u))n.push(Pb,u,X);break;case 2:n.push(p.name.toLowerCase(),Qb,Tc(p.value),
Ha);break;case 3:case 4:n.push(Na(p.nodeValue));break}}var Oa=k;function ad(p){if(k===Oa){var n=document.createElement(Ia);n.appendChild(document.createTextNode(Rb));Oa=!/</.test(n.innerHTML)}if(Oa){var u=p.innerHTML;if(jb(p))u=Na(u);return u}for(var s=[],E=p.firstChild;E;E=E.nextSibling)Fa(E,s);return s.join(oa)}function bd(p){var n=0;return function(u){for(var s=k,E=0,w=0,L=u.length;w<L;++w){var y=u.charAt(w);switch(y){case Sb:s||(s=[]);s.push(u.substring(E,w));var I=p-n%p;for(n+=I;I>=0;I-="                ".length)s.push("                ".substring(0,
I));E=w+1;break;case Wa:n=0;break;default:++n}}if(!s)return u;s.push(u.substring(E));return s.join(oa)}}var cd=/(?:[^<]+|<!--[\s\S]*?--\>|<!\[CDATA\[([\s\S]*?)\]\]>|<\/?[a-zA-Z][^>]*>|<)/g,dd=/^<!--/,ed=/^<\[CDATA\[/,fd=/^<br\b/i,kb=/^<(\/?)([a-zA-Z]+)/;function gd(p){var n=p.match(cd),u=[],s=0,E=[];if(n)for(var w=0,L=n.length;w<L;++w){var y=n[w];if(y.length>1&&y.charAt(0)===v){if(!dd.test(y))if(ed.test(y)){u.push(y.substring(9,y.length-3));s+=y.length-12}else if(fd.test(y)){u.push(Wa);++s}else if(y.indexOf(Xa)>=
0&&hd(y)){var I=y.match(kb)[2],Y=1,J;J=w+1;a:for(;J<L;++J){var V=n[J].match(kb);if(V&&V[2]===I)if(V[1]===d){if(--Y===0)break a}else++Y}if(J<L){E.push(s,n.slice(w,J+1).join(oa));w=J}else E.push(s,y)}else E.push(s,y)}else{var Z=$c(y);u.push(Z);s+=Z.length}}return{source:u.join(oa),tags:E}}function hd(p){return!!p.replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,Tb).match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/)}function Pa(p,n,u,s){if(n){var E=u.call({},n);if(p)for(var w=E.length;(w-=2)>=
0;)E[w]+=p;s.push.apply(s,E)}}function za(p,n){var u={};(function(){for(var L=p.concat(n),y=L.length;--y>=0;){var I=L[y],Y=I[3];if(Y)for(var J=Y.length;--J>=0;)u[Y.charAt(J)]=I}})();var s=n.length,E=/\S/,w=function(L,y){y=y||0;for(var I=[y,ma],Y=oa,J=0,V=L;V.length;){var Z,O=k,P,W=u[V.charAt(0)];if(W){P=V.match(W[1]);O=P[0];Z=W[0]}else{for(var ea=0;ea<s;++ea){W=n[ea];var ia=W[2];if(!(ia&&!ia.test(Y)))if(P=V.match(W[1])){O=P[0];Z=W[0];break}}if(!O){Z=ma;O=V.substring(0,1)}}var fa=Ba===Z.substring(0,
5);if(fa&&!(P&&P[1])){fa=false;Z=Ca}if(fa){var pa=P[1],ja=O.indexOf(pa),ua=ja+pa.length,va=Z.substring(5);wa.hasOwnProperty(va)||(va=/^\s*</.test(pa)?Ja:Ka);Pa(y+J,O.substring(0,ja),w,I);Pa(y+J+ja,O.substring(ja,ua),wa[va],I);Pa(y+J+ua,O.substring(ua),w,I)}else I.push(y+J,Z);J+=O.length;V=V.substring(O.length);if(Z!==ra&&E.test(O))Y=O}return I};return w}var id=za([],[[ma,/^[^<?]+/,k],[Ya,/^<!\w[^>]*(?:>|$)/,k],[ra,/^<!--[\s\S]*?(?:--\>|$)/,k],[Ba,/^<\?([\s\S]+?)(?:\?>|$)/,k],[Ba,/^<%([\s\S]+?)(?:%>|$)/,
k],[xa,/^(?:<[%?]|[%?]>)/,k],[Ba,/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i,k],[Ub,/^<script\b[^>]*>([\s\S]+?)<\/script\b[^>]*>/i,k],[Vb,/^<style\b[^>]*>([\s\S]+?)<\/style\b[^>]*>/i,k],[sa,/^<\/?\w[^<>]*>/,k]]),jd=/^(<[^>]*>)([\s\S]*)(<\/[^>]*>)$/;function kd(p){for(var n=id(p),u=0;u<n.length;u+=2)if(n[u+1]===Ca){var s,E;s=n[u];E=u+2<n.length?n[u+2]:p.length;var w=p.substring(s,E),L=w.match(jd);if(L)n.splice(u,2,s,sa,s+L[1].length,Ca,s+L[1].length+(L[2]||oa).length,sa)}return n}var ld=za([[ta,/^\'[^\']*(?:\'|$)/,
k,Ua],[ta,/^\"[^\"]*(?:\"|$)/,k,Ha],[xa,/^[<>\/=]+/,k,Wb]],[[sa,/^[\w:\-]+/,/^</],[ta,/^[\w\-]+/,/^=/],[La,/^[\w:\-]+/,k],[ma,/^\s+/,k,Xb]]);function md(p,n){for(var u=0;u<n.length;u+=2){var s=n[u+1];if(s===sa){var E,w;E=n[u];w=u+2<n.length?n[u+2]:p.length;var L=p.substring(E,w),y=ld(L,E);Ea(y,n,u,2);u+=y.length-2}}return n}function na(p){var n=[],u=[];if(p.tripleQuotedStrings)n.push([ya,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
k,Yb]);else p.multiLineStrings?n.push([ya,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,k,Zb]):n.push([ya,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,k,$b]);u.push([ma,/^(?:[^\'\"\`\/\#]+)/,k,Za]);p.hashComments&&n.push([ra,/^#[^\r\n]*/,k,F]);if(p.cStyleComments){u.push([ra,/^\/\/[^\r\n]*/,k]);u.push([ra,/^\/\*[\s\S]*?(?:\*\/|$)/,k])}p.regexLiterals&&u.push([ya,/^\/(?=[^\/*])(?:[^\/\x5B\x5C]|\x5C[\s\S]|\x5B(?:[^\x5C\x5D]|\x5C[\s\S])*(?:\x5D|$))+(?:\/|$)/,
Rc]);var s=Aa(p.keywords),E=za(n,u),w=za([],[[ma,/^\s+/,k,Za],[ma,/^[a-z_$@][a-z_$@0-9]*/i,k],[Da,/^0x[a-f0-9]+[a-z]/i,k],[Da,/^(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d+)(?:e[+\-]?\d+)?[a-z]*/i,k,ac],[xa,/^[^\s\w\.$@]+/,k]]);function L(y,I){for(var Y=0;Y<I.length;Y+=2){var J=I[Y+1];if(J===ma){var V,Z,O,P;V=I[Y];Z=Y+2<I.length?I[Y+2]:y.length;O=y.substring(V,Z);P=w(O,V);for(var W=0,ea=P.length;W<ea;W+=2){var ia=P[W+1];if(ia===ma){var fa=P[W],pa=W+2<ea?P[W+2]:O.length,ja=y.substring(fa,pa);if(ja===bc)P[W+1]=
xa;else if(ja in s)P[W+1]=$a;else if(/^@?[A-Z][A-Z$]*[a-z][A-Za-z$]*$/.test(ja))P[W+1]=ja.charAt(0)===da?Da:ab}}Ea(P,I,Y,2);Y+=P.length-2}}return I}return function(y){var I=E(y);return I=L(y,I)}}var lb=na({keywords:cc,hashComments:b,cStyleComments:b,multiLineStrings:b,regexLiterals:b});function nd(p,n){for(var u=false,s=0;s<n.length;s+=2){var E=n[s+1],w,L;if(E===La){w=n[s];L=s+2<n.length?n[s+2]:p.length;u=/^on|^style$/i.test(p.substring(w,L))}else if(E===ta){if(u){w=n[s];L=s+2<n.length?n[s+2]:p.length;
var y=p.substring(w,L),I=y.length,Y=I>=2&&/^[\"\']/.test(y)&&y.charAt(0)===y.charAt(I-1),J,V,Z;if(Y){V=w+1;Z=L-1;J=y}else{V=w+1;Z=L-1;J=y.substring(1,y.length-1)}for(var O=lb(J),P=0,W=O.length;P<W;P+=2)O[P]+=V;if(Y){O.push(Z,ta);Ea(O,n,s+2,0)}else Ea(O,n,s,2)}u=false}}return n}function od(p){var n=kd(p);n=md(p,n);return n=nd(p,n)}function pd(p,n,u){var s=[],E=0,w=k,L=k,y=0,I=0,Y=bd(window.PR_TAB_WIDTH),J=/([\r\n ]) /g,V=/(^| ) /gm,Z=/\r\n?|\n/g,O=/[ \r\n]$/,P=b;function W(ia){if(ia>E){if(w&&w!==L){s.push(Ma);
w=k}if(!w&&L){w=L;s.push(dc,w,ec)}var fa=Na(Y(p.substring(E,ia))).replace(P?V:J,fc);P=O.test(fa);s.push(fa.replace(Z,gc));E=ia}}for(;b;){var ea;if(ea=y<n.length?I<u.length?n[y]<=u[I]:b:false){W(n[y]);if(w){s.push(Ma);w=k}s.push(n[y+1]);y+=2}else if(I<u.length){W(u[I]);L=u[I+1];I+=2}else break}W(p.length);w&&s.push(Ma);return s.join(oa)}var wa={};function la(p,n){for(var u=n.length;--u>=0;){var s=n[u];if(wa.hasOwnProperty(s))bb in window&&console.log(hc,s);else wa[s]=p}}la(lb,[Ka]);la(od,[Ja,ic,jc,
kc,lc,mc,nc]);la(na({keywords:oc,hashComments:b,cStyleComments:b}),[pc,qc,rc,sc,tc,uc]);la(na({keywords:vc,hashComments:b,cStyleComments:b}),[wc]);la(na({keywords:xc,cStyleComments:b}),[yc]);la(na({keywords:zc,hashComments:b,multiLineStrings:b}),[Ac,Bc,Cc]);la(na({keywords:Dc,hashComments:b,multiLineStrings:b,tripleQuotedStrings:b}),[Ec,Fc]);la(na({keywords:Gc,hashComments:b,multiLineStrings:b,regexLiterals:b}),[Hc,Ic,Jc]);la(na({keywords:Kc,hashComments:b,multiLineStrings:b,regexLiterals:b}),[Lc]);
la(na({keywords:Mc,cStyleComments:b,regexLiterals:b}),[Nc]);function mb(p,n){try{var u=gd(p),s=u.source,E=u.tags;wa.hasOwnProperty(n)||(n=/^\s*</.test(s)?Ja:Ka);var w=wa[n].call({},s);return pd(s,E,w)}catch(L){if(bb in window){console.log(L);console.a()}return p}}function qd(p){for(var n=window._pr_isIE6(),u=[document.getElementsByTagName(cb),document.getElementsByTagName(db),document.getElementsByTagName(eb)],s=[],E=0;E<u.length;++E)for(var w=0,L=u[E].length;w<L;++w)s.push(u[E][w]);var y=0;function I(){for(var Y=
window.PR_SHOULD_USE_CONTINUATION?(new Date).getTime()+250:Infinity;y<s.length&&(new Date).getTime()<Y;y++){var J=s[y];if(J.className&&J.className.indexOf(fb)>=0){var V=J.className.match(/\blang-(\w+)\b/);if(V)V=V[1];for(var Z=false,O=J.parentNode;O;O=O.parentNode)if((O.tagName===cb||O.tagName===db||O.tagName===eb)&&O.className&&O.className.indexOf(fb)>=0){Z=b;break}if(!Z){var P=ad(J);P=P.replace(/(?:\r\n?|\n)$/,oa);var W=mb(P,V);if(jb(J)){for(var ea=document.createElement(Ia),ia=0;ia<J.attributes.length;++ia){var fa=
J.attributes[ia];if(fa.specified){var pa=fa.name.toLowerCase();if(pa===Oc)ea.className=fa.value;else ea.setAttribute(fa.name,fa.value)}}ea.innerHTML=W;J.parentNode.replaceChild(ea,J);J=ea}else J.innerHTML=W;if(n&&J.tagName===Ia)for(var ja=J.getElementsByTagName(Pc),ua=ja.length;--ua>=0;){var va=ja[ua];va.parentNode.replaceChild(document.createTextNode("\r"),va)}}}}if(y<s.length)setTimeout(I,250);else p&&p()}I()}window.PR_normalizedHtml=Fa;window.prettyPrintOne=mb;window.prettyPrint=qd;window.PR={createSimpleLexer:za,
registerLangHandler:la,sourceDecorator:na,PR_ATTRIB_NAME:La,PR_ATTRIB_VALUE:ta,PR_COMMENT:ra,PR_DECLARATION:Ya,PR_KEYWORD:$a,PR_LITERAL:Da,PR_NOCODE:Xa,PR_PLAIN:ma,PR_PUNCTUATION:xa,PR_SOURCE:Ca,PR_STRING:ya,PR_TAG:sa,PR_TYPE:ab}})()})();(function(){var k=/\/\/([^\/]*)?(\/[^\#\?]*)?([^\#]*)?(.*)$/,b=["a + ul","a + ol","h1 + ul","h1 + ol","h2 + ul","h2 + ol","span.tlw-title + ul","span.tlw-title + ol"].join();function j(o){for(var l=5381,r=0;r<o.length;r++)l=(l<<5)+l+o.charCodeAt(r);return l}var f=window._tocPath_?[null,null,_tocPath_,null,""]:k.exec(location.href),i=f?["ck_",j(f[2]+f[4])].join(""):"ck_checksumError";window.CODESITE_filterSingleQuotes=function(o){var l=/(\')/g;return String.prototype.replace.call(o,l,"\\$1")};window.CODESITE_createTreeLists=
function(o){o=o!=jQuery&&o||".treelist";function l(A,C,z,K){var M=z||CODESITE_msgs.treelist.EXPAND_DEFAULT,G=K||CODESITE_msgs.treelist.COLLAPSE_DEFAULT,U=jQuery(C),N=U.parents("div:first").next(),aa=A?G:M,S=A?"tlw-minus":"tlw-plus";U.attr("alt",aa).parent().attr("title",aa);U.removeClass("tlw-minus tlw-plus").addClass(S);A?N.show():N.hide()}var r=function(){var A=function(){var C=[],z=null;for(var K in this)if(!(K=="toString")){K=CODESITE_filterSingleQuotes(K);z=CODESITE_filterSingleQuotes(this[K]);
C.push(['"',K,'":"',z,'"'].join(""))}return["{",C.join(),"}"].join("")};return function(){var C=null,z=null;if(C=(new RegExp([i,"=([^;]*)?"].join(""))).exec(document.cookie))z=eval("["+C[1]+"][0]");z=z||{};z.toString=A;return z}}();function D(A,C){var z=r();if(C)z[A]=true;else delete z[A];document.cookie=[i,"=",z.toString()].join("")}var F=['<div class="tlw-title"><a href="javascript:void(0)" class="tlw-control" title=""><img src="',CODESITE_derivePath("/images/cleardot.gif"),'" alt="" class="tlw-control"></a></div>'].join("");
jQuery(o).each(function(){var A=jQuery(this);if(!A.is(".tlw-processed")){A._count=0;var C=arguments.callee,z=(C._list=C._list||[]).length;C._list.push(A);A.addClass("tlw-processed tlw-instance-"+z);A.find("a + span.new").each(function(){var K=jQuery(this),M=K.prev(),G=jQuery("<span>");G.css("textDecoration",M.css("textDecoration"));G.append(M.html());M.css("textDecoration","none").empty();M.append(G).append(this)});A.find(b).each(function(){var K=jQuery(this),M=[z,"sub",A._count].join("-"),G=K.prev(),
U=jQuery(F),N=jQuery("img.tlw-control:first",U),aa=CODESITE_msgs.treelist.EXPAND.replace(/@1/g,G.text()),S=CODESITE_msgs.treelist.COLLAPSE.replace(/@1/g,G.text());if(!G.is(".tlw-ignore")){var a={$open:function(){if(K.is(":hidden")){l(true,N,aa,S);CODESITE_createTreeLists._init&&D(M,true)}},$close:function(){if(K.is(":visible")){l(false,N,aa,S);CODESITE_createTreeLists._init&&D(M,false)}},$toggle:function(){var c=K.is(":hidden");l(c,N,aa,S);CODESITE_createTreeLists._init&&D(M,c)}};jQuery.extend(this,
a);jQuery.extend(N.parent()[0],a);K.attr("id",M);K.before(U);U.append(G);U.addClass("tlw-branch");U.parent().css({paddingTop:"0",paddingBottom:"0"});this.$close();N.parent().click(function(){this.$toggle()});A._count++}})}});var H=r();jQuery.each(H,function(A){if(!(A=="toString"))try{jQuery("#"+A)[0].$open()}catch(C){}});window.ontreelistcomplete&&typeof ontreelistcomplete=="function"&&window.ontreelistcomplete(o)};window.CODESITE_convertTableOfContents=function(){jQuery("#gc-toc ul:first, #gc-toc ol:first").addClass("treelist tlw-nested-only").siblings("ul, ol").addClass("treelist tlw-nested-only");
for(var o=0,l=jQuery(".treelist.tlw-nested-only").children();o<l.length;o++)jQuery(l[o]).children(":first").next(b).prev().addClass("tlw-ignore")};window.CODESITE_tocHighlighter=function(){var o=/\/intl\/.*?\//,l=/\/index\.html$/,r=jQuery("#gc-toc a[@href]"),D=window.location.href,F=null,H=null,A=null,C=k.exec(D);if(C)D=C[2];D=D.replace(o,"/").replace(l,"/");for(var z=0;z<r.length;z++)if(H=k.exec(r[z].href)){A=jQuery(r[z]);F=(H[2]+H[4]).replace(o,"/").replace(l,"/");if(D==F){A.parent().addClass("selected");
A.is(".tlw-hidden")&&A.parent().addClass("tlw-hidden");for(var K=A.siblings("a.tlw-control"),M=0;M<K.length;M++)K[M].$open();for(var G=A.parents("ul").siblings(".tlw-branch").find("a.tlw-control"),U=0;U<G.length;U++)G[U].$open()}}var N=jQuery(".tlw-branch .tlw-expanded"),aa=jQuery(".tlw-branch .tlw-collapsed"),S;for(z=0;z<N.length;z++)(S=N[z].previousSibling)&&S.$open&&S.$open();for(z=0;z<aa.length;z++)(S=aa[z].previousSibling)&&S.$close&&S.$close();window.ontreelisthighlight&&typeof ontreelisthighlight==
"function"&&window.ontreelisthighlight()};window.CODESITE_buildTreelistWidgetCalled=false;window.CODESITE_buildTreelistWidget=function(){if(!CODESITE_buildTreelistWidgetCalled){var o=new window.jstiming.Timer;CODESITE_CSITimer.load.tick("toc_start");CODESITE_convertTableOfContents();CODESITE_createTreeLists();CODESITE_tocHighlighter();CODESITE_CSITimer.load.tick("toc_done");o.tick("toc");o.name="toc";CODESITE_CSITimer.toc=o;window.CODESITE_buildTreelistWidgetCalled=true}};jQuery(document).ready(function(){CODESITE_buildTreelistWidget()});
jQuery(window).load(function(){CODESITE_createTreeLists._init=true})})(jQuery);(function(){function k(b){this.parentElem=b.parent;this.controlsElem=b.controls;this.contentElem=b.content;if(!(!this.parentElem||!this.controlsElem||!this.contentElem)){k.active[this.index=k.active.length]=this;var j=this;this.toggleElem=jQuery('<img src="images/cleardot.gif">').addClass("collapsible-control").mouseover(function(){var f=jQuery(this);f.addClass("collapsible-hover")}).mouseout(function(){var f=jQuery(this);f.removeClass("collapsible-hover")});this.controlsElem.mousedown(function(){var f=
jQuery(j.toggleElem),i=jQuery(j.contentElem);if(i.is(":visible")){f.addClass("collapsible-plus").removeClass("collapsible-minus");i.hide()}else{f.addClass("collapsible-minus").removeClass("collapsible-plus");i.show()}});if(this.parentElem.is(".closed"))b.opened=false;if(this.parentElem.is(".opened"))b.opened=true;if(b.opened===true)this.toggleElem.addClass("collapsible-minus");else{this.toggleElem.addClass("collapsible-plus");this.contentElem.hide()}this.controlsElem.prepend(this.toggleElem);this.parentElem.addClass("collapsible-done")}}
k.prototype={index:-1,parentElem:null,controlsElem:null,contentElem:null,toggleElem:null};jQuery.extend(k,{active:[],convert:function(){for(var b=jQuery(".collapsible"),j=0;j<b.length;j++)if(!(b[j].className.indexOf("collapsible-done")!=-1)){var f=jQuery(".collapsible-controls",b[j]),i=jQuery(".collapsible-content",b[j]);f.length&&i.length&&new k({parent:jQuery(b[j]),controls:f,content:i})}}});window.CODESITE_collapsible=k;jQuery(function(){CODESITE_collapsible.convert()})})();
