if(!this.JSON || navigator.appName == 'Microsoft Internet Explorer' || navigator.appCodeName == 'Mozilla'){	// Sort of hack to get around browser with native JSON
JSON=function(){
function f(n){
return n<10?'0'+n:n;
}
Date.prototype.toJSON=function(key){
return this.getUTCFullYear()+'-'+
f(this.getUTCMonth()+1)+'-'+
f(this.getUTCDate())+'T'+
f(this.getUTCHours())+':'+
f(this.getUTCMinutes())+':'+
f(this.getUTCSeconds())+'Z';
};
var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
escapeable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
gap,
indent,
meta={
'\b':'\\b',
'\t':'\\t',
'\n':'\\n',
'\f':'\\f',
'\r':'\\r',
'"':'\\"',
'\\':'\\\\'
},
rep;
function quote(string){
escapeable.lastIndex=0;
return escapeable.test(string)?
'"'+string.replace(escapeable,function(a){
var c=meta[a];
if(typeof c==='string'){
return c;
}
return'\\u'+('0000'+
(+(a.charCodeAt(0))).toString(16)).slice(-4);
})+'"':
'"'+string+'"';
}
function str(key,holder){
var i,
k,
v,
length,
mind=gap,
partial,
value=holder[key];
if(value&&typeof value==='object'&&
typeof value.toJSON==='function'){
value=value.toJSON(key);
}
if(typeof rep==='function'){
value=rep.call(holder,key,value);
}
switch(typeof value){
case'string':
return quote(value);
case'number':
return isFinite(value)?String(value):'null';
case'boolean':
case'null':
return String(value);
case'object':
if(!value){
return'null';
}
gap+=indent;
partial=[];
if(typeof value.length==='number'&&
!(value.propertyIsEnumerable('length'))){
length=value.length;
for(i=0;i<length;i+=1){
partial[i]=str(i,value)||'null';
}
v=partial.length===0?'[]':
gap?'[\n'+gap+
partial.join(',\n'+gap)+'\n'+
mind+']':
'['+partial.join(',')+']';
gap=mind;
return v;
}
if(rep&&typeof rep==='object'){
length=rep.length;
for(i=0;i<length;i+=1){
k=rep[i];
if(typeof k==='string'){
v=str(k,value,rep);
if(v){
partial.push(quote(k)+(gap?': ':':')+v);
}
}
}
}else{
for(k in value){
if(Object.hasOwnProperty.call(value,k)){
v=str(k,value,rep);
if(v){
partial.push(quote(k)+(gap?': ':':')+v);
}
}
}
}
v=partial.length===0?'{}':
gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+
mind+'}':'{'+partial.join(',')+'}';
gap=mind;
return v;
}
}
return{
stringify:function(value,replacer,space){
var i;
gap='';
indent='';
if(typeof space==='number'){
for(i=0;i<space;i+=1){
indent+=' ';
}
}else if(typeof space==='string'){
indent=space;
}
rep=replacer;
if(replacer&&typeof replacer!=='function'&&
(typeof replacer!=='object'||
typeof replacer.length!=='number')){
throw new Error('JSON.stringify');
}
return str('',{'':value});
},

parse:function(text,reviver){
var j;

function walk(holder,key){
	var k, v, value = holder[key];

	if(value && typeof value==='object'){
		for(k in value){
			if(Object.hasOwnProperty.call(value, k)){
				v = walk(value, k);
				if(v !== undefined){
					value[k] = v;
				}
				else{
					delete value[k];
				}
			}
		}
	}
	return reviver.call(holder, key, value);
}

cx.lastIndex = 0;

if(cx.test(text)){
	text = text.replace(cx, function(a){
		return '\\u'+('0000'+ (+(a.charCodeAt(0))).toString(16)).slice(-4);
	});
}

//if(/^[\],:{}\s]*$/.test(
	//text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
	//replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
	//replace(/(?:^|:|,)(?:\s*\[)+/g, '')
	//)){
	try{
		j = eval('(' + text + ')');
		return typeof reviver === 'function'? walk({'':j},''): j;
	}
//}
	catch(e){
	throw new SyntaxError('JSON.parse');
	}
}
};
}();
}

String.prototype.trim = function(){return this.replace(/^\s+|\s+$/g,"");}

var cookies = {
	set: function(name, value, expires, options) {
	if(options === undefined){options = {};}
	if(expires){
	var expires_date = new Date();
	expires_date.setDate(expires_date.getDate() + expires);}
	document.cookie = name + '=' + encodeURI(value) + ((expires)? ';expires='+expires_date.toGMTString(): '') + ((options.path)? ';path=' + options.path: '') + ((options.domain)? ';domain=' + options.domain: '') + ((options.secure)? ';secure': '');
	},

	get: function(name){
	var start = document.cookie.indexOf( name + "=" );
	var len = start + name.length + 1;
	if((!start) && (name !== document.cookie.substring(0, name.length))){return null;}
	if(start === -1){return null;}
	var end = document.cookie.indexOf(';', len);
	if(end === -1){end = document.cookie.length;}
	return decodeURI(document.cookie.substring(len, end));
	},

	/*delete: function(name, path, domain){
	if(this.get(name)){document.cookie = name + '=' + ((path)? ';path=' + path: '') + (( domain)? ';domain=' + domain: '') + ';expires=Thu, 01-Jan-1970 00:00:01 GMT';}
	},*/

	allowed: function(){
	setCookie('checkCookie', 'test', 1);
	if(this.get('checkCookie')){
	//this.delete('checkCookie');
	return true;}
	return false;
	}
};

var querySet = function() {
	var qSet = {};
	var query = window.location.search.substring(1);
	//if(query != ''){
	var pairs = query.split('&');
	for (var i=0; i<pairs.length; i++) {
	var pair = pairs[i].split('=');
	qSet[pair[0].toLowerCase()] = pair[1];}
	//}
	return qSet;
}();

var xml = {
	transform: function(xmlDoc, xsltDoc, parentNode){
		if(parentNode.innerHTML !== ''){parentNode.innerHTML = '';}
		
		if(window.XSLTProcessor){ // --MOZILLA--
			var xsltProcessor = new XSLTProcessor();
			xsltProcessor.importStylesheet(xsltDoc);
			parentNode.appendChild(xsltProcessor.transformToFragment(xmlDoc, document));
		}
		else{ 		// --IE--
			var filterXslt = new ActiveXObject('MSXML2.XSLTemplate.3.0');
			filterXslt.stylesheet = xsltDoc;
			var xsltProcess = filterXslt.createProcessor();
			xsltProcess.input = xmlDoc;
			xsltProcess.transform();
			parentNode.innerHTML = xsltProcess.output;
		}
	},
	
	parse: function(txt){
	if(window.DOMParser){ // --MOZILLA--
	var parser = new DOMParser();
	return parser.parseFromString(txt, 'text/xml');}
	else if(window.ActiveXObject){	// --IE--
	var msXmlDoc = new ActiveXObject('msxml2.freethreadeddomdocument.3.0');
	msXmlDoc.async = false;
	msXmlDoc.loadXML(txt);
	return msXmlDoc;}},
	
	prefix: null,
	name: null,
	
	parseQName: function(qName){
	var parsedName = qName.split(':', 2);
	if(parsedName.length === 2){
		xml.prefix = parsedName[0] + ':';
		xml.name = parsedName[1];
	}
	else if(parsedName.length === 1){
		xml.prefix = '';
		xml.name = parsedName[0];
	}
	},

	getNodesByTagNameNS: function(ns, tagName){
	xml.parseQName(tagName);
	if(!this.getElementsByTagNameNS){return this.getElementsByTagName(xml.prefix + xml.name);}
	else {return this.getElementsByTagNameNS(ns, xml.name);}},
	
	createNodeNS: function(ns, qName){
		if(!this.createElementNS){return this.createNode(1, qName, ns);}
		else {return this.createElementNS(ns, qName);}
	},
	
	createAttrNS: function(ns, qName){
		if(!this.createAttributeNS){return this.createNode(2, qName, ns);}
		else{return this.createAttributeNS(ns, qName);}
	},

	getAttrNS: function(ns, qName){
	xml.parseQName(qName);
	if(!this.getAttributeNS){return this.getAttribute(xml.prefix + xml.name);}
	else {return this.getAttributeNS(ns, xml.name);}},
	
	getAttrNodeNS: function(ns, qName){
	xml.parseQName(qName);
	if(!this.getAttributeNodeNS){return this.getAttributeNode(xml.prefix + xml.name);}
	else {return this.getAttributeNodeNS(ns, xml.name);}},
	
	setAttrNS: function(ns, qName, value){
		xml.parseQName(qName);
		if(!this.setAttributeNS){this.setAttribute(xml.prefix + xml.name, value);}
		else {return this.setAttributeNS(ns, xml.name, value);}
	},
	
	setAttrNodeNS: function(ns, attr){
		if(!this.setAttributeNodeNS){return this.setAttributeNode(attr);}
		else{return this.setAttributeNodeNS(ns, attr);}
	}
};

var req = {
	setObjType: function(){
	if(window.XMLHttpRequest){return new XMLHttpRequest();}
	else if(window.ActiveXObject){
	try{return new ActiveXObject('Msxml2.XMLHTTP');}
	catch(e){
	try{return ActiveXObject('Microsoft.XMLHTTP');}
	catch(e){
	alert('This site has encountered an issue that will keep you from changing your preferences. Please call to have your preferences changed.');
	return;}}}
	},

	createFormString: function(valSet){
	var formString = '';
	for(val in valSet){if(valSet.hasOwnProperty){formString += val + '=' + JSON.stringify(valSet[val]) + '&';}}
	return formString.slice(0,-1);		// removes extra '&' from the end of formString
	},
	
	getReqExe: function(qString, response, url, showProgress){
	if(showProgress){ req.ShowProgress(); }
	if(qString == ''){ qString = '?timestamp=' + (new Date).getTime(); }
	else{ qString += '&timestamp=' + (new Date).getTime() }
	var http = this.setObjType();
	var questionMark =  qString !== ''? '?': '';
	http.onreadystatechange = function(){if(http.readyState === 4 && http.status === 200){response(http);}};
	http.open('GET', url + questionMark + qString, true);
	http.send('');
	if(showProgress){ req.HideProgress(); }
	},
	
	postReqExe: function(valSet, response, url, showProgress){
	if(showProgress){ req.ShowProgress(); }
	var formVals = this.createFormString(valSet);
	var http = this.setObjType();
	http.onreadystatechange = function(){if(http.readyState === 4 && http.status === 200){response(http);}};
	http.open('POST', url, true);
	http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	http.setRequestHeader('Content-length', formVals);
	http.setRequestHeader("Connection", "close");
	http.send(formVals);
	if(showProgress){ req.HideProgress(); }
	},
	
	keepAlive: function(){ //keep session open as long as browser is open
	var repeat = function(){return window.setTimeout('req.keepAlive();', 60000);};
	req.postReqExe('', repeat, 'SessionExtend.aspx');
	},
	
	postHTMLExe: function(html, response, urlqstring)
	{
		if(urlqstring == ''){ urlqstring = '?timestamp=' + (new Date).getTime(); }
		else{ urlqstring += '&timestamp=' + (new Date).getTime() }
		var http = this.setObjType();
		var boundary = RequestBoundary();
		var contentType = "multipart/form-data; boundary=" + boundary;
		http.open("POST", urlqstring, true);
		http.onreadystatechange = function() { if (http.readyState === 4 && http.status === 200) { response(http); }};
		http.setRequestHeader("Content-Type", contentType);
		http.send(BuildHTMLRequest(html, boundary));
	},
	
	postStreamExe: function(stream, response, urlqstring)
	{
		if(urlqstring == ''){ urlqstring = '?timestamp=' + (new Date).getTime(); }
		else{ urlqstring += '&timestamp=' + (new Date).getTime() }
		var http = this.setObjType();
		var boundary = RequestBoundary();
		var contentType = "multipart/form-data; boundary=" + boundary;
		http.open("POST", urlqstring, true);
		http.onreadystatechange = function() { if (http.readyState === 4 && http.status === 200) { response(http); }};
		http.setRequestHeader("Content-Type", contentType);
		http.sendAsBinary(BuildStreamRequest(stream, boundary));
	},
	
	ShowProgress: function()
	{
	    //alert(window.document.getElementById('uxProgressIndicator'));
	    var topPos = 400;
        var leftPos = 600;
        if(document.body.clientHeight){
            topPos = (document.body.clientHeight - 100) / 2;
            leftPos = (document.body.clientWidth - 100) / 2;  
        }
        else if(window.innerHeight){
            topPos = (window.innerHeight - 100) / 2;
            leftPos = (window.innerWidth - 100) / 2;
        }
        window.document.getElementById('uxProgressIndicator').style.top = topPos+'px';
        window.document.getElementById('uxProgressIndicator').style.left = leftPos+'px';
	    window.document.getElementById('uxProgressIndicator').style.display = 'block'
	},
	
	HideProgress: function()
	{
	    //alert('Hide');
	    window.document.getElementById('uxProgressIndicator').style.display = 'none';
	}
	
};


function BuildHTMLRequest(html, boundary)
{
	var pxg = '';
	pxg = 'Content-Disposition: form-data; ';
	pxg += 'id="REQUESTENGINE"; ';
	pxg += 'type="HTMLREQUEST"' + '\r\n';
	pxg += "Content-Type: text/html" + '\r\n' + '\r\n';
	pxg += html + '\r\n' + '\r\n';
	var reqpxg = '--' + boundary + '\r\n';
	reqpxg += pxg;
	reqpxg += '--' + boundary + '--' + '\r\n';
	return reqpxg;
}

function BuildStreamRequest(stream, boundary)
{
	var pxg = '';
	pxg = 'Content-Disposition: form-data; ';
	pxg += 'id="REQUESTENGINE"; ';
	pxg += 'type="STREAMREQUEST"' + '\r\n';
	pxg += "Content-Type: application/octet-stream" + '\r\n' + '\r\n';
	pxg += stream + '\r\n' + '\r\n';
	var reqpxg = '--' + boundary + '\r\n';
	reqpxg += pxg;
	reqpxg += '--' + boundary + '--' + '\r\n';
	return reqpxg;
}

function RequestBoundary()
{
	return '---------------------------' + (new Date).getTime();
}