//***************************************************
//***** CODE COPYRIGHT PRACTICAL DATA, INC 2004 *****
//***** - USE WITHOUT PERMISSION IS PROHIBITED ******
//***************************************************
function serialize(objectName, myObject) {
	
	//***************************************
	//********* BEGIN SERIALIZATION *********
	//***************************************
	var objectString = "";
	var objectType = typeof(myObject);
	
	//***********************************************
	//******* CREATE STRING ACCORDING TO TYPE *******
	//***********************************************	
	if(objectType == 'undefined') return objectString;
	else if(objectType == 'string') {
		objectString += 'var ' + serializeString(objectName, myObject);
	} else if(objectType == 'number') {
		objectString += 'var ' + serializeNumber(objectName, myObject);
	} else if(objectType == 'boolean') {
		objectString += 'var ' + serializeBoolean(objectName, myObject);
	} else if(objectType == 'object' && myObject.constructor == Array) {
		objectString += 'var ' + serializeArray(objectName, myObject);
	} else if(objectType == 'object') {
		objectString += 'var ' + serializeObject(objectName, myObject);
	}
	
	//**************************************
	//****** RETURN SERIALIZED OBJECT ******
	//**************************************
	return objectString + "";
}

function serializeString(name, value) {
	var tempString = "";
	value = value.replace(/"/g, '\\"');
	value = value.replace(/\r/g, '\\r');
	value = value.replace(/\n/g, '\\n');

	if(name - 0 == name) tempString = '[' + name + '] = "' + value + '";\r\n';
	else tempString = name + ' = "' + value + '";\r\n';
	return tempString;
}

function serializeNumber(name, value) {

	var tempString = "";
	if(name - 0 == name) tempString = '[' + name + '] = ' + value + ';\r\n';
	else tempString = name + ' = ' + value + ';\r\n';
	return tempString;
}

function serializeBoolean(name, value) {
	var tempString = "";
	if(name - 0 == name) tempString = '[' + name + '] = ' + value + ';\r\n';
	else tempString = name + ' = ' + value + ';\r\n';
	return tempString;
}

function serializeDate(name, value) {
	var tempString = "";
	if(name - 0 == name) tempString = '[' + name + '] = new Date("' + value + '");\r\n';
	else tempString = name + ' = new Date("' + value + '");\r\n';
	return tempString;
}

function serializeObject(name, myObject) {
	var objectString = name + ' = new Object();\r\n';
	
	//*********************************************************
	//***** ITERATE OBJECT AND GENERATE EQUIVALENT STRING *****
	//*********************************************************
	var item = new Object();	//*** ITERATOR
	for(item in myObject) {
	
		//***********************************************
		//******* CREATE STRING ACCORDING TO TYPE *******
		//***********************************************
		objectType = typeof(myObject[item]);
		
		//**************************************************************************************
		//******* TRAP OBJECTS THAT HAVE BEEN SET TO NULL AND REDEFINE AS EMPTY STRINGS ********
		//**************************************************************************************
		try {
			var temp = myObject[item].constructor;
		} catch(e) {
			myObject[item] = new String();
			objectType = typeof(myObject[item]);
		}

		if(objectType == 'undefined') return objectString;
		else if(objectType == 'string' || myObject[item].constructor == String) {
			objectString += name + "." + serializeString(item, myObject[item]);
		} else if(objectType == 'number') {
			objectString += name + "." + serializeNumber(item, myObject[item]);
		} else if(objectType == 'boolean') {
			objectString += name + "." + serializeBoolean(item, myObject[item]);
		} else if(objectType == 'object' && myObject[item].constructor == Array) {
			if(item - 0 == item) objectString += serializeArray(name + "[" + item + "]", myObject[item]);
			else objectString += serializeArray(name + "." + item, myObject[item]);
		} else if(objectType == 'object' && myObject[item].constructor == Date) {
			if(item - 0 == item) objectString += serializeDate(name + "[" + item + "]", myObject[item]);
			else objectString += serializeDate(name + "." + item, myObject[item]);
		} else if(objectType == 'object') {
			if(item - 0 == item) objectString += serializeObject(name + "[" + item + "]", myObject[item]);
			else objectString += serializeObject(name + "." + item, myObject[item]);
		}
	}

	return objectString;
}


function serializeArray(name, myObject) {
	
	var objectString = name + ' = new Array();\r\n';
	
	//*********************************************************
	//***** ITERATE OBJECT AND GENERATE EQUIVALENT STRING *****
	//*********************************************************
	var item = new Object();	//*** ITERATOR
	for(item in myObject) {
	
		//***********************************************
		//******* CREATE STRING ACCORDING TO TYPE *******
		//***********************************************
		objectType = typeof(myObject[item]);
		
		//**************************************************************************************
		//******* TRAP OBJECTS THAT HAVE BEEN SET TO NULL AND REDEFINE AS EMPTY STRINGS ********
		//**************************************************************************************
		try {
			var temp = myObject[item].constructor;
		} catch(e) {
			myObject[item] = new String();
			objectType = typeof(myObject[item]);
		}

		if(objectType == 'undefined') return objectString;
		else if(objectType == 'string' || myObject[item].constructor == String) {
			objectString += name + serializeString(item, myObject[item]);
		} else if(objectType == 'number') {
			objectString += name + serializeNumber(item, myObject[item]);
		} else if(objectType == 'boolean') {
			objectString += name + serializeBoolean(item, myObject[item]);
		} else if(objectType == 'object' && myObject[item].constructor == Array) {
			if(item - 0 == item) objectString += serializeArray(name + "[" + item + "]", myObject[item]);
			else objectString += serializeArray(name + "." + item, myObject[item]);
		} else if(objectType == 'object' && myObject[item].constructor == Date) {
			if(item - 0 == item) objectString += serializeDate(name + "[" + item + "]", myObject[item]);
			else objectString += serializeDate(name + "." + item, myObject[item]);
		} else if(objectType == 'object') {
			if(item - 0 == item) objectString += serializeObject(name + "[" + item + "]", myObject[item]);
			else objectString += serializeObject(name + "." + item, myObject[item]);
		}
	}

	return objectString;
}
