/*
version 3.1.2
last update on 15/06/2006:
updated stripSpaces
added puw global variable
*/

/* Constants */
var utils='loaded';
var undef;
var chars='¬`¦!"£$^&*()_+-={}[]:@~;\'#|<>?\\,./%';
var subst=['%AC','%60','%A6','%21','%22','%A3','%24','%5E','%26','%2A','%28','%29','%5F','%2B','%2D','%3D','%7B','%7D','%5B','%5D','%3A','%40','%7E','%3B','%27','%23','%7C','%3C','%3E','%3F','%5C','%2C','%2E','%2F','%25'];
/* exitURL is used for adding visual sciences tracking for offsite links */
var exitURL='http://www.cisco.com/survey/exit.html?';
var puw;

/* Page variables */
var loc=splitHref(document.location.href);
var countrycode=getCountryCode();
if(loc.args.keyCode) writeCookie('cdc_kc',loc.args.keyCode);
var alerts='';

function addalert(theAlert)
{
	alerts+=theAlert+'\n';
}

function showalerts()
{
	if(alerts!='') alert(alerts);
	alerts='';
}

/* popup functions */
function openPopup(theURL,theSettings)
{
	if(theSettings==undef||theSettings=='')
	{
		theSettings='N800N400N50Y100NYY';
	}
	var settings=['toolbar=','width=','location=','height=','directories=','left=','status=','top=','menubar=','scrollbars=','resizable='];
	var part=0;
	for(var i=0;i<theSettings.length;i++)
	{
		switch(theSettings.charAt(i))
		{
			case 'Y':
				settings[part]+='yes';
			break;
			case 'N':
				settings[part]+='no';
			break;
			default:
				while((i<theSettings.length)&&(theSettings.charAt(i)!='Y')&&(theSettings.charAt(i)!='N'))
				{
					settings[part]+=theSettings.charAt(i);
					i++;
				}
				i--;
		}
		part++;
	}
	puw=window.open(theURL,'popupWindow',settings);
	puw.focus();
}

function closePopup()
{
	if(puw) puw.close();
}

/* Location functions */
function formHref(theHref)
{
	return (theHref.indexOf('mailto:')==0||theHref.indexOf('tel:')==0||theHref.indexOf('javascript:')==0||theHref.indexOf('news:')==0||theHref.indexOf('://')!=-1)?theHref:((theHref.charAt(0)=='/')?loc.server+theHref:loc.folder+theHref);
}

function exitHref(theHref)
{
	return ((theHref.indexOf('cisco.com')!=-1)?theHref:exitURL+theHref);
}

function splitHref(theHref)
{
	var href=theHref.toString();
	//displayObject(theLocation);
	var theLoc=new Object();
	if(href.indexOf('mailto:')==0||href.indexOf('tel:')==0||href.indexOf('javascript:')==0||href.indexOf('news:')==0)
	{
		theLoc.href=href;
		theLoc.notURL=true;
		return theLoc;
	}
	var c=href.indexOf('://');
	if(c==-1)
	{
		if(href.charAt(0)!='/')
		{
			href=document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1)+href;
		}
		href=document.location.protocol+'//'+document.location.hostname+href;
		c=href.indexOf('://');
	}
	theLoc.href=href;
	var l=href.length;
	var s1=(href.indexOf('/',8)!=-1)?href.indexOf('/',8):l;
	var h=(href.lastIndexOf('#')!=-1)?href.lastIndexOf('#'):l;
	var q=(href.lastIndexOf('?')!=-1)?href.lastIndexOf('?'):((h<l)?h:l);
	var sn=(href.substring(0,q).lastIndexOf('/')!=-1)?href.substring(0,q).lastIndexOf('/'):l;
	theLoc.folder=href.substring(0,sn+1);
	theLoc.server=href.substring(0,s1);
	theLoc.protocol=href.substring(0,c+1);
	theLoc.host=theLoc.server.substring(theLoc.server.lastIndexOf('/')+1);
	theLoc.path=href.substring(s1,sn+1);
	if(theLoc.path.length>2) theLoc.folders=theLoc.path.substr(1,theLoc.path.length-2).split('/');
	theLoc.filename=href.substring(sn+1,q);
	theLoc.search=href.substring(q,h);
	theLoc.args=splitQuery(theLoc.search);
	theLoc.arguments=splitQuery(theLoc.search,true);
	theLoc.hash=href.substring(h,l);
	//theLoc.args=getArgs();
	var splat=href.split('/');
	return theLoc;
}

function joinHref(theObj)
{
	var href='';
	if(theObj.href)
	{
		var tempObj=splitHref(theObj.href);
		href=tempObj.folder+tempObj.filename;
	}
	else
	{
		if(theObj.folder)
		{
			href=theObj.folder+((theObj.filename)?theObj.filename:'');
		}
		else
		{
			if(theObj.server)
			{
				href=theObj.server;
			}
			else
			{
				href=((theObj.protocol)?theObj.protocol:document.location.protocol)+'//'+((theObj.host)?theObj.host:((theObj.hostname)?theObj.hostname:document.location.hostname));
			}
			if(theObj.pathname)
			{
				href+=theObj.pathname;
			}
			else if(theObj.path||theObj.folders||theObj.filename)
			{
				href+=(theObj.path)?theObj.path:((theObj.folders)?'/'+theObj.folders.toString().replace(/,/g,'/')+'/':'/')+((theObj.filename)?theObj.filename:'');
			}
			else
			{
				href+=document.location.pathname;
			}
		}
	}
	var qs='';
	if(theObj.arguments)
	{
		for(var i in theObj.arguments)
		{
			if(!isNaA(theObj.arguments[i]))
			{
				for(var aa=0;aa<theObj.arguments[i].length;aa++)
				{
					qs+=((href.indexOf('?')!=-1)?'&':'?')+i+'='+theObj.arguments[i][aa];
				}
			}
			else
			{
				qs+=((qs.indexOf('?')!=-1)?'&':'?')+i+'='+theObj.arguments[i];
			}
		}
	}
	else if(theObj.args)
	{
		for(var i in theObj.args)
		{
			qs+=((qs.indexOf('?')!=-1)?'&':'?')+i+'='+theObj.args[i];
		}
	}
	else if(theObj.search)
	{
		qs+=theObj.search;
	}
	href+=qs;
	if(theObj.hash)
	{
		href+=theObj.hash;
	}
	return href;
}

function getCountryCode()
{
	var cc=document.location.href.toString().replace(/.*\/([A-Z]{2,4})\/.*/,'$1');
	if(cc.length>4||cc.length<2) cc=(loc.folders&&loc.folders[1])?loc.folders[1].toUpperCase():'XX';
	return cc;
}

/* Event listeners */

function addEvent(theObject,theEventType,TheFunction)
{
	if(theObject.addEventListener)
	{ 
		theObject.addEventListener(theEventType,TheFunction,false); 
		return true; 
	}
	else if(theObject.attachEvent)
	{ 
		var ret=theObject.attachEvent('on'+theEventType,TheFunction); 
		return ret; 
	}
	else
	{ 
		return false; 
	} 
}

/* Array functions */

function isNaA(a)
{
	return !((typeof(a)=='object')&&(!isNaN(a.length)));
}

function isIn(theValue,theList)
{
	if(isNaA(theValue))
	{
		return isIt(theValue,theList);
	}
	else
	{
		for(var i=0;i<theValue.length;i++)
		{
			var ret=isIt(theValue[i],theList);
			if(ret) return true;
		}
	}
	return false;
}

function isIt(theValue,theList)
{
	if(isNaA(theList))
	{
		if(theValue==theList) return true;
	}
	else
	{
		for(var i=0;i<theList.length;i++)
		{
			if(theValue==theList[i]) return true;
		}
	}
	return false;
}

function whereIs(v,l)
{
	if(!isNaA(l))
	{
		for(var i=0;i<l.length;i++)
		{
			if(v==l[i]) return i;
		}
	}
	return -1;
}

/* Object alerters */

function alertByPage(str)
{
	var lines=str.split(/\n/);
	var pages=new Array();
	var p=0;
	var i=0;
	var t=0;
	for(var l=0;l<lines.length;l++)
	{
		if(i==0) pages[p]='';
		var minusWhitespace=lines[l].replace(/\s/g,'');
		if(minusWhitespace!='')
		{
			pages[p]+=lines[l]+'\n';
			i++;
			t++;
			if(i==30)
			{
				i=0;
				p++;
			}
		}
	}
	if(t>0)
	{
		for(var p=0;p<pages.length;p++)
		{
			alert(pages[p]+((pages.length>1)?'-- Press OK to continue [Page '+(p+1)+' of '+pages.length+'] ---':''));
		}
	}
	else
	{
		alert('Object empty');
	}
}

/* displayObject displays the contents of an object recursively */
function displayObject(theObj,theName)
{
	var str=returnObject(theObj,((theName)?theName:'object'),'\n',0);
	alertByPage(str);
}

function returnObject(theObj,preStr,nl,level)
{
	var str='';
	if(!nl) nl='\n';
	for(var i in theObj)
	{
		str+=((typeof(theObj[i])=='object'&&level<100)?returnObject(theObj[i],preStr+'.'+i,nl,(level+1)):preStr+'.'+i+'='+theObj[i]+nl);
	}
	return str;
}

/* displayObj displays only first level of an object */
function displayObj(theObj)
{
	var str=returnObj(theObj);
	alertByPage(str);
}

function returnObj(theObj,nl)
{
	if(!nl) nl='\n';
	var t="";
	for(var i in theObj)
	{
		t+=i+'='+theObj[i]+nl;
	}
	return t;
}

/* Querystring functions */

function splitQuery(theQuery,intoArrays)
{
	var args=new Object();
	var qs=(theQuery.charAt(0)=='?')?theQuery.substring(1):theQuery;
	var pairs=qs.split('&');
	for(var i=0;i<pairs.length;i++)
	{
		var pair=pairs[i].split('=');
		var argname=pair[0];
		var value=(pair.length>1)?unescape(pair[1]):'';
		if(intoArrays==true&&args[argname])
		{
			if(isNaA(args[argname]))
			{
				var tmpval=escape(args[argname]);
				args[argname]=new Array()
				args[argname][0]=unescape(tmpval);
			}
			args[argname][args[argname].length]=value;
		}
		else
		{
			args[argname]=value;
		}
	}
	return args;
}

function getArgs()
{
	return splitQuery(location.search);
}

function getArguments()
{
	return splitQuery(location.search,true);
}

/* Cookie functions */

function appendCookie(theName,theCookie,theDays)
{
	var str=readCookie(theName);
	for(var i in theCookie)
	{
		str+=','+i+'~'+theCookie[i];
	}
	writeCookie(theName,str,theDays);
}

function setCookie(theName,theCookie,theDays)
{
	var str='';
	for(var i in theCookie)
	{
		str+=i+'~'+theCookie[i]+',';
	}
	str=str.substring(0,str.length-2);
	writeCookie(theName,str,theDays);
}

function getCookie(theName)
{
	var theCookie=new Object();
	var str=readCookie(theName);
	if(str)
	{
		var pairs=str.split(',');
		for(var i=0;i<pairs.length;i++)
		{
			var splat=pairs[i].split('~');
			theCookie[splat[0]]=splat[1];
		}
	}
	return theCookie;
}

function writeCookie(name,value,days,domain)
{
	var dom;
	var str=name+'='+value;
	if(days)
	{
		var now=new Date();
		now.setTime(now.getTime()+(days*24*60*60*1000));
		str+=';expires='+now.toGMTString();
	}
	if(domain)
	{
		dom=domain;
	}
	else
	{
		dom=document.location.host;
		var dot=dom.indexOf('.');
		if(dot>-1) dom=dom.substr(dot+1);
	}
	str+=';path=/;';
	if(dom!='localhost') str+='domain='+dom+';';
	document.cookie=str;
}

function readCookie(name)
{
	var nameEQ=name+'=';
	var cook=document.cookie.split(';');
	for(var ie=0;ie<cook.length;ie++)
	{
		var pair=cook[ie].stripSpaces().split('=');
		if(name==pair[0])
		{
			return pair[1];
		}
	}
	return null;
}

function killCookie(name)
{
	writeCookie(name,'',-1);
}

/* Object functions */

function copyObj(theObj)
{
	var tempObj=new Object();
	for(var i in theObj)
	{
		tempObj[i]=theObj[i];
	}
	return tempObj;
}

/* String and Number prototypes */
String.prototype.parseNumber = function()
{
	return parseInt(this.replace(/^\D*(\d+)\D.*$/,'$1').stripZeros());
}

String.prototype.stripZeros = function()
{
	return this.replace(/^0*([^0].*)/,'$1');
}

Number.prototype.padTo = function(digits)
{
	return this.padToWith(digits,'0');
}

Number.prototype.padToWith = function(digits,char)
{
	var s=this.toString();
	while(s.length<digits)
	{
		s=char+s;
	}
	return s;
}

String.prototype.padTo = function(digits)
{
	return this.padToWith(digits,'0');
}

String.prototype.padToWith = function(digits,char)
{
	var s=this;
	while(s.length<digits)
	{
		s=char+s;
	}
	return s;
}

String.prototype.stripSpaces = function()
{
	var s=this.replace(/^\s+$/,'');
	s=s.replace(/^\s*(\S.*)/,'$1');
	return s.replace(/(.*\S)\s*$/,'$1');
}

String.prototype.swapcase = function()
{
	return this.replace(/([a-z])|([A-Z])/g,function($0,$1,$2){return ($1)?$0.toUpperCase():$0.toLowerCase()});
}

String.prototype.toTitleCase = function()
{
	return this.replace(/\b([a-z])/g,function($0){return $0.toUpperCase()});
}

String.prototype.toSentenceCase = function()
{
	return this.replace(/^\W*([a-z])/,function($0){return $0.toUpperCase()});
}

String.prototype.encodeURL=function()
{
	return this.replace(/(.)/g,function($0){return (chars.indexOf($0)!=-1)?subst[chars.indexOf($0)]:$0;});
}

String.prototype.decodeURL=function()
{
	var str=this.toString();
	for(var i=0;i<subst.length;i++)
	{
		var re=new RegExp(subst[i],'g');
		str=str.replace(re,chars.charAt(i));
	}
	return str;
}

String.prototype.numberOf=function(theStr)
{
	var hit=this.indexOf(theStr);
	if(hit!=-1)
	{
		hits=1;
		while(this.indexOf(theStr,hit+theStr.length)!=-1)
		{
			hits++;
			hit=this.indexOf(theStr,hit+theStr.length);
		}
		return hits;
	}
	return 0;
}