/**
 * global.js
 * $Revision: 1.45 $
 *
 *  global-js -- aggregated and minified
 *  DO NOT EDIT THIS FILE -- edit the individual files and rebuild
 *
 * Writes and supports global javascript functions
 * 
 *   (c) 1992-2008 Cisco Systems, Inc. All rights reserved.
 *   Terms and Conditions: http://cisco.com/en/US/swassets/sw293/sitewide_important_notices.html'
 * 
 *
 * MANIFEST:
 *   /web/fw/lib/jquery.js (unknown version)
 *   /web/fw/j/util.js 1.7 
 *   /web/fw/j/search_fragment.js 1.4 
 *   /web/fw/w/includer.js 1.9 
 *   /web/fw/lib/jquery.blockUI.js 1.33  (09/14/2007)
 *   /web/fw/w/backpack/frag_global_backpack.js 1.6 
 */

/*
 * BEGIN /web/fw/lib/jquery.js
 */
/*
 * jQuery 1.2.6 - 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/12/04 18:55:13 $
 * $Rev: 5685 $
 */
(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else
return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){var src=target[name],copy=options[name];if(target===copy)continue;if(deep&&copy&&typeof copy=="object"&&!copy.nodeType)target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)target[name]=copy;}return target;};var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)if(callback.apply(object[name],args)===false)break;}else
for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem+='';if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&&notxml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&&notxml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else
while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)ret[ret.length]=value;}return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.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||jQuery.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||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!='string')return this._load(url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.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(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,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(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else
xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.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";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.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 p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();
/*
 * END /web/fw/lib/jquery.js
 */
/*
 * BEGIN /web/fw/j/util.js
 */
/**
 *  Utility functions
 *  util.js
 *  Revision: 1.7 
 */

if (typeof (cdc) == "undefined") cdc = new Object();
if (typeof (cdc.util) == "undefined") cdc.util = new Object();
cdc.util.ensureNamespace = function (namespaceStr) {
    if (!namespaceStr) return;
    var parts = namespaceStr.split (".");
    var o = window;
    for (var i = 0; i < parts.length; i++) {
        var aPart = parts[i];
        if (typeof (o[aPart]) != "object") {
            o[aPart] = new Object();
        }
        o = o[aPart];
    }
}


// Window Opening / Closing Functions

function openChildWindow( appurl, windowname ) {
  global_openCdcPopup({address:appurl,width:798,height:547,top:25,left:0,windowName:windowname});
}

function global_openCdcPopup(url, width, height) {
  if (!url) {return true;} //where url is not supplied do nothing

  var windowControls='';
  var windowOptions='';
  var windowName = 'globalCDCpopup';

  if(typeof(url) == "object"){
     // create temp variables to function params map
     width  = url.width;
     height = url.height;
     xtop = typeof(url.top) != "undefined" ? url.top : ''; //named "xtop" because "top" kills IE
     left = typeof(url.left) != "undefined" ? url.left : '';
     windowOptions = "top="+xtop+",left="+left+",";
     if(typeof(url.windowName) != "undefined"){windowName = url.windowName;};

     if (url.controls != false){ //undefined = true
       if(typeof(url.location) != "undefined" && url.location == "no"){
          var windowControls = ",toolbar=yes,location=no,menubar=yes";
       }else{
          var windowControls = ",toolbar=yes,location=yes,menubar=yes";
       }
     }
     url = url.address;   // doing this last because it nukes the url object
  }

  width = isNaN(parseInt(width)) ? 550 : parseInt(width);
  height = isNaN(parseInt(height)) ? 550 : parseInt(height);

  /* ie scrollbar behaviour adjustment */
  if(document.all){ width = width+20; }

  windowOptions +=  "width="+width+",height="+height+",status=yes,scrollbars=yes,resizable=yes"+windowControls;
  var popup = window.open ( url, windowName, windowOptions);
  if (popup) popup.focus();
  return false;
}

// This function openLargePopup is now deprecated. Please don't use.
function openLargePopup( url, windowname ) {
  var popup = window.open( url , windowname, "toolbar=yes,status=yes,scrollbars=yes,menubar=yes,locationbar=no,top=50,left=70,outerWidth=643,outerHeight=468,width=643,height=468,resizable=yes");
  if (popup) popup.focus();
}

// This function openMediumPopup is now deprecated. Please don't use.
function openMediumPopup( url, windowname ) {
  var popup = window.open( url , windowname, "toolbar=no,status=yes,scrollbars=yes,menubar=no,locationbar=no,top=90,left=170,outerWidth=445,outerHeight=390,width=445,height=390,resizable=yes");
  if (popup) popup.focus();
}

// This function openSmallPopup is now deprecated. Please don't use.
function openSmallPopup( url, windowname ) {
  var popup = window.open( url , windowname, "toolbar=no,status=yes,scrollbars=yes,menubar=no,locationbar=no,top=90,left=290,outerWidth=220,outerHeight=390,width=220,height=390,resizable=yes");
  if (popup) popup.focus();
}

function closeWindow() {
  self.close();
}

function changeParentUrl( newurl ) {
  var openerClosed = false;
  if( document.all && !document.getElementById() ) {
    // opener.closed always returns false in IE ... makes sense, right?
    // let's roll our own function in VB, where we can trap errors...
    openerClosed = isOpenerClosed();
  } else {
    if( top.opener ) {
      openerClosed = top.opener.closed;
    } else {
      openerClosed = true;
    }
  }
  if( openerClosed ) {
    var newwin = window.open( newurl);
    newwin.focus();
  } else {
    top.opener.location.href = newurl;
    top.opener.focus();
  }
}

// Creates a browser-generated alert or message box
// note:
// this was abstracted just in case we ever want to do anything
// with the string or send to non-pcs devices
function openMessage(str) {
  alert(str);
}

// Grabs a parameter from the URL.  Returns an empty
// string if parameter does not exist.
function getParameter(param) {

        var val = "";
        var qs = window.location.search;
        var start = qs.indexOf(param);

        if (start != -1) {
                start += param.length + 1;
                var end = qs.indexOf("&", start);
                if (end == -1) {
                        end = qs.length
                }
                val = qs.substring(start,end);
        }
        return val;
}

// Get the BaseTag, if specified in the current page
function get_baseTag() {
	var baseTag = "";
	if ( document.all ) {
		var baseTagsCol = document.all.tags("BASE");
		if (baseTagsCol.length!=0){
			baseTag = baseTagsCol[0].href;
		}
	} else if (window.opera) {
		var baseTag
		if (document.getElementById('basehref')){
			baseTag = document.getElementById('basehref').href;
			baseTag = baseTag.substring(0, baseTag.length-1);
		}
	}
	return baseTag;
}

// Drop-down location.href redirection
function dropdown_redirect(select_name,reset) {
	if (reset == null) { reset = true };
	var theselect=eval(select_name);
	var tmp=theselect.selectedIndex;
	if (reset) { theselect.options[0].selected=true; }
	if(theselect.options[tmp].value != "") {
		location.href=get_baseTag()+theselect.options[tmp].value;
	}
}

// Area drop-down redirection
var areanav_current = 0;
function set_areanav_current( index ) {
	// xsl position starts at 1, array index starts at 0
	areanav_current = index-1;
}
function areanav_redirect(select_name) {
  var theselect=eval(select_name);
  var tmp=theselect.selectedIndex;
  if(theselect.options[tmp].value != "") {
	 theselect.options[areanav_current].selected=true;
	 location.href=get_baseTag()+theselect.options[tmp].value;
  }
}


// functions used to register functions that execute on the global onClick event
var globalBodyOnClickList = new Array();

//function called to add a handler to the event
function addToBodyOnClick(funct){
    //assign the wrapper function to the event
    //this blows away any traditionally assigned handlers
    document.onclick = bodyOnClick;

    //add the function to the array
    globalBodyOnClickList[globalBodyOnClickList.length] = funct;
}

//function that gets called by the body's onClick event
function bodyOnClick(){
    for (var i=0;i<globalBodyOnClickList.length;i++){
        //do each of the functions in the array
        globalBodyOnClickList[i]();
    }
}

/* function used to register functions that execute on the global onLoad event
 * Revised Dec 2005 /gs
 */
/* Please note: this function is currently supported only for the homepage use
 * with Visual Sciences.  If it is used on any other pages, please be aware that
 * if there is an onload attribute in the body tag this function will not work.
 */
function addToWindowOnLoad(funct){
var oldOnload = window.onload;
if (typeof window.onload != 'function') {
window.onload = funct;
} else {
window.onload = function() {
oldOnload();
funct();
        }
    }
}

/* ---------------------------------------------------------------
   Cookie functions -
   global_setCookie and global_getCookie match the ones in
     collapsing_list.js for tdts-books. The rest are new.
   ---------------------------------------------------------------- */

//function returns the date that is 'days' days from now.
// (in milliseconds since 1/1/70 of course)

function global_daysFutureToTimeMS (days) {
  var mydate = new Date();
  var ms;
  mydate.setTime(mydate.getTime()+((days)*24*60*60*1000));
  ms = Date.parse(mydate);
  return ms;
}

function global_setCookie(name, value, days) {
  if (days) {
    var dateobj = new Date(global_daysFutureToTimeMS (days));
    var expdate = dateobj.toGMTString();
    var expires = "; expires="+expdate;
  } else {
    var expires = "";
  }
  //alert("expires="+expires);
  document.cookie = name+"="+value+expires+"; path=/; domain=cisco.com";
}

function global_getCookie(name) {
 var CValue = new String();
  CValue = document.cookie;
  var exp = new RegExp("^.*" + name + "=" );
  if (CValue.match(exp)){
    CValue = CValue.replace(exp,'');
    CValue = CValue.replace(/;.*/,'');
    //alert(name +" is currently set to "+CValue);
    return CValue;
  }
  //alert(name+" has no value yet");
  return "";
}

function global_extractCookieChip(cookiename,parmname) {
  //alert("extracting "+parmname+" from "+cookiename);
  var CValue = unescape(global_getCookie(cookiename));
  var PValue = new String();
  var namestr = "&"+parmname+"=";
  var start = CValue.indexOf(namestr);
  if (start > -1) {
    start += namestr.length;
    PValue = CValue.substring(start,CValue.length);
    //alert(PValue+"=PValue");
    if (PValue.indexOf("&") > -1) {
      PValue = PValue.substring(0,PValue.indexOf("&"));
    }
    return PValue;
  }
  return "";
}

function global_crumbleCookieChip(cookiename, parmname) {
  /* get cookie values in array */
  var CValue = unescape(global_getCookie(cookiename));
  if ( CValue.indexOf ("&", CValue) > -1) {
    var chips = CValue.split("&");
    var newchips = new String();

    /* reassemble without parm and rewrite */
    for ( var i=0; i < chips.length; i++) {
      if ( chips[i].indexOf(parmname) != 0 ) {
        if ( newchips == "") { chips[i] = "&"+chips[i]; }
        newchips += chips[i];
      }
    } /* end stepping through array */
    global_setCookie(cookiename, newchips, 366);
  } /* if there was no '&' we did nothing */
}

function global_addCookieChip(cookiename, newname, newvalue ) {
  global_crumbleCookieChip(cookiename,newname);
  var CValue = global_getCookie(cookiename);
  CValue += escape("&"+newname+"="+ newvalue);
  global_setCookie (cookiename, CValue, 366);
}

/*---------------------------------------------------------
  Intercept popup window decision process functions
------------------------------------------------------------ */

/* ------------------------------------------------------------------
  Use timedPop() to popup an intercept window only if they've been
  on-site for a while.

  They will NEVER get this window on the first page they come to,
  even if minutes=0. Use randomPop() instead if you need that

   minutes: how long they need to be onsite before getting popup
   frequency: how often to ask people - random number between 1 & frequency generated
   url: url of window to pop open
   stopcookie: name of cookie that lets you know they've been asked already
   expires: number of days to keep the stopcookie active
   windowsize: small, medium, large - defaults to large -- sizes defined in window opening functions
---------------------------------------------------------------------*/

function timedPop(minutes, frequency, url, stopcookie, expires, windowsize ) {
  myDomain = window.location.host;

  if ( (myDomain == "cisco.com" || myDomain == "www.cisco.com" || myDomain == "elovejoy-lnx" || myDomain == "maunaloa" || myDomain == "maunaloa.cisco.com" || myDomain == "newsroom.cisco.com" ) && window.location.pathname.match("/en/US/") ) { /* don't let this interfere w/ apps or theaters */

    timeCookie= "CDCsitetimer";

    /* check for time cookie */
    now = new Date();
    nowMinutes = now.getTime()/60000;

    if ( cookietime = global_getCookie(timeCookie)) {
      // alert("long enough? cookietime="+cookietime +" & now is " 	+nowMinutes);

      if ( cookietime != "Done" && (nowMinutes - cookietime) >= minutes )   {
        // alert("time to pop");
        randomPop(frequency,  url, stopcookie, expires, windowsize);
        global_setCookie(timeCookie,"Done", 0);
      }

    } else {
      /* if they don't have a timer make one */
      global_setCookie(timeCookie,nowMinutes, 0);
   }
   //} else { alert("we don't pop on your domain");

  } /* end domain check */
}

/* -------------------------------------------------------------------
 randomPop() will popup an intercept window if the randomly generated number = 1
 If frequency=1 this will always get called.
 This _can_ happen on the first page someone lands on.

   frequency: odds of getting popup = 1/frequency times
   url: url of the content for popup window
   stopcookie: name of cookie that keeps them from getting popup again
   expiredays: number of days to keep the stopcookie active
   windowsize: small, medium, large - defaults to large
   -- these sizes are defined in the window opening functions
  ------------------------------------------------------------------- */

function randomPop (frequency, url, stopcookie, expiredays, windowsize){
  var cookiename = 'IntSurP';
  var validDate;
  var random_num;

  frequency <= 1 ? random_num = 1: random_num = Math.ceil( frequency * Math.random()) ;

  if ((random_num == 1) ) {
   validDate = global_extractCookieChip(cookiename,stopcookie);

   if ( validDate && validDate < Date.parse(Date()) ) {
      /* they had the cookie, but it's too old to matter */
      global_crumbleCookieChip(cookiename, stopcookie);
      validDate = "";
   }

   if (!validDate ) {
      /* they don't have a cookie telling us to stop */

      expiredays = global_daysFutureToTimeMS(expiredays);
      global_addCookieChip(cookiename, stopcookie,expiredays);

      if ( windowsize=="medium" ) {
        openMediumPopup(url,"popWin");
      } else if ( windowsize=="small") {
	  openSmallPopup(url,"popWin");
      } else {
        openLargePopup(url,"popWin");
      }

   //} else {
    //alert("You've got the Cookie! " + stopcookie);

  }  /* ends if (!validDate) */
  //} else {
     /* it was a different random number */
    // alert("random_num was "+random_num)  // for debugging purposes only
  } /* ends if (random_num ==1) */
} // end randomPop()


/* ------------------------------------------------------------
   function call to initiate timed survey
   ------------------------------------------------------------ */
// How to use timedPop. Comment out the following line to turn it off.
// timedPop(1, 50, "http://www.cisco.com/survey/intercept.html", "cdcsurvey", 183, "small" );

/* ------------------------------------------------------------
   function call for framework to render right grey bar if framework-content-right has a certain # of child nodes
   ------------------------------------------------------------ */

function setRightColumnBar(){
	var thisCol = document.getElementById('framework-content-right').childNodes;
	for(i=0;i < thisCol.length;i++){
		if(thisCol[i].nodeType == 1 || (thisCol[i].nodeType == 3 && (/\S/.test(thisCol[i].nodeValue)))){
			document.getElementById('framework-base-main').className="framework-base-main-override";
			document.getElementById('framework-content-right').style.width="189px";
		}
	}
}

/* ---------------------------------------------------------------
        Search box -- Function to clear the word Search
 	when you go into the field. Could be used for other
	default text
   --------------------------------------------------------------- */

function checkClear(input,defaultPhrase) {
  if ( input.value == defaultPhrase) input.value = "";
  if (!document.getElementById("search-drop-down")){
     setupSearch();
     }
  if (document.getElementById("search-drop-down")){
     showSuggestionsContainer();
     }
}


/* ---------------------------------------------------------------
       Sitewide Tools Rollover Functions
   --------------------------------------------------------------- */

/* Window opening script for Sitewide Toolkit only */

function sitewide_toolkit_window(url,winName) {
	if(!winName) { winName = "swtwin"; }

        var swtwin = window.open(url, winName, 'width=643,height=492,outerWidth=643,outerHeight=492,top=50,left=70,resizable=yes,scrollbars=yes,toolbar=yes,menubar=yes,status=yes,locationbar=no');

	if (swtwin) swtwin.focus();
}

/* ---------------------------------------------------------------

	Function for Performing redirect.
   ---------------------------------------------------------------

must pass Burl other parameters are optional:

doRedirect('http://cisco.com');

This will default to 50/50 chance of a redirect.  To adjust the chance of a redirect, use a second parameter.  To get a one in 5 chance:

doRedirect('http://cisco.com',5);

If they want session consistency then they must choose and pass in a unique cookie name.  If you use a cookieName, you MUST specify the frequency even if it is 2.  The cookie name can be composed of letters, numbers, dashes and underscores and be less than 20 charaters.

doRedirect('http://cisco.com',2,'you-inc-AorB');
*/

function doRedirect(Burl,chance,cookieName) {
    if(!Burl) {
        return;
    }
    if (!chance) {
        chance = 2;
    }
    if (cookieName) {
        var cookie = global_getCookie(cookieName);
        if (cookie == 'b') {
            window.location.replace(Burl);
            return;
        }
        if (cookie == 'a') {
            return;
        }
    }
    var chooser = Math.ceil(Math.random()*chance);
    if (chooser == 1) {
        if (cookieName) {
             global_setCookie(cookieName, 'b');
        }
        window.location.replace(Burl);
    }
    else {
        if (cookieName){
             global_setCookie(cookieName, 'a');
        }
    }

	var chooser = Math.ceil(Math.random()*chance);
	if (chooser == 1) {
		window.location.replace(Burl)
	}
}


// bam adaptive/targeted media
cdc.bam = {};
cdc.bam.mediaCallback = function(data){
   jQuery(data.domId).show();
   jQuery(data.domId).html(data.blob);
   data.readyCallback();
};


// test src url before showing image
// invoke with: onload="cdc_display_image_when_loaded(this,'my_source_url.jpg');"
function cdc_display_image_when_loaded(img,url){
	// we're extending img with .tempImg to do a test load of the src with a new image object
	img.tempImg = new Image();
	img.tempImg.onload = function(){
		// this prevents the image src in html from firing the onload again
		img.onload=null;
		img.src = img.tempImg.src;
		img.tempImg.onload=null;

		if(img.id == "bam_img"){
			img.parentNode.href = img.src.replace('image.ng','click.ng');
		}
	};
	// putting this after the onload handler above
	img.tempImg.src = url;
}

// cache buster - puts a cache avoidance param on a url with a random number
// invoke with:
// cdc_cache_bust('http://www.cisco.com');          = YourUrl?cacheReset=rand#
// cdc_cache_bust('http://www.cisco.com','foo');    = YourUrl?foo=rand#
// cdc_cache_bust('http://ng-prod1/image');         = YourUrl&cacheReset=rand#
// cdc_cache_bust('http://cisco.com/edit.pl?a=3');  = YourUrl&cacheReset=rand#
function cdc_cache_bust (url,param){
	if (!param) {param = 'cacheReset'};
	var delim = "?";
  // if url is ng-prod1(bam) or has ?, set param delimeter to &
  if (url.match(/(ng-prod1|\?)/)) {delim = "&"};
  var fullParam = delim+param+'=';
	// degug alert(url+fullParam+cdc_rand_num());
	return url+fullParam+cdc_rand_num();
}

// randum number generator
// input: takes param limit to set random max, default is 1000
// output: 'TimeInSeconds-RandNum'
// invoke with: cdc_rand_num(50); or cdc_rand_num();
function cdc_rand_num(limit){
	if (!limit) {limit = 1000};
	var sNum = Math.floor(Math.random()*limit)+1;
  var sTime = (new Date).getTime();
  var rNum = sTime+"-"+sNum;
  return rNum;
}


cdc.util.getSiteArea = function(){

/*
must be one of:
-------------------
About_Cisco
Campaign_Sites
Discussion_Forums
Framework
Global
Home_Pages
Industry_Solutions
Learning_and_Events
Mobile
Networking_Solutions
Ordering
Partners_and_Resellers
Products
Search
Security
Services
Tech_Support
Technologies

*/

	var cdcSiteArea='';
	var siteAreaFrom='';
	// Check URL for known matches
	var siteareasArray = [
		["\/web\/about\/", "About Cisco"],
		["\/web\/learning\/", "Learning and Events"],
		["\/web\/ordering\/", "Ordering"],
		["\/web\/partners\/", "Partners and Resellers"],
		["\/web\/strategy\/", "Industry Solutions"]
	];
	for (z = 0; z < siteareasArray.length; z++) {
		if (location.href.search(siteareasArray[z][0]) != -1) {
			cdcSiteArea = siteareasArray[z][1];
			siteAreaFrom = 'url';
		}
	}


	//check hinav
	try{
		//cdcSiteArea = document.getElementById("framework-column-left").getElementsByTagName('li')[1].childNodes[0].innerHTML;

		cdcSiteArea = document.getElementById("framework-column-left").getElementsByTagName('li')[1].getElementsByTagName('a')[0].innerHTML;

		siteAreaFrom = 'hinav';

	} catch(e) {}


	// Check "iaPath" Meta tag data if present
	var metatags = document.getElementsByTagName("meta");
	for (var m = 0; m < metatags.length; m++) {
		var curr_name = metatags[m].getAttribute("name");
		var curr_content = metatags[m].getAttribute("content");
		if (curr_name == "iaPath") {
			var iaPathArray = curr_content.split("#");
			cdcSiteArea = iaPathArray[1];
			siteAreaFrom = 'meta';
		}
	}
	for (m = 0; m < metatags.length; m++) {
		var curr_name = metatags[m].getAttribute("name");
		var curr_content = metatags[m].getAttribute("content");
		if (curr_name == "contentType") {
			if (curr_content.indexOf("postSales") > 0){
			  cdcSiteArea = "Support";
			  siteAreaFrom = 'meta(support)';
			}
		}
	}

	cdcSiteArea = cdcSiteArea.toLowerCase();
	var t = cdcSiteArea.split(' ');
	cdcSiteArea="";
	for (var m=0;m<t.length;m++){
		if (t[m]=='and'){
			cdcSiteArea += t[m] + " ";
		}
		else {
			cdcSiteArea += t[m].substring(0,1).toUpperCase() + t[m].substring(1) + " ";
		}
	}
	cdcSiteArea = cdcSiteArea.replace(/ $/,'');

	cdcSiteArea = cdcSiteArea.replace(/ &amp; /,'_and_');
	cdcSiteArea = cdcSiteArea.replace(/ /g,'_');
	cdcSiteArea = cdcSiteArea.replace(/Partner_Central/,'Partners_and_Resellers');
	cdcSiteArea = cdcSiteArea.replace(/Support/,'Tech_Support');
	return cdcSiteArea;

} // end getSiteArea()


/* ------------------------------------------------------------
  page location hash reader/setter for widgets
   ------------------------------------------------------------ */

if (typeof(cdc.util) == 'undefined'){
   cdc.util = new Object();
}

cdc.util.setToHash = function(widget,val){
   var cur = cdc.util.getFromHash();
   var newHash='';
   if (widget&&val){
      cur[widget] = val;
   }
   for (widget in cur){
      newHash += widget+'~'+cur[widget]+',';
   }
   newHash = newHash.substr(0,newHash.length-1);
   newHash = '#~'+newHash;
   window.location.hash = newHash;
};

cdc.util.getFromHash = function(){
   var ret = new Object();
   var h = window.location.hash;
   if (h.indexOf("#~")<0){
      return ret;
   }
   h = h.substr(2);

   currHashArr = h.split(",");
   for (h=0; h<currHashArr.length; h++){
      var pair = new Array();
      pair = currHashArr[h].split('~');
      if (!(pair[1])){
         ret['tab']=pair[0];
      } else {
         ret[pair[0]] = pair[1];
      }
   }
   return ret;
};

 cdc.util.sso = function () {
	var url = "/cisco/psn/web/site/collab/sign.html";
	if (global_getCookie("SMSESSION")!='') {
		if (global_getCookie("LtpaToken")==''||global_getCookie("cdc_ltpa_timeout")=='') {
			try{
				var t = jQuery.ajax({'url':url,
					complete:function(x,t){
						//todo: check if this has been redirected to a login page
						//and if so clear cookies
						//console.log('success');
					},
					error: function(x,t){
						if (x.status == '302'){
							cdc.util.setCookie({cookieName:"SMSESSION",cookieValue:'',msecs:2});
							cdc.util.setCookie({cookieName:"LtpaToken",cookieValue:'',msecs:2});
							cdc.util.setCookie({cookieName:"cdc_ltpa_timeout",cookieValue:'',msecs:2});
						}
					}
				});
			}catch(e){
				//console.log('catch');
			}
			var msecsFromNow = (1000*60*19);
			var n = new Date();
			n.setTime(n.getTime()+msecsFromNow);
			cdc.util.setCookie({cookieName:"cdc_ltpa_timeout",cookieValue:n.getTime(),msecs:msecsFromNow});
		}
		if (global_getCookie("cdc_ltpa_timeout")){
			//set timeout for as long as cookie has left; call self at timeout end.
			var n = new Date();
			var timerDuration = global_getCookie("cdc_ltpa_timeout") - n.getTime() + 100;
			if (timerDuration>0){
				setTimeout(cdc.util.sso,timerDuration);
			}
		}
	}
}

/**
 * htmlEscape: Replace escapable characters by their encoded HTML equivalents.
 * Each occurrence of one of the escapable characters in the string is replaced by its
 * numerically-HTML-escaped form. (For example, the '<' symbol is replaced by the string &#60;)
 * @param aString the string to escape
 * @param escapeChars (optional) the characters in the string that should be escaped. If this parameter is not
 * specified, it is assumed to be the string "<>'", thus escaping the three characters ", < and >.
 * @return the escaped string
 */
cdc.util.htmlEscape = function (aString, escapeChars) {
    if (!aString || typeof (aString) != "string") return aString;
    if (typeof (escapeChars) == "undefined") escapeChars = "<>\'";
    var escapeCharsRegex = new RegExp ("([" + escapeChars + "])", "g");
    return aString.replace (escapeCharsRegex, function (match) {
        return "&#" + match.charCodeAt(0) + ";";
    });
};



cdc.util.setCookie = function (a) {
   var expireStr = '';
   if (a.msecs){
	   var ex=new Date();
	   ex.setTime(ex.getTime()+a.msecs);
	   expireStr = ";expires="+ex.toGMTString();
   }
   document.cookie=a.cookieName + "=" + escape(a.cookieValue) + expireStr + "; path=/; domain=cisco.com";
}




/*
 * END /web/fw/j/util.js
 */
/*
 * BEGIN /web/fw/j/search_fragment.js
 */
/**
 *  Support functions for Search
 *  fragment_search.js
 *  Revision: 1.4 
 */

if (typeof(cdc.search) == 'undefined'){
   cdc.search = new Object();
}

/**
 * Constructor for QuerySuggester.
 */
function QuerySuggester() {
    this.id = querySuggesters.length;
    querySuggesters[this.id] = this;
}

// Whether or not to display the first suggestion as marked text within the search-box
QuerySuggester.prototype.useInlineSuggestion = false;

// Whether or not to remove inline suggestions before submitting
QuerySuggester.prototype.clearInlineSuggestionBeforeSubmit = false;

// Public functions

/**
 * Initialize the query-suggester.
 *
 */
QuerySuggester.prototype.initialize = function(suggestionUrl, formId, tooltipId, queryId, containerID, buttonsID) {
    this.__enabled = true; // was test for XmlHttpRequest()
    if (this.__enabled) {
        this.__suggestionUrl = suggestionUrl;
//        this.__form = this.byId(formId);
        this.__form = document.sitewidesearch;
        if (!this.__form) {
            this.__enabled = false;
            this.debug("Couldn't find the form, disabling.");
        } else {
            if (this.__enableContextual){
                this.__section = getSiteArea();
                if (!this.__section) { this.__section = ""; }
                this.__showContextual = (/support/i).test(this.__section);
                if (this.__showContextual){
                   setcontextual();  // on for support
                   }
                this.__contextualButtons = this.byId(buttonsID);
                }
            this.__tooltip = this.byId(tooltipId);
            this.__container = this.byId(containerID);
            this.__queryId = queryId;
            this.__query = this.byId(queryId);
            if (this.__query) {
                this.__query.setAttribute("autocomplete","off",0);
                var oldKeyUp = this.getFunctionBody(this.__query.onkeyup);
                var oldKeyDown = this.getFunctionBody(this.__query.onkeydown);
                var suggester = this;
                this.__query.onkeyup = function(e) {
                	if (typeof e != "undefined")
                		event = e;
                		eval(oldKeyUp);
                	suggester.keyUp(event, queryId);
                };
                this.__query.onkeydown = function(e) {
                	if (typeof e != "undefined")
                		event = e;
                	eval(oldKeyDown);
                	suggester.keyDown(event, queryId);
                };
                this.__mousein = false;
                this.__container.onmouseover = function(){
                        suggester.__mousein=true
                };
                this.__container.onmouseout = function(){
                        suggester.__mousein=false;
                        suggester.__query.focus();
                        suggester.__query.select();
                };
                this.__query.onblur = function() {
                        if (suggester.__mousein == false)
                           suggester.hideContainer();
                };
            }
        }
    } else {
        this.debug("Unable to instantiate XMLHttpRequest, disabling.");
    }
};

/**
 * Set the id of the textarea where debug-output is written. Initially, there is no such
 * textarea assigned to the suggester.
 *
 * @param debugAreaID the id of the textarea to print debug messages to, or boolean false
                      to disable debugging
 */
QuerySuggester.prototype.setDebugAreaId = function(debugAreaId) {
    this.__debugAreaId = debugAreaId;
};

/**
 * Set the id of the input-field to do completion for. Not really neccessary to call, as
 * the id is sent to the key handling methods.
 *
 * @param queryId the id of the search box
 */
QuerySuggester.prototype.setQueryId = function(queryId) {
    this.__queryId = queryId;
    this.__query = this.byId(queryId);
};

// Overridable functions

/**
 * Returns the url to visit to obtain suggestions for a query. By default appends the
 * query to the member. Override for different behavior.
 *
 * @param quer the query for which to fetch suggestions
 * @return the url that will return the suggestions
 */
QuerySuggester.prototype.getSuggestionUrl = function(query) {
    return this.__suggestionUrl + query;
};

/**
 * Called when the search form should be submitted (usually because of mouse clik on one
 * of the suggestions in the list). By default submits the form specified by the formId
 * parameter of the initialize() function. Override for different behavior.
 */
QuerySuggester.prototype.submitForm = function() {
    this.__form.submit();
//    Doing the form submit by calling the get directly. Normal form post method doesn't work using the JSF framework.
//    window.location="http://wwwin-tools-stage.cisco.com/search/JSP/search-results.get?strQueryText="
//       + this.__query.value + "&thissection=" + this.__form.thissection.value;
};

// Input event handlers

/**
 * Event handler for key up events.
 */
QuerySuggester.prototype.keyUp = function(event, field) {
    if (!this.__enabled) return;
    else if (field != this.__queryId) this.setQueryId(field);
    if (event) {
        if (this.__timeout) {
            clearTimeout(this.__timeout);
            this.__timeout = false;
        }
        if (event.ctrlKey || event.altKey) {
            return;
        }
        var timeout = 100;
        this.__deletePressed = false;
        switch (event.keyCode) {
            case 9 : // Tab
            case 27 : // Escape
                this.hide();
                return;
            case 8 : // Backspace
            case 46 : // Delete
                this.__deletePressed = true;
                timeout = 200;
                break;
            case 13 : // Enter
            case 16 : // Shift
            case 17 : // Ctrl
            case 18 : // Alt
            case 20 : // Caps Lock
            case 33 : // Page up
            case 34 : // Page down
            case 35 : // End
            case 36 : // Home
            case 37 : // Arrow left
            case 38 : // Arrow up
            case 39 : // Arrow right
            case 40 : // Arrow down
            case 45 : // Insert
                return;
            default :
                timeout = 100;
                break;
        }
        this.__index = -1;
        var qc = this;
        this.__timeout = setTimeout(function() {qc.fetchAndDisplaySuggestions();}, timeout);
    }
};

/**
 * Some keys also require keyDown handlers, because they never give a key up event. For
 * instance, pressing the 'tab' key will typically cause focus to leave the search input
 * box, causing the key up event to be sent to another component.
 */
QuerySuggester.prototype.keyDown = function(event, field) {
    if (!this.__enabled) return;
    else if (field != this.__queryId) this.setQueryId(field);
    if (event && event.keyCode) {
        switch (event.keyCode) {
            case 9 : // Tab
                this.hide();
                break;
            case 13 : // Enter
                if (this.__index == -1) {
                	this.clearInlineSuggestion();
                	break;
                }
                else {
                	this.__query.value = this.__terms[this.__index];
                	this.submitForm();
                	return false;
                }
            case 38 : // Up-arrow
                if (this.__index >= 0) this.updateSuggestions(this.__index--, -2);
                break;
            case 40 : // Down-arrow
                if (this.__index < this.__terms.length - 1) this.updateSuggestions(this.__index++, -2);
                break;
        }
    }
};

QuerySuggester.prototype.mouseOver = function(index) {
    if (!this.__enabled) return;
    var previous = this.__mouseIndex >= 0 ? this.__mouseIndex : this.__index;
    this.__mouseIndex = index;
    this.updateSuggestions(-2, previous);
};

QuerySuggester.prototype.mouseOut = function(index) {
    if (!this.__enabled) return;
    var previous = this.__mouseIndex;
    this.__mouseIndex = -1;
    this.updateSuggestions(-2, previous);
};

QuerySuggester.prototype.mouseClick = function(index) {
    if (!this.__enabled) return;
//  alert(index+" "+this.__terms[index]);
    if (index >= 0) {
        this.__query.value = this.__terms[index];
        this.submitForm();
    } else {
        this.hide();
    }
};

// Functions for retrieving suggestions

QuerySuggester.prototype.fetchAndDisplaySuggestions = function() {
    var val = this.__query.value;
    if (this.canHandleRanges()) {
        val = val.substring(0, this.getCaretPosition());
    }
    if (val.length == 0) {
        this.hide();
        this.__prev = val;
        return;
    } else {
        val = val.replace(new RegExp("\\\\", "g"), "\\\\");
    }
    this.__prev = val;
    if (this.__cache[val]) {
        this.debug("cache: " + val);
        this.displaySuggestions(this.__cache[val], this.__prev);
    } else {
        this.debug("query: '" + val + "'");
        this.fetchSuggestion(val);
    }
};

QuerySuggester.prototype.fetchSuggestion = function(query) {
    var qc = this;
    qs = this;
    cdc.search.jsonp(this.__suggestionUrl+"q="+encodeURI(query),"qs.parseSuggestions","");
};

// Functions for displaying suggestions

QuerySuggester.prototype.parseSuggestions = function(matches) {
    if (matches == "") return;
    var params = eval(matches);
    if (params.length > 2) {
        this.__cache[params[0]] = params;
    }
    this.displaySuggestions(params, params.length > 2 ? params[0] : "");
};

QuerySuggester.prototype.displaySuggestions = function(matches, query) {
    if (matches.length <= 2) {
        this.noSuggestions();
        return;
    }
    if (this.__tooltip && this.__query) {
        this.buildSuggestionsHtml(matches);
        this.show();
        this.showInlineSuggestions(query);
    }
};

QuerySuggester.prototype.buildSuggestionsHtml = function(matches) {
    var text = "";
    if (this.__showContextual){
       text += "<hr size=\"1\" noshade=\"noshade\" color=\"#CCCCCC\" />";
       }
    var length = matches.length / 2 - 1;
    this.__terms = new Array(length);
    for (var i = 0; i < length; ++i) {
        text += "<div class=\"suggestionEntry\" id=\"tooltip_" + i + "\"";
        text += " onmouseover=\"cdc.search.mouseOver(" + this.id + "," + i + ")\"";
        text += " onmouseout=\"cdc.search.mouseOut(" + this.id + "," + i + ")\"";
        text += " onclick=\"cdc.search.mouseClick(" + this.id + "," + i + ")\"";
        text += " style=\"cursor: pointer\">" + matches[i * 2 + 2]
        text += "</div>\n";
        this.__terms[i] = matches[i * 2 + 2];
    }
    this.__tooltip.innerHTML = text;
    if (this.__container.style.display == "none"){
       this.showContainer();
       }
};

QuerySuggester.prototype.showInlineSuggestions = function(query) {
    if (this.__terms.length > 0 && this.__query.value == query && !this.__deletePressed && this.useInlineSuggestion) {
        this.__original = this.__query.value;
        if (this.canHandleRanges()) {
            this.__query.value = this.__terms[0];
            this.selectRange(this.__original.length, this.__query.value.length);
        }
    }
};

QuerySuggester.prototype.updateSuggestions = function(previousIndex, previousMouseIndex) {
    var previous = this.byId("tooltip_" + previousIndex);
    var previousMouse = this.byId("tooltip_" + previousMouseIndex);
    var current = this.byId("tooltip_" + this.__index);
    var currentMouse = this.byId("tooltip_" + this.__mouseIndex);

    if (previous) {
        if (previousIndex != this.__mouseIndex) {
            previous.className = "suggestionEntry";
        }
    }
    if (current) {
        current.className = "suggestionEntryHover";
        if (this.canHandleRanges()) {
            //Text field should not filled with the suggestion value until enter button is pressed or mouse click.
            //this.__query.value = this.__terms[this.__index];
            this.selectRange(this.__original.length, this.__terms[this.__index].length);
        }
    }

    if (previousMouse && previousMouseIndex != this.__index) {
        previousMouse.className = "suggestionEntry";
    }

    if (currentMouse) {
    	currentMouse.className = "suggestionEntryHover";
    }
};

/**
 * Called when the list of matches returned is empty. Default implementation will simply
 * hide the list of suggestions. Override for custom behavior.
 */
QuerySuggester.prototype.noSuggestions = function() {
    this.hide();
};

QuerySuggester.prototype.show = function() {
    if (this.__tooltip && this.__query) {
        this.__tooltip.style.display= "block";
    }
};

QuerySuggester.prototype.showContainer = function() {
    if (this.__container && this.__query) {
      if (this.__showContextual || this.__terms.length > 0) {
        this.__container.style.left = this.findPosX(this.__query) -9 + "px";
        //this.__container.style.left = this.findPosX(this.__query) -284 + "px";
        this.__container.style.top = (this.findPosY(this.__query) -4 + this.__query.offsetHeight) + "px";
        this.__container.style.width = this.__query.offsetWidth +10 + "px";
        this.__container.style.display = "block";
        if (this.__showContextual){
           this.__contextualButtons.style.display = "block";
           }
       }
    }
};

QuerySuggester.prototype.hide = function() {
    if (this.__tooltip) {
        this.__terms = new Array();
        this.__tooltip.style.display = "none";
        if (!this.__showContextual){
           this.__container.style.display = "none";
           }
    }
};
QuerySuggester.prototype.hideContainer = function() {
    if (this.__container) {
//        this.__terms = new Array();
        this.__container.style.display = "none";
    }
};

// Text-selection helper-functions

QuerySuggester.prototype.canHandleRanges = function() {
    return this.__query.createTextRange || this.__query.setSelectionRange;
};

QuerySuggester.prototype.selectRange = function(from, to) {
    if (this.__query.createTextRange) {
        var t = this.__query.createTextRange();
        t.moveStart("character", from);
        t.select();
    } else if (this.__query.setSelectionRange) {
        this.__query.setSelectionRange(from, to);
    } else {
        this.debug("Couldn't select range.");
    }
};

QuerySuggester.prototype.getCaretPosition = function() {
    if (document.selection) {
        var range = document.selection.createRange().duplicate();
        range.collapse(true);
        range.moveStart("character", -1000);
        return range.text.length;
    } else if (this.__query.setSelectionRange) {
        return this.__query.selectionStart;
    } else {
        this.debug("Couldn't find caret position.");
        return this.__query.value.length;
    }
};

QuerySuggester.prototype.clearInlineSuggestion = function() {
    if (this.__query && this.canHandleRanges() && this.clearInlineSuggestionBeforeSubmit) {
        this.__query.value = this.__query.value.substring(0, this.getCaretPosition());
    }
};

// General helper-functions

/**
 * Helper-function that extracts the body of a function, by converting it to a string, and
 * extracting the substring from after the first { to the last }. If the func argument
 * isn't a function, an empty string is returned.
 *
 * @param func the function whose body to extract
 * @return the body of func
 */
QuerySuggester.prototype.getFunctionBody = function(func) {
    var body = "";
    if (typeof func == "function") {
        body = func.toString();
        body = body.substring(body.indexOf("{") + 1, body.lastIndexOf("}"));
    }
    return body;
};

QuerySuggester.prototype.findPosX = function(obj) {
    var curleft = 0;
    if (obj.offsetParent) {
        while (obj.offsetParent && obj.className != "pageContainer") {
            curleft += obj.offsetLeft;
            obj = obj.offsetParent;
        }
    } else if (obj.x)
        curleft += obj.x;
    return curleft;
};

QuerySuggester.prototype.findPosY = function(obj) {
    var curtop = 0;
    if (obj.offsetParent) {
        while (obj.offsetParent && obj.className != "pageContainer") {
            curtop += obj.offsetTop
            obj = obj.offsetParent;
        }
    } else if (obj.y) {
        curtop += obj.y;
    }
    return curtop;
};

QuerySuggester.prototype.byId = function(id) {
    var element = document.getElementById ? document.getElementById(id) : false;
    return element && element != null ? element : false;
};

QuerySuggester.prototype.debug = function(message) {
    if (this.__debugAreaId) {
        var err = this.byId(this.__debugAreaId);
        if (err) {
            err.value += message + "\n";
        }
    }
};

// Private members

QuerySuggester.prototype.__suggestionUrl = false;   // The url to fetch suggestions from
QuerySuggester.prototype.__form = false;            // The form
QuerySuggester.prototype.__query = false;           // The query input field
QuerySuggester.prototype.__queryId = false;         // The id of the query input field
QuerySuggester.prototype.__tooltip = false;         // The tooltip div
QuerySuggester.prototype.__container = false;       // The container div
QuerySuggester.prototype.__debugAreaId = false;     // Text-area for debugging

QuerySuggester.prototype.__timeout = false;         // The current timeout
QuerySuggester.prototype.__prev = "";               // The previously sent term
QuerySuggester.prototype.__original = "";           // The term before panning into the suggestions
QuerySuggester.prototype.__index = -1;              // The index of the text cursor in the list of suggestions
QuerySuggester.prototype.__mouseIndex = -1;         // The position of the mouse in the list of suggestions
QuerySuggester.prototype.__terms = new Array();     // The list of suggestions
QuerySuggester.prototype.__cache = new Array();     // A result-cache
QuerySuggester.prototype.__enabled = false;
QuerySuggester.prototype.__deletePressed = false;   // Delete or backspace has been pressed
QuerySuggester.prototype.__section = "";            // Site section
QuerySuggester.prototype.__showContextual = false;  // show user the buttons
QuerySuggester.prototype.__enableContextual = false;// Set to true if contextual search is allowed anywhere



// Global stuff


// Global array of all instantiated query-suggesters
var querySuggesters = new Array();

// Global mouse-handling function
cdc.search.mouseOver = function(id, index) {
    if (id >= 0 && id < querySuggesters.length) {
        querySuggesters[id].mouseOver(index);
    }
}

// Global mouse-handling function
cdc.search.mouseOut = function(id, index) {
    if (id >= 0 && id < querySuggesters.length) {
        querySuggesters[id].mouseOut(index);
    }
}

// Global mouse-handling function
cdc.search.mouseClick = function(id, index) {
    if (id >= 0 && id < querySuggesters.length) {
        querySuggesters[id].mouseClick(index);
    } else if (id == -1 && index == -1) {
        for (var i = 0; i < querySuggesters.length; ++i) {
            querySuggesters[i].mouseClick(index);
        }
    }
}
function setsitewide(){
   document.getElementById("searchtype-contextual").checked = false;
   document.getElementById("searchtype-sitewide").checked = true;
   document.sitewidesearch.thissection.value = 'f';
   }
function setcontextual(){
   document.getElementById("searchtype-contextual").checked = true;
   document.getElementById("searchtype-sitewide").checked = false;
   document.sitewidesearch.thissection.value = 't';
   }

function showSuggestionsContainer(){
   qs.showContainer();
   }


function hideSuggestionsContainer(){
   if (qs.__mousein == false)
      qs.hideContainer();
   }

cdc.search.jsonp = function(url,name, query)
{
    if (url.indexOf("?") > -1)
        url += "&callback="
    else
        url += "?callback="
    url += name + "&";
    if (query)
        url += encodeURIComponent(query) + "&";
    url += new Date().getTime().toString(); // prevent caching
    var script = document.createElement("script");
    script.setAttribute("src",url);
    script.setAttribute("type","text/javascript");
    document.body.appendChild(script);
}

function setupSearch() {
   var host = window.location.hostname.toLowerCase();
   // no typeahead in newsroom and investor
   if ((host.indexOf("newsroom.cisco.com") >= 0) || (host.indexOf("investor.cisco.com") >= 0)) {
      return;
      }
   // no typeahead if framework.css is not present
   var found = false;
   var i = 0;
   while ((found == false) && (i<document.styleSheets.length)){
       found = ((document.styleSheets[i].href.indexOf("/framework.css")>=0)
              ||(document.styleSheets[i].href.indexOf("/libra.css")>=0)
              ||(document.styleSheets[i].href.indexOf("/home.css")>=0)
              ||(document.styleSheets[i].href.indexOf("/home.min.css")>=0)
              ||(document.styleSheets[i].href.indexOf("/_search.css")>=0));
       i++;
       }
   if (found == false){
       return;
       }
   var str ='<div style="display:none" id="search-drop-down">';
   str += '<div class="contextual-search-top"> </div>';
   str += '<div id="contextual-search-buttons">';
   str += '<span class="contextual-search-link" onclick="setsitewide()">';
   str += '<input type="radio" id="searchtype-sitewide" name="searchtype" value="sitewide" checked /> ';
   str += 'All Cisco.com</span> &nbsp; &nbsp;';
   str += '<span class="contextual-search-link" onclick="setcontextual()">';
   str += '<input type="radio" id="searchtype-contextual" name="searchtype" value="contextual" /> ';
   str += 'This Section</span>';
   str += '</div>'
   str += '<div id="autoSuggest"></div>';
   str += '<div class="contextual-search-bot"> </div></div>';

   // $('#framework-header').prepend(str);
   var framework_header_node = document.getElementById("home-header")        // check for homepage node first
                            || document.getElementById("framework-header");  // all other pages

   var search_drop_down_node = document.createElement("DIV");
   search_drop_down_node.innerHTML = str;
   framework_header_node.insertBefore(search_drop_down_node,framework_header_node.firstChild);

   // $('#searchPhrase')[0].form.id="sitewidesearch";
   if (document.getElementById("searchPhrase")){
      document.getElementById("searchPhrase").form.id="sitewidesearch";
      }

   //$('#searchPhrase').focus(function(){
   //   showSuggestionsContainer();
   //   });
   //document.getElementById("searchPhrase").onfocus=showSuggestionsContainer;

   //$('#searchPhrase').blur(function(){
   //   hideSuggestionsContainer();
   //   });
   if (document.getElementById("searchPhrase")){
      document.getElementById("searchPhrase").onblur=hideSuggestionsContainer;
      }

   var turl = (host.indexOf("www.cisco.com") < 0) ? 'http://www.cisco.com' : '';
   turl += "/pcgi-bin/search/searchrelay.pl?";
   turl += "charset="+(document.charset || document.characterSet) + "&";

   if ((typeof cdc.search.country) != "undefined"){
       turl += "country="+cdc.search.country+"&";
       }
   if ((typeof cdc.search.language) != "undefined"){
       turl += "language="+cdc.search.language+"&";
       }

/*   if (host.indexOf("www.cisco.com")>=0){
       turl = "http:/www.cisco.com/pcgi-bin/search/searchrelay.pl";
       }  changed during fsg at Saugat request */
   qs = new QuerySuggester();
   qs.initialize(turl,
              "sitewidesearch",
              "autoSuggest",
              "searchPhrase",
              "search-drop-down",
              "contextual-search-buttons");
   };

// setupSearch();
// window.onload = setupSearch;

/*
 * END /web/fw/j/search_fragment.js
 */
/*
 * BEGIN /web/fw/w/includer.js
 */

/*
includer.js
Revision: 1.9 
(c) 1992-2007 Cisco Systems, Inc. All rights reserved.
Terms and Conditions: http://cisco.com/en/US/swassets/sw293/sitewide_important_notices.html
*/

if (typeof(cdc) == "undefined") cdc = new Object();
if (typeof(cdc.includer) == "undefined"){
	cdc.includer = {};
	if (typeof(cdc.includer.alreadyInPage) == 'undefined'){
		cdc.includer.alreadyInPage = [];
	}
	cdc.includer.widgets = {
		'module-sbt':{
			js: [
				'http://cisco.com/cdc_content_elements/visualsciences/visualsciences.js',
				'http://cisco.com/web/fw/j/sbt.js'
			],
			css: ['http://cisco.com/web/fw/c/sbt.css']
		},
                'widget-popular':{
			js: [
				'/web/fw/w/widget-popular.js',
				'http://cmsg-ws.cisco.com/js/discovery.js'
			]
		},
		'cdc-widget-accordion' : {
         js: [
				'http://www.cisco.com/cdc_content_elements/visualsciences/visualsciences.js',
            '/web/fw/lib/jquery.hoverIntent.minified.js',
            '/web/fw/w/accordion/widget-accordion.js'
         ]
      },
		'cdc-widget-lightbox' : {
			js: [
			  '/web/fw/lib/jqmodal.js',
			  '/web/fw/lib/jquery.bgiframe.min.js',
			  'http://www.cisco.com/cdc_content_elements/flash/swfobject/swfobject.js',
			  '/web/fw/w/lightbox/lightbox.js'
			],
			css: [
			   '/web/fw/w/lightbox/lightbox.css'
			]
		}

	};
	cdc.includer.search = function(){

		for (id in cdc.includer.widgets){
			if (document.getElementById(id)){
				if (cdc.includer.widgets[id]['css'] && cdc.includer.widgets[id]['css'].length){
					cdc.includer.loadCss(cdc.includer.widgets[id]['css']);
				}
				if (cdc.includer.widgets[id]['js'] && cdc.includer.widgets[id]['js'].length){
					cdc.includer.loadJs(cdc.includer.widgets[id]['js']);
				}
			}
		}
	};

	cdc.includer.uniquifyIncludes = function(includes,type) {
		var dedup = {};
		var deduped = [];
		var nodeName, attrName;
                if (type == 'js') {
			nodeName = 'script';
			attrName = 'src';
		}
		else if (type == 'css') {
			nodeName = 'link';
			attrName = 'href';
		}

		for (var i=0;i<includes.length;i++){
			dedup[includes[i]]=1;
		}
		if (typeof(cdc.includer.alreadyInPage) != 'undefined'){
			for (var i=0;i<cdc.includer.alreadyInPage.length;i++){
				dedup[cdc.includer.alreadyInPage[i]]=0;
			}
		}
		jQuery(nodeName).each(function(){
			if (this[attrName]){
				dedup[this[attrName].replace(/http:\/\/[^\/]*/,'')]=0;
			}
		});
		for (var i=0;i<includes.length;i++){
			if (dedup[includes[i]]){
				deduped.push(includes[i]);
			}
		}
		return deduped;
	};

	cdc.includer.loadCss = function(includes){
		if (typeof(includes) != "array") {
			includes = [ includes ];
		}
		includes = cdc.includer.uniquifyIncludes(includes,'css');
		for (var i=0;i<includes.length;i++){
			//NEED TO check for css in dom
			//include css if not there already
			var css = document.createElement('link');
			css.setAttribute('rel', 'stylesheet');
			css.setAttribute('type', 'text/css');
			css.setAttribute('href', includes[i]);
			document.getElementsByTagName('head')[0].appendChild(css);
		}
	};

	cdc.includer.loadJs = function(includes,extraArgs){
		if (!extraArgs){
			extraArgs = {};
		}
		if (!extraArgs.hasBeenCleaned){
			includes = cdc.includer.uniquifyIncludes(includes,'js');
			extraArgs.hasBeenCleaned=1;
			if (includes.length==0){
				if (extraArgs.callback){
					extraArgs.callback();
				}
				return;
			}

		}
		currentFile = includes.shift();

		//NEED TO check for js in dom
		//include js if not there already
		var scriptNode = document.createElement('script');
		document.getElementsByTagName("head")[0].appendChild(scriptNode);
		scriptNode.language='javascript';
		if (includes.length){
			if(document.attachEvent){//IE
				scriptNode.onreadystatechange = function(){
					if (this.readyState == "loaded") {
						cdc.includer.loadJs(includes,extraArgs);
					}
				}
			}
			else{
				scriptNode.onload = function(){cdc.includer.loadJs(includes,extraArgs);};
			}
		}
		else if (extraArgs.callback){
			if(document.attachEvent){//IE
				scriptNode.onreadystatechange = function(){
					if (this.readyState == "loaded") {
						extraArgs.callback();
					}
				}
			}
			else{
				scriptNode.onload = function(){extraArgs.callback();};
			}
		}
		scriptNode.src=currentFile;
	};
	jQuery(cdc.includer.search);

}
/*
 * END /web/fw/w/includer.js
 */
/*
 * BEGIN /web/fw/lib/jquery.blockUI.js
 */
/*
 * jQuery blockUI plugin
 * Version 1.33  (09/14/2007)
 * @requires jQuery v1.1.1
 *
 * $Id: global.js,v 1.45 2008/12/04 18:55:13 abazar Exp $
 *
 * Examples at: http://malsup.com/jquery/block/
 * Copyright (c) 2007 M. Alsup
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 */
 (function($) {
/**
 * blockUI provides a mechanism for blocking user interaction with a page (or parts of a page).
 * This can be an effective way to simulate synchronous behavior during ajax operations without
 * locking the browser.  It will prevent user operations for the current page while it is
 * active ane will return the page to normal when it is deactivate.  blockUI accepts the following
 * two optional arguments:
 *
 *   message (String|Element|jQuery): The message to be displayed while the UI is blocked. The message
 *              argument can be a plain text string like "Processing...", an HTML string like
 *              "<h1><img src="busy.gif" /> Please wait...</h1>", a DOM element, or a jQuery object.
 *              The default message is "<h1>Please wait...</h1>"
 *
 *   css (Object):  Object which contains css property/values to override the default styles of
 *              the message.  Use this argument if you wish to override the default
 *              styles.  The css Object should be in a format suitable for the jQuery.css
 *              function.  For example:
 *              $.blockUI({
 *                    backgroundColor: '#ff8',
 *                    border: '5px solid #f00,
 *                    fontWeight: 'bold'
 *              });
 *
 * The default blocking message used when blocking the entire page is "<h1>Please wait...</h1>"
 * but this can be overridden by assigning a value to $.blockUI.defaults.pageMessage in your
 * own code.  For example:
 *
 *      $.blockUI.defaults.pageMessage = "<h1>Bitte Wartezeit</h1>";
 *
 * The default message styling can also be overridden.  For example:
 *
 *      $.extend($.blockUI.defaults.pageMessageCSS, { color: '#00a', backgroundColor: '#0f0' });
 *
 * The default styles work well for simple messages like "Please wait", but for longer messages
 * style overrides may be necessary.
 *
 * @example  $.blockUI();
 * @desc prevent user interaction with the page (and show the default message of 'Please wait...')
 *
 * @example  $.blockUI( { backgroundColor: '#f00', color: '#fff'} );
 * @desc prevent user interaction and override the default styles of the message to use a white on red color scheme
 *
 * @example  $.blockUI('Processing...');
 * @desc prevent user interaction and display the message "Processing..." instead of the default message
 *
 * @name blockUI
 * @param String|jQuery|Element message Message to display while the UI is blocked
 * @param Object css Style object to control look of the message
 * @cat Plugins/blockUI
 */
$.blockUI = function(msg, css, opts) {
    $.blockUI.impl.install(window, msg, css, opts);
};

// expose version number so other plugins can interogate
$.blockUI.version = 1.33;

/**
 * unblockUI removes the UI block that was put in place by blockUI
 *
 * @example  $.unblockUI();
 * @desc unblocks the page
 *
 * @name unblockUI
 * @cat Plugins/blockUI
 */
$.unblockUI = function(opts) {
    $.blockUI.impl.remove(window, opts);
};

/**
 * Blocks user interaction with the selected elements.  (Hat tip: Much of
 * this logic comes from Brandon Aaron's bgiframe plugin.  Thanks, Brandon!)
 * By default, no message is displayed when blocking elements.
 *
 * @example  $('div.special').block();
 * @desc prevent user interaction with all div elements with the 'special' class.
 *
 * @example  $('div.special').block('Please wait');
 * @desc prevent user interaction with all div elements with the 'special' class
 * and show a message over the blocked content.
 *
 * @name block
 * @type jQuery
 * @param String|jQuery|Element message Message to display while the element is blocked
 * @param Object css Style object to control look of the message
 * @cat Plugins/blockUI
 */
$.fn.block = function(msg, css, opts) {
    return this.each(function() {
		if (!this.$pos_checked) {
            if ($.css(this,"position") == 'static')
                this.style.position = 'relative';
            if ($.browser.msie) this.style.zoom = 1; // force 'hasLayout' in IE
            this.$pos_checked = 1;
        }
        $.blockUI.impl.install(this, msg, css, opts);
    });
};

/**
 * Unblocks content that was blocked by "block()"
 *
 * @example  $('div.special').unblock();
 * @desc unblocks all div elements with the 'special' class.
 *
 * @name unblock
 * @type jQuery
 * @cat Plugins/blockUI
 */
$.fn.unblock = function(opts) {
    return this.each(function() {
        $.blockUI.impl.remove(this, opts);
    });
};

/**
 * displays the first matched element in a "display box" above a page overlay.
 *
 * @example  $('#myImage').displayBox();
 * @desc displays "myImage" element in a box
 *
 * @name displayBox
 * @type jQuery
 * @cat Plugins/blockUI
 */
$.fn.displayBox = function(css, fn, isFlash) {
    var msg = this[0];
    if (!msg) return;
    var $msg = $(msg);
    css = css || {};

    var w = $msg.width()  || $msg.attr('width')  || css.width  || $.blockUI.defaults.displayBoxCSS.width;
    var h = $msg.height() || $msg.attr('height') || css.height || $.blockUI.defaults.displayBoxCSS.height ;
    if (w[w.length-1] == '%') {
        var ww = document.documentElement.clientWidth || document.body.clientWidth;
        w = parseInt(w) || 100;
        w = (w * ww) / 100;
    }
    if (h[h.length-1] == '%') {
        var hh = document.documentElement.clientHeight || document.body.clientHeight;
        h = parseInt(h) || 100;
        h = (h * hh) / 100;
    }

    var ml = '-' + parseInt(w)/2 + 'px';
    var mt = '-' + parseInt(h)/2 + 'px';

    // supress opacity on overlay if displaying flash content on mac/ff platform
    var ua = navigator.userAgent.toLowerCase();
    var opts = {
        displayMode: fn || 1,
        noalpha: isFlash && /mac/.test(ua) && /firefox/.test(ua)
    };

    $.blockUI.impl.install(window, msg, { width: w, height: h, marginTop: mt, marginLeft: ml }, opts);
};


// override these in your code to change the default messages and styles
$.blockUI.defaults = {
    // the message displayed when blocking the entire page
    pageMessage:    '<h1>Please wait...</h1>',
    // the message displayed when blocking an element
    elementMessage: '', // none
    // styles for the overlay iframe
    overlayCSS:  { backgroundColor: '#fff', opacity: '0.5' },
    // styles for the message when blocking the entire page
    pageMessageCSS:    { width:'250px', margin:'-50px 0 0 -125px', top:'50%', left:'50%', textAlign:'center', color:'#000', backgroundColor:'#fff', border:'3px solid #aaa' },
    // styles for the message when blocking an element
    elementMessageCSS: { width:'250px', padding:'10px', textAlign:'center', backgroundColor:'#fff'},
    // styles for the displayBox
    displayBoxCSS: { width: '400px', height: '400px', top:'50%', left:'50%' },
    // allow body element to be stetched in ie6
    ie6Stretch: 1,
    // supress tab nav from leaving blocking content?
    allowTabToLeave: 0,
    // Title attribute for overlay when using displayBox
    closeMessage: 'Click to close',
    // use fadeOut effect when unblocking (can be overridden on unblock call)
    fadeOut:  1,
    // fadeOut transition time in millis
    fadeTime: 400
};

// the gory details
$.blockUI.impl = {
    box: null,
    boxCallback: null,
    pageBlock: null,
    pageBlockEls: [],
    op8: window.opera && window.opera.version() < 9,
    ie6: $.browser.msie && /MSIE 6.0/.test(navigator.userAgent),
    install: function(el, msg, css, opts) {
        opts = opts || {};
        this.boxCallback = typeof opts.displayMode == 'function' ? opts.displayMode : null;
        this.box = opts.displayMode ? msg : null;
        var full = (el == window);

        // use logical settings for opacity support based on browser but allow overrides via opts arg
        var noalpha = this.op8 || $.browser.mozilla && /Linux/.test(navigator.platform);
        if (typeof opts.alphaOverride != 'undefined')
            noalpha = opts.alphaOverride == 0 ? 1 : 0;

        if (full && this.pageBlock) this.remove(window, {fadeOut:0});
        // check to see if we were only passed the css object (a literal)
        if (msg && typeof msg == 'object' && !msg.jquery && !msg.nodeType) {
            css = msg;
            msg = null;
        }
        msg = msg ? (msg.nodeType ? $(msg) : msg) : full ? $.blockUI.defaults.pageMessage : $.blockUI.defaults.elementMessage;
        if (opts.displayMode)
            var basecss = jQuery.extend({}, $.blockUI.defaults.displayBoxCSS);
        else
            var basecss = jQuery.extend({}, full ? $.blockUI.defaults.pageMessageCSS : $.blockUI.defaults.elementMessageCSS);
        css = jQuery.extend(basecss, css || {});
        var f = ($.browser.msie) ? $('<iframe class="blockUI" style="z-index:1000;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="javascript:false;"></iframe>')
                                 : $('<div class="blockUI" style="display:none"></div>');
        var w = $('<div class="blockUI" style="z-index:1001;cursor:wait;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>');
        var m = full ? $('<div class="blockUI blockMsg" style="z-index:1002;cursor:wait;padding:0;position:fixed"></div>')
                     : $('<div class="blockUI" style="display:none;z-index:1002;cursor:wait;position:absolute"></div>');
        w.css('position', full ? 'fixed' : 'absolute');
        if (msg) m.css(css);
        if (!noalpha) w.css($.blockUI.defaults.overlayCSS);
        if (this.op8) w.css({ width:''+el.clientWidth,height:''+el.clientHeight }); // lame
        if ($.browser.msie) f.css('opacity','0.0');

        $([f[0],w[0],m[0]]).appendTo(full ? 'body' : el);

        // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
        var expr = $.browser.msie && (!$.boxModel || $('object,embed', full ? null : el).length > 0);
        if (this.ie6 || expr) {
            // stretch content area if it's short
            if (full && $.blockUI.defaults.ie6Stretch && $.boxModel)
                $('html,body').css('height','100%');

            // fix ie6 problem when blocked element has a border width
            if ((this.ie6 || !$.boxModel) && !full) {
                var t = this.sz(el,'borderTopWidth'), l = this.sz(el,'borderLeftWidth');
                var fixT = t ? '(0 - '+t+')' : 0;
                var fixL = l ? '(0 - '+l+')' : 0;
            }

            // simulate fixed position
            $.each([f,w,m], function(i,o) {
                var s = o[0].style;
                s.position = 'absolute';
                if (i < 2) {
                    full ? s.setExpression('height','document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + "px"')
                         : s.setExpression('height','this.parentNode.offsetHeight + "px"');
                    full ? s.setExpression('width','jQuery.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"')
                         : s.setExpression('width','this.parentNode.offsetWidth + "px"');
                    if (fixL) s.setExpression('left', fixL);
                    if (fixT) s.setExpression('top', fixT);
                }
                else {
                    if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
                    s.marginTop = 0;
                }
            });
        }
        if (opts.displayMode) {
            w.css('cursor','default').attr('title', $.blockUI.defaults.closeMessage);
            m.css('cursor','default');
            $([f[0],w[0],m[0]]).removeClass('blockUI').addClass('displayBox');
            $().click($.blockUI.impl.boxHandler).bind('keypress', $.blockUI.impl.boxHandler);
        }
        else
            this.bind(1, el);
        m.append(msg).show();
        if (msg.jquery) msg.show();
        if (opts.displayMode) return;
        if (full) {
            this.pageBlock = m[0];
            this.pageBlockEls = $(':input:enabled:visible',this.pageBlock);
            setTimeout(this.focus, 20);
        }
        else this.center(m[0]);
    },
    remove: function(el, opts) {
        var o = $.extend({}, $.blockUI.defaults, opts);
        this.bind(0, el);
        var full = el == window;
        var els = full ? $('body').children().filter('.blockUI') : $('.blockUI', el);
        if (full) this.pageBlock = this.pageBlockEls = null;

        if (o.fadeOut) {
            els.fadeOut(o.fadeTime, function() {
                if (this.parentNode) this.parentNode.removeChild(this);
            });
        }
        else els.remove();
    },
    boxRemove: function(el) {
        $().unbind('click',$.blockUI.impl.boxHandler).unbind('keypress', $.blockUI.impl.boxHandler);
        if (this.boxCallback)
            this.boxCallback(this.box);
        $('body .displayBox').hide().remove();
    },
    // event handler to suppress keyboard/mouse events when blocking
    handler: function(e) {
        if (e.keyCode && e.keyCode == 9) {
            if ($.blockUI.impl.pageBlock && !$.blockUI.defaults.allowTabToLeave) {
                var els = $.blockUI.impl.pageBlockEls;
                var fwd = !e.shiftKey && e.target == els[els.length-1];
                var back = e.shiftKey && e.target == els[0];
                if (fwd || back) {
                    setTimeout(function(){$.blockUI.impl.focus(back)},10);
                    return false;
                }
            }
        }
        if ($(e.target).parents('div.blockMsg').length > 0)
            return true;
        return $(e.target).parents().children().filter('div.blockUI').length == 0;
    },
    boxHandler: function(e) {
        if ((e.keyCode && e.keyCode == 27) || (e.type == 'click' && $(e.target).parents('div.blockMsg').length == 0))
            $.blockUI.impl.boxRemove();
        return true;
    },
    // bind/unbind the handler
    bind: function(b, el) {
        var full = el == window;
        // don't bother unbinding if there is nothing to unbind
        if (!b && (full && !this.pageBlock || !full && !el.$blocked)) return;
        if (!full) el.$blocked = b;
        var $e = $(el).find('a,:input');
        $.each(['mousedown','mouseup','keydown','keypress','click'], function(i,o) {
            $e[b?'bind':'unbind'](o, $.blockUI.impl.handler);
        });
    },
    focus: function(back) {
        if (!$.blockUI.impl.pageBlockEls) return;
        var e = $.blockUI.impl.pageBlockEls[back===true ? $.blockUI.impl.pageBlockEls.length-1 : 0];
        if (e) e.focus();
    },
    center: function(el) {
		var p = el.parentNode, s = el.style;
        var l = ((p.offsetWidth - el.offsetWidth)/2) - this.sz(p,'borderLeftWidth');
        var t = ((p.offsetHeight - el.offsetHeight)/2) - this.sz(p,'borderTopWidth');
        s.left = l > 0 ? (l+'px') : '0';
        s.top  = t > 0 ? (t+'px') : '0';
    },
    sz: function(el, p) { return parseInt($.css(el,p))||0; }
};

})(jQuery);
/*
 * END /web/fw/lib/jquery.blockUI.js
 */
/*
 * BEGIN /web/fw/w/backpack/frag_global_backpack.js
 */
/**
 *  Dependant javascript fragment; to support backpack framework
 *  frag_global_backpack.js
 *  Revision: 1.6 
 */

cdc.util.initBackpack = function(domID){

	cdc.util.sso();

	var t='';
	t+='       <td id="mycisco" rel="#mycisco-infoHover"><a id="mycisco-anchor" href="#" rel="#mycisco-infoHover">' + cdc.local.wpx.BACKPACK_MYCISCO_LINKTEXT + '</a>';
	t+='         <div style="position:relative;">';
	t+='           <div id="backpack">';
	t+='             <div id="backpack-body">';
	t+='               <div id="backpack-header-wrap"><h2 id="backpack-header">&nbsp;</h2></div>';
	t+='               <div id="bookmarks-module" class="backpack-module" style="margin-top:50px;">';
	t+='                 <h3>&nbsp;</h3>';
	t+='                 <div class="backpack-module-data" style="height:90px;">&nbsp;</div>';
	t+='                 <div class="backpack-module-footer">&nbsp;</div>';
	t+=  '             </div>';
	t+='               <div id="share-module" class="backpack-module">';
	t+='                 <h3>&nbsp;</h3>';
	t+='                 <div class="backpack-bogus-module">&nbsp;</div>';
	t+='                 <div class="backpack-module-footer">&nbsp;</div>';
	t+='               </div>';
	t+='               <div id="partners-module" class="backpack-module">';
	t+='                 <h3>&nbsp;</h3>';
	t+='                 <div class="backpack-module-data" style="height:146px;">&nbsp;</div>';
	t+='                 <div class="backpack-module-footer">&nbsp;</div>';
	t+='               </div>';
        t+='             </div>';
	t+='             <div id="backpack-corners"> <!-- drop-shadow... -->';
	//t+='              <img src="img/bot-close.gif" id="bk-bottom-close"/>';
	t+='             </div>';
	t+='             <div id="mycisco-infoHover" style="display:none;">'+cdc.local.wpx.BACKPACK_DISCOVERY_TOOLTIP+'</div>';
        t+='           </div>';
        t+='           <div id="mycisco-discovery">';
        t+='             <div id="mycisco-discovery-top"></div>';
        t+='             <div id="mycisco-discovery-tooltip">';
        t+=                cdc.local.wpx.BACKPACK_DISCOVERY_TOOLTIP;
        t+='               <div id="mycisco-discovery-bottom">' + cdc.local.wpx.BACKPACK_DISCOVERY_CLICK_MESSAGE + '</div>';
        t+='             </div>';
        t+='           </div>';
	t+='         </div>';
	t+='       </td>';

	jQuery('.nav-container tr').append(t);

	jQuery('#mycisco').hover(function(){jQuery(this).addClass('mh');},function(){jQuery(this).removeClass('mh');});

	jQuery.blockUI.defaults.overlayCSS = {
		backgroundColor: '#999',
		opacity: '0.3'
	};

	jQuery('#backpack').block('<div><img alt="" src="/web/fw/i/spinner.gif"/></div>', {
		'backgroundColor':'',
		'width':'80%',
		'padding':'130px 0px 0px 23px'
	});
	var pinned = global_extractCookieChip('bp_session','pinned');
	if (pinned == 'true'){
		jQuery('#backpack').show();
		jQuery('#mycisco').addClass("open");
		jQuery("#backpack").addClass('pinned');
		jQuery(cdc.backpack.setup);
	}
	else {
		jQuery('#mycisco-anchor').click(cdc.backpack.setup);
		//setup discovery and mycisco info hovers
		var tempCallback = function(){
                        // Set up cluetip to not cause flashing of flash images in FF
                        jQuery (document.body).prepend ('<div id="cdc-cluetip-wrapper"></div>');
                        jQuery.cluetip.setup({insertionElement: '#cdc-cluetip-wrapper'});
			if(!jQuery.browser.msie){
			//setup info hover
				jQuery('#mycisco-anchor').cluetip({
				    width:200,
				    local:true,
				    arrows:true,
				    showTitle:false,
				    positionBy:'bottomTop',
				    leftOffset: 15,
				   // sticky:true,
				    mouseOutClose:true,
				    clickThrough:true,
				    closeText:'',
				    cluetipClass: 'cdc',
				    topOffset:20,
				    cluezIndex:1000
			         });
			}
		         //discovery logic
                        if (cdc.backpack.isDiscoveryNotificationEnabled()) {
                            var hasOpened = global_extractCookieChip('bp_longterm','hasOpened');
                            if (!hasOpened){
                                   var pagesInSession = global_extractCookieChip('bp_session','pagesInSession');
                                   if (pagesInSession<3){
                                           pagesInSession++;
                                           global_addCookieChip('bp_session', 'pagesInSession', pagesInSession);
                                           //show discovery
                                           var DISCOVERY_FADEIN_DURATION_MSEC = 2000, DISCOVERY_STAY_MSEC = 6000, DISCOVERY_FADEOUT_MSEC = 2000;
                                           var doAfterFadeIn = function () {
                                               var fadeOutTimer = null;
                                               jQuery(this).hover (
                                                   function () {
                                                       if (fadeOutTimer) {
                                                           clearTimeout (fadeOutTimer);
                                                       }
                                                   },
                                                   function () {
                                                       jQuery(this).fadeOut();
                                                   }
                                               );
                                               fadeOutTimer = setTimeout(function(){
                                                   jQuery('#mycisco-discovery').fadeOut(DISCOVERY_FADEOUT_MSEC);
                                               },DISCOVERY_STAY_MSEC);
                                           };

                                           jQuery('#mycisco-discovery').fadeIn (DISCOVERY_FADEIN_DURATION_MSEC, doAfterFadeIn);

                                   }
                            }
                        }

			//take cluetip et all out of array
		};
		jQuery(function(){
			cdc.includer.loadJs([
				'/web/fw/lib/jquery.hoverIntent.minified.js',
				'/web/fw/lib/cluetip/jquery.cluetip.js'
			],{callback:tempCallback});
			var ss = document.createElement('link');
			ss.setAttribute('rel', 'stylesheet');
			ss.setAttribute('type', 'text/css');
			ss.setAttribute('href', '/web/fw/lib/cluetip/cluetip.css');
			document.getElementsByTagName('head')[0].appendChild(ss);
		});
	}

        // Add a listener to close the backpack if clicked outside in unpinned state
        jQuery (document).click (function(e) {
            // Check that the click is not within the backpack or on the nav bar
            var eltIsInBackpack = function (elt) {
                while (elt) {
                    if (elt.id == "mycisco-anchor" || elt.id == "backpack-body") return true;
                    elt = elt.parentNode;
                }
                return false;
            }
            var backpackIsPinned = global_extractCookieChip('bp_session','pinned');
            var backpackIsShown  = jQuery("#backpack").css('display') != "none";
            if (backpackIsShown && !backpackIsPinned && !eltIsInBackpack (e.target)) {
                cdc.backpack.toggleBackpack(e);
            }
        });
};

cdc.backpack = {
	setup: function (){

		// show spinner state if not yet shown
		if (jQuery('#backpack').css('display') == 'none'){
			cdc.backpack.toggleBackpack();
		}
		jQuery('#mycisco-anchor').unbind();
		//jQuery('#mycisco-anchor, #bk-bottom-close').click(cdc.backpack.toggleBackpack);
		document.getElementById('backpack-corners').onclick = cdc.backpack.toggleBackpack;
		document.getElementById('mycisco-anchor').onclick = cdc.backpack.toggleBackpack;
		cdc.includer.loadJs(cdc.backpack.includes, {callback: function () {
                    // Set up cluetip to not cause flashing of flash images in FF^M
                    jQuery (document.body).prepend ('<div id="cdc-cluetip-wrapper"></div>');
                    jQuery.cluetip.setup({insertionElement: '#cdc-cluetip-wrapper'});
                }});

		var ss = document.createElement('link');
		ss.setAttribute('rel', 'stylesheet');
		ss.setAttribute('type', 'text/css');
		ss.setAttribute('href', '/web/fw/lib/cluetip/cluetip.css');
		document.getElementsByTagName('head')[0].appendChild(ss);

		//because it's sometimes a click handler on an a that goes nowhere...
		return false;
	},
	toggleBackpack:function(evt){

		if (jQuery('#backpack').css('display') != 'block'){
			global_addCookieChip('bp_longterm','hasOpened','true');
			jQuery('#backpack').slideDown();
			jQuery('#mycisco').addClass("open");
			jQuery('#cluetip').hide();
			jQuery('#mycisco-discovery').hide();
		}
		else {
			jQuery('#backpack').slideUp();
			jQuery('#mycisco').removeClass("open");
			jQuery('#cluetip').hide();
		}
		return false;
	},
	includes: [
		'/web/fw/lib/jquery.hoverIntent.minified.js',
 		'/web/fw/lib/jquery.bgiframe.min.js',
		'/web/fw/lib/cluetip/jquery.cluetip.js',
		'/web/fw/lib/jqmodal.js',
		'/web/fw/w/backpack/backpack.js'
	],
	//"testInitialUrl": "http://cdc-site-dev.cisco.com:2424/backpack_dev/data/initial.json",
	"serviceScript":  '/cisco/web/cdc/samba/backpack'
};

cdc.backpack.serverHostname = 'http://www.cisco.com';
if (location.href.match(/http:\/\/[^\/]*\/web/)){
	cdc.backpack.serverHostname = '';
}
else if (location.href.match(/http:\/\/[^\/]*\/en/)){
	cdc.backpack.serverHostname = '';
}
else if (location.href.match(/http:\/\/[^\/]*\/cisco/)){
	cdc.backpack.serverHostname = '';
}

cdc.backpack.isDiscoveryNotificationEnabled = function () {
    return false;
}


if (typeof(cdc.local) == "undefined") cdc.local = new Object();
if (typeof(cdc.local.wpx) == "undefined") cdc.local.wpx = new Object();
cdc.local.wpx.BACKPACK_MYCISCO_LINKTEXT = "My Cisco";
cdc.local.wpx.BACKPACK_MYCISCO_TOOLTIP = "Easily access your personalized content anywhere on Cisco using My Cisco.";
cdc.local.wpx.BACKPACK_DISCOVERY_TOOLTIP = "Easily access your personalized content anywhere on Cisco using My Cisco.";

cdc.local.wpx.BACKPACK_SYSTEM_ERROR_TITLE         = "My Cisco System Error";
cdc.local.wpx.BACKPACK_SYSTEM_ERROR_TEXT          = 'Try again later; if the problem persists, contact <a href="http://forums.cisco.com/eforum/servlet/viewsflash?cmd=showform&pollid=cdcweb01!mycisco">Cisco Customer Support</a>.';
cdc.local.wpx.BACKPACK_SYSTEM_ERROR_BUTTON_TEXT   = "OK";

cdc.local.wpx.BACKPACK_SYSTEM_WARNING_TITLE       = "My Cisco System Warning";
cdc.local.wpx.BACKPACK_SYSTEM_WARNING_TEXT        = 'Try again later; if the problem persists, contact <a href="http://forums.cisco.com/eforum/servlet/viewsflash?cmd=showform&pollid=cdcweb01!mycisco">Cisco Customer Support</a>.';
cdc.local.wpx.BACKPACK_SYSTEM_WARNING_BUTTON_TEXT = "OK";

cdc.local.wpx.WEBEX_SPACES_WARNING_ADDING_FILE    = "Adding a file with the same name will replace the original.";
cdc.local.wpx.BACKPACK_DISCOVERY_CLICK_MESSAGE    = "Click the arrow to open";


if(jQuery.browser.msie){
	document.execCommand("BackgroundImageCache",false,true);
}


/*
 * END /web/fw/w/backpack/frag_global_backpack.js
 */
if (typeof(cdc)           == "undefined") { cdc           = {}; }
if (typeof(cdc.includer)  == "undefined") { cdc.includer  = {}; }
if (typeof(cdc.includer.alreadyInPage) == "undefined") { cdc.includer.alreadyInPage = []; }
cdc.includer.alreadyInPage.push('/web/fw/lib/jquery.js'); // added by bundler script
cdc.includer.alreadyInPage.push('/web/fw/j/util.js'); // added by bundler script
cdc.includer.alreadyInPage.push('/web/fw/j/search_fragment.js'); // added by bundler script
cdc.includer.alreadyInPage.push('/web/fw/w/includer.js'); // added by bundler script
cdc.includer.alreadyInPage.push('/web/fw/lib/jquery.blockUI.js'); // added by bundler script
cdc.includer.alreadyInPage.push('/web/fw/w/backpack/frag_global_backpack.js'); // added by bundler script
/* MANIFEST:
 *   /web/fw/lib/jquery.js (unknown version)
 *   /web/fw/j/util.js 1.7 
 *   /web/fw/j/search_fragment.js 1.4 
 *   /web/fw/w/includer.js 1.9 
 *   /web/fw/lib/jquery.blockUI.js 1.33  (09/14/2007)
 *   /web/fw/w/backpack/frag_global_backpack.js 1.6 
 */
