	function createCookie(name, value, days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
			var expires = "; expires=" + date.toGMTString();
		} else
			var expires = "";
		document.cookie = name + "=" + value + expires + "; path=/";
	}

	function readCookie(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for ( var i = 0; i < ca.length; i++) {
			var c = ca[i];
			while (c.charAt(0) == ' ')
				c = c.substring(1, c.length);
			if (c.indexOf(nameEQ) == 0)
				return c.substring(nameEQ.length, c.length);
		}
		return null;
	}

	function eraseCookie(name) {
		createCookie(name, "", -1);
	}

	

function random(lowest, highestPlus1) {
	return Math.floor(Math.random()*highestPlus1)+lowest;
}


function makeURL (scheme, server, port, path, querystring) {
	//deal with params coming from JSP
	if (scheme && scheme == 'null') scheme = null;
	if (server && server == 'null') server = null;
	if (port && port == 'null') port = null;
	if (path && path == 'null') path = null;
	if (querystring && querystring == 'null') querystring = null;
	
	var result = "";
	if (server) {
		if (scheme) {
			result += scheme + "://";
		}
		else result += "http://";
		result += server;
		if (port && port != 80) {
			result += ":" + port;
		}
	}
	result += "/";
	if (path) {
		if (path.indexOf("/") == 0) {
			result += path.substr(1);
		}
		else result += path;
	}
	if (querystring) {
		result += "?" + querystring;
	}
	//alert('made url: ' + result);
	return encodeURI(result);
}

function addParamToURL (url, name, value) {
	//deal with params coming from JSP
	if (url && url == 'null') url = null;
	if (name && name == 'null') name = null;
	if (value && value == 'null') value = null;

	var result = url;
	if (url && name && value) {
		if (url.indexOf("?") == url.length) {
			result += name + "=" + value;
		}
		else if (url.indexOf("?") == -1) {
			result += "?" + name + "=" + value;
		}
		else {
			result += "&" + name + "=" + value;
		}
	}
	//alert ('added param to ' + url + ' to get ' + result);
	return encodeURI(result);
}



function escapeApostrophes(str) {
	return (str.replace(/[\']/g,"\\'"));
}


function millisToYears (millis) {
	return millis / 1000 / 60 / 60 / 24 / 365.25;
}


function sortObj(arr){
    // Setup Arrays
    var sortedKeys = new Array();
    var sortedObj = {};
    // Separate keys and sort them
    for (var i in arr){
        sortedKeys.push(i);
    }
    sortedKeys.sort();
    // Reconstruct sorted obj based on keys
    for (var i in sortedKeys){
        sortedObj[sortedKeys[i]] = arr[sortedKeys[i]];
    }
    return sortedObj;
}


function isEmpty(map) {
   for(var key in map) {
      if (map.hasOwnProperty(key)) {
         return false;
      }
   }
   return true;
}

