var ELM_TEXT = 1;
var ELM_SELECT_ONE = 2;
var ELM_SELECT_MULTIPLE = 3;
var ELM_HIDDEN = 4;
var cSep1 = '&';
var cSep2 = '#';
var cSep3 = '|';
var szCookiePath = "/wfsearch";

function AddPersonalSearch (szCookieName, szForm)
{
	var szCookie = "";
	var szDescr;
	var date = new Date (2003, 11, 30);
	var szDate = date.toGMTString ();
	var theForm = eval (szForm);

	for (var i = 0; i < theForm.elements.length; i++) {
		if (theForm.elements[i].type == "select-one") {
			szCookie += ELM_SELECT_ONE + cSep2;
			szCookie += theForm.elements[i].name + cSep2;
			var nSel = theForm.elements[i].options.selectedIndex;
			szCookie += theForm.elements[i].options[nSel].value;
		}
		else if (theForm.elements[i].type == "select-multiple") {
			if (theForm.elements[i].name == "KeyID")
				continue;
			szCookie += ELM_SELECT_MULTIPLE + cSep2;
			szCookie += theForm.elements[i].name + cSep2;
			szCookie += GetSelectedOptions (theForm.elements[i], cSep3);
		}
		else if (theForm.elements[i].type == "text") {
			szCookie += ELM_TEXT + cSep2;
			szCookie += theForm.elements[i].name + cSep2;
			szCookie += escape (theForm.elements[i].value);
		}
		else if (theForm.elements[i].type == "hidden") {
			if (theForm.elements[i].name == "Numbers" ||
									theForm.elements[i].name == "Dates" ||
									theForm.elements[i].name == "Blobs" ||
									theForm.elements[i].name == "Texts" ||
									theForm.elements[i].name == "StyleID" ||
									theForm.elements[i].name == "TypologyID") {
				szCookie += ELM_HIDDEN + cSep2;
				szCookie += theForm.elements[i].name + cSep2;
				szCookie += escape (theForm.elements[i].value);
			}
			else if (theForm.elements[i].name == "Descr_ML_MS" ||
								theForm.elements[i].name == "Descr_ML_SS") {
				szCookie += ELM_HIDDEN + cSep2;
				szCookie += theForm.elements[i].name + cSep2;

				szDescr = theForm.elements[i].value;
				var TheParseObjDescr = new ParseObj (null, 3, szDescr);
				for (szNewDescr = ""; TheParseObjDescr.string.length; ) {
					TheParseObjDescr = parseString (TheParseObjDescr);
					szNewDescr += TheParseObjDescr.List[0] + '|';
					szNewDescr += TheParseObjDescr.List[1] + '||';
				}
				szCookie += escape (szNewDescr);
			}
			else
				continue;
		}
		else
			continue;
		szCookie += cSep1;
	}
	SetCookie (szCookieName, szCookie, szCookiePath, szDate); 
}

function GetPersonalSearch (szCookieName, szForm)
{
	var arrFormElem = new Array ();
	var szCookie = GetCookie (szCookieName);
	if (!szCookie || szCookie == "")
		return;
	var TheParseElem = new ParseObj (null, 1, szCookie);
	var TheForm = eval (szForm);
	while (TheParseElem.string.length) {
		TheParseElem = MyStrCpy (TheParseElem, cSep1);
		var TheParseObj = new ParseObj (null, 3, TheParseElem.List);
		while (TheParseObj.string.length) {
			TheParseObj = parseString (TheParseObj, cSep2);
			if (TheParseObj.List[0] == ELM_SELECT_ONE ) {
				if (TheParseObj.List[1].substring (0, 4) == "Prop") {
					var theForm = eval (szForm);

					for (i = 0; i < theForm.elements.length; i++) {
						if (theForm.elements[i].name == TheParseObj.List[1]) {
							//I look for the i element in the array.
							for (j = 0; j < arrFormElem.length; j++)
								if (arrFormElem[j] == i)
									break;
							if (j == arrFormElem.length) {
								//This means that the i element has not been 
								//processed yet.
								var TheTmpElement = theForm.elements[i];
								for (var k = 0; k < TheTmpElement.options.length; k++) {
									if (TheTmpElement.options[k].value == TheParseObj.List[2]) {
										TheTmpElement.options[k].selected = true;
										break;
									}
								}
								//I save that the i element has been processed.
								arrFormElem[arrFormElem.length] = i;
								break;
							}
						}
					}
				}
				else {
					var TheElement = eval (szForm + '.' + TheParseObj.List[1]);
					if (TheElement) {
						for (var i = 0; i < TheElement.options.length; i++) {
							if (TheElement.options[i].value == TheParseObj.List[2]) {
								TheElement.options[i].selected = true;
								break;
							}
						}
					}
				}
			}
			else if (TheParseObj.List[0] == ELM_SELECT_MULTIPLE ) {
				if (TheParseObj.List[1] == "SelectedKeys") {
						SetSelectedOptions (TheForm.KeyID, TheParseObj.List[2],
											cSep3);
						AddNewKey (TheForm.KeyID,
									TheForm.SelectedKeys, null);
				}
				else {
					var TheElement = eval (szForm + '.' + TheParseObj.List[1]);
					if (TheElement) {
						SetSelectedOptions (TheElement, TheParseObj.List[2],
											cSep3);
					}
				}
			}
			else if (TheParseObj.List[0] == ELM_TEXT ||
											TheParseObj.List[0] == ELM_HIDDEN) {
				var theForm = eval (szForm);

 				for (i = 0; i < theForm.elements.length; i++) {
            		if (theForm.elements[i].name == TheParseObj.List[1]) {
						//I look for the i element in the array.
						for (j = 0; j < arrFormElem.length; j++)
							if (arrFormElem[j] == i)
								break;
						if (j == arrFormElem.length) {
							//This means that the i element has not been 
							//processed yet.
							theForm.elements[i].value = 
											unescape (TheParseObj.List[2]);
							//I save that the i element has been processed.
							arrFormElem[arrFormElem.length] = i;
							break;
						}
					}
				}
						
/*
				var TheElement = eval (szForm + '.' + TheParseObj.List[1]);
				if (TheElement)
					TheElement.value = unescape(TheParseObj.List[2]);
*/
			}
			else
				break;
		}

	}
}

function GetHiddenSearch (szCookieName, szForm)
{
	var arrFormElem = new Array ();
	var szCookie = GetCookie (szCookieName);
	if (!szCookie || szCookie == "")
		return (false);
	var TheParseElem = new ParseObj (null, 1, szCookie);
	var TheForm = eval (szForm);
	while (TheParseElem.string.length) {
		TheParseElem = MyStrCpy (TheParseElem, cSep1);
		var TheParseObj = new ParseObj (null, 3, TheParseElem.List);
		while (TheParseObj.string.length) {
			TheParseObj = parseString (TheParseObj, cSep2);
			if (TheParseObj.List[0] == ELM_SELECT_ONE) {
				if (TheParseObj.List[1].substring (0, 4) == "Prop") {
					var theForm = eval (szForm);

					for (i = 0; i < theForm.elements.length; i++) {
						if (theForm.elements[i].name == TheParseObj.List[1]) {
							//I look for the i element in the array.
							for (j = 0; j < arrFormElem.length; j++)
								if (arrFormElem[j] == i)
									break;
							if (j == arrFormElem.length) {
								//This means that the i element has not been 
								//processed yet.
								theForm.elements[i].value = 
												unescape (TheParseObj.List[2]);
								//I save that the i element has been processed.
								arrFormElem[arrFormElem.length] = i;
								break;
							}
						}
					}
				}
				else {
					var TheElement = eval (szForm + '.' + TheParseObj.List[1]);
					TheElement.value = TheParseObj.List[2];
				}
			}
			else if (TheParseObj.List[0] == ELM_SELECT_MULTIPLE) {
				var TheElement = eval (szForm + ".Key");
				TheElement.value = TheParseObj.List[2];
			}
			else if (TheParseObj.List[0] == ELM_TEXT ||
											TheParseObj.List[0] == ELM_HIDDEN) {
				var theForm = eval (szForm);

 				for (i = 0; i < theForm.elements.length; i++) {
            		if (theForm.elements[i].name == TheParseObj.List[1]) {
						//I look for the i element in the array.
						for (j = 0; j < arrFormElem.length; j++)
							if (arrFormElem[j] == i)
								break;
						if (j == arrFormElem.length) {
							//This means that the i element has not been 
							//processed yet.
							theForm.elements[i].value = 
											unescape (TheParseObj.List[2]);
							//I save that the i element has been processed.
							arrFormElem[arrFormElem.length] = i;
							break;
						}
					}
				}
/*
				var TheElement = eval (szForm + '.' + TheParseObj.List[1]);
				TheElement.value = unescape(TheParseObj.List[2]);
*/
			}
			else
				break;
		}

	}
	return (true);
}

function GetSelectedOptions (TheSelect, cSep)
{
	var szList = "";
	nLength = TheSelect.options.length;
	for (var i = 0; i < nLength; i++) {
		if (szList != "")
			szList += cSep;
		szList += TheSelect.options[i].value;
	}
	return (szList);
}

function SetSelectedOptions (TheSelect, szParsedString, cSep)
{
	var nLen = TheSelect.options.length;
	var iStart = 0;

	for (var i = TheSelect.selectedIndex; i != -1 && i < nLen; i++)
		TheSelect.options[i].selected = false;
	var TheParseObj = new ParseObj (null, 1, szParsedString);
	while (TheParseObj.string.length) {
		TheParseObj = MyStrCpy (TheParseObj, cSep);
		for (var i = 0; i < nLen; i++) {
			var iIdx = (i + iStart) < nLen ? i + iStart : i + iStart - nLen;
			if (TheSelect.options[iIdx].value == TheParseObj.List) {
				TheSelect.options[iIdx].selected = true;
				iStart = iIdx;
				break;
			}
		}
	}
}

