/**
 * global.js
 * $Revision: 1.60 $
 *
 *  global.js -- aggregated and minified
 *  DO NOT EDIT THIS FILE -- edit the individual files and rebuild
 *
 * Writes and supports global javascript functions
 * 
 *   (c) 1992-2010 Cisco Systems, Inc. All rights reserved.
 *   Terms and Conditions: http://cisco.com/en/US/swassets/sw293/sitewide_important_notices.html'
 * 
 * 
 *   (c) 1992-2010 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 (MD5: b341ba84bdb83c0652778fd7115a2e6e)
 *      /web/fw/j/util.js 1.21.4.1 
 *      /web/fw/j/cdc.cookie.js 1.2.6.1 
 *      /web/fw/j/deprecated.js 1.2 
 *      /web/fw/j/search_fragment.js 1.11 
 *      /web/fw/w/includer.js 1.20 
 *      /web/fw/lib/jquery.blockUI.js 1.33  (09/14/2007)
 *      /web/fw/w/backpack/frag_global_backpack.js 1.12.8.1 
 *      /web/fw/lib/jquery.hoverIntent.minified.js (MD5: cdfbb5ac7cab81d0418ca43dfc9e04aa)
 *      /web/fw/lib/jquery.bgiframe.min.js 2.1.1
 *      /web/fw/lib/cluetip/jquery.cluetip.js 0.9.8  (05/22/2008)
 *      /web/fw/j/jsTemplate.js 1.3 
 *      /web/fw/lib/jquery.pngFix.js 1.0, 31.05.2007
 *      /web/fw/lib/jquery.color.js (MD5: da36ed96af5815ffe1bd8fc38b8e194d)
 *      /web/fw/lib/jqmodal.js 06/22/2008 +r12
 *      /web/fw/w/modals/modals.js 1.2 
 *      /web/fw/m/liveManager.min.js (MD5: 6fce899234ed828b681dc29b05729c2c)
 *      /web/fw/lo/sso.js 1.2.2.5 
 */

/*!
 * 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: 2011/02/04 23:07:33 $
 * $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.21.4.1 
 */

if (typeof (cdc) == "undefined") cdc = new Object();
if (typeof (cdc.util) == "undefined") cdc.util = new Object();
/**
 * ensureNamespace: Make sure that the name space with the specified name is available.
 * For example: <code>cdc.util.ensureNamespace ("cdc.partner.portlet")</code> ensures that the namespace
 * <code>cdc.partner.portlet</code> is valid. This function simply declares global objects with the appropriate
 * keys specified in them; for example, the call <code>cdc.util.ensureNamespace ("cdc.partner.portlet")</code>
 * is equivalent to the following code fragment:
 * <code>
 *    if (typeof (cdc) != "object") window.cdc = new Object();
 *    if (typeof (cdc.partner) != "object") window.cdc.partner = new Object();
 *    if (typeof (cdc.partner.portlet) != "object") window.cdc.partner.portlet = new Object();
 * </code>
 * @param namespaceStr the namespace specification
 *
 */
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];
    }
}

// skeleton debug framework
if (typeof cdc.debug == "undefined") cdc.debug = {};
cdc.debug.log   = function() {};
cdc.debug.dump  = function() {};
cdc.debug.alert = function() {};

/**
 * openCdcPopup : Opens up a child window to developer supplied dimmensions
 * @param {Object/String} url An object containing configuration settings for the child window
 * @param {Integer} width (optional)
 * @param {Integer} height (optional)
 */
cdc.util.openCdcPopup = function (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;
};


// Grabs a parameter from the URL.  Returns an empty
// string if parameter does not exist.
cdc.util.getParameter = function(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;
};



/*---------------------------------------------------------
  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" );

/* ---------------------------------------------------------------
        Search box -- Function to clear the word Search
   when you go into the field. Could be used for other
   default text
   --------------------------------------------------------------- */

cdc.util.checkClear = function(input,defaultPhrase) {
  if (input.value == defaultPhrase) input.value = "";
  if (input.id == "searchPhrase") {
    if (!document.getElementById("search-drop-down")){
      setupSearch();
    }
    if (document.getElementById("search-drop-down")){
      showSuggestionsContainer();
    }
  }
};




// test src url before showing image
// invoke with: onload="cdc_display_image_when_loaded(this,'my_source_url.jpg');"
cdc.util.displayImageWhenLoaded = function(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#
cdc.util.cacheBust = function (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();
cdc.util.randomNumber = function(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]?iaPathArray[1]:cdcSiteArea;
         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
   ------------------------------------------------------------ */

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 () {
   if ((window.location.host == 'cisco.com')||(window.location.host == 'www.cisco.com')||(window.location.host == 'www-test.cisco.com')){
      var url = "https://fedps.cisco.com/idp/startSSO.ping?PartnerSpId=https://fedam.cisco.com&IdpAdapterId=fedsmidpCCO&TargetResource=http%3A//www.cisco.com/cisco/psn/web/site/collab/sign.html";
   }
   else {
      var url = "https://fedps-stage.cisco.com/idp/startSSO.ping?PartnerSpId=pfoam&IdpAdapterId=fedsmidpCCO&TargetResource=http%3A//cepx-active-stage1.cisco.com/cisco/psn/web/site/collab/sign.html";
   }
   if (global_getCookie("SMSESSION")!='') {
      if (global_getCookie("LtpaToken")==''||global_getCookie("cdc_ltpa_timeout")=='') {
         document.tempImg = new Image();
         document.tempImg.src = url;
         /*
         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);
         }
      }
   }
}
  */

/**
 * isAuthenticated: Returns user authentication status, decoupled from direct Cookie value. For use in Universal Tagging integration points and other 3rd party tools.
 *
 * Example:
 *    var userStatus = cdc.util.isAuthenticated();
 *
 */
cdc.util.isAuthenticated = function () {
	var loggedInCookieVal = cdc.cookie.getCookie('SMSESSION');
    var userAuthStatus = null;
    if ( loggedInCookieVal && loggedInCookieVal != '' && loggedInCookieVal != 'LOGGEDOFF'){
    	userAuthStatus = true;
    }
    else {
    	userAuthStatus = false;
    }
    return userAuthStatus;
}
/**
 * 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.addCorners - takes the jQuery selector string to hunt for as required input.
 * then adds spans to put the corners in
 * css needs to be written separately to specify what images to use for corners and how to position them
 */
cdc.util.addCorners = function (myselect,doDiv) {
    if (doDiv) {
       jQuery(myselect).append(
          '<div class="ctl"></div><div class="ctr"></div><div class="cbl"></div><div class="cbr"></div>'
       );
    }
    else {
       jQuery(myselect).prepend('<span class="cl-top-corners"><span></span></span>').append('<span class="cl-bottom-corners"><span></span></span>');
    }
}



/**
 * formatString: A simple string formatting utility
 *
 * Example:
 *    var fName = "Joe", lName = "Smith";
 *    var formatted = cdc.util.formatString ("Dear {0} {1}", fName, lName);
 */
cdc.util.formatString = function (formatStr) {
    var args = arguments.length > 1 ? Array.prototype.slice.call (arguments, 1) : [];
    var str = formatStr.replace (/\{\d+\}/g, function (match) {
        var index = parseInt (match.substring (1, match.length-1));
        return args.length > index ? args[index] : match;
    });
    return str;
};


// bam adaptive/targeted media
cdc.bam = {};
cdc.bam.mediaCallback = function(data){
   jQuery(data.domId).show();
   jQuery(data.domId).html(data.blob);
   data.readyCallback();
};


/* *** For Newsfeeds, code used by N05v17 can be used by others *** */
   cdc.util.ensureNamespace('cdc.newsfeed');

   cdc.newsfeed.renderNews = function (json) {
      alert("cdc.newsfeed.renderNews() has not been defined by a consumer! Specify for your own component incoming json: " + json);
   }

   cdc.util.ensureNamespace('cdc.homepage.newsfeed');
   cdc.homepage.newsfeed.renderNews = function (json) { cdc.newsfeed.renderNews(json); }



// why is this here and not somewhere else?
cdc.mru = {
   serviceHost: "",
   serviceUrl: "/cisco/web/cdc/psa/mru?command=update&callbackFunctionName=somevalue",
   // -- Special need for server-side gzip support --^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ (Without this parameter, certain web clients will break when the content is gzipped)
   // Rant: This really should have been handled by said web client, but that client is breaking HTTP protocol. Oh well.
   timeOutMsecs: 250,
   makeMruRequest: function(anchor,args) {

      var updateUrl = cdc.mru.serviceHost + cdc.mru.serviceUrl;
      if (args){
         updateUrl += args;
      }
      else if (anchor.mruExpando){
         updateUrl += anchor.mruExpando;
      }
      else if (anchor.rel) {
         updateUrl += anchor.rel;
      }

      var serviceReturnUrl = anchor.href;
      var timeoutUrl = anchor.href;
      if (cdc.debug.on){
         timeoutUrl += "?timeout";
         serviceReturnUrl += "?serviceReturn";
      }
      var loadHandler = function(){window.location.href=serviceReturnUrl;};
      cdc.mru.tempDoc = document.createElement('iframe');
      document.getElementById('framework-footer').appendChild(cdc.mru.tempDoc);
      if (cdc.mru.tempDoc.attachEvent){
         cdc.mru.tempDoc.attachEvent('onload', loadHandler);
      }
      else {
         cdc.mru.tempDoc.onload = loadHandler;
      }
      cdc.mru.tempDoc.src = updateUrl;
      jQuery(cdc.mru.tempDoc).hide();

      setTimeout("window.location.href='" + timeoutUrl+"'", cdc.mru.timeOutMsecs);
      return false;
   }
};


//!!!!!!important!!!! this is an override for QA testing!!!! REMOVE FOR PROD USE!!!!
cdc.mru.timeOutMsecs = 50000;

cdc.util.is1x = (window.location.href.indexOf("/en/US/") >1 );
cdc.util.campPlatforms = new Array ("tools.cisco.com","tools-dev.cisco.com","tools-stage.cisco.com","apps.cisco.com","apps-dev.cisco.com","apps-stage.cisco.com","/cgi-bin/","/pcgi-bin/");
cdc.util.isCamp = false;
for (platform in cdc.util.campPlatforms) {
    if (window.location.href.indexOf(cdc.util.campPlatforms[platform]) >1 ) {
        cdc.util.isCamp = true;
        break;
    }
}

if ( cdc.util.is1x || cdc.util.isCamp ) {
    jQuery(document).ready(function() {
        var loggedInCookie = global_getCookie('SMSESSION');
      if ( loggedInCookie && loggedInCookie != '' && loggedInCookie != 'LOGGEDOFF'){
         jQuery(".nav-secondary :contains(Register)").prev().remove();
         jQuery(".nav-secondary :contains(Register)").remove();
         jQuery(".nav-secondary a.login").replaceWith('<span class="loggedin">Logged In</span>');
      }
    });
}



/**
 * Replaces 1.x footer copyright current year with id specified year.
 * Will only replace inside correctly id'd item, in this case a span tag.
 * This is only a turn of the year band-aid.
 * "footer_nav_legal.xsl" must still be updated.
*/
jQuery(document).ready(function() {
   var copyrightYear = '2010';
   if (jQuery("#footer-copyright-year").html() < copyrightYear) {
      jQuery("#footer-copyright-year").html(copyrightYear);
   }
});
jQuery(document).ready(function(){
    jQuery("#skiplinks").addClass('skiplinks').removeClass('skiplinkShow');
    jQuery("#skiplinks a").focus(function() { jQuery("#skiplinks").addClass('skiplinkShow').removeClass('skiplinks');});
    jQuery("#skiplinks a").blur(function() { jQuery("#skiplinks").addClass('skiplinks').removeClass('skiplinkShow');});
});


document.write('<style>.showForJs{display:block;}.showInlineForJs{display:inline;}.hideForJs{display:none;}</style>');
/*
 * END /web/fw/j/util.js
 */
/*!
 * BEGIN /web/fw/j/cdc.cookie.js
 */
 /**
 *  Cookie related functions
 *  cookie.js
 *  Revision: 1.2.6.1 
 */

if (typeof(cdc) == "undefined") { cdc = {}; }

// skeleton debug framework
if (typeof cdc.debug == "undefined") cdc.debug = {};
cdc.debug.log   = function() {};
cdc.debug.dump  = function() {};
cdc.debug.alert = function() {};

/**
cookie manipulation functions
NOTE: deprecated functions have been aliased to these functions in deprecated.js
TODO: update files that call this lib so we can remove support for legacy function signatures
*/
cdc.cookie = {

	/**
	sets a cookie. days and msecs are days and milliceconds from now,
	respectively. if neither days or msecs are given, defaults to
	expire at end of browser session.
	@param args {
		cookieName: string
		cookieValue: string
		days: int (optional)
		msecs: int (optional, overrides days)
		path: string (optional) (default=/)
		domain: string (optional)
	}
	*/
	setCookie: function(args) {

		// LEGACY - support old signature (string, string[, int])
		if (!args.cookieName) {
			args = { cookieName: args, cookieValue: arguments[1] }
			if (arguments.length > 2) { args.days = arguments[2]; }
		}

		var expireStr = '';
		var pathStr = '';
		var domainStr = '';
		var msecs = parseInt(args.msecs);
		if (isNaN(msecs) && args.days) {
			msecs = args.days * 24 * 60 * 60 * 1000;
		}

		if (!isNaN(msecs)){
			var ex=new Date();
			ex.setTime(ex.getTime()+msecs);
			expireStr = "; expires="+ex.toUTCString();
		}
		if (args.path){ pathStr = "; path=" + args.path + ";" }
		else { pathStr = "; path=/;" }
		if (args.domain) { domainStr = "; domain=" + args.domain; }
		try {
			document.cookie=args.cookieName
			 + "="
			 + escape(args.cookieValue)
			 + expireStr
			 + pathStr
			 + domainStr;
		} catch (e) {
		 	return false;
		}
		return true;
	},

	/**
	gets requested cookie.
	@param args { cookieName: string }
	*/
	getCookie: function(args) {

		// LEGACY - if args is a string and not an object
		if (!args.cookieName) {
			args = { cookieName: args };
		}

		var dict = cdc.cookie.unpackParamString(document.cookie, /\s*;\s*/);
		return dict[args.cookieName] || "";
	},

	/**
	deletes requested cookie.
	args are identical to setCookie, except that expiry is forced
	to a negative number, effectively deleting the cookie.
	*/
	deleteCookie: function(args){
		// mutating args obj might mess things up
		// if caller reuses it for other things
		var dArgs={};
		for(var name in args){
			if(args.hasOwnProperty(name)){
				dArgs[name]=args[name];
			}
		}
		dArgs.msecs = dArgs.days = -1;
		dArgs.cookieValue = '';
		return cdc.cookie.setCookie(dArgs);
	},

	/**
	@param days number of days from now to count milliseconds for
	*/
	daysFutureToTimeMS: function(days) {
		if (isNaN(parseInt(days))) { return 0; }
		var mydate = new Date();
		mydate.setTime(mydate.getTime()+((days)*24*60*60*1000));
		var ms = Date.parse(mydate);
		return ms;
	},

	// ###################################################################################
	// COOKIE CHIPS

	/**
	sets value of given cookie chip.
	to avoid naming collisions, cookie chips allow
	multiple name/value pairs within a single cookie.
	@param args {
		cookieName: string
		chipName: string
		chipValue: string
	}
	*/
	addCookieChip: function(args) {

		// LEGACY - support old signature (string, string, string)
		if (!args.cookieName) {
			args = { cookieName: args, chipName: arguments[1], chipValue: arguments[2] }
		}

		var str = cdc.cookie.getCookie(args),
			dict = cdc.cookie.unpackParamString(str);
		dict[args.chipName] = args.chipValue;
		cdc.cookie.setCookie({
			cookieName: args.cookieName,
			cookieValue: cdc.cookie.packParamString(dict),
			days: 366
		});
	},

	/**
	returns value of requested cookie chip
	@see cdc.cookie.addCookieChip
	@param args {
		cookieName: string
		chipName: string
	}
	*/
	extractCookieChip: function(args) {

		// LEGACY - support old signature (string, string)
		if (!args.cookieName) {
			args = { cookieName: args, chipName: arguments[1] }
		}

		var str = cdc.cookie.getCookie(args),
			dict = cdc.cookie.unpackParamString(str);
		return dict[args.chipName] || "";
	},

	/**
	deletes value of cookie chip
	@see cdc.cookie.addCookieChip
	@param args {
		cookieName: string
		chipName: string
	}
	*/
	crumbleCookieChip: function(args) {

		// LEGACY - support old signature (string, string)
		if (!args.cookieName) {
			args = { cookieName: args, chipName: arguments[1] }
		}

		var str = cdc.cookie.getCookie(args),
			dict = cdc.cookie.unpackParamString(str),
			removed = dict.hasOwnProperty(args.chipName),
			pStr;
		delete dict[args.chipName];
		pStr = cdc.cookie.packParamString(dict);

		// delete the cookie if it's empty
		if (!pStr) {
			cdc.cookie.deleteCookie(args);
		} else {
			cdc.cookie.setCookie({
				cookieName: args.cookieName,
				cookieValue: pStr,
				days: 366
			});
		}
		return removed;
	},

	/**
	takes a dictionary, returns a string
	e.g. {"foo":"bar","foo 2":"bar 2"} => "foo=bar&foo%202=bar%202"
	@param sep optional separator, defaults to "&"
	*/
	packParamString:function(dict,sep){
		sep=sep||'&';
		var frags=[];
		for(var name in dict) {
			if(!dict.hasOwnProperty(name)){continue;}
			frags.push(escape(name)+'='+escape(dict[name]));
		}
		return frags.join(sep);
	},

	/**
	takes a string, returns a dictionary
	e.g. "foo=bar&foo%202=bar%202" => {"foo":"bar","foo 2":"bar 2"}
	@param sep optional separator, defaults to "&" (can be string or regexp)
	*/
	unpackParamString: function(str,sep){
		sep=sep||'&';
		var frags=str.split(sep),
			dict={},
			frag,
			ioe,
			name,
			val,
			i;
		for(i=0; i<frags.length && (frag=frags[i]); i++){
			ioe=frag.indexOf('='); // expecting "foo=bar"
			if(ioe<0){continue;}
			name=unescape(frag.substring(0,ioe));
			val=unescape(frag.substring(ioe+1));
			dict[name]=val;
		}
		return dict;
	}
}

/**
 *  New User cookie for Portal Enhancements
 *	  -- determines whether new user content will be available to the user
 */
cdc.cookie.newUser = {

	newUserEndTime: 168, // sets expiration in hour increments
	cookieName: 'cdc.cookie.newUser', // sets name of cookie used

	updateUserVal: function() {
		// checks for existing cookie and adjusts value if necessary
		var uVal;
		var newUser = cdc.cookie.getCookie({cookieName:this.cookieName});
		if (!newUser) {
			// no cookie set; initialize new cookie
			uVal = this.setValidCookie();
		} else {
			var today = new Date();
			var now = today.getTime();
			if (newUser == 0) {
				// new user time already set to expired; no cookie mod necessary
				uVal = 0;
			} else if (newUser < now) {
				// new user time has expired since last visit; set cookie to 0
				uVal = this.endNewUser();
			} else {
				// cookie already set and still valid; no cookie mod necessary
				uVal = newUser;
			}
		}
		return uVal;
	},

	setValidCookie: function() {
		// creates new cookie with expiration beginning from now
		var today = new Date();
		var now = today.getTime(); // milliseconds
		var expireDate = now + (1000 * 60 * 60 * this.newUserEndTime); // set remaining hours based on expireTime set above
		var expireInMsecs = 1000 * 60 * 60 * 24 * 365 * 25; // expire actual cookie in 25 years
		cdc.cookie.setCookie({cookieName:this.cookieName,cookieValue:expireDate,msecs:expireInMsecs});
		return expireDate;
	},

	endNewUser: function() {
		// sets existing cookie value to 0, indicating user is no longer new
		var endVal = 0;
		var expireInMsecs = 1000 * 60 * 60 * 24 * 365 * 25; // expire actual cookie in 25 years
		cdc.cookie.setCookie({cookieName:this.cookieName,cookieValue:endVal,msecs:expireInMsecs});
		return endVal;
	}

};

// check for cdc.cookie.newUser and set if necessary
jQuery(document).ready(function() {
	cdc.cookie.newUser.updateUserVal();
});

/*
 * END /web/fw/j/cdc.cookie.js
 */
/*!
 * BEGIN /web/fw/j/deprecated.js
 */
/**
 *  old functions/aliases
 *  deprecated.js
 *  Revision: 1.2 
 */



/* aliases */

function openChildWindow( appurl, windowname ) {
  cdc.util.openCdcPopup({address:appurl,width:798,height:547,top:25,left:0,windowName:windowname});
}
function global_openCdcPopup(url, width, height) {
  return cdc.util.openCdcPopup(url,width,height);
}
function getParameter(param) {
  return cdc.util.getParameter(param);
}
function global_daysFutureToTimeMS (days) {
  return cdc.cookie.daysFutureToTimeMS(days);
}
function global_setCookie(name, value, days) {
  return cdc.cookie.setCookie(name, value, days);
}
function global_getCookie(name) {
  return cdc.cookie.getCookie(name);
}
function global_extractCookieChip(cookiename,parmname) {
  return cdc.cookie.extractCookieChip(cookiename,parmname);
}
function global_crumbleCookieChip(cookiename, parmname) {
  return cdc.cookie.crumbleCookieChip(cookiename,parmname);
}
function global_addCookieChip(cookiename, newname, newvalue ) {
  return cdc.cookie.addCookieChip(cookiename,newname,newvalue);
}
function checkClear(input,defaultPhrase) {
  return cdc.util.checkClear(input,defaultPhrase);
}
function cdc_display_image_when_loaded(img,url){
   return cdc.util.displayImageWhenLoaded(img,url);
}

function cdc_cache_bust (url,param){
   return cdc.util.cacheBust(url,param);
}

function cdc_rand_num(limit){
   return cdc.util.randomNumber(limit);
}

cdc.util.setCookie = function (a) {
   return cdc.cookie.setCookie(a);
}

function global_getCookie(name) {
  return cdc.cookie.getCookie({cookieName:name});
}


function global_setCookie(name, value, days) {
  if (days) {
    return cdc.cookie.setCookie({cookieName:name,cookieValue:value,msecs:cdc.cookie.daysFutureToTimeMS (days)});
  } else {
    return cdc.cookie.setCookie({cookieName:name,cookieValue:value});
  }

}
/* really deprecated */




// 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();
}

// this is deprecated
function closeWindow() {
  self.close();
}


// this is deprecated
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();
  }
}

//this is deprecated
function openMessage(str) {
  alert(str);
}

//this is deprecated
// 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;
}

// this is deprecated
// 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;
   }
}

//this is deprecated
// 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;
}

//this is deprecated
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;
  }
}

// this is deprecated
// functions used to register functions that execute on the global onClick event
var globalBodyOnClickList = new Array();

// this is deprecated
//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;
}

// this is deprecated
//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]();
    }
}

// this is deprecated
function addToWindowOnLoad(funct){
var oldOnload = window.onload;
if (typeof window.onload != 'function') {
window.onload = funct;
} else {
window.onload = function() {
oldOnload();
funct();
        }
    }
}


// this is deprecated
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";
      }
   }
}



// this is deprecated

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();
}


//this is deprecated
/* ---------------------------------------------------------------

   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)
   }
}
/*
 * END /web/fw/j/deprecated.js
 */
/*!
 * BEGIN /web/fw/j/search_fragment.js
 */
/**
 *  Support functions for Search
 *  fragment_search.js
 *  Revision: 1.11 
 */

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() {

	//serialize the form parameters via jQuery and append the new value, then submit via query string.
    var newQuery = jQuery("#" + this.__form.id).attr("action") + "?" + jQuery("#" + this.__form.id).serialize() + "&autosuggest=true";
    //call any onSubmit handlers. Usually metrics.
    // first check to see if onsubmit handler is present.
    if (typeof this.__form.onsubmit !== 'undefined') {
    	this.__form.onsubmit();
    }
    //pass form paramters via query string
    window.location=newQuery;

};

// 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);
}

/* No typeahead if:
 *   - cdc.search.noTypeAhead is 'true'
 *   - page is from newsroom or investor
 *   - page body tag does not have an id of 'libra'
 */

function setupSearch() {
   // no typeahead if cdc.search.noTypeAhead is 'true'
   if (cdc.search.noTypeAhead) {
      return;
   }

   // no typeahead in newsroom and investor
   var host = window.location.hostname.toLowerCase();
   if ((host.indexOf("newsroom.cisco.com") >= 0) || (host.indexOf("investor.cisco.com") >= 0)) {
      return;
   }

   // no typeahead if body id is not 'libra'
   var bodyId = document.body.id;
   if (!bodyId || bodyId != 'libra') {
      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.20 
 *
 * dependencies: jQuery
 *
 * (c) 1992-2009 Cisco Systems, Inc. All rights reserved.
 * Terms and Conditions: http://cisco.com/en/US/swassets/sw293/sitewide_important_notices.html
 */
var host = location.host;
if (typeof(cdc) == "undefined") cdc = {};
if (typeof(cdc.includer) == "undefined"){
	cdc.includer = {};
	if (typeof(cdc.includer.alreadyInPage) == 'undefined'){
		cdc.includer.alreadyInPage = [];
	}

/*
Property: cdc.includer.domainConfig

Description:
- Adding subdomain main array object in to cdc.includer.domainConfig. By default this array object contains 4 subdomains.
- Array Structure ['newsroom', 'tools', 'about',  'investor'].

*/

	cdc.includer.domainConfig = {
		subdomains:['newsroom', 'tools', 'about',  'investor']
	};

/*
Method: cdc.includer.addSubDomain()

Description:
-	addSubDomain() works with one param and this param could be string type or array type. It appends the subdomain in main array object of cdc.includer.domainConfig.subdomains.

Sample usages:
>	cdc.includer.addSubDomain('products');
>	cdc.includer.addSubDomain(['groups', 'services', 'products']);

Param:
-	This function using only one param called 'o'. This param contains the one array/string type of parameter to add the subdomains.

*/

	cdc.includer.addSubDomain = function(o){
		if (typeof o == "string") {
			o = [o];
		}

		if(o.length) {
			for(i in o){
				if(cdc.includer.domainConfig.subdomains.join().indexOf(''+o[i]) < 0) {
					cdc.includer.domainConfig.subdomains.push(o[i]);
				}
			}
		}
	}

/*
Method: cdc.includer.removeSubDomain()

Description:
-	removeSubDomain() works with one param and this param could be string type or array type. It appends/removes the subdomain in main array object of cdc.includer.domainConfig.subdomains.

Sample usages:
>	cdc.includer.removeSubDomain('tools');
>	cdc.includer.removeSubDomain(['tools', 'products', 'services']);

Param:
-	This function using only one param called 'o'. This param contains the one array/string type of parameter for remove the subdomains.

*/

	cdc.includer.removeSubDomain = function(o){
		if (typeof o == "string") {
			o = [o];
		}

		if(o.length) {
			for(i in o){
				if(cdc.includer.domainConfig.subdomains.join().indexOf(''+o[i]) > 0) {
					arrString = cdc.includer.domainConfig.subdomains.join('~');
					arrString = arrString.split('~');
					cdc.includer.domainConfig.subdomains = [];
					for(x in arrString){
						if(arrString[x] != o[i]){
							cdc.includer.domainConfig.subdomains.push(arrString[x]);
						}
					}
				}
			}
		}
	}


/*
Object : cdc.includer.widget{}

Description:
- This object contains the list of assets which we need to include on page.

*/
	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'
			]
		},

		// Note: Component Library code is now in /web/fw/w/cl/cl.js
		'_default':{
			js: [
				//'/web/fw/w/cl/cl.min.js'
				'/web/fw/w/cl/cl.js'
			]
		}
	};


/*
Method: cdc.includer.search()

Description:
- This function based on one object parameter <cdc.includer.widgets>. It reads the _default property of widget object to load CSS file in to DOM.

*/
	cdc.includer.search = function(widgets){
		for (id in widgets){
			if (id == '_default' || document.getElementById(id)){
				if (widgets[id]['css'] && widgets[id]['css'].length){
					cdc.includer.loadCss(widgets[id]['css']);
				}
				if (widgets[id]['js'] && widgets[id]['js'].length){
					cdc.includer.loadJs(widgets[id]['js'],
						{callback:widgets[id]['callback']}
					);
				}
				else if (widgets[id]['callback']){
					(widgets[id]['callback'])();
				}
			}
		}
	};


/*
Method: cdc.includer.uniquifyIncludes()

Description:
-

*/
	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]){
				var uncachedUrl = this[attrName].replace(/http:\/\/[^\/]*/,'');
				uncachedUrl = uncachedUrl.replace(/[\&\?]cacheReset=[0-9\-]*/,'');
				dedup[uncachedUrl]=0;
			}
		});
		for (var i=0;i<includes.length;i++){
			if (dedup[includes[i]]){
				deduped.push(includes[i]);
			}
		}
		return deduped;
	};


/*
Method: cdc.includer.loadCss()

Description:
- - This function has two parameters. includes parameter stores the loaction of CSS assets. This function checks DOM for CSS if CSS is alredy loaded then it wont load the CSS otherwise it load the CSS file into head section of HTML page through DOM.

*/
	cdc.includer.loadCss = function(includes,extraArgs){
		if (typeof includes == "string") {
			includes = [ includes ];
		}
		if (!extraArgs){
			extraArgs = {};
		}

		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]);
                        if (extraArgs.ids && extraArgs.ids[i]) {
				css.setAttribute('id', extraArgs.ids[i]);
                        }
			document.getElementsByTagName('head')[0].appendChild(css);
		}

	};

/*
Method: cdc.includer.Js()

Description:
-  This function has two parameters. includes parameter stores the loaction of JS assets. This function checks DOM for JS if JS file is alredy loaded then it won't load the JS otherwise it load the JS file into head section of HTML page through DOM.

*/
	cdc.includer.loadJs = function(includes,extraArgs){
		if (typeof includes == "string") {
			includes = [ includes ];
		}
		else {
		}

		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;
			}
		}

		var currentFile = includes.shift();
		var scriptNode = document.createElement('script');
		document.getElementsByTagName("head")[0].appendChild(scriptNode);
		scriptNode.language='javascript';
		if (extraArgs.ids && extraArgs.ids.length) {
			scriptNode.id = extraArgs.ids.shift();
		}

		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();};
			}
		}
		var src = currentFile;
		if (jQuery.browser.msie && !src.match(/noCacheBust/) && !extraArgs.noCacheBust){
                      src = cdc.includer.cacheBust(currentFile);
		}

		//if(cdc.includer.domainConfig.subdomains[0] == 'newsroom'){ host='newsroom.cisco.com'; }

/*

- Validation for subdomain & absolute URL's:
- Validating the assets path with root relative URL's and hostname with array subdomains before appending the http://www.cisco.com.

*/
		if((cdc.includer.domainConfig.subdomains.join().indexOf(''+host.replace('.cisco.com','')) != -1) && (src.indexOf('http') < 0)) {
			src = (document.location.protocol == 'http:')?'http://www.cisco.com'+src : 'https://www.cisco.com'+src;
		}

		scriptNode.src=src;
	};

	jQuery( function(){cdc.includer.search(cdc.includer.widgets)} );
}

/*
Method: cdc.includer.cacheBust()

Description:
- cache buster : puts a cache avoidance param on a url with a random number

Sample usages:
- cdc.includer.cacheBust('http://www.cisco.com');          = YourUrl?cacheReset=rand#
- cdc.includer.cacheBust('http://www.cisco.com','foo');    = YourUrl?foo=rand#
- cdc.includer.cacheBust('http://ng-prod1/image');         = YourUrl&cacheReset=rand#
- cdc.includer.cacheBust('http://cisco.com/edit.pl?a=3');  = YourUrl&cacheReset=rand#

*/
  cdc.includer.cacheBust = function(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.includer.cdcRandNum();
  };


/*
Method: cdc.includer.cdcRandNum()

Description:
- randum number generator
- input: takes param limit to set random max, default is 1000
- output: 'TimeInSeconds-RandNum'

Sample usages:
> invoke with: cdc.includer.randNum(50); or cdc_rand_num();

*/
  cdc.includer.cdcRandNum = function(limit){
    if (!limit) {limit = 1000};
    var sNum = Math.floor(Math.random()*limit)+1;
    var sTime = (new Date).getTime();
    var rNum = sTime+"-"+sNum;
    return rNum;
  };



if (typeof (cdc.util) == "undefined") cdc.util = {};

/*
Method: cdc.util.JsLoader()

Description:
-  there are four private methods of JsLoader.
- cdc.util.JsLoader.Load();
- cdc.util.JsLoader.loadOne();
- cdc.util.JsLoader.asuumeAlreadyLoaded();
- cdc.util.JsLoader._initialize();
- cdc.util.JsLoader._service();
*/

cdc.util.JsLoader = new function () {

    var _loadedUrls = null; // Map: loaded url -> 1, initially null to enable initialization
    var _pendingQueue = []; // Array: {url: pendingUrlString, callbacks: [ array of callbacks] }


    var _doLoad = function (jsUrls, callback, forceLoad, dataType) {
        if (_loadedUrls == null) _initialize();
        var _forceLoad = !!forceLoad;
        var _dataType = dataType;
        var processUrlAtIndex = function (jsUrls, index) {
            var addedCount = 0;
            if (index >= jsUrls.length) { // No more assets to load for this request
                if (typeof (callback) == "function") callback();
                return;
            }
            var url = jsUrls[index];
            if (typeof (_loadedUrls[url]) == "undefined" || _forceLoad) { // This asset is not yet loaded. Add it to the pending queue if needed.
                var ndx = index;
                var assetLoadedCallback = function () { processUrlAtIndex (jsUrls, ndx+1);  };
                var  pos = 0, m = _pendingQueue.length;
                for (; pos < m; pos++) {
                    if (_pendingQueue[pos].url === url) {
                        break;
                    }
                }
                if (pos >= m) { // This URL is not in the pending queue, so add it to the queue.
                    _pendingQueue.push ({ "url": url, "callbacks": [ assetLoadedCallback ], okToUseCache: true, dataType: _dataType });
                    addedCount = 1;
                } else { // This URL is already on the pending queue
                    _pendingQueue[pos].callbacks.push (assetLoadedCallback);
                }
            } else { // Already loaded, so ignore it and move on.
                addedCount += processUrlAtIndex (jsUrls, index+1);
            }
            return addedCount;
        };
        // Prime the pump
        jsUrls = (typeof (jsUrls) == "string") ? [ jsUrls ] : [].concat (jsUrls); // If it's an array, make a copy of it
        var queueWasEmpty = _pendingQueue.length <= 0;
        if (processUrlAtIndex (jsUrls, 0) > 0 && queueWasEmpty) {
            // The queue was initially empty, but I added stuff to it
            _service();
        }
        return this;
    };

	/*
Method: cdc.util.JsLoader.load()

Description:
-	Load the given list of JavaScript assets, in the order specified. If the callback is provided, call it after all the assets have been loaded. This
-	function takes care of multiple interleaved calls that might all specify common assets. If two callers specify assets in different orderings, the
-	ordering of the first such caller wins.
-	@param jsUrls an array of strings specifying JavaScript asset URLs
-	@param callback (optional) a function to call when all the specified assets have been loaded.
-	@param forceLoad (optional) boolean: true if the resource should be loaded even if it was already loaded earlier

*/
    this.load = function (jsUrls, callback, forceLoad) {
        if ((!jsUrls || jsUrls.length <= 0) && typeof (callback) == "function") {
            // No urls given, but callback specified, so the needed assets are (vacuously) loaded. So call the callback.
            callback();
            return;
        }
        _doLoad (jsUrls, callback, forceLoad, "script");
        return this;
    }



    // Load just one URL from a data service, with an optional parameter set. This method expects JSONP as the payload. This method caters to a common use case.

    this.loadOne = function (jsUrl, parameters, callback, forceLoad) {
        var url = jsUrl;
        if (parameters) {
            var separator = (jsUrl.indexOf ("?") > 0) ? "&" : "?";
            url += separator + jQuery.param (parameters);
        }
        return _doLoad ([ url ], callback, forceLoad, "json");
    };


    /*
     - Tell this loader to pretend that the given URLs are already loaded into the page, so they don't need to be reloaded.
     - @param jsUrls an array of asset URLs
     */
    this.assumeAlreadyLoaded = function (jsUrls) {
        jQuery.each (jsUrls, function (item) {
            _loadedUrls[item] = 1;
        });
    };

    // Private functions
    function _initialize () {
        // Remember the scripts loaded via explicit script tags
        _loadedUrls = {};
        jQuery("script").each (function (item) {
            var src = this.getAttribute ("src");
            if (src) _loadedUrls[src] = 1;
        });
    };

    function _service () {
        // Service one request, and invoke pseudo-recursively
        if (_pendingQueue.length >= 1) {
            var item = _pendingQueue[0];
            jQuery.ajax({
                type: "GET",
                url: item.url,
                dataType: item.dataType || "script",
                cache: item.okToUseCache,
                success: function (data) {
                    _loadedUrls[item.url] = 1;
                    _pendingQueue.shift();
                    for (var i = 0; i < item.callbacks.length; i++) {
                        item.callbacks[i]();
                    }
                    _service();
                }
            });
        }
    };

    return this;
};



/*
Method: cdc.includer.ServiceRequestQueue()

Description:
     - addRequest: Add a request for a data service.
     - @param url The URL of the service request
     - @param parameters the parameter set for the request: a map of strings to strings
     - @param callback the callback function to call when the request has been completed. This function will be called with the JSON data returned by the request.
     - @param okToUseCache (optional) a boolean value, set to true if the request may use an available cached version, i.e., a cache buster should be included; defaults to false
     - @param dataType  (optional) either "script" or "json" depending on the expected data type; defaults to "json"
     - This method is oriented towards a data service, hence its "okToUseCache" defaults to false.
*/

cdc.util.ServiceRequestQueue = function () {

    var _queue = [], _pending = false, _loadedUrls = {} /* For de-duplication of assets */;

    this.addRequest = function (url, parameters, callback, dataType, okToUseCache) {
        var dataTypeToUse = dataType  || "json";
        if (typeof (_loadedUrls[url]) == "undefined" || !okToUseCache) {
            _queue.push ({"url": url, "parameters": parameters, "callback": callback, "okToUseCache": !!okToUseCache, "dataType": dataTypeToUse});
            _loadedUrls[url] = 1;
            _service();
        }
    }


    // Return the number of requests currently in this queue.
    this.getQueueSize = function () {
        return _queue.length;
    }


    // Private functions
    function _service () {
        // Service one request, and invoke pseudo-recursively
        if (_queue.length >= 1 && !_pending) {
            _pending = true;
            var item = _queue[0];
            jQuery.ajax({
                type: "GET",
                url: item.url,
                data: item.parameters,
                dataType: item.dataType,
                cache: item.okToUseCache,
                success: function (data) {
                    item.callback (data);
                    _pending = false;
                    _queue.splice (0, 1);
                    _service();
                }
            });
        }
    }

};

/*
 * 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.60 2011/02/04 23:07:33 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 NextGenWeb Backpack framework
 *  frag_global_backpack.js
 *  Revision: 1.12.8.1 
 */

/* Global vars:
 *     cdc, global_addCookieChip, global_crumbleCookieChip, global_extractCookieChip, jQuery
 */

/* uncomment for jslint
function jQuery () {}
function global_addCookieChip() {}
function global_crumbleCookieChip() {}
function global_extractCookieChip () {}
var cdc = {util:{},local:{wpx:{}},backpack:{}};
*/

/*
 * - page has inlined script tag with call to cdc.util.initBackpack()
 * - that makes and attaches bp framework to page DOM
 * - also puts a click handler on bp framework that calls cdc.backpack.setup()
 * - cdc.backpack.setup() does several things including calling includer for backpack.min.js,
 *   with callback param of cdc.backpack.load()
 * - that retrieves json wrapped in cdc.backpack.buildBackpack()
 * - that builds modules out of incoming json data and attaches them to bp framework
 */

cdc.util.initBackpack = function(domID,parent,container){

   parent    = parent || 'tr';
   container = container || 'td';
   cdc.backpack.initInfo = {
      domID: domID,
      parent: parent,
      container: container
   };


//   cdc.util.sso();

   jQuery('#' + domID + ' ' + parent).append(
       '       <' + container + ' id="mycisco" class="mycisco" rel="#mycisco-infoHover"><a id="mycisco-anchor" href="#" rel="#mycisco-infoHover">'
      +             cdc.local.wpx.BACKPACK_MYCISCO_LINKTEXT + '</a>'
      + '         <div style="position:relative;">'
      + '           <div id="backpack">'
      + '             <div id="backpack-body">'
      + '               <span id="backpack-header-wrap">'
      + '               </span>'
      + '               <div style="height:469px" id="bp-temp"></div>'
      +'                <div id="bp-dragable"></div>'
      + '             </div>'
      + '             <div id="backpack-corners">'
      + '             </div>'
      + '             <div id="mycisco-infoHover" style="display:none;">'+cdc.local.wpx.BACKPACK_MYCISCO_TOOLTIP+'</div>'
      + '           </div>'
      + '           <div id="mycisco-discovery">'
      + '             <div id="mycisco-discovery-top"></div>'
      + '             <div id="mycisco-discovery-tooltip">'
      +                 cdc.local.wpx.BACKPACK_DISCOVERY_TOOLTIP
      + '               <div id="mycisco-discovery-bottom">' + cdc.local.wpx.BACKPACK_DISCOVERY_CLICK_MESSAGE + '</div>'
      + '             </div>'
      + '           </div>'
      + '         </div>'
      + '       </'+container+'>'
   );


   jQuery('#mycisco').hover(function(){jQuery(this).addClass('mh');},function(){jQuery(this).removeClass('mh');});

   jQuery.blockUI.defaults.overlayCSS = {
      backgroundColor: '#fff',
      opacity: '0'
   };

   jQuery('#backpack').block('<div><img alt="" src="/web/fw/i/loading-bar.gif"/></div>', {
      'backgroundColor':'',
      'width':'80%',
      'padding':'119px 0px 0px 22px'
   });

   var pinned = global_extractCookieChip('bp_session','pinned');
   if (pinned == 'true'){
      jQuery(cdc.backpack.setupCluetip);
      jQuery('#backpack').show();
      jQuery('#mycisco').addClass("open");
      jQuery(cdc.backpack.setup); // Backpack setup
   }
   else {
      jQuery('#mycisco-anchor').click(cdc.backpack.setup); // Backpack setup

      jQuery(function(){
         cdc.includer.loadJs(
            [
               '/web/fw/lib/jquery.hoverIntent.minified.js',
               '/web/fw/lib/cluetip/jquery.cluetip.js'
            ],
            {
               //setup discovery and mycisco info hovers
               callback: function(){
                  cdc.backpack.setupCluetip();
                  // ck: QC694-MCW
                  // if(!jQuery.browser.msie){
                     jQuery('#mycisco-anchor').cluetip(cdc.backpack.hoverArgs);
                  // }
                  cdc.backpack.setupDiscovery(this);
               }
            }
         );
         cdc.includer.loadCss(['/web/fw/lib/cluetip/cluetip.css']);
      });
   } // end else
}; // end cdc.util.initBackpack()

cdc.backpack = {
   serverHostname: 'http://www.cisco.com',
   serviceScript:  '/cisco/web/cdc/samba/backpack',

   MODULE_SERVICE_URL: '/cisco/web/backpackhandler?callback=?', //  Backpack customization services URL


   isDiscoveryNotificationEnabled: 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/lib/ui.core.js',
      '/web/fw/lib/ui.sortable.js',
      '/web/fw/w/cl/a00/a00v1.js',
      '/web/fw/w/backpack/backpack.min.js'
   ],

   hoverArgs: {
      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
   },

   setup: function (){
      // show spinner state if not yet shown
      if (jQuery('#backpack').css('display') == 'none'){
         cdc.backpack.toggleBackpack();
      }
      jQuery('#mycisco-anchor').unbind();
      jQuery("#backpack-corners,#mycisco-anchor").click(function(){
         cdc.backpack.changeHeaderText();
         if(!cdc.backpack.renameError){
            cdc.backpack.toggleBackpack();
         }
      });


      cdc.includer.loadJs(cdc.backpack.includes, {callback: function () {
         if (cdc.backpack && cdc.backpack.load) {
            cdc.backpack.load(); // invoke service call with 'buildBackpack' callback function
         }
         else {
         }
      }});
      cdc.includer.loadCss(['/web/fw/lib/cluetip/cluetip.css']);

      jQuery('#mycisco-infoHover').html(cdc.local.wpx.BACKPACK_CLICK_TO_CLOSE);
      // ck: QC694-MCW
      // if(!jQuery.browser.msie){
          jQuery('#mycisco-anchor').cluetip(cdc.backpack.hoverArgs);
      // }

      //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-infoHover').html(cdc.local.wpx.BACKPACK_CLICK_TO_CLOSE);
         // ck: QC694-MCW
         // if(!jQuery.browser.msie){
            jQuery('#mycisco-anchor').cluetip(cdc.backpack.hoverArgs);
         // }
         jQuery('#mycisco-discovery').hide();
         global_addCookieChip('bp_session','pinned','true');
      }
      else {
         jQuery('#backpack').slideUp();
         jQuery('#mycisco').removeClass("open");
         jQuery('#cluetip').hide();
         jQuery('#mycisco-infoHover').html(cdc.local.wpx.BACKPACK_MYCISCO_TOOLTIP);
         // ck: QC694-MCW
         // if(!jQuery.browser.msie){
            jQuery('#mycisco-anchor').cluetip(cdc.backpack.hoverArgs);
         // }
         global_crumbleCookieChip('bp_session','pinned');
      }
      return false;
   },

   setupCluetip: 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'});
      // center page position logic
      var doClueTipOffset = function () {
         var clueTipWrap = jQuery("#cdc-cluetip-wrapper");
         clueTipWrap.css({left: ''}); // reset
         var clueWrapPos = clueTipWrap.show().position().left;
         if (clueWrapPos > 0) {
            clueWrapPos=-clueWrapPos;
            clueTipWrap.css({left: clueWrapPos});
         };
      };
      doClueTipOffset(); //init
      // reset offest on resize
      jQuery(window).resize(function() {
         // IE is super greedy with refresh calls, this tames it a bit
         setTimeout(function() {doClueTipOffset()},300);
      });
   },

   setupDiscovery: function(node) {
      if (! cdc.backpack.isDiscoveryNotificationEnabled) { return; }
      if (global_extractCookieChip('bp_longterm','hasOpened')) { return; }

      var pagesInSession = global_extractCookieChip('bp_session','pagesInSession');
      if (pagesInSession >= 3){ return; }

      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(node).hover (
            function () {
               if (fadeOutTimer) {
                  clearTimeout (fadeOutTimer);
               }
            },
            function () {
               jQuery(node).fadeOut();
            }
         );
         fadeOutTimer = setTimeout(function(){
            jQuery('#mycisco-discovery').fadeOut(DISCOVERY_FADEOUT_MSEC);
         },DISCOVERY_STAY_MSEC);
      };

      jQuery('#mycisco-discovery').fadeIn (DISCOVERY_FADEIN_DURATION_MSEC, doAfterFadeIn);
   }





};

if (location.href.match(/https?:\/\/[^\/]*\/web/)){
    cdc.backpack.serverHostname = '';
}
else if (location.href.match(/https?:\/\/[^\/]*\/en/)){
    cdc.backpack.serverHostname = '';
}
else if (location.href.match(/https?:\/\/[^\/]*\/cisco/)){
    cdc.backpack.serverHostname = '';
}

cdc.util.ensureNamespace('cdc.local.wpx');
jQuery.extend(cdc.local.wpx, {
   BACKPACK_MYCISCO_LINKTEXT:  "My Cisco",
   BACKPACK_MYCISCO_TOOLTIP:   "Now you can add and remove modules to My Cisco!<br/><br/>Click the arrow to open.",
   BACKPACK_DISCOVERY_TOOLTIP: "Easily access your personalized content anywhere on Cisco using My Cisco.",
   BACKPACK_CLICK_TO_CLOSE: "Click the arrow to close",

   BACKPACK_TIMEOUT_TITLE:     "My Cisco is not loading.",
   BACKPACK_TIMEOUT_BLOB_HTML: '<p>To load My Cisco, try the Reload button in your browser.</p><p>If the problem persists, please contact <a href="http://www.cisco.com/go/myciscofeedback">Cisco Customer Support</a>.</p>',

   BACKPACK_SYSTEM_ERROR_BUTTON_TEXT: "OK",
   BACKPACK_SYSTEM_ERROR_TITLE:       "My Cisco System Error",
   BACKPACK_SYSTEM_ERROR_TEXT:        'Try again later; if the problem persists, contact <a href="http://www.cisco.com/go/myciscofeedback">Cisco Customer Support</a>.',

   BACKPACK_SYSTEM_WARNING_BUTTON_TEXT: "OK",
   BACKPACK_SYSTEM_WARNING_TITLE:       "My Cisco System Warning",
   BACKPACK_SYSTEM_WARNING_TEXT:        'Try again later; if the problem persists, contact <a href="http://www.cisco.com/go/myciscofeedback">Cisco Customer Support</a>.',

   WEBEX_SPACES_WARNING_ADDING_FILE: "Adding a file with the same name will replace the original.",
   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
 */
/*!
 * BEGIN /web/fw/lib/jquery.hoverIntent.minified.js
 */
/**
* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
*
* @param  f  onMouseOver function || An object with configuration options
* @param  g  onMouseOut function  || Nothing (use configuration options object)
* @return    The object (aka "this") that called hoverIntent, and the event object
* @author    Brian Cherne <brian@cherne.net>
*/
(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(p&&p!=this){try{p=p.parentNode;}catch(e){p=this;}}if(p==this){return false;}var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}if(e.type=="mouseover"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob);},cfg.timeout);}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);
/*
 * END /web/fw/lib/jquery.hoverIntent.minified.js
 */
/*!
 * BEGIN /web/fw/lib/jquery.bgiframe.min.js
 */
/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * $LastChangedDate: 2007-07-21 18:45:56 -0500 (Sat, 21 Jul 2007) $
 * $Rev: 2447 $
 *
 * Version 2.1.1
 */
(function($){$.fn.bgIframe=$.fn.bgiframe=function(s){if($.browser.msie&&/6.0/.test(navigator.userAgent)){s=$.extend({top:'auto',left:'auto',width:'auto',height:'auto',opacity:true,src:'javascript:false;'},s||{});var prop=function(n){return n&&n.constructor==Number?n+'px':n;},html='<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+'style="display:block;position:absolute;z-index:-1;'+(s.opacity!==false?'filter:Alpha(Opacity=\'0\');':'')+'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+'"/>';return this.each(function(){if($('> iframe.bgiframe',this).length==0)this.insertBefore(document.createElement(html),this.firstChild);});}return this;};})(jQuery);
/*
 * END /web/fw/lib/jquery.bgiframe.min.js
 */
/*!
 * BEGIN /web/fw/lib/cluetip/jquery.cluetip.js
 */
/*
 * jQuery clueTip plugin
 * Version 0.9.8  (05/22/2008)
 * @requires jQuery v1.1.4+
 * @requires Dimensions plugin (for jQuery versions < 1.2.5)
 *
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */
;(function($) {
/*
 * @name clueTip
 * @type jQuery
 * @cat Plugins/tooltip
 * @return jQuery
 * @author Karl Swedberg
 *
 * @credit Inspired by Cody Lindley's jTip (http://www.codylindley.com)
 * @credit Thanks to the following people for their many and varied contributions:
      Shelane Enos, Glen Lipka, Hector Santos, Torben Schreiter, Dan G. Switzer, Jörn Zaefferer
 * @credit Thanks to Jonathan Chaffer, as always, for help with the hard parts. :-)
 */

 /**
 *
 * Displays a highly customizable tooltip when the user hovers (default) or clicks (optional) the matched element.
 * By default, the clueTip plugin loads a page indicated by the "rel" attribute via ajax and displays its contents.
 * If a "title" attribute is specified, its value is used as the clueTip's heading.
 * The attribute to be used for both the body and the heading of the clueTip is user-configurable.
 * Optionally, the clueTip's body can display content from an element on the same page.
 * * Just indicate the element's id (e.g. "#some-id") in the rel attribute.
 * Optionally, the clueTip's body can display content from the title attribute, when a delimiter is indicated.
 * * The string before the first instance of the delimiter is set as the clueTip's heading.
 * * All subsequent strings are wrapped in separate DIVs and placed in the clueTip's body.
 * The clueTip plugin allows for many, many more options. Pleasee see the examples and the option descriptions below...
 *
 *
 * @example $('#tip).cluetip();
 * @desc This is the most basic clueTip. It displays a 275px-wide clueTip on mouseover of the element with an ID of "tip." On mouseout of the element, the clueTip is hidden.
 *
 *
 * @example $('a.clue').cluetip({
 *  hoverClass: 'highlight',
 *  sticky: true,
 *  closePosition: 'bottom',
 *  closeText: '<img src="cross.png" alt="close" />',
 *  truncate: 60,
 *  ajaxSettings: {
 *    type: 'POST'
 *  }
 * });
 * @desc Displays a clueTip on mouseover of all <a> elements with class="clue". The hovered element gets a class of "highlight" added to it (so that it can be styled appropriately. This is esp. useful for non-anchor elements.). The clueTip is "sticky," which means that it will not be hidden until the user either clicks on its "close" text/graphic or displays another clueTip. The "close" text/graphic is set to diplay at the bottom of the clueTip (default is top) and display an image rather than the default "Close" text. Moreover, the body of the clueTip is truncated to the first 60 characters, which are followed by an ellipsis (...). Finally, the clueTip retrieves the content using POST rather than the $.ajax method's default "GET."
 *
 * More examples can be found at http://plugins.learningjquery.com/cluetip/demo/
 *
 * Full list of options/settings can be found at the bottom of this file and at http://plugins.learningjquery.com/cluetip/
 */

  var $cluetip, $cluetipInner, $cluetipOuter, $cluetipTitle, $cluetipArrows, $dropShadow, imgCount;
  $.fn.cluetip = function(js, options) {
    if (typeof js == 'object') {
      options = js;
      js = null;
    }
    return this.each(function(index) {
      var $this = $(this);

      // support metadata plugin (v1.0 and 2.0)
      var opts = $.extend(false, {}, $.fn.cluetip.defaults, options || {}, $.metadata ? $this.metadata() : $.meta ? $this.data() : {});

      // start out with no contents (for ajax activation)
      var cluetipContents = false;
      var cluezIndex = parseInt(opts.cluezIndex, 10)-1;
      var isActive = false, closeOnDelay = 0;

      // create the cluetip divs
      if (!$('#cluetip').length) {
        $cluetipInner = $('<div id="cluetip-inner"></div>');
        $cluetipTitle = $('<h3 id="cluetip-title"></h3>');
        $cluetipOuter = $('<div id="cluetip-outer"></div>').append($cluetipInner).prepend($cluetipTitle);
        $cluetip = $('<div id="cluetip"></div>').css({zIndex: opts.cluezIndex})
        .append($cluetipOuter).append('<div id="cluetip-extra"></div>')[insertionType](insertionElement).hide();
        $('<div id="cluetip-waitimage"></div>').css({position: 'absolute', zIndex: cluezIndex-1})
        .insertBefore('#cluetip').hide();
        $cluetip.css({position: 'absolute', zIndex: cluezIndex});
        $cluetipOuter.css({position: 'relative', zIndex: cluezIndex+1});
        $cluetipArrows = $('<div id="cluetip-arrows" class="cluetip-arrows"></div>').css({zIndex: cluezIndex+1}).appendTo('#cluetip');
      }
      var dropShadowSteps = (opts.dropShadow) ? +opts.dropShadowSteps : 0;
      if (!$dropShadow) {
        $dropShadow = $([]);
        for (var i=0; i < dropShadowSteps; i++) {
          $dropShadow = $dropShadow.add($('<div></div>').css({zIndex: cluezIndex-i-1, opacity:.1, top: 1+i, left: 1+i}));
        };
        $dropShadow.css({position: 'absolute', backgroundColor: '#000'})
        .prependTo($cluetip);
      }
      var tipAttribute = $this.attr(opts.attribute), ctClass = opts.cluetipClass;
      if (!tipAttribute && !opts.splitTitle && !js) return true;
      // if hideLocal is set to true, on DOM ready hide the local content that will be displayed in the clueTip
      if (opts.local && opts.hideLocal) { $(tipAttribute + ':first').hide(); }
      var tOffset = parseInt(opts.topOffset, 10), lOffset = parseInt(opts.leftOffset, 10);
      // vertical measurement variables
      var tipHeight, wHeight;
      var defHeight = isNaN(parseInt(opts.height, 10)) ? 'auto' : (/\D/g).test(opts.height) ? opts.height : opts.height + 'px';
      var sTop, linkTop, posY, tipY, mouseY, baseline;
      // horizontal measurement variables
      var tipInnerWidth = isNaN(parseInt(opts.width, 10)) ? 275 : parseInt(opts.width, 10);
      var tipWidth = tipInnerWidth + (parseInt($cluetip.css('paddingLeft'))||0) + (parseInt($cluetip.css('paddingRight'))||0) + dropShadowSteps;
      var linkWidth = this.offsetWidth;
      var linkLeft, posX, tipX, mouseX, winWidth;

      // parse the title
      var tipParts;
      var tipTitle = (opts.attribute != 'title') ? $this.attr(opts.titleAttribute) : '';
      if (opts.splitTitle) {
        if(tipTitle == undefined) {tipTitle = '';}
        tipParts = tipTitle.split(opts.splitTitle);
        tipTitle = tipParts.shift();
      }
      var localContent;

/***************************************
* ACTIVATION
****************************************/

//activate clueTip
    var activate = function(event) {
      if (!opts.onActivate($this)) {
        return false;
      }
      isActive = true;
      $cluetip.removeClass().css({width: tipInnerWidth});
      if (tipAttribute == $this.attr('href')) {
        $this.css('cursor', opts.cursor);
      }
      $this.attr('title','');
      if (opts.hoverClass) {
        $this.addClass(opts.hoverClass);
      }
      linkTop = posY = $this.offset().top;
      linkLeft = $this.offset().left;
      mouseX = event.pageX;
      mouseY = event.pageY;
      if ($this[0].tagName.toLowerCase() != 'area') {
        sTop = $(document).scrollTop();
        winWidth = $(window).width();
      }
// position clueTip horizontally
      if (opts.positionBy == 'fixed') {
        posX = linkWidth + linkLeft + lOffset;
        $cluetip.css({left: posX});
      } else {
        posX = (linkWidth > linkLeft && linkLeft > tipWidth)
          || linkLeft + linkWidth + tipWidth + lOffset > winWidth
          ? linkLeft - tipWidth - lOffset
          : linkWidth + linkLeft + lOffset;
        if ($this[0].tagName.toLowerCase() == 'area' || opts.positionBy == 'mouse' || linkWidth + tipWidth > winWidth) { // position by mouse
          if (mouseX + 20 + tipWidth > winWidth) {
            $cluetip.addClass(' cluetip-' + ctClass);
            posX = (mouseX - tipWidth - lOffset) >= 0 ? mouseX - tipWidth - lOffset - parseInt($cluetip.css('marginLeft'),10) + parseInt($cluetipInner.css('marginRight'),10) :  mouseX - (tipWidth/2);
          } else {
            posX = mouseX + lOffset;
          }
        }
        var pY = posX < 0 ? event.pageY + tOffset : event.pageY;
        $cluetip.css({left: (posX > 0 && opts.positionBy != 'bottomTop') ? posX : (mouseX + (tipWidth/2) > winWidth) ? winWidth/2 - tipWidth/2 : Math.max(mouseX - (tipWidth/2),0)});
      }
        wHeight = $(window).height();

/***************************************
* load a string from cluetip method's first argument
***************************************/
      if (js) {
        $cluetipInner.html(js);
        cluetipShow(pY);
      }
/***************************************
* load the title attribute only (or user-selected attribute).
* clueTip title is the string before the first delimiter
* subsequent delimiters place clueTip body text on separate lines
***************************************/

      else if (tipParts) {
        var tpl = tipParts.length;
        for (var i=0; i < tpl; i++){
          if (i == 0) {
            $cluetipInner.html(tipParts[i]);
          } else {
            $cluetipInner.append('<div class="split-body">' + tipParts[i] + '</div>');
          }
        };
        cluetipShow(pY);
      }
/***************************************
* load external file via ajax
***************************************/

      else if (!opts.local && tipAttribute.indexOf('#') != 0) {
        if (cluetipContents && opts.ajaxCache) {
          $cluetipInner.html(cluetipContents);
          cluetipShow(pY);
        }
        else {
          var ajaxSettings = opts.ajaxSettings;
          ajaxSettings.url = tipAttribute;
          ajaxSettings.beforeSend = function() {
            $cluetipOuter.children().empty();
            if (opts.waitImage) {
              $('#cluetip-waitimage')
              .css({top: mouseY+20, left: mouseX+20})
              .show();
            }
          };
         ajaxSettings.error = function() {
            if (isActive) {
              $cluetipInner.html('<i>sorry, the contents could not be loaded</i>');
            }
          };
          ajaxSettings.success = function(data) {
            cluetipContents = opts.ajaxProcess(data);
            if (isActive) {
              $cluetipInner.html(cluetipContents);
            }
          };
          ajaxSettings.complete = function() {
          	imgCount = $('#cluetip-inner img').length;
        		if (imgCount && !$.browser.opera) {
        		  $('#cluetip-inner img').load(function() {
          			imgCount--;
          			if (imgCount<1) {
          				$('#cluetip-waitimage').hide();
          			  if (isActive) cluetipShow(pY);
          			}
        		  });
        		} else {
      				$('#cluetip-waitimage').hide();
        		  if (isActive) cluetipShow(pY);
        		}
          };
          $.ajax(ajaxSettings);
        }

/***************************************
* load an element from the same page
***************************************/
      } else if (opts.local){
        var $localContent = $(tipAttribute + ':first');
        var localCluetip = $.fn.wrapInner ? $localContent.wrapInner('<div></div>').children().clone(true) : $localContent.html();
        $.fn.wrapInner ? $cluetipInner.empty().append(localCluetip) : $cluetipInner.html(localCluetip);
        cluetipShow(pY);
      }
    };

// get dimensions and options for cluetip and prepare it to be shown
    var cluetipShow = function(bpY) {
      $cluetip.addClass('cluetip-' + ctClass);

      if (opts.truncate) {
        var $truncloaded = $cluetipInner.text().slice(0,opts.truncate) + '...';
        $cluetipInner.html($truncloaded);
      }
      function doNothing() {}; //empty function
      tipTitle ? $cluetipTitle.show().html(tipTitle) : (opts.showTitle) ? $cluetipTitle.show().html('&nbsp;') : $cluetipTitle.hide();
      if (opts.sticky) {
        var $closeLink = $('<div id="cluetip-close"><a href="#">' + opts.closeText + '</a></div>');
        (opts.closePosition == 'bottom') ? $closeLink.appendTo($cluetipInner) : (opts.closePosition == 'title') ? $closeLink.prependTo($cluetipTitle) : $closeLink.prependTo($cluetipInner);
        $closeLink.click(function() {
          cluetipClose();
          return false;
        });
        if (opts.mouseOutClose) {
          if ($.fn.hoverIntent && opts.hoverIntent) {
            $cluetip.hoverIntent({
              over: doNothing,
              timeout: opts.hoverIntent.timeout,
              out: function() { $closeLink.trigger('click'); }
            });
          } else {
            $cluetip.hover(doNothing,
            function() {$closeLink.trigger('click'); });
          }
        } else {
          $cluetip.unbind('mouseout');
        }
      }
// now that content is loaded, finish the positioning
      var direction = '';
      $cluetipOuter.css({overflow: defHeight == 'auto' ? 'visible' : 'auto', height: defHeight});
      tipHeight = defHeight == 'auto' ? Math.max($cluetip.outerHeight(),$cluetip.height()) : parseInt(defHeight,10);
      tipY = posY;
      baseline = sTop + wHeight;
      if (opts.positionBy == 'fixed') {
        tipY = posY - opts.dropShadowSteps + tOffset;
      } else if ( (posX < mouseX && Math.max(posX, 0) + tipWidth > mouseX) || opts.positionBy == 'bottomTop') {
        if (posY + tipHeight + tOffset > baseline && mouseY - sTop > tipHeight + tOffset) {
          tipY = mouseY - tipHeight - tOffset;
          direction = 'top';
        } else {
          tipY = mouseY + tOffset;
          direction = 'bottom';
        }
      } else if ( posY + tipHeight + tOffset > baseline ) {
        tipY = (tipHeight >= wHeight) ? sTop : baseline - tipHeight - tOffset;
      } else if ($this.css('display') == 'block' || $this[0].tagName.toLowerCase() == 'area' || opts.positionBy == "mouse") {
        tipY = bpY - tOffset;
      } else {
        tipY = posY - opts.dropShadowSteps;
      }
      if (direction == '') {
        posX < linkLeft ? direction = 'left' : direction = 'right';
      }
      $cluetip.css({top: tipY + 'px'}).removeClass().addClass('clue-' + direction + '-' + ctClass).addClass(' cluetip-' + ctClass);
      if (opts.arrows) { // set up arrow positioning to align with element
        var bgY = (posY - tipY - opts.dropShadowSteps);
        $cluetipArrows.css({top: (/(left|right)/.test(direction) && posX >=0 && bgY > 0) ? bgY + 'px' : /(left|right)/.test(direction) ? 0 : ''}).show();
      } else {
        $cluetipArrows.hide();
      }

// (first hide, then) ***SHOW THE CLUETIP***
      $dropShadow.hide();
      $cluetip.hide()[opts.fx.open](opts.fx.open != 'show' && opts.fx.openSpeed);
      if (opts.dropShadow) $dropShadow.css({height: tipHeight, width: tipInnerWidth}).show();
      if ($.fn.bgiframe) { $cluetip.bgiframe(); }
      // trigger the optional onShow function
      if (opts.delayedClose > 0) {
        closeOnDelay = setTimeout(cluetipClose, opts.delayedClose);
      }
      opts.onShow($cluetip, $cluetipInner);

    };

/***************************************
   =INACTIVATION
-------------------------------------- */
    var inactivate = function() {
      isActive = false;
      $('#cluetip-waitimage').hide();
      if (!opts.sticky || (/click|toggle/).test(opts.activation) ) {
        cluetipClose();
clearTimeout(closeOnDelay);
      };
      if (opts.hoverClass) {
        $this.removeClass(opts.hoverClass);
      }
      $('.cluetip-clicked').removeClass('cluetip-clicked');
    };
// close cluetip and reset some things
    var cluetipClose = function() {
      $cluetipOuter
      .parent().hide().removeClass().end()
      .children().empty();
      if (tipTitle) {
        $this.attr(opts.titleAttribute, tipTitle);
      }
      $this.css('cursor','');
      if (opts.arrows) $cluetipArrows.css({top: ''});
    };

/***************************************
   =BIND EVENTS
-------------------------------------- */
  // activate by click
      if ( (/click|toggle/).test(opts.activation) ) {
        $this.click(function(event) {
          if ($cluetip.is(':hidden') || !$this.is('.cluetip-clicked')) {
            activate(event);
            $('.cluetip-clicked').removeClass('cluetip-clicked');
            $this.addClass('cluetip-clicked');

          } else {
            inactivate(event);

          }
          this.blur();
          return false;
        });
  // activate by focus; inactivate by blur
      } else if (opts.activation == 'focus') {
        $this.focus(function(event) {
          activate(event);
        });
        $this.blur(function(event) {
          inactivate(event);
        });
  // activate by hover
    // clicking is returned false if cluetip url is same as href url
      } else {
        $this.click(function() {
          if ($this.attr('href') && $this.attr('href') == tipAttribute && !opts.clickThrough) {
            return false;
          }
        });
        //set up mouse tracking
        var mouseTracks = function(evt) {
          if (opts.tracking == true) {
            var trackX = posX - evt.pageX;
            var trackY = tipY ? tipY - evt.pageY : posY - evt.pageY;
            $this.mousemove(function(evt) {
              $cluetip.css({left: evt.pageX + trackX, top: evt.pageY + trackY });
            });
          }
        };
        if ($.fn.hoverIntent && opts.hoverIntent) {
          $this.mouseover(function() {$this.attr('title',''); })
          .hoverIntent({
            sensitivity: opts.hoverIntent.sensitivity,
            interval: opts.hoverIntent.interval,
            over: function(event) {
              activate(event);
              mouseTracks(event);
            },
            timeout: opts.hoverIntent.timeout,
            out: function(event) {inactivate(event); $this.unbind('mousemove');}
          });
        } else {
          $this.hover(function(event) {
            activate(event);
            mouseTracks(event);
          }, function(event) {
            inactivate(event);
            $this.unbind('mousemove');
          });
        }
      }
    });
  };

/*
 * options for clueTip
 *
 * each one can be explicitly overridden by changing its value.
 * for example: $.fn.cluetip.defaults.width = 200;
 * would change the default width for all clueTips to 200.
 *
 * each one can also be overridden by passing an options map to the cluetip method.
 * for example: $('a.example').cluetip({width: 200});
 * would change the default width to 200 for clueTips invoked by a link with class of "example"
 *
 */

  $.fn.cluetip.defaults = {  // set up default options
    width:            275,      // The width of the clueTip
    height:           'auto',   // The height of the clueTip
    cluezIndex:       97,       // Sets the z-index style property of the clueTip
    positionBy:       'auto',   // Sets the type of positioning: 'auto', 'mouse','bottomTop', 'fixed'
    topOffset:        15,       // Number of px to offset clueTip from top of invoking element
    leftOffset:       15,       // Number of px to offset clueTip from left of invoking element
    local:            false,    // Whether to use content from the same page for the clueTip's body
    hideLocal:        true,     // If local option is set to true, this determines whether local content
                                // to be shown in clueTip should be hidden at its original location
    attribute:        'rel',    // the attribute to be used for fetching the clueTip's body content
    titleAttribute:   'title',  // the attribute to be used for fetching the clueTip's title
    splitTitle:       '',       // A character used to split the title attribute into the clueTip title and divs
                                // within the clueTip body. more info below [6]
    showTitle:        true,     // show title bar of the clueTip, even if title attribute not set
    cluetipClass:     'default',// class added to outermost clueTip div in the form of 'cluetip-' + clueTipClass.
    hoverClass:       '',       // class applied to the invoking element onmouseover and removed onmouseout
    waitImage:        true,     // whether to show a "loading" img, which is set in jquery.cluetip.css
    cursor:           'help',
    arrows:           false,    // if true, displays arrow on appropriate side of clueTip
    dropShadow:       true,     // set to false if you don't want the drop-shadow effect on the clueTip
    dropShadowSteps:  6,        // adjusts the size of the drop shadow
    sticky:           false,    // keep visible until manually closed
    mouseOutClose:    false,    // close when clueTip is moused out
    activation:       'hover',  // set to 'click' to force user to click to show clueTip
                                // set to 'focus' to show on focus of a form element and hide on blur
    clickThrough:     false,    // if true, and activation is not 'click', then clicking on link will take user to the link's href,
                                // even if href and tipAttribute are equal
    tracking:         false,    // if true, clueTip will track mouse movement (experimental)
    delayedClose:     0,        // close clueTip on a timed delay (experimental)
    closePosition:    'top',    // location of close text for sticky cluetips; can be 'top' or 'bottom' or 'title'
    closeText:        'Close',  // text (or HTML) to to be clicked to close sticky clueTips
    truncate:         0,        // number of characters to truncate clueTip's contents. if 0, no truncation occurs

    // effect and speed for opening clueTips
    fx: {
                      open:       'show', // can be 'show' or 'slideDown' or 'fadeIn'
                      openSpeed:  ''
    },

    // settings for when hoverIntent plugin is used
    hoverIntent: {
                      sensitivity:  3,
              			  interval:     50,
              			  timeout:      0
    },

    // function to run just before clueTip is shown.
    onActivate:       function(e) {return true;},

    // function to run just after clueTip is shown.
    onShow:           function(ct, c){},

    // whether to cache results of ajax request to avoid unnecessary hits to server
    ajaxCache:        true,

    // process data retrieved via xhr before it's displayed
    ajaxProcess:      function(data) {
                        data = data.replace(/<s(cript|tyle)(.|\s)*?\/s(cript|tyle)>/g, '').replace(/<(link|title)(.|\s)*?\/(link|title)>/g,'');
                        return data;
    },

    // can pass in standard $.ajax() parameters, not including error, complete, success, and url
    ajaxSettings: {
                      dataType: 'html'
    },
    debug: false
  };


/*
 * Global defaults for clueTips. Apply to all calls to the clueTip plugin.
 *
 * @example $.cluetip.setup({
 *   insertionType: 'prependTo',
 *   insertionElement: '#container'
 * });
 *
 * @property
 * @name $.cluetip.setup
 * @type Map
 * @cat Plugins/tooltip
 * @option String insertionType: Default is 'appendTo'. Determines the method to be used for inserting the clueTip into the DOM. Permitted values are 'appendTo', 'prependTo', 'insertBefore', and 'insertAfter'
 * @option String insertionElement: Default is 'body'. Determines which element in the DOM the plugin will reference when inserting the clueTip.
 *
 */

  var insertionType = 'appendTo', insertionElement = 'body';
  $.cluetip = {};
  $.cluetip.setup = function(options) {
    if (options && options.insertionType && (options.insertionType).match(/appendTo|prependTo|insertBefore|insertAfter/)) {
      insertionType = options.insertionType;
    }
    if (options && options.insertionElement) {
      insertionElement = options.insertionElement;
    }
  };

})(jQuery);
/*
 * END /web/fw/lib/cluetip/jquery.cluetip.js
 */
/*!
 * BEGIN /web/fw/j/jsTemplate.js
 */
/**
 * jsTemplate.js
 * Revision: 1.3 
 * JSP-like templates is JavaScript.
 *
 *
 *   (c) 1992-2008 Cisco Systems, Inc. All rights reserved.
 *   Terms and Conditions: http://cisco.com/en/US/swassets/sw293/sitewide_important_notices.html'
 *
 *
 * Typical usage:
 *
 * First, compile a string into a template:
 *
 *    var myTemplate = new cdc.util.JsTemplate (templateString);
 *
 * And later, use the template as many times as necessary:
 *
 *    var htmlString = myTemplate.process (myDataObject);
 *
 * Thus templates can be cached in a suitable caching mechanism.
 * The implementation uses only raw JavaScript; no dependence on jQuery or other libraries.
 *
 */

if (typeof (cdc) == "undefined") cdc = {};
if (typeof (cdc.util) == "undefined") cdc.util = {};

cdc.util.jsEscape = function (aString) {
    if (!cdc.util._jsEscapeRE) cdc.util._jsEscapeRE = /\r|\n|\\|'|#/gm; // ' for emacs
    return aString.replace (cdc.util._jsEscapeRE, function (t) { return "\\" + t; });
};

cdc.util.JsTemplate = function (aString) {
    var start = 0;
    var codeParts = ["var result = [];\nwith (dataObject){\n"], dataStr = "";
    var re = /<%([\s\S]*?)%>|\$\{(.*?[^\\])\}/g ;
    aString.replace (re, function (fullMatch, g1, g2, index) {
        dataStr = aString.substring (start, index);
        if (g1) {
            codeParts.push ("result.push ('" + cdc.util.jsEscape (dataStr) + "');\n");
            if (g1.substring (0,2) != "--" && g1.substring (g1.length-2, g1.length) !=  "--") {
                // It's not a comment, it's a code fragment
                codeParts.push (g1 + "\n");
            }
            start = index + g1.length + 4;
        } else { // g2 matched
            codeParts.push ("result.push ('" + cdc.util.jsEscape (dataStr) + "');\n");
            codeParts.push ("result.push (" + g2 + ");\n");
            start = index + g2.length + 3;
        }
    });
    codeParts.push ("result.push ('" + cdc.util.jsEscape (aString.substring (start)) + "');\n}\nreturn result.join ('');");
    var _codeStr = codeParts.join ("");
    try {
        this.process = new Function ("dataObject", _codeStr);
    } catch (e) {
        alert ("Template expansion error:\n" + e.message + "\n"  + _codeStr); // Could use better error reporting
    }

    // Debugging support:  examine the template parts
    this.codeString = function () {
        return _codeStr;
    };

};
/*
 * END /web/fw/j/jsTemplate.js
 */
/*!
 * BEGIN /web/fw/lib/jquery.pngFix.js
 */
/**
 * --------------------------------------------------------------------
 * jQuery-Plugin "pngFix"
 * by Andreas Eberhard, andreas.eberhard@gmail.com
 *                      http://jquery.andreaseberhard.de/
 *
 * Copyright (c) 2007 Andreas Eberhard
 * Licensed under GPL (http://www.opensource.org/licenses/gpl-license.php)
 *
 * Version: 1.0, 31.05.2007
 * Changelog:
 * 	31.05.2007 initial Version 1.0
 * --------------------------------------------------------------------
 */

(function(jQuery) {


jQuery.fn.pngFix = function() {

	var ie55 = (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) == 4 && navigator.appVersion.indexOf("MSIE 5.5") != -1);
	var ie6 = (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) == 4 && navigator.appVersion.indexOf("MSIE 6.0") != -1);

	if (jQuery.browser.msie && (ie55 || ie6)) {

		jQuery(this).find("img[@src$=.png]").each(function() {

			var prevStyle = '';
			var strNewHTML = '';
			var imgId = (jQuery(this).attr('id')) ? 'id="' + jQuery(this).attr('id') + '" ' : '';
			var imgClass = (jQuery(this).attr('class')) ? 'class="' + jQuery(this).attr('class') + '" ' : '';
			var imgTitle = (jQuery(this).attr('title')) ? 'title="' + jQuery(this).attr('title') + '" ' : '';
			var imgAlt = (jQuery(this).attr('alt')) ? 'alt="' + jQuery(this).attr('alt') + '" ' : '';
			var imgAlign = (jQuery(this).attr('align')) ? 'float:' + jQuery(this).attr('align') + ';' : '';
			var imgHand = (jQuery(this).parent().attr('href')) ? 'cursor:hand;' : '';
			if (this.style.border) {
				prevStyle += 'border:'+this.style.border+';';
				this.style.border = '';
			}
			if (this.style.padding) {
				prevStyle += 'padding:'+this.style.padding+';';
				this.style.padding = '';
			}
			if (this.style.margin) {
				prevStyle += 'margin:'+this.style.margin+';';
				this.style.margin = '';
			}
			var imgStyle = (this.style.cssText);

			strNewHTML += '<span '+imgId+imgClass+imgTitle+imgAlt;
			strNewHTML += 'style="position:relative;white-space:pre-line;display:inline-block;background:transparent;'+imgAlign+imgHand;
			strNewHTML += 'width:' + jQuery(this).width() + 'px;' + 'height:' + jQuery(this).height() + 'px;';
			strNewHTML += 'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader' + '(src=\'' + jQuery(this).attr('src') + '\', sizingMethod=\'scale\');';
			strNewHTML += imgStyle+'"></span>';
			if (prevStyle != ''){
				strNewHTML = '<span style="position:relative;display:inline-block;'+prevStyle+imgHand+'width:' + jQuery(this).width() + 'px;' + 'height:' + jQuery(this).height() + 'px;'+'">' + strNewHTML + '</span>';
			}

			jQuery(this).hide();
			jQuery(this).after(strNewHTML);

		});

	}

};

})(jQuery);
/*
 * END /web/fw/lib/jquery.pngFix.js
 */
/*!
 * BEGIN /web/fw/lib/jquery.color.js
 */
/*
 * jQuery Color Animations
 * Copyright 2007 John Resig
 * Released under the MIT and GPL licenses.
 */

(function(jQuery){

	// We override the animation for all of these color styles
	jQuery.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){
		jQuery.fx.step[attr] = function(fx){
			if ( fx.state == 0 ) {
				fx.start = getColor( fx.elem, attr );
				fx.end = getRGB( fx.end );
			}

			fx.elem.style[attr] = "rgb(" + [
				Math.max(Math.min( parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255), 0),
				Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0),
				Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 255), 0)
			].join(",") + ")";
		}
	});

	// Color Conversion functions from highlightFade
	// By Blair Mitchelmore
	// http://jquery.offput.ca/highlightFade/

	// Parse strings looking for color tuples [255,255,255]
	function getRGB(color) {
		var result;

		// Check if we're already dealing with an array of colors
		if ( color && color.constructor == Array && color.length == 3 )
			return color;

		// Look for rgb(num,num,num)
		if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
			return [parseInt(result[1]), parseInt(result[2]), parseInt(result[3])];

		// Look for rgb(num%,num%,num%)
		if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
			return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];

		// Look for #a0b1c2
		if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
			return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];

		// Look for #fff
		if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
			return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];

		// Otherwise, we're most likely dealing with a named color
		return colors[jQuery.trim(color).toLowerCase()];
	}

	function getColor(elem, attr) {
		var color;
		do {
			color = jQuery.curCSS(elem, attr);
			// Keep going until we find an element that has color, or we hit the body
			if ( color != '' && color != 'transparent' || jQuery.nodeName(elem, "body") )
				break;
			attr = "backgroundColor";
		} while ( elem = elem.parentNode );
		return getRGB(color);
	};

	// Some named colors to work with
	// From Interface by Stefan Petre
	// http://interface.eyecon.ro/
	var colors = {
		aqua:[0,255,255],
		azure:[240,255,255],
		beige:[245,245,220],
		black:[0,0,0],
		blue:[0,0,255],
		brown:[165,42,42],
		cyan:[0,255,255],
		darkblue:[0,0,139],
		darkcyan:[0,139,139],
		darkgrey:[169,169,169],
		darkgreen:[0,100,0],
		darkkhaki:[189,183,107],
		darkmagenta:[139,0,139],
		darkolivegreen:[85,107,47],
		darkorange:[255,140,0],
		darkorchid:[153,50,204],
		darkred:[139,0,0],
		darksalmon:[233,150,122],
		darkviolet:[148,0,211],
		fuchsia:[255,0,255],
		gold:[255,215,0],
		green:[0,128,0],
		indigo:[75,0,130],
		khaki:[240,230,140],
		lightblue:[173,216,230],
		lightcyan:[224,255,255],
		lightgreen:[144,238,144],
		lightgrey:[211,211,211],
		lightpink:[255,182,193],
		lightyellow:[255,255,224],
		lime:[0,255,0],
		magenta:[255,0,255],
		maroon:[128,0,0],
		navy:[0,0,128],
		olive:[128,128,0],
		orange:[255,165,0],
		pink:[255,192,203],
		purple:[128,0,128],
		violet:[128,0,128],
		red:[255,0,0],
		silver:[192,192,192],
		white:[255,255,255],
		yellow:[255,255,0]
	};
})(jQuery);
/*
 * END /web/fw/lib/jquery.color.js
 */
/*!
 * BEGIN /web/fw/lib/jqmodal.js
 */
/*
 * jqModal - Minimalist Modaling with jQuery
 *   (http://dev.iceburg.net/jquery/jqmodal/)
 *
 * Copyright (c) 2007,2008 Brice Burgess <bhb@iceburg.net>
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * $Version: 06/22/2008 +r12
 *
 */
(function($) {
$.fn.jqm=function(o){
var _o = {
overlay: 50,
overlayClass: 'jqmOverlay',
closeClass: 'jqmClose',
trigger: '.jqModal',
ajax: false,
ajaxText: '',
target: false,
modal: false,
toTop: false,
onShow: false,
onHide: false,
onLoad: false
};
return this.each(function(){if(this._jqm)return H[this._jqm].c=$.extend({},H[this._jqm].c,o); s++; this._jqm=s;
H[s]={c:$.extend(_o, o),a:false,w:$(this).addClass('jqmID'+s),s:s};
if(_o.trigger)$(this).jqmAddTrigger(_o.trigger);
});};

$.fn.jqmAddClose=function(e){hs(this,e,'jqmHide'); return this;};
$.fn.jqmAddTrigger=function(e){hs(this,e,'jqmShow'); return this;};
$.fn.jqmShow=function(t){return this.each(function(){if(!H[this._jqm].a)$.jqm.open(this._jqm,t)});};
$.fn.jqmHide=function(t){return this.each(function(){if(H[this._jqm].a)$.jqm.close(this._jqm,t)});};

$.jqm = {
hash:{},
open:function(s,t){var h=H[s],c=h.c,cc='.'+c.closeClass,z=(parseInt(h.w.css('z-index'))),z=(z>0)?z:3000,o=$('<div></div>').css({height:'100%',width:'100%',position:'fixed',left:0,top:0,'z-index':z-1,opacity:c.overlay/100});h.t=t;h.a=true;h.w.css('z-index',z);
 if(c.modal) {if(!A[0])F('bind');A.push(s);o.css('cursor','wait');}
 else if(c.overlay > 0)h.w.jqmAddClose(o);
 else o=false;

 h.o=(o)?o.addClass(c.overlayClass).prependTo('body'):false;
 if(ie6){$('html,body').css({height:'100%',width:'100%'});if(o){o=o.css({position:'absolute'})[0];for(var y in {Top:1,Left:1})o.style.setExpression(y.toLowerCase(),"(_=(document.documentElement.scroll"+y+" || document.body.scroll"+y+"))+'px'");}}

 if(c.ajax) {var r=c.target||h.w,u=c.ajax,r=(typeof r == 'string')?$(r,h.w):$(r),u=(u.substr(0,1) == '@')?$(t).attr(u.substring(1)):u;
  r.html(c.ajaxText).load(u,function(){if(c.onLoad)c.onLoad.call(this,h);if(cc)h.w.jqmAddClose($(cc,h.w));e(h);});}
 else if(cc)h.w.jqmAddClose($(cc,h.w));

 if(c.toTop&&h.o)h.w.before('<span id="jqmP'+h.w[0]._jqm+'"></span>').insertAfter(h.o);
 (c.onShow)?c.onShow(h):h.w.show();e(h);return false;
},
close:function(s){var h=H[s];h.a=false;
 if(A[0]){A.pop();if(!A[0])F('unbind');}
 if(h.c.toTop&&h.o)$('#jqmP'+h.w[0]._jqm).after(h.w).remove();
 if(h.c.onHide)h.c.onHide(h);else{h.w.hide();if(h.o)h.o.remove();} return false;
}};
var s=0,H=$.jqm.hash,A=[],ie6=$.browser.msie&&($.browser.version == "6.0"),
i=$('<iframe src="javascript:false;document.write(\'\');" class="jqm"></iframe>').css({opacity:0}),
e=function(h){if(ie6)if(h.o)h.o.html('<p style="width:100%;height:100%"/>').prepend(i);else if(!$('iframe.jqm',h.w)[0])h.w.prepend(i); f(h);},
f=function(h){try{$(':input:visible',h.w)[0].focus();}catch(e){}},
F=function(t){$()[t]("keypress",m)[t]("keydown",m)[t]("mousedown",m);},
m=function(e){var h=H[A[A.length-1]],r=(!$(e.target).parents('.jqmID'+h.s)[0]);if(r)f(h);return !r;},
hs=function(w,e,y){var s=[];w.each(function(){s.push(this._jqm)});
 $(e).each(function(){if(this[y])$.extend(this[y],s);else{this[y]=s;$(this).click(function(){for(var i in {jqmShow:1,jqmHide:1})for(var s in this[i])if(H[this[i][s]])H[this[i][s]].w[i](this);return false;});}});};
})(jQuery);
/*
 * END /web/fw/lib/jqmodal.js
 */
/*!
 * BEGIN /web/fw/w/modals/modals.js
 */
/*
 * modals.js
 * Revision: 1.2 
 *
 * Dependencies: jQuery
 *
 * (c) 1992-2009 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 = { util: {}};

/***
 * Show a modal dialog. This function relies on the jqmodal plugin being available.
 * @param modalRootElement the root element of the modal dialog, specified as a DOM element, a jQuery object or a jQuery selector string
 * @param okSelector a jQuery selector string specifying the ok button in the dialog. This selector is applied within the dialog, not globally.
 * @param okCallback function to call back when the ok button is pressed
 * @param cancelSelector a jQuery selector string specifying the cancel button in the dialog. This selector is applied within the dialog, not globally.
 * @param cancelCallback function to call back when the cancel button is pressed
 *
 * Example:
 *
 *     cdc.util.showModal ("#delete-confirm", "#delete-confirm .delete-confirm-btn", confirmCallback, "#delete-confirm .delete-cancel-btn", cancelCallback);
 */
cdc.util.showModal = function (modalRootElement, okSelector, okCallback, cancelSelector, cancelCallback) {

    var dlg = modalRootElement && modalRootElement.jquery ? modalRootElement: jQuery (modalRootElement);
    dlg.jqm({modal: true}).jqmShow();

    var okBtn = jQuery (okSelector, dlg);
    var cancelBtn = jQuery (cancelSelector, dlg);

    var unbind = function () {
        okBtn.unbind ("click", okClick);
        cancelBtn.unbind ("click", cancelClick);
    };

    var okClick = function () {
        okCallback();
        unbind();
        dlg.jqmHide();
    };

    var cancelClick = function () {
        if (cancelCallback) cancelCallback();
        unbind();
        dlg.jqmHide();
    };
    okBtn.bind ("click", okClick);
    cancelBtn.bind ("click", cancelClick);
};


cdc.util.showStandardModal = function (config) {

    var DEFAULT_OFFSET_TOP_PX = 134; // UE spec says the modal must be this many pixels from the top

    var okCallback = config.confirmCallback || config.okCallback;
    var cancelCallback = config.cancelCallback;
    var messageString = config.message || "";
    var dialogTitleString = config.title || "Confirm";
    var contentHTML = config.contentHTML || "";
    var okBtnLabel  = config.confirmButtonLabel || "Ok";
    var cxlBtnLabel = config.cancelButtonLabel  || "Cancel";
    var modalClass  = config.dialogType == "warning" ? "modal-warning" : (config.dialogType == "error" ? "modal-error" : "modal-info");
    var hideCxlBtn  = !!config.hideCancelButton || modalClass == "modal-info";
    var messageKindText = config.messageKindText || (modalClass == "modal-warning" ? "Warning: " : (modalClass == "modal-error" ? "Error: " : ""));
    var offsetTopPx = config.offsetTopPx;
    offsetTopPx = typeof (offsetTopPx) == "number" ? offsetTopPx : (typeof (offsetTopPx) == "string" ? parseInt (offsetTopPx) : Number.NaN);
    if (isNaN (offsetTopPx)) offsetTopPx = DEFAULT_OFFSET_TOP_PX;

    function showModalBox() {
        modalBox.jqm({modal: true}).jqmShow();
        // modalBox.show();
    }
    function hideModalBox() {
        modalBox.jqmHide();
        // modalBox.hide();
    }

    function submit (evt) {
        if (okCallback) okCallback (modalBox, evt);
        hideModalBox();
        return false; // Let Ajax take care of any necessary server interaction.
    };

    function cancelClick (evt) {
        if (cancelCallback) cancelCallback (modalBox, evt);
        hideModalBox();
    };
    function setPosition(obj){
        var intH = jQuery(window).height();
        var scrollTop = 0;

        // position:fixed will not work for IE6.So need to add scrollTop dynamically for IE6.
        if (jQuery.browser.msie) {
            scrollTop = jQuery(window).scrollTop();
        }
        obj.css("top", ((parseInt(intH) - obj.height()) / 2) + scrollTop + 'px');
    };

    var modalBox = jQuery ("#modal-box");
    if (!modalBox.length) { // Create it if necessary
        // Note the use of a form as the wrapper, giving us two benefits: We can make the 'ok' button behave like a default button, and we can add form controls
        // in the content HTML if needed.
        var modalHTML = '\
          <form id="modal-box" action="#">\
              <h5 class="modal-title"></h5>\
              <div class="modal-body">\
                <div class="modal-message"><span class="modal-message-kind"></span> <span class="modal-message-inner"></span></div>\
                <div class="modal-content"></div>\
              </div>\
              <div class="modal-button-div">\
                <input type="submit" value="Ok" class="modal-confirm" />\
                <input type="button" value="Cancel" class="modal-cancel"/>\
              </div>\
          </form>';
        modalBox = jQuery (modalHTML);
        jQuery (document.body).append (modalBox);
    }
    modalBox[0].onsubmit = submit;
    jQuery (".modal-cancel", modalBox)[0].onclick = cancelClick;
    // ----------------------------------^^^^^^^^ Using onclick instead of bind, because I want only one call to the callback.
    // There may be a better way to use bind, but I don't yet know how.

    // jQuery (".modal-cancel", modalBox).one ("click", cancelClick);
    if (messageString) {
        jQuery (".modal-message-inner", modalBox)[0].innerHTML = messageString;
        jQuery (".modal-message", modalBox).show();
    } else {
        jQuery (".modal-message", modalBox).hide();
    }
    jQuery (".modal-message-kind", modalBox)[0].innerHTML  = messageKindText;
    modalBox[0].className = modalClass;

    jQuery (".modal-title",   modalBox)[0].innerHTML = dialogTitleString;
    jQuery (".modal-confirm", modalBox)[0].value     = okBtnLabel;
    jQuery (".modal-cancel",  modalBox)[0].value     = cxlBtnLabel;

    var contentElt = jQuery (".modal-content", modalBox);
    if (contentHTML) {
        contentElt.css ("display", "block").html (contentHTML);
    } else {
        contentElt.css ("display", "none");
    }

    jQuery (".modal-cancel", modalBox).css ("display", hideCxlBtn ? "none" : "inline");

    setPosition(modalBox); // It sets the position position of the modal box to center of the screen.

    // modal box should move vertically when user vertically scroll the window.
    jQuery(window).bind('scroll', function(){
        setPosition(modalBox);
    });
    showModalBox();
    jQuery("body .jqmOverlay").bgiframe(); // To fix select box issue in IE6.

};
/*
 * END /web/fw/w/modals/modals.js
 */
/*!
 * BEGIN /web/fw/m/liveManager.min.js
 */
/**
 * liveManager.min.js
 * $Revision: 1.60 $
 *
 *  liveManager.min.js -- aggregated and minified
 *  DO NOT EDIT THIS FILE -- edit the individual files and rebuild
 *
 * UT LiveManager js (minified)
 *
 *   (c) 1992-2010 Cisco Systems, Inc. All rights reserved.
 *   Terms and Conditions: http://cisco.com/en/US/swassets/sw293/sitewide_important_notices.html'
 *
 *
 * MANIFEST:
 *      /web/fw/m/liveManager.js 1.5.2.1
 */

/*
 * BEGIN /web/fw/m/liveManager.js
 */
if(typeof (cdc)=="undefined"){cdc=new Object()}if(typeof (cdc.util)=="undefined"){cdc.util=new Object()}if(typeof (cdc.util.ensureNamespace)=="undefined"){cdc.util.ensureNamespace=function(B){if(!B){return }var C=B.split(".");var D=window;for(var A=0;A<C.length;A++){var E=C[A];if(typeof (D[E])!="object"){D[E]=new Object()}D=D[E]}}}cdc.util.ensureNamespace("cdc.ut.liveManager");cdc.util.ensureNamespace("cdc.ut.trackEvent");cdc.util.ensureNamespace("cdc.ut.eventqueue");cdc.util.ensureNamespace("cdc.ut.config");cdc.ut.config.set=function(B,A,C){C={};if(typeof B=="string"){C[B]=A}else{C=B}for(B in C){if(typeof C[B]!="undefined"){cdc.ut.config[B]=C[B]}}};cdc.ut.liveManager={q:{},filesToLoad:[],fileIsLoaded:{},loadedFileCount:0,o:0,lmIsLoaded:0,img:[],loadFiles:function(fileInformation){if(fileInformation.notAsync){this.filesToLoad.push(fileInformation)}if(document.createElement){var nodeId="Lm_"+fileInformation.nodeIdSuffix;if(!document.getElementById(nodeId)){try{eval(fileInformation.initScript)}catch(exceptionObj){}var scriptNode=document.createElement("script");scriptNode.language="javascript";scriptNode.type="text/javascript";scriptNode.src=fileInformation.fileURL;scriptNode.id=nodeId;document.getElementsByTagName("head")[0].appendChild(scriptNode)}}},LOAD:function(libraryName){this.fileIsLoaded[libraryName]=0;var count=this.filesToLoad.length;for(var i=this.loadedFileCount;i<count;i++){var aFile=this.filesToLoad[i];if(this.fileIsLoaded[aFile.nodeIdSuffix]==0){this.fileIsLoaded[aFile.nodeIdSuffix]=++this.loadedFileCount;try{eval(aFile.callback)}catch(e){}}else{return }}if(this.loadedFileCount==count&&this.o==0){this.o=1}},bindEvent:function(C,A,D,B){if(C.addEventListener){C.addEventListener(A,D,false)}else{if(C.attachEvent){C.attachEvent(((B!=1)?"":"on")+A,D)}}}};cdc.ut.liveManager.config={domain:".cisco.com",exit_domain:"cisco.com",passthru:true,sc_acct:"cisco-us",sc_test:false,sc_testaccount:"cisco-dev",dop_src:"//www.cisco.com/web/fw/m/dop.min.js",dop_sensor:"//www.cisco.com/web/fw/tools/mktg_metrics/flashtag.txt?Log=1",s_code_src:"//www.cisco.com/web/fw/m/s_code_ut.min.js",s_code_ut_src:"//www.cisco.com/web/fw/m/s_code_ut.min.js",trackevent_src:"//www.cisco.com/web/fw/m/trackEvent.min.js",visualsciences_ut_src:"//www.cisco.com/web/fw/m/visualsciences_ut.min.js",rs_map_src:"//www.cisco.com/web/fw/m/rs_map.min.js",ntpagetag_src:"//www.cisco.com/web/fw/m/ntpagetag.min.js",ntpagetag_sensor:"//cisco-tags.cisco.com/tag/ntpagetag.gif",ntpagetag_sensor_secure:"//cisco-tags.cisco.com/tag/ntpagetag.gif",dev_domain:["ecmx-wip","ecmx-staging","ecmx-active","wwwin-tools-stage","cco-rtp-1","dev-stage","tools-stage","wwwin-tools-dev","preview","cco-stage","ecmx-wip-stage"],send:{dop:true,s_code:true,tnt:true,ntpagetag:false}};cdc.ut.liveManager.lh=location.hostname;for(cdc.ut.liveManager.i=0;cdc.ut.liveManager.i<cdc.ut.liveManager.config.dev_domain.length;cdc.ut.liveManager.i++){if(cdc.ut.liveManager.lh.indexOf(cdc.ut.liveManager.config.dev_domain[cdc.ut.liveManager.i])==0){cdc.ut.liveManager.config.preview=true;cdc.ut.liveManager.config.dop_sensor="//preview.cisco.com/web/fw/tools/mktg_metrics/flashtag.txt?Log=1";for(var i in cdc.ut.liveManager.config){var j=cdc.ut.liveManager.config[i];if(typeof j=="string"&&i.indexOf("_src")>0){cdc.ut.liveManager.config[i]=j.replace("www.","preview.")}}break}}if(typeof cdc.ut.eventqueue.q=="undefined"){cdc.ut.eventqueue.q=[]}cdc.ut.trackEvent={event:function(B,A){var C="";for(var D in A){C+="&"+D+"="+A[D]}A.tag=cdc.ut.liveManager.trackingVariables.tag;cdc.ut.eventqueue.q.push({a:B,b:A})}};var trackEvent=cdc.ut.trackEvent;cdc.ut.liveManager.pageLocation=location.hostname+location.pathname;cdc.ut.liveManager.du=(document.URL.split("?"))[0];if(cdc.ut.liveManager.du.indexOf("#")>0&&cdc.ut.liveManager.du.lastIndexOf("/")>cdc.ut.liveManager.du.indexOf("#")){cdc.ut.liveManager.pageLocation+=location.hash}cdc.ut.liveManager.subDomains=new Array("www.","ecmx-wip.","ecmx-staging.","ecmx-active.","wwwin-tools-stage.","cco-rtp-1.","dev-stage.","tools-stage.","wwwin-tools-dev.");for(cdc.ut.liveManager.i=0;cdc.ut.liveManager.i<cdc.ut.liveManager.subDomains.length;cdc.ut.liveManager.i++){cdc.ut.liveManager.pageLocation=cdc.ut.liveManager.pageLocation.replace(cdc.ut.liveManager.subDomains[cdc.ut.liveManager.i],"")}if(cdc.ut.liveManager.pageLocation.lastIndexOf("/")==cdc.ut.liveManager.pageLocation.length-1){cdc.ut.liveManager.pageLocation=cdc.ut.liveManager.pageLocation.substring(0,cdc.ut.liveManager.pageLocation.length-1)}cdc.ut.liveManager.trackingVariables={basepage:cdc.ut.liveManager.pageLocation,property:"Cisco",tag:"ut2.0.20100823.1200",title:document.title,url:document.URL,referrer:eval("document.referrer"),linktrack:"linkpage",elementtype:"page"};cdc.ut.liveManager.trackingVariables.loc="http://"+cdc.ut.liveManager.trackingVariables.basepage;cdc.ut.liveManager.getCookieData=function(C){var A=document.cookie.indexOf(C+"=");var B="";if(A>-1){B=document.cookie.indexOf(";",A+1);B=(B>0)?B:document.cookie.length;B=(B>A)?document.cookie.substring(A+C.length+1,B):""}return B};cdc.ut.liveManager.trackingVariables.prevpage=cdc.ut.liveManager.getCookieData("s_prev");cdc.ut.liveManager.presend=function(){try{var P=["campaign","country_site","position","referring_site","creative","keyword"];var Q=location.search;if(Q==""){var C=document.URL;var F=C.indexOf("#");var E=C.indexOf("?");if(E>F){Q="?"+(C.split("?"))[1]}}Q=Q.toLowerCase();cdc.ut.liveManager.searchString=Q;var N,L,K,J,I=[];for(N=0;N<P.length;N++){if(Q.indexOf(P[N])>0){N=Q.substring(1).split("&");L={};for(J=0;J<N.length;J++){K=N[J].split("=");L[K[0]]=unescape(K[1])}K="&tag="+cdc.ut.liveManager.trackingVariables.tag+"&vs_basepage="+escape(cdc.ut.liveManager.trackingVariables.basepage)+"&vs_elementtype=page&vs_event=campaign&vs_url="+escape(document.URL);for(J=0;J<P.length;J++){if(typeof L[P[J]]!="undefined"){K+="&"+P[J]+"="+escape(L[P[J]]);I.push(escape(L[P[J]]))}}J=document.cookie;var B=J.indexOf("CP_GUTC"),A=J.indexOf(";",B),M="";if(A>B&&B>=0){M=J.substring(B+8,A)}K+="&vs_vid="+M;var G=cdc.ut.liveManager.config.dop_sensor.split(",");var O=0;for(var H=0;H<G.length;H++){O=cdc.ut.liveManager.img.push(new Image());cdc.ut.liveManager.img[O-1].src=G[H]+K}O=cdc.ut.liveManager.img.push(new Image());var D="cisco.d1.sc.omtrdc.net";if(location.protocol=="http:"){D="cisco.ssl.d1.sc.omtrdc.net"}cdc.ut.liveManager.img[O-1].src="//"+D+"/b/ss/cisco-campaign/1/H.20.3/s00000000000000?AQB=1&ndh=1&ns=cisco&g="+escape(cdc.ut.liveManager.trackingVariables.basepage)+"&r="+escape(document.referrer)+"&c21="+(I.join(": "))+"&pe=lnk_d&pev1=campaign_impression.pdf&pev2=campaign_impression.pdf&pid="+escape(document.URL)+"&oid=campaign_impression.pdf&vid="+M+"&ot=A&AQE=1";break}}}catch(I){}};if(typeof lm_libloadedflag=="undefined"){cdc.ut.liveManager.presend()}cdc.ut.liveManager.ONLOAD=function(){if(typeof cdc.ut.config!="undefined"){for(a in cdc.ut.config){if(typeof cdc.ut.config[a]!="function"){b=a.split(".");if(b.length==2&&typeof cdc.ut.liveManager.config[b[0]][b[1]]!="undefined"){cdc.ut.liveManager.config[b[0]][b[1]]=cdc.ut.config[a]}else{if(b.length==1&&typeof cdc.ut.liveManager.config[b[0]]!="undefined"){cdc.ut.liveManager.config[b[0]]=cdc.ut.config[a]}}}}if(typeof cdc.ut.config.tag!="undefined"){cdc.ut.liveManager.t.tag=cdc.ut.config.tag}if(typeof cdc.ut.config.noload!="undefined"&&(cdc.ut.config.noload=="true"||cdc.ut.config.noload==true)){cdc.ut.liveManager.lmIsLoaded=1}}if(cdc.ut.liveManager.lmIsLoaded==1){return }cdc.ut.liveManager.lmIsLoaded=1;cdc.ut.liveManager.loadFiles({nodeIdSuffix:"rs_map",fileURL:cdc.ut.liveManager.config.rs_map_src+"?v="+cdc.ut.liveManager.trackingVariables.tag,notAsync:0});var B={flag:0,loc:document.URL,url:["mike.tealium.com","/en/US/docs/"],test:function(){for(var E=0;E<this.url.length;E++){if(this.loc.indexOf(this.url[E])>-1){this.flag=1;break}}}};B.test();if(!B.flag){cdc.ut.liveManager.loadFiles({nodeIdSuffix:"vs",fileURL:cdc.ut.liveManager.config.visualsciences_ut_src+"?v="+cdc.ut.liveManager.trackingVariables.tag,notAsync:1})}cdc.ut.liveManager.loadFiles({nodeIdSuffix:"dop",fileURL:cdc.ut.liveManager.config.dop_src+"?v="+cdc.ut.liveManager.trackingVariables.tag,notAsync:1,callback:"cdc.ut.liveManager.dop.INIT()"});if((typeof s_account=="undefined")||(s.visitorNamespace=="webex")){var D=cdc.ut.liveManager.config.s_code_ut_src;var C=(""+location.pathname).toLowerCase();var A=(new RegExp(/\/web\/\w{2}\//)).exec(C);if(A!=null){A=A.toString();if(A.indexOf("/web/us/")==-1&&A.indexOf("/web/fw/")==-1){D=cdc.ut.liveManager.config.s_code_src}}cdc.ut.liveManager.loadFiles({nodeIdSuffix:"s_code",fileURL:D+"?v="+cdc.ut.liveManager.trackingVariables.tag,notAsync:1})}else{cdc.ut.liveManager.config.send.s_code=false}if(typeof NTPT_IMGSRC=="undefined"){cdc.ut.liveManager.loadFiles({nodeIdSuffix:"ntpagetag",fileURL:cdc.ut.liveManager.config.ntpagetag_src+"?v="+cdc.ut.liveManager.trackingVariables.tag,notAsync:1,callback:"NTPT_UT.init()",initScript:"NTPT_NOINITIALTAG='true'"})}cdc.ut.liveManager.loadFiles({nodeIdSuffix:"trackEvent",fileURL:cdc.ut.liveManager.config.trackevent_src+"?v="+cdc.ut.liveManager.trackingVariables.tag,notAsync:1,callback:"cdc.ut.liveManager.getPageData();cdc.ut.trackEvent.INIT();cdc.ut.trackEvent.event('view',cdc.ut.liveManager.trackingVariables)"});ratingsDisplayed=function(G,F,E,H){if(G>0||E>0){cdc.ut.trackEvent.event("custom",{bv_event:"bv_ratingdisplayed",bv_reviewcount:G,bv_avgrating:F,bv_rating_only:E,bv_buyagain:H})}};pageChanged=function(E,F){cdc.ut.trackEvent.event("custom",{bv_event:"bv_pagechanged",bv_page:E,bv_status:F})}};cdc.ut.liveManager.ONERROR=function(B,A,C){if(cdc.ut.liveManager.erf!=1){cdc.ut.liveManager.error=(typeof B=="string")?(B+"-"+C):"Unknown";cdc.ut.liveManager.erf=1}};cdc.ut.liveManager.bindEvent(window,"error",cdc.ut.liveManager.ONERROR);cdc.ut.liveManager.getPageData=function(){var I={description:1,keywords:1,date:1,pubdate:1,pushdate:1,docRequest:1,synonym:1};var M=document.getElementsByTagName("meta");for(var R=0;R<M.length;R++){if(M[R].name&&M[R].name!=""&&typeof I[M[R].name]=="undefined"){cdc.ut.liveManager.trackingVariables["meta."+M[R].name.toLowerCase()]=M[R].content.toLowerCase()}}var B=document.getElementsByTagName("div");var D=[];for(var P=0;P<B.length;P++){if(B[P].className=="hinav"){var C=B[P].innerHTML.split("<a");for(var N=0;N<C.length;N++){if(C[N].indexOf('class="parent"')>-1||C[N].indexOf('class="selected"')>-1){D.push(C[N])}}var J=[];for(var O=0;O<D.length;O++){D[O]=(D[O].split("&amp;")).join("&");D[O]=D[O].toLowerCase();var F=D[O].indexOf(">");var E=D[O].indexOf("<",N);J.push(D[O].substring(F+1,E))}cdc.ut.liveManager.trackingVariables.hinav=J.join("/");break}}if(typeof document.getElementById("nav-treecrumb")!="undefined"){var A=document.getElementsByTagName("li");var L=[];for(P=0;P<A.length;P++){var H=A[P].className;var T=A[P].parentNode.id;if(T=="nav-treecrumb"){T=A[P].innerHTML;if(T){var G=T.indexOf(">");var Q=T.indexOf("<",N);T=T.substring(G+1,Q);L.push((T.split("&amp;")).join("&"))}}if(H=="crumb-selected"){break}}cdc.ut.liveManager.trackingVariables.treecrumb=L.join("/")}if(typeof track!="undefined"){for(var S in track){if(typeof S!="function"){cdc.ut.liveManager.trackingVariables[S]=track[S]}}}var K=["meta.iapath","hinav","treecrumb"];for(N=0;N<K.length;K++){if(typeof cdc.ut.liveManager.trackingVariables[K[N]]!="undefined"){cdc.ut.liveManager.trackingVariables.sitearea=cdc.ut.liveManager.trackingVariables[K[N]];cdc.ut.liveManager.trackingVariables.sa_source=K[N];break}}if(typeof lpMTagConfig!="undefined"&&typeof lpMTagConfig.sessionVar!="undefined"){lpMTagConfig.sessionVarBackup=new Array();lpMTagConfig.sessionVarBackup=lpMTagConfig.sessionVar}};cdc.ut.liveManager.getRSMapFileData=function(){if(typeof ut_rs_map!="undefined"){var A=document.URL;for(i in ut_rs_map){if(typeof ut_rs_map[i]=="string"){if(A.indexOf(i)>-1){return ut_rs_map[i]}}}}return""};try{jQuery(document).ready(function(){cdc.ut.liveManager.ONLOAD()})}catch(e){cdc.ut.liveManager.bindEvent(window,"load",cdc.ut.liveManager.ONLOAD);setTimeout("cdc.ut.liveManager.ONLOAD",3000)}var lm_libloadedflag=1;cdc.ut.liveManager.debugThis=function(A,B){B=new Image();B.src="//cdn.tealium.com/track.gif?tag=ut2.0&msg="+A};cdc.ut.liveManager.t=cdc.ut.liveManager.trackingVariables;cdc.ut.liveManager.A=cdc.ut.liveManager.loadFiles;cdc.ut.liveManager.l=cdc.ut.liveManager.filesToLoad;for(var i=0;i<cdc.ut.liveManager.filesToLoad.length;i++){cdc.ut.liveManager.filesToLoad[i].a=cdc.ut.liveManager.filesToLoad[i].nodeIdSuffix;cdc.ut.liveManager.filesToLoad[i].b=cdc.ut.liveManager.filesToLoad[i].fileURL;cdc.ut.liveManager.filesToLoad[i].c=cdc.ut.liveManager.filesToLoad[i].notAsync;cdc.ut.liveManager.filesToLoad[i].d=cdc.ut.liveManager.filesToLoad[i].initScript;cdc.ut.liveManager.filesToLoad[i].e=cdc.ut.liveManager.filesToLoad[i].callback}if(typeof cdc!="undefined"&&typeof cdc.includer!="undefined"&&typeof cdc.includer.alreadyInPage=="object"){cdc.includer.alreadyInPage.push("/web/fw/m/liveManager.js")};
/*
 * END /web/fw/m/liveManager.min.js
 */
/*!
 * BEGIN /web/fw/lo/sso.js
 */
/**
 * sso.js
 * Revision: 1.2.2.5 
 *
 *  sso.js
 *
 * keeps login sessions synched until idle timeout occurs
 * enforces idle timeout limit
 *
 *   (c) 1992-2010 Cisco Systems, Inc. All rights reserved.
 *   Terms and Conditions: http://cisco.com/en/US/swassets/sw293/sitewide_important_notices.html
 */
cdc.util.ensureNamespace('cdc.sso');

cdc.sso = new function () {

    var environment="nosynch";
    var idstrings = /cdc-site-dev/;
    var prodstrings = /www.cisco.com|www1.cisco.com|www2.cisco.com|www3.cisco.com|www9.cisco.com|investor.cisco.com|newsroom.cisco.com|tools.cisco.com|apps.cisco.com|cisco-apps.cisco.com|cepx-active-prod.cisco.com|cepx-.*-prod1.cisco.com/;
    var stagestrings = /tools-dev.cisco.com|tools-stage.cisco.com|tools-lt.cisco.com|apps-dev.cisco.com|apps-stage.cisco.com|apps-lt.cisco.com|www-dev.cisco.com|www-dev1.cisco.com|www-dev2.cisco.com|www-lt.cisco.com|www-lt1.cisco.com|www-lt2.cisco.com|www-stage.cisco.com|www-stage1.cisco.com|www-stage2.cisco.com|www-stage9.cisco.com|cepx-active-dev.cisco.com|cepx-.*-dev1.cisco.com|cepx-active-stage.cisco.com|cepx-.*-stage1.cisco.com|cepx-active-lt.cisco.com|cepx-.*-lt1.cisco.com/;


    function isitoneofthese(mystrings) {
        var retval = window.location.host.match(mystrings)?true:false;
        return retval;
    }

    if ( isitoneofthese(idstrings) ) {
        environment="id";
    } else if (isitoneofthese(prodstrings)) {
        environment="prod";
    } else if (isitoneofthese(stagestrings)) {
        environment="stage";
    }


    var urlMap=  {
        "prod": {
            "smCheck":     window.location.protocol + "//www.cisco.com/auths/cdcsmcheck/smcheck.html",
            "oamCheck":    window.location.protocol + "//sso.cisco.com/autho/cdcoamcheck/oamcheck.html",
            "wpxSync":     window.location.protocol + "//www.cisco.com/web/login/index.html?Referrer=/docs/web/fw/lo/img.gif&amp;",
            "portalSync":  window.location.protocol + "//www.cisco.com/cisco/psn/web/site/collab/sign.gif?",
            "logout":      "https://www.cisco.com/autho/logout.html?ReturnUrl=http://www.cisco.com/web/fw/lo/logout.html"
        }
        , "stage": {
            "smCheck":     window.location.protocol + "//www-stage.cisco.com/auths/cdcsmcheck/smcheck.html",
            "oamCheck":    window.location.protocol + "//sso-nprd.cisco.com/autho/cdcoamcheck/oamcheck.html",
            "wpxSync":     window.location.protocol + "//www-stage1.cisco.com/web/login/index.html?Referrer=/docs/web/fw/lo/img.gif&amp;",
            "portalSync":  window.location.protocol + "//www-stage1.cisco.com/cisco/psn/web/site/collab/sign.gif?",
            "logout":      "https://www-stage.cisco.com/autho/logout.html?ReturnUrl=http://www-stage1.cisco.com/web/fw/lo/logout.html"
        }
        , "id": {
            "smCheck":     window.location.protocol + "//www.cisco.com/auths/cdcsmcheck/smcheck.html",
            "oamCheck":    window.location.protocol + "//sso.cisco.com/autho/cdcoamcheck/oamcheck.html",
            "wpxSync":     window.location.protocol + "//www.cisco.com/web/login/index.html?Referrer=/docs/web/fw/lo/img.gif&amp;",
            "portalSync":  window.location.protocol + "//www.cisco.com/cisco/psn/web/site/collab/sign.gif?",
            "logout":      "https://www.cisco.com/autho/logout.html?ReturnUrl=http://www.cisco.com/web/fw/lo/logout.html"
        }
    };

    if ( environment != "nosynch") {
        var smCheckUrl = urlMap[environment].smCheck;
        var oamCheckUrl = urlMap[environment].oamCheck;

        var wpxSynchUrl = urlMap[environment].wpxSync;
        var portalSynchUrl = urlMap[environment].portalSync;

        var logoutUrl = urlMap[environment].logout;

        var ssoCookieName = (environment == "prod") ? "cdcSsoTimer" : "cdcSsoTimerStage";

        var wpxImage = new Image();
        var portalImage = new Image();

        var idleTimer = 240*60*1000; // 4 hours for idle timeout
        var resynchInterval = 29*60*1000; // how often we need to synch
        var synchCheckInterval = 50*1000; // how often to check whether it is time to synch
    }

    this.check = function() {
      if ( environment != "nosynch" ) {
          var idleTime = cdc.cookie.extractCookieChip(ssoCookieName,'idleTimer');
          var timeNow = new Date().getTime();
          var scriptElem = document.createElement("script");
          scriptElem.type = "text/javascript";
          if ( idleTime > timeNow ) {
            // we only check validity with ATS once per session, so we won't do it again
            this.initialSynch();
          } else if ( cdc.cookie.getCookie("SMSESSION") && cdc.cookie.getCookie("SMSESSION")!="LOGGEDOFF" ) { // not using isAuthenticated here because it should switch eventually to testing the other one.
            // smcheck will return a call to either initialSynch() or nonSynchable()
            //jQuery.getScript(smCheckUrl);
            scriptElem.src = smCheckUrl;
            document.getElementsByTagName('head')[0].appendChild(scriptElem);
          } else if ( cdc.cookie.getCookie("ObSSOCookie") && cdc.cookie.getCookie("ObSSOCookie").indexOf("loggedout" ) != 0 ) {
            // oamcheck will return a call to either initialSynch() or nonSynchable()
            //jQuery.getScript(oamCheckUrl);
            scriptElem.src = oamCheckUrl;
            document.getElementsByTagName('head')[0].appendChild(scriptElem);
          }
      }
    };

    this.initialSynch = function() {
       if ( environment != "nosynch" ) {
          var timeNow = new Date().getTime();
          // we always want to reset the idle time out for another 4 hours on page load.
          addSessionCookieChip({cookieName:ssoCookieName,chipName:'idleTimer',chipValue:timeNow+idleTimer})
          makeSynchCalls();
          setTimeout("cdc.sso.keepSynched()",synchCheckInterval);
       }
    };

    this.keepSynched = function() {
          var timeNow = new Date().getTime();
          if ( cdc.util.isAuthenticated() ) {
            if (cdc.cookie.extractCookieChip(ssoCookieName,'idleTimer') < timeNow ) {
              timedOut();
            } else {
              makeSynchCalls();
            }
              setTimeout("cdc.sso.keepSynched()",synchCheckInterval);
          }
    };

    function makeSynchCalls() {
          var timeNow = new Date().getTime();
          var synchTimer = cdc.cookie.extractCookieChip(ssoCookieName,'resynchInterval');
          if ( !synchTimer || synchTimer <= timeNow ) {
            wpxImage.src=wpxSynchUrl+timeNow;
            portalImage.src=portalSynchUrl+timeNow;
            // update resynch timer
            addSessionCookieChip({cookieName:ssoCookieName,chipName:'resynchInterval',chipValue:timeNow+resynchInterval});
          }
    };

    function logout () {
        // first see if we've logged out already
      if (cdc.cookie.getCookie(ssoCookieName) || cdc.util.isAuthenticated() ) {
            jQuery('body').append("<iframe src='"+logoutUrl+"' style='height:0;width:0;' ></iframe>");
      }
    };

    function timedOut() {
          logout();
    };

    this.nonSynchable = function() {
          logout();
    };

    function addSessionCookieChip (args) {
          // needed because addCookieChip will make cookie last a year instead of session
          // also domain needs to be .cisco.com
            var str = cdc.cookie.getCookie(args),
            dict = cdc.cookie.unpackParamString(str);
            dict[args.chipName] = args.chipValue;
            cdc.cookie.setCookie({
                  cookieName: args.cookieName,
                  cookieValue: cdc.cookie.packParamString(dict),
                  domain:'cisco.com'
            });
    }
};

cdc.sso.staySynched = cdc.sso.initialSynch; // alias for backwards compat with ATS script, may remove dep on if it can start sending initialSynch instead

cdc.sso.check();

/*
 * END /web/fw/lo/sso.js
 */
// added by bundler script
if (typeof cdc!="undefined"&&typeof cdc.includer!="undefined"&&typeof cdc.includer.alreadyInPage=="object") {
   cdc.includer.alreadyInPage.push(
      "/web/fw/lib/jquery.js",
      "/web/fw/j/util.js",
      "/web/fw/j/cdc.cookie.js",
      "/web/fw/j/deprecated.js",
      "/web/fw/j/search_fragment.js",
      "/web/fw/w/includer.js",
      "/web/fw/lib/jquery.blockUI.js",
      "/web/fw/w/backpack/frag_global_backpack.js",
      "/web/fw/lib/jquery.hoverIntent.minified.js",
      "/web/fw/lib/jquery.bgiframe.min.js",
      "/web/fw/lib/cluetip/jquery.cluetip.js",
      "/web/fw/j/jsTemplate.js",
      "/web/fw/lib/jquery.pngFix.js",
      "/web/fw/lib/jquery.color.js",
      "/web/fw/lib/jqmodal.js",
      "/web/fw/w/modals/modals.js",
      "/web/fw/m/liveManager.min.js",
      "/web/fw/lo/sso.js"
   );
}

/* MANIFEST:
 *      /web/fw/lib/jquery.js (MD5: b341ba84bdb83c0652778fd7115a2e6e)
 *      /web/fw/j/util.js 1.21.4.1 
 *      /web/fw/j/cdc.cookie.js 1.2.6.1 
 *      /web/fw/j/deprecated.js 1.2 
 *      /web/fw/j/search_fragment.js 1.11 
 *      /web/fw/w/includer.js 1.20 
 *      /web/fw/lib/jquery.blockUI.js 1.33  (09/14/2007)
 *      /web/fw/w/backpack/frag_global_backpack.js 1.12.8.1 
 *      /web/fw/lib/jquery.hoverIntent.minified.js (MD5: cdfbb5ac7cab81d0418ca43dfc9e04aa)
 *      /web/fw/lib/jquery.bgiframe.min.js 2.1.1
 *      /web/fw/lib/cluetip/jquery.cluetip.js 0.9.8  (05/22/2008)
 *      /web/fw/j/jsTemplate.js 1.3 
 *      /web/fw/lib/jquery.pngFix.js 1.0, 31.05.2007
 *      /web/fw/lib/jquery.color.js (MD5: da36ed96af5815ffe1bd8fc38b8e194d)
 *      /web/fw/lib/jqmodal.js 06/22/2008 +r12
 *      /web/fw/w/modals/modals.js 1.2 
 *      /web/fw/m/liveManager.min.js (MD5: 6fce899234ed828b681dc29b05729c2c)
 *      /web/fw/lo/sso.js 1.2.2.5 
 */

