// COOKIE FUNCTIONS
function DeleteCookie (name) {
          var exp = new Date();
          exp.setTime (exp.getTime() - 1);  // This cookie is history
          var cval = GetCookie (name);
          top.document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}

function GetCookie (name)

// reads a cookie

{
	var p = name + "=[^;]*";
	var r = new RegExp();
	r.compile(p);
	var f = r.exec(top.document.cookie);
	if (f) {
		return unescape(f[0].split("=")[1])
	} else {
		return null;
	}	
}

function SetCookie (name, value)

// sets a cookie

{
	var argv = SetCookie.arguments;
	var argc = SetCookie.arguments.length;
	var expires = (argc > 2) ? argv[2] : null;
	var path = "/";
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;	
	top.document.cookie = name + "=" + escape (value) +
		((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
		((path == null) ? "" : ("; path=" + path)) +
		((domain == null) ? "" : ("; domain=" + domain)) +
		((secure == true) ? "; secure" : "");
}

function MultiCookieInit (mname)

// Initializes the specified multicookie.

{
	SetCookie (mname, "");
}


function MultiCookieSet (mname, name, value)

// Adds or updates the specified  name/value pair in the specified multicookie

{
	var s = GetCookie (mname);
	if (s == null || s == "null") {
		s = "";
	}
	
	var lPattern = "@" + name + "=[^@]*";
	var regobj = new RegExp()
	regobj.compile(lPattern, "i");
	var lFoundArray = regobj.exec(s);

	if (lFoundArray) {
		var lCookieArray = lFoundArray[0].split("=");
		var lNewEntry = lCookieArray[0] + "=" + value;
		var lNewString = s.replace(regobj, lNewEntry);
	} else {
		var lNewString = s + "@" + name + "=" + value;		
	}

	SetCookie (mname, lNewString)
}

function CookieMonsterSet(mname, namearray, valuearray) 

{
	var lCookie = GetCookie (mname);
	if (lCookie == null || lCookie == "null") {
		var lCookie = "";
	}
	
	for (var i=0; i < namearray.length; i++) {		
	
		var lPattern = "@" + namearray[i] + "=[^@]*";
		var regobj = new RegExp()
		regobj.compile(lPattern, "i");
		var lFoundArray = regobj.exec(lCookie);
		
		if (lFoundArray) {
			var subCookieName = lFoundArray[0].split("=")[0];
			var lNewEntry = subCookieName + "=" + valuearray[i];
			var lCookie = lCookie.replace(regobj, lNewEntry);
		} else {
			lCookie += "@" + namearray[i] + "=" + valuearray[i];		
		}			
	}	
	SetCookie (mname, lCookie)
}

function MultiCookieGet (mname, name)

// Retrieves the specified value from specified multicookie

{
	var s = GetCookie (mname);
	if (s == null || s == "null") {
		s = "";
	}

	var lPattern = "@" + name + "=[^@]*"
	var regobj = new RegExp()
	regobj.compile(lPattern, "i");
	var lFoundArray = regobj.exec(s)
	if (lFoundArray) {
		return lFoundArray[0].split ("=")[1]
	} else {
		return "null"
	}	
}

function CookieMonsterGet (mname, namearray, evalarray)

// Retrieves the specified value from specified multicookie

{

	var lCookie = GetCookie (mname);
	if (lCookie == null || lCookie == "null" || lCookie == "") {
		return "null";
	}

	for (var i=0; i < namearray.length; i++) {		
		var lPattern = namearray[i] + "=[^@]*"
		var regobj = new RegExp()
		regobj.compile(lPattern, "i");
		var lFoundArray = regobj.exec(lCookie);
		
		if (lFoundArray) {
			q = (evalarray[i]) ? "" : "'";			 
			eval(namearray[i] + " = " + q + lFoundArray[0].split ("=")[1] + q);			
		} else {
			eval(namearray[i] + " = 'null'");
		}	
	}
}

function MultiCookieDelete (mname, name)

// Deletes the specified name/value pair from the specified multicookie

{
	var s = GetCookie (mname);
	if (s != null || s != "null" || s != ""){
		var found = "No";
		if (s != ""){			
			var lPattern = "@" + name + "=[^@]*"
			var regobj = new RegExp()
			regobj.compile(lPattern, "i");
			var lFoundArray = regobj.exec(s)			
		}
		
		if (lFoundArray) {
			var lNewString = s.replace(regobj, "");
			SetCookie (mname, lNewString);
		} else {
			return "null"
		}					
	}
}
