
var MERGE = false;
var VIEW_DUPLICATE = true;

function loadObject(objectIdPassed) {
	if(!objectIdPassed || objectIdPassed == "" || objectIdPassed == "undefined" || typeof(objectIdPassed) == "undefined" ) 
	{
		objectId = displayItem(primaryKey);
	}else {
		objectId = objectIdPassed;
	}
	
	if(objectId != "false") {
		UPDATE = true;
		//Enable delete
		try {
			document.getElementById("delete").disabled = false;
		}catch(error) {}

		//Get values from database
		request = getRequestObject();
		address = "Get";
		
		if(typeof(INSTANCE_NAME) != "undefined" && !isNull(INSTANCE_NAME)) {
			address=INSTANCE_NAME+"/Get";
		}
		var data = "objectTypeCode="+OBJECT+"&objectId="+objectId;
		//alert(data);
		sendRequestPost(address, data, request, getResponse);    
	}
	setDefaults();
}
function getResponse() {
	
	if (request.readyState == 4) {   
		if (request.status == 200) { //Successful Request
			//alert("tes: "+request.responseText);
			var xmlDoc = getXmlDoc(request.responseText);
			var error = xmlDoc.getElementsByTagName("error")[0];
			if(error != null) 
			{
				error 			    = xmlDoc.getElementsByTagName("error")[0].childNodes[0].nodeValue;
				var friendlyMessage = xmlDoc.getElementsByTagName("friendlymessage")[0] != null ? xmlDoc.getElementsByTagName("friendlymessage")[0].childNodes[0].nodeValue : "";
				var message = friendlyMessage == "" ? error : friendlyMessage;//user friendly message if available
				displayStatus(message, false, true, "\u00a0");
			}
			else {
				var row = xmlDoc.getElementsByTagName("row")[0];
				var disabled = false;
				try {
					if(row.getElementsByTagName("statusid")[0] != null &&
							row.getElementsByTagName("statusid")[0].childNodes[0].nodeValue == STATUS_DISABLED) {
						//disabled = true;	
						//remove all the save,delete, etc options on the toolbar
						var table = document.getElementById("customerMenu");
						var tds = table.getElementsByTagName("td");
						var length = tds.length;

						while(table.getElementsByTagName("td").length > 1) {//have to leave close icon
							table.getElementsByTagName("td")[0].parentNode.removeChild(table.getElementsByTagName("td")[0]);
						}
						//add empty tds
						var referenceNode = table.getElementsByTagName("td")[0];
						for(var x = 0; x<length-1; x++) {
							var td = document.createElement("td");
							td.appendChild(document.createTextNode("\u00a0"));
							//Have to insert at beginning
							referenceNode.parentNode.insertBefore(td, referenceNode );
						}
					}
				}catch(error) {
					disabled = false;
				}
				var selects 	= document.getElementsByTagName("select");
				var inputs 		= document.getElementsByTagName("input");
				var textareas 	= document.getElementsByTagName("textarea");
				var radios 		= document.getElementsByTagName("radio");
				
				if(row.getElementsByTagName("titlebar")[0] != null && 
					row.getElementsByTagName("titlebar")[0].childNodes[0] != null &&
					document.getElementById("titlebar") != null) {
					var value = row.getElementsByTagName("titlebar")[0].childNodes[0].nodeValue;
					document.getElementById("titlebar").appendChild(document.createTextNode(value));
				}else {
					//Make sure that the titlebar exists first
					if(document.getElementById("titlebar") != null) {
						document.getElementById("titlebar").appendChild(document.createTextNode("New"));
					}
				}
				for(var x = 0; x<inputs.length; x++) {
					/*
                        	if(disabled) {
                        		inputs[x].disabled = disabled;
                        	}
					 */
					if(inputs[x].type == "checkbox") {
						//Checkbox values might be null -- check
						if(row.getElementsByTagName(inputs[x].id)[0].childNodes[0] != null) {
							var value = row.getElementsByTagName(inputs[x].id)[0].childNodes[0].nodeValue;
							if(value == "t") {
								//inputs[x].checked = true;
								inputs[x].setAttribute("checked", "true");
							}else {
								//inputs[x].checked = false;
								inputs[x].removeAttribute("checked");
							}
						}
					}
					else if(inputs[x].type == "radio") { 
						//get the group of radio buttons
						if(row.getElementsByTagName(inputs[x].name)[0] != null &&
							row.getElementsByTagName(inputs[x].name)[0].childNodes.length > 0) {
							var radioGroup = document.getElementsByName(inputs[x].name);
							var value = row.getElementsByTagName(inputs[x].name)[0].childNodes[0].nodeValue;
							if(value == "t") {
								value = "yes";
							}else if(value=="f"){
								value = "no";
							}
							for(var y = 0; y<radioGroup.length; y++) {
								if(radioGroup[y].value == value) 
								{
									radioGroup[y].checked = true;
								}
							}
						}
						var radioGroup = document.getElementsByName("")
					}
					
					/*See if input is a date or a time*/
					else if(inputs[x].type != "button" && row.getElementsByTagName(inputs[x].id.toLowerCase())[0] != null && 
							row.getElementsByTagName(inputs[x].id.toLowerCase())[0].childNodes.length > 0) {
						
						var inputObject = document.getElementById(inputs[x].id)
						var value = row.getElementsByTagName(inputs[x].id.toLowerCase())[0].childNodes[0].nodeValue;
						if(inputObject.attributes.getNamedItem("date")!= null) {
							/*See if value is formatted like a date*/
							var match = /^\d{1,2}\/\d{1,2}\/\d{4} \d{1,2}:\d{1,2} \D{2}/.test(value);
							if(match) {
								/*parse out date*/
								var date = value.substring(0, value.indexOf(" "));
								var time = value.substring(value.indexOf(" "), value.length);
								document.getElementById(inputs[x].id).value = date.trim();
								document.getElementById(inputs[x].id).setAttribute("data", "true");
								//See if there is a time input cell as a sibling
								if(document.getElementById(inputObject.id+"time") != null) {
									document.getElementById(inputObject.id+"time").value = time.trim();
								}
							}	
						}
						else {
							document.getElementById(inputs[x].id).value = row.getElementsByTagName(inputs[x].id.toLowerCase())[0].childNodes[0].nodeValue;
							document.getElementById(inputs[x].id).setAttribute("data", "true");
						}
					}
				}
				/*Selects*/
				for(var x = 0; x<selects.length; x++) {
					/*if(disabled) {selects[x].disabled = disabled;}*/
					if(row.getElementsByTagName(selects[x].id)[0] != null) {
						if(row.getElementsByTagName(selects[x].id)[0].childNodes.length > 0) {
							document.getElementById(selects[x].id).value = row.getElementsByTagName(selects[x].id)[0].childNodes[0].nodeValue;
						}
					}
				}
				/*Textareas*/

				for(var x = 0; x<textareas.length; x++) {
					/*if(disabled) {textareas[x].disabled = disabled;}*/
					if(row.getElementsByTagName(textareas[x].id)[0] != null && 
							row.getElementsByTagName(textareas[x].id)[0].childNodes.length > 0) {
						//document.getElementById(textareas[x].id).appendChild(document.createTextNode(row.getElementsByTagName(textareas[x].id)[0].childNodes[0].nodeValue));
						document.getElementById(textareas[x].id).value = row.getElementsByTagName(textareas[x].id)[0].textContent;//TODO: Add support for IE
						document.getElementById(textareas[x].id).setAttribute("data", "true");
					}
				}
				if(disabled) {
					//disable images
					var imgs = document.getElementsByTagName("img");
					for(var x = 0; x<imgs.length; x++) {
						/*imgs[x].disabled = true;*/
						imgs[x].parentNode.onclick = function () {};
					}
					var menu = document.getElementById("customerMenu");
					for(var x = 0; x<menu.childNodes[1].childNodes[0].childNodes.length; x++) {
						//Should be tds
						menu.childNodes[1].childNodes[0].childNodes[x].disabled = true;
						menu.childNodes[1].childNodes[0].childNodes[x].onclick = function () {}
					}
				}
			}
			if(OBJECT == LIST_OBJECT) {
				//Have to wait until data is loaded into form to fire this event
				displaySubject(document.getElementById("typeid"));
			}
			objectLoaded(xmlDoc);
		}else {
			/*alert("Object Get failed.  Please contact system admin");*/
			displayStatus("Opps!  Slow network.  Please retry", false, true, "\u00a0");
		}
	}
}
function save(parentId, parentObjectTypeCode, objectTypeCode, refreshGrid ) {
	ACTION = "save";
	saveObject(parentId, parentObjectTypeCode, objectTypeCode, refreshGrid );
}
function saveAndNew(parentId, parentObjectTypeCode, objectTypeCode, refreshGrid ) {
	ACTION = "saveAndNew";
	saveObject(parentId, parentObjectTypeCode, objectTypeCode, refreshGrid );
}
function saveAndClose(parentId, parentObjectTypeCode, objectTypeCode, refreshGrid ) {
	ACTION = "saveAndClose";
	saveObject(parentId, parentObjectTypeCode, objectTypeCode, refreshGrid );
}
function saveObject(parentId, parentObjectTypeCode, objectTypeCode, refreshGrid ) {
	//Make sure that all req=2 fields have data in them
	var inputs = document.getElementsByTagName("input");
	for(var x = 0; x<inputs.length; x++) {
		var input = inputs[x];
		var req = input.getAttribute("req");
		if(req == "2" && (input.value == "")) {//Field is required
			alert("You must provide a value for "+document.getElementById(input.id+"_c").childNodes[0].nodeValue);
			if(!input.disabled) {
				//make sure that the tab that the field is on is displayed.  If not display it
				focusOnField(input);
			}
			return(false);
		}
		if(input.date != null) {
			var valid = validateDate(input);
			if(!valid) {return(false);}
		}else if(input.time != null) {
			var valid = validateTime(input);
			if(!valid) {return(false);}
		}			
	}
	//select requirement check
	var selects = document.getElementsByTagName("select");
	for(var x = 0; x<selects.length; x++) {
		var select = selects[x];
		var req = select.getAttribute("req");
		if(req == 2 && (select.options[select.selectedIndex].value == -1  ) ) {//Field is required
			alert("You must provide a value for "+document.getElementById(select.id+"_c").childNodes[0].nodeValue);
			focusOnField(select);
			return(false);
		}
	}
	//textarea requirement check
	var textareas = document.getElementsByTagName("textarea");
	for(var x = 0; x<textareas.length; x++) {
		var textarea = textareas[x];
		var req = textarea.getAttribute("req");
		if(req == 2 && (textarea.value == ""  ) ) {//Field is required
			alert("You must provide a value for "+document.getElementById(textarea.id+"_c").childNodes[0].nodeValue);
			focusOnField(textarea);
			return(false);
		}
	}
	var request = getRequestObject();
	var data 	= "xml="+URLEncode(getNameValuePairs(objectTypeCode, UPDATE, primaryKey, objectId));

	if(UPDATE == true) {
		address = "UpdateXml";
	}else {
		address = "CreateXml";
	}
	//Display status div
	displayStatus("Processing.  Please wait", true, false, "\u00a0");
	
	sendRequestPostNoFunction(address, data, request);    

	request.onreadystatechange = function() {
		if (request.readyState == 4) {   
			if (request.status == 200) { //Successful Request
				var xmlDoc = getXmlDoc(request.responseText);
				//alert(request.responseText);
				var error = xmlDoc.getElementsByTagName("error")[0];
				var info = xmlDoc.getElementsByTagName("info")[0];

				if(error != null) {
					//hideStatus();
					//alert("Object save AJAX call failed: "+error.childNodes[0].nodeValue);
					var error 			= xmlDoc.getElementsByTagName("error")[0].childNodes[0].nodeValue;
					var friendlyMessage = xmlDoc.getElementsByTagName("friendlymessage")[0] != null ? xmlDoc.getElementsByTagName("friendlymessage")[0].childNodes[0].nodeValue : "";
					var message = friendlyMessage == "" ? error : friendlyMessage;//user friendly message if available
					displayStatus(message, false, true, "\u00a0");
				}
				else if(info != null) {alert(info.childNodes[0].nodeValue);}
				else {
					if(objectId == "false" || objectId == "" || objectId.length == 0) {//new record
						if(xmlDoc.getElementsByTagName("objectid")[0] != null || xmlDoc.getElementsByTagName("masterobjectid")[0] != null) {
							//do nothing
						}
						else {
							objectId	= xmlDoc.getElementsByTagName("success")[0].childNodes[0].nodeValue;
							UPDATE		= true;
						}
					}
					if(xmlDoc.getElementsByTagName("objectid")[0] != null) {//found dup
						var matchingObjectId = xmlDoc.getElementsByTagName("objectid")[0].childNodes[0].nodeValue;
						try {
							document.getElementById("confirmation").getElementsByTagName("input")[0].value = "Merge";
							if(VIEW_DUPLICATE) { 
								displayStatus(xmlDoc.getElementsByTagName("message")[0].childNodes[0].nodeValue, false, true, "View Duplicate?", 
										function() {
									hm('box');
									displayStatus("Merging record.  Please wait", true, false, "\u00a0");
									mergeRecord();
									saveObject(parentId, parentObjectTypeCode, objectTypeCode, refreshGrid);
								}, 
								function() {viewDuplicate(matchingObjectId, objectTypeCode);});
								return(false);
							}
						}catch(error) {}
					}
					else if(xmlDoc.getElementsByTagName("masterobjectid")[0] != null) {//found merged record.  Open 

						var masterObjectId = xmlDoc.getElementsByTagName("masterobjectid")[0].childNodes[0].nodeValue;
						if(VIEW_DUPLICATE) { 
							displayStatus(xmlDoc.getElementsByTagName("message")[0].childNodes[0].nodeValue, false, true, "\u00a0", 
								function() {viewDuplicate(masterObjectId, objectTypeCode);}, null, "View", null);
						}
					}

					if(refreshGrid == true) {
						try {
							parent.refreshDataGrid();
						}catch(error) {}
					}
					if(objectTypeCode == SAVED_QUERY_OBJECT) {
						//refresh dropdown list
						try {
							window.opener.loadQueries();
						}catch(error) {}
					}
					if(ACTION == "saveAndClose") {
						
						if(objectTypeCode == MEMBER_OBJECT) {
							//Refresh parent grid
							try {
								window.opener.refreshDataGrid();
							}catch(error) {} //TODO: Make more elegant	 
							//Response back from save
							try {
								alert(xmlDoc.getElementsByTagName("success")[0].childNodes[0].nodeValue);
							} catch(error) {}
							try {
								alert(xmlDoc.getElementsByTagName("message")[0].childNodes[0].nodeValue);
							}catch(error) {}		
						}
						
						//window.close();
						parent.closeObject();
						
					}
					else if(ACTION =="saveAndNew") {
						ClearForm();
						//Set address info
						if(document.getElementById("stateid") != null) {
							document.getElementById("stateid").selectedIndex = 0;
							document.getElementById("country").value = "USA";
						}
						UPDATE = false;
						document.getElementById("delete").disabled = true;
					}
					//Set delete button to active if exists
					if(document.getElementById("delete") != null) {
						document.getElementById("delete").disabled = false;
					}
					/*Close statusdiv*/
					try {
						hideStatus();
					}catch(error) {}
					objectSaved();
					
				}
			}else {
				/*alert("Object save failed.  Please contact system admin: "+request.responseText);*/
				displayStatus("Opps!  Slow network.  Please retry", false, true, "\u00a0");
			}
		}
	}
}

function focusOnField(element) {

	try {
		if(document.getElementById(element.id+"_c").parentNode.parentNode.parentNode.parentNode.parentNode.style.display == "none") {
			//Collapse all tabs
			var tabTable = document.getElementById(element.id+"_c").parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
			var trs = tabTable.childNodes;
			for(var z = 1; z<trs.length; z++) {
				if(trs[z].nodeName.toLowerCase() == "tr") {
					trs[z].style.display = "none";
				}
			}
			//Disaplay appropriate tab
			var idName = document.getElementById(element.id+"_c").parentNode.parentNode.parentNode.parentNode.parentNode.id;
			showTab(document.getElementById(idName+"Tab"));
		}
		element.focus();
	}catch(error) {};
}	
/*
Create xml document to submit
 */
function getNameValuePairs(objectTypeCode, update, primaryKey, objectId) {
	//alert("getNameValuePairs");
	var attributes;
	var results 			= [  ];
	//Loop through page and retrieve all input and select tags
	if(MERGE) {
		attributes 			= {objectTypeCode:""+objectTypeCode,merge:""+MERGE};
	}
	else {
		attributes 			= {objectTypeCode:""+objectTypeCode};
	}
	var inputs = document.getElementsByTagName("input");
	var selects = document.getElementsByTagName("select");
	var textareas = document.getElementsByTagName("textarea");
	var checkboxes = document.getElementsByTagName("checkbox");
	var nameValue = "";
	var separator = "~";
	for(var x = 0; x<inputs.length; x++) {
		var input = inputs[x];
		
		if(input.type == "checkbox") {
			if(input.checked) {
				results.push(element(input.name, "true", null));
			}else {
				results.push(element(input.name, "false", null));
			}
		}else if(input.disabled == false || isNull(input.disabled)){//Make sure that the element is not disabled.  No need to save
			/*alert(input.value+":"+input.id);*/
			var hasData = false;
			if(input.attributes.getNamedItem("data") != null) {
				hasData = input.attributes.getNamedItem("data").value;
			}
			if( (input.value != "" || hasData) && input.value != null && input.type != "button") {//Do not include values that are blank
				if(input.type == "radio") 
				{
					//Get a collection of the radio inputs
					var radios = document.getElementsByName(input.name);
					for(var z = 0; z<radios.length; z++) {
						if(radios[z].checked) {
							results.push(element(radios[z].name, radios[z].value, null));
						}
					}
				}
				else {
					//Check to see if the input has two siblings.  Date time control
					var numberOfSiblings = input.parentNode.childNodes.length;
					if(document.getElementById(input.id+"time") != null) {
						var time = document.getElementById(input.id+"time").value;
						/*alert(input.name +":"+ input.value + " " + time);*/
						results.push(element(input.name, "<![CDATA["+URLEncode(input.value+ " " + time)+"]]>", null));
					}else {
						if(input.type == "text") {
							results.push(element(input.name, "<![CDATA["+URLEncode(input.value)+"]]>", null));
						}
						else if(input.type =="hidden") {
							results.push(element(input.name, "<![CDATA["+URLEncode(input.value)+"]]>", null));
						}
						else {
							results.push(element(input.name, input.value, null));
						}
					}
				}
			}
		}
	}
	for(var x = 0; x<selects.length; x++) {
		var select = selects[x];
		if(select.selectedIndex != -1 ) {
			//Check to see if there is more than one item on the 
			var selectArray = new Array();
			for(var z = 0; z<select.options.length; z++) {
				if(select.options[z].selected) {
					selectArray.push(select.options[z].value);
				}
			}
			//results.push(element(select.name, select.options[select.selectedIndex].value, null));
			results.push(element(select.name, selectArray.toString(), null));
		}
	}
	for(var x = 0; x<textareas.length; x++) {
		var textarea = textareas[x];
		var text = textarea.value;
		text = text.replace(/(\r\n|\r\r|\n\n|\n\r)/g, '\n');
		if(textarea.value.length > 0) {
			results.push(element(textarea.name, "<![CDATA["+escape(text)+"]]>", null));
		}
	}
	if(update) {
		results.push(element(primaryKey.toLowerCase(), objectId, null));
	}

	var innerXml = results.join(' ');
	var fields = element("fields", innerXml, null);
	var object = element("object", fields, attributes);

	return(object);
}

function deleteObject(objectTypeCode, objectId) {
	if(confirm("This record will be removed.  Continue?")) {
		deleteRequest = getRequestObject();
		var data = "objectTypeCode="+objectTypeCode+"&objectIds="+objectId;
		//alert("object.js: deleteObject: "+data);
		sendRequestPostNoFunction("Delete", data, deleteRequest);
		deleteRequest.onreadystatechange = function() {
			if (deleteRequest.readyState == 4) {   
				if (deleteRequest.status == 200) { //Successful Request
					var xmlDoc = getXmlDoc(deleteRequest.responseText);
					var error = xmlDoc.getElementsByTagName("error")[0];
					if(error != null) {
						/*alert("Delete Object AJAX call failed: "+error.childNodes[0].nodeValue)*/
						displayStatus("Opps! The system has generated an error.\nOur support team has been notified about problem and will have resolved shortly", false, true, "\u00a0");
					}else {
						//window.opener.loadDataGrid(objectTypeCode);
						parent.closeObject();
						parent.refreshDataGrid();
					}
				}else {
					/*alert("Could not contact Delete web service");*/
					displayStatus("Opps!  Slow network.  Please retry", false, true, "\u00a0");
				}
			}
		}
	}
}
function loadLookup(objectTypeCode, objectId, formElement) {
	var lookupRequest = getRequestObject();
	var data = "objectTypeCode="+objectTypeCode+"&objectId="+objectId;
	//alert("textmessage.js: load: "+data);
	sendRequestPostNoFunction("Lookup", data, lookupRequest);
	lookupRequest.onreadystatechange = function() {
		if (lookupRequest.readyState == 4) {   
			if (lookupRequest.status == 200) { //Successful Request
				var xmlDoc = getXmlDoc(lookupRequest.responseText);
				var error = xmlDoc.getElementsByTagName("error")[0];
				if(error != null) {
					alert("Lookup Object AJAX call failed: "+error.childNodes[0].nodeValue);
				}else {
					document.getElementById(formElement).value = xmlDoc.getElementsByTagName("lookup")[0].childNodes[0].nodeValue;
				}
			}else {
				alert("Could not contact Lookup web service");
			}
		}
	}
}
//Should be overridden on object form   
function setDefaults() {}

//Should be overridden on object form   
function objectSaved() {}

//Should be overridden on object form   
function objectLoaded() {}

function viewDuplicate(objectId, objectTypeCode) {
	if(VIEW_DUPLICATE) {
		if(objectTypeCode = CONTACT_OBJECT) {
			var url = "contact.htm?contactId="+objectId;
			//newWindow(url, "contact");
			window.location.href = url;
		}
	}
}

//display or hide options and toolbar
function toggleOptions(displayOptions) {
	//deal with options (left hand menu)
	var table = document.getElementById("optionsDiv");
	var trs = table.getElementsByTagName("tr");
	for(var x = 1; x<trs.length; x++) {
		var tr = trs[x];
		if(displayOptions) {
			if(is.ie) {
				tr.style.display = "block";
			}else {
				tr.setAttribute("style", "");
			}
		}
		else {
			tr.style.display = "none";
		}
	}
	//Deal with toolbar
	var table = document.getElementById("customerMenu");
	var tr = table.getElementsByTagName("tr")[0];
	var children = tr.childNodes;
	var tds = new Array();
	for(var x = 0; x<children.length; x++) {
		if(children[x].nodeName.toLowerCase() == "td") {
			tds.push(children[x]);
		}
	}
	for(var x = 2; x<tds.length-2; x++) {
		var td = tds[x];
		if(displayOptions) {
			if(is.ie) {
				td.style.visibility = "visible";
			}else {
				td.setAttribute("style", "");
			}
		}
		else {
			td.style.visibility = "hidden";
		}
	}
}     

function mergeRecord() {
	MERGE = true;
}   
