
function vsObject(keyAttribute, valueAttribute, conditionString, keyAttributeMappingArray, keyAttributeMappingValue, valueAttributeMappingArray)
{
	this.keyAttribute = keyAttribute;
	this.valueAttribute = valueAttribute;
	this.conditionString = conditionString;
	this.keyAttributeMappingArray = keyAttributeMappingArray;
	this.keyAttributeMappingValue = keyAttributeMappingValue;
	this.valueAttributeMappingArray = valueAttributeMappingArray;
}

function createVSMappingArray(entries)
{
	var mappingArray = {};
	var entriesString = new String(entries);
	var entriesArray = entriesString.split(",");
	if(entriesArray.length > 0)
	{
		for(var i=0; i<entriesArray.length; i++)
		{
			var valuePair = entriesArray[i].split("=");
			if(valuePair.length > 1)
			{
				mappingArray[valuePair[0]] = valuePair[1];
			}
		}
	}
	return mappingArray;
}

function getVSDataFromQuerystring(url, vsObjectMap)
{
	// get the query string from the url
	var qString = new String();
	var value = new String("");

	if(typeof(vsObjectMap) == "undefined")
	{
		return value;
	}

	qString = url;
	var firstElement = 0;

	var qmIndex = qString.indexOf("?");
	if(qmIndex != -1)
	{
		qString = qString.substring((qmIndex + 1), qString.length);
		var pairs = qString.split("&");
		for(var i=0; i < pairs.length; i++)
		{
			var nameAndVal = pairs[i].split("=");
			if(nameAndVal.length > 1)
			{
				// check to see if the item is to be set
				if(vsObjectMap[nameAndVal[0]] != null)
				{
					if(firstElement != 0)
					{
						value += "&";
					}

					var key = nameAndVal[0];
					if(vsObjectMap[nameAndVal[0]].keyAttributeMappingValue != null && 
						vsObjectMap[nameAndVal[0]].keyAttributeMappingValue != "")
					{
						key = vsObjectMap[nameAndVal[0]].keyAttributeMappingValue;
					}

					value += key + "=" + nameAndVal[1];
					firstElement = 1;					
				}
			}
		}
	} 

	return value;	
}	

function setVDataCookieFromQuerystring(url, vsObjectMap, extraData)
{
	var path = new String();
	

	var vData = "vData=" + getVSDataFromQuerystring(url, vsObjectMap) + 
							((extraData) ? "" + extraData : "") +
							((path) ? "; path=" + path : "/");
	
	document.cookie = vData;

	window.location.href = url;	
}

function setVDataCookieFromForm(myForm, vsObjectMap, extraData) 
{
	setVDataCookieFromFormNoSubmit(myForm, vsObjectMap, extraData);

	if(myForm != null && myForm != "")
	{
		myForm.submit();   
	} 	
}

function setVDataCookieFromFormNoSubmit(myForm, vsObjectMap, extraData)
{
		var vData = new String("");

		if(myForm != null && myForm != "")
		{
			var firstElement = 0;	    	
			if(vsObjectMap != null)
			{
				for(var x=0; x < myForm.elements.length; x++)
				{
					var elementName = myForm.elements[x].name;
					if(vsObjectMap[elementName] != null)
					{
						var vsObj = vsObjectMap[elementName];
						
						if(typeof(vsObj) == "string")
						{
							continue;
						}

						//get key and value strings
						var key = eval("myForm.elements[x]." + vsObj.keyAttribute);
						var value = eval("myForm.elements[x]." + vsObj.valueAttribute);
						
						if (key == "undefined" || value == "undefined")
						{
							continue;
						}
						
						var addToCookie = new Boolean(true);

						if(vsObj.keyAttributeMappingArray != null && vsObj.keyAttributeMappingArray != "")
						{
							key = vsObj.keyAttributeMappingArray[key];
							if(key == null)
							{
								addToCookie = false;
							}
						}

						if(vsObj.valueAttributeMappingArray != null && vsObj.valueAttributeMappingArray != "")
						{
							var mappedValue = vsObj.valueAttributeMappingArray[value];
							if(mappedValue != null)
							{
								value = mappedValue;
							}
						}

						if(vsObj.keyAttributeMappingValue != null && vsObj.keyAttributeMappingValue != "")
						{
							key = vsObj.keyAttributeMappingValue;
						}

						//check condition
						if(addToCookie)
						{
							if(vsObj.conditionString != null && vsObj.conditionString != "")
							{
								if(eval("myForm.elements[x]" + vsObj.conditionString))
								{
									if(firstElement != 0)
									{
										vData += "&";
									}
									vData += key + "=" + value;
									firstElement = 1;		
								}
							}
							else
							{
								if(firstElement != 0)
								{
									vData += "&";
								}
								vData += key + "=" + value;
								firstElement = 1;	
							}
						}
					}
				}
			}
		}

		//check for any additional values to be retrieved from the querystring
		var qStringVals = getVSDataFromQuerystring(document.URL, vsObjectMap);
		if(qStringVals != null && qStringVals != "" && vData != null && vData != "")
		{
			vData = vData + "&" + qStringVals;
		}

		var path = new String();
		vData = "vData=" + vData + 
						((extraData) ? "" + extraData : "") +
						((path) ? "; path=" + path : "/");
		
		document.cookie = vData;	
}
