/*
cookies.js - Written by Todd Moyer - Copyright 2010, 2011.

Unauthorized use is not permitted.
*/
function deleteCookieCrumbs(c_name) {
	var crumbNumber = 0;
	var crumbCount = getCookie(c_name + '_crumbs');
	crumbCount = parseInt(crumbCount);
	if (isNaN(crumbCount)) return null;

	for (var i = 0; i < crumbCount; i++) {
		deleteCookie(c_name + '_' + crumbNumber);
	}

	deleteCookie(c_name + '_crumbs');
}
function getCookieCrumbs(c_name) {
	var crumbNumber = 0;
	var cContent = '';
	var crumbContent = '';
	var crumbCount = getCookie(c_name + '_crumbs');
	crumbCount = parseInt(crumbCount);
	

	if (isNaN(crumbCount)) return null;

	while (crumbContent != null) {
		if (crumbNumber <= crumbCount) {
			cContent += crumbContent;
			crumbContent = getCookie(c_name + '_' + crumbNumber);
			crumbNumber += 1;
		}
		else crumbContent = null
	}
	return unescape(cContent);
}

function setCookieCrumbs(cName, cData) {
	var maxCrumbSize = 2048;
	var crumb = '';
	var crumbNumber = 0;

	while (cData != '') {
		crumb = String(cData).substr(0, maxCrumbSize);
		var crumbSize = String(crumb).length;
		if (crumbSize < String(cData.length)) {
			cData = String(cData).substr(crumbSize);
		}
		else cData = '';
		setCookie(cName + '_' + crumbNumber, crumb);
		crumbNumber += 1;
	}

	setCookie(cName + '_crumbs', crumbNumber);
}
function deleteCookie(c_name) {
	c_name = siteCookiePrefix + c_name;
	document.cookie = c_name + '=;expires=Thu, 01-Jan-1970 00:00:01 GMT' + ';path=/';
}
function getCookie(c_name) {
	c_name = siteCookiePrefix + c_name;
	if (document.cookie.length > 0) {
		c_start = document.cookie.indexOf(c_name + '=');
		if (c_start != -1) {
			c_start = c_start + c_name.length + 1;
			c_end = document.cookie.indexOf(';', c_start);
			if (c_end == -1) c_end = document.cookie.length;
			return unescape(document.cookie.substring(c_start, c_end));
		}
	}
	return null;
}
function setCookie(c_name, value, expiredays) {
	//alert('settingCookie: ' + c_name, value + '=' + value);
	var exdate = new Date();
	exdate.setDate(exdate.getDate() + expiredays);
	c_name = siteCookiePrefix + c_name;
	document.cookie = c_name + "=" + value + ((expiredays == null) ? '' : ';expires=' + exdate.toUTCString()) + ';path=/';
}

function cookieDecodeXML(cString, xmlData) {
	
	//alert('cookieDecodeXML: cString=' + cString);

	while (cString != '') {
		var firstBracket = cString.indexOf('[[');
		var namePart = cString.substr(0, firstBracket);
		
		var remainder = cString.substr(firstBracket + 2);
		//alert('cookieDecodeXML: namePart=' + namePart + ',    remainder=' + remainder);
		try {
			var doc = newXML();
			var newElement = doc.createElement(namePart);
		}
		catch(e) {
			return null;
		}
		var valuePart = '';
		

		var closeBracket = remainder.indexOf(']]');
		var nextBracket = remainder.indexOf('[[');

		if ((nextBracket == -1) || (closeBracket < nextBracket)) {
			// value is simple
			
			valuePart = remainder.substr(0, closeBracket);
			$(newElement).text(valuePart);
			cString = remainder.substr(closeBracket + 2);
			//alert('simple: ' + namePart + '=' + valuePart);
			//alert('simple: cString=' + cString);
		}
		else {
			// value is complex
			
			var indent = 1;
			for (var i=0; i<remainder.length; i++) {
				var twoChars = remainder.substr(i, 2);
				if (twoChars == '[[') {
					indent += 1;
					i += 1;
					valuePart += '[[';
				}
				else if (twoChars == ']]') {
					indent -= 1;
					if (indent == 0) {
						cString = remainder.substr(i + 2);
						i = remainder.length;
						//valuePart += ']]';
					}
					else {	
						valuePart += ']]';
						i += 1;
					}
				}
				else valuePart += remainder.charAt(i);
			}
			//alert('complex: ' + namePart + '=' + valuePart);
			//alert('complex: cString=' + cString);

			cookieDecodeXML(valuePart, newElement);
			//cString = '';
		}
		$(xmlData).append(newElement);
	}

	return xmlData;
}

function cookieEncodeXML(doc, indentLevel) {
	var tabString = String.fromCharCode(9);
	function removeTabs(inStr) {
		inStr = String(inStr).split(tabString);
		inStr = inStr.join('');
		return inStr;
	}
	function removeCRLF(inStr) {
		inStr = String(inStr).split(String.fromCharCode(10));
		inStr = inStr.join('');
		inStr = String(inStr).split(String.fromCharCode(13));
		inStr = inStr.join(' ');
		return inStr;
	}
	
	if (indentLevel == null) indentLevel = 0;
	var serializedString = '';
	
	if (doc == null) return '';
	else if (doc.nodeName == null) {
		// a collection has probably been passed
		var docContents = $(doc);
		if (docContents == null) return '';
		else {
			for (var i=0; i<docContents.length; i++) {
				serializedString += cookieEncodeXML(docContents[i], indentLevel);
			}
		}
	}
	else {
		// this level is a single element - serialize it
		if (doc.nodeType == 3) {
			serializedString += escape(removeCRLF(removeTabs($(doc).text())));
		}
		else {
			serializedString += doc.nodeName + '[[';
			if ((doc.nodeName != 'Password') && (doc.nodeName != 'PasswordConfirm') && (doc.nodeName != 'OldPassword')) {
				var interior = cookieEncodeXML($(doc).contents(), indentLevel + 1);
				serializedString += interior;
			}
			serializedString += ']]';
		}
	}
	return serializedString;
}
