var map = null;

// [!grid] It appears that a double-click on a cell generates the cell changed event
// even if the cell is read-only.  In any case, the privilege must be checked
// on the server, so this failure will impact performance, but nothing else.
// !!! NOTE:  This writes errors to a div names <gridName>.'Error'.

// !!! Figure out how to hook these into the button cell type
function doOnCellChanged(gridName, rId, cIn, newVal){
//alert('onCellChanged grid:'+gridName+'  row:'+rId+'  col:'+cIn+'  val:'+newVal);
	xajax_updateGridCell(gridName, rId, cIn, newVal); // Always returns true
	return true;
}

function doDeleteRow(gridName, rId){
//alert('In doDeleteRow- grid:'+gridName+'  UID:'+rId);	var status = xajax_deleteGridRow(gridName, rId);
	return true;
}

function init ()
{
//alert(new Date('Dec 05, 2006'));
//alert(new Date('').getTime());
//alert(new Date("01/01/1900").getTime());
//alert(Date.parse(new Date('')||new Date("01/01/1900")));
//var aDt = new Date('');
//alert(isNaN(aDt.getTime()));
//alert(isNaN(aDt));
//aDt = new Date('Dec 09, 2006');
//var bDt = new Date('Dec 05, 2006');
//alert(aDt-bDt);


	msds.displayState(0);		// Set default display state for 'msds' page
//	selectPage("loginPage");	// Use this page if not automatically logging on
	selectPage("welcomePage");	// Is the page renders before login, this is to be displayed

//	document.getElementById("mu_divUserDescription").style.visibility = "hidden";
//	document.getElementById("mu_btnDeleteUser").style.visibility = "hidden";
//	document.getElementById("mu_divIsUserActive").style.visibility = "hidden";

//	Load the Google MAP

// 	if (GBrowserIsCompatible())
//	{
////		var point = new GLatLng(29.733192, -95.309864);
//		map = new GMap2(document.getElementById("mapToPTG"));
// 		map.addControl(new GSmallMapControl());
//		map.setCenter(new GLatLng(29.733192, -95.309864), 13);
////		var marker = new GMarker(point);
////		map.addOverlay(marker);
//	}

//	The following automatically logs the user in as 'guest'.  Thus the navbar
//	is generated with those roles suitable for anonymous users.

	document.getElementById("lg_txtUsername").value = "guest";
	document.getElementById("lg_txtPassword").value = "guest";
	submitLogin();
}

function trace(message, messageType, css)
{
//	if (jstracer)
//	{
//		jstracer.write(message, messageType, css);
//	}
}

function validate(node)	// Wrapper, just in case we want to do something specific
{
	if (node.value > '')
		xajax_validate(node.id, node.value);
	return false;
}


function dummy(argList)
{
	alert('In dummy');
}

function selectPage(pageName) {

	if (arguments.length > 1)	// !!! Kludge - only allowing a single extra argument
		xajax_selectPage(pageName, arguments[1]);
	else
		xajax_selectPage(pageName);

	navRoot = document.getElementById("pageList");
	if (navRoot)
	{
		for (i=0; i<navRoot.childNodes.length; i++) {
			node = navRoot.childNodes[i];
			if (node.className == "page") {
				node.style.display = (node.id == pageName) ? "block" : "none";
			}
		}
	}

	return false;	// Event handled - nothing else to do.
}

// Using a javascript wrapper function allows us to disable the login button
// before emitting the HTTP request.  We do NOT want to wait for a busy server
// to respond before disabling the login button.  Indeed, once the server
// responds we have no need to disable it.

function submitLogin()
{
	xajax.$('loginButton').disabled=true;
	xajax.$('loginButton').value="please wait...";
	xajax_processLoginForm(xajax.getFormValues("loginForm"));
	return false;
}

function submitUserDetails()
{
	xajax.$('mu_btnUpdateUserDetails').disabled=true;
	xajax.$('mu_btnUpdateUserDetails').value="please wait...";
	xajax_processUserDetailsForm(xajax.getFormValues("userForm"));
	return false;
}

function displayNavbar(yesNo)
{
	document.getElementById("navbar").style.display = (yesNo != 0) ? "block" : "none";
}

function selectUser(selectNode)
{
	var idx = selectNode.selectedIndex;
	if (idx == 0) {
		document.getElementById("mu_btnDeleteUser").style.visibility = "hidden";
		xajax_selectUser("");
	}
	else {
		var userName = selectNode.childNodes[idx].innerHTML;
		xajax_selectUser(userName);
	}
	return false;	// Event handled - nothing else to do.
}

function deleteUser()
{
	var selectNode = document.getElementById("mu_selExistingUsers");
	var idx = selectNode.selectedIndex;
	var userName = (idx == 0) ? "" : selectNode.childNodes[idx].innerHTML;
	xajax_deleteUser(userName);
	return false;
}

function selectRole(selectNode)
{
	var idx = selectNode.selectedIndex;
	var roleName = (idx == 0) ? "" : selectNode.childNodes[idx].innerHTML;
	xajax_selectRole(roleName);
	return false;
}

function addNewRole()
{
	var textNode = document.getElementById("mr_txtNewRoleName");
	var roleName = util.trim(textNode.value);
//alert('addNewRole->'+roleName);
	xajax_addNewRole(roleName);
}

function deleteRole()
{
	var selectNode = document.getElementById("mr_selExistingRoles");
	var idx = selectNode.selectedIndex;
	var roleName = (idx == 0) ? "" : selectNode.childNodes[idx].innerHTML;
	xajax_deleteRole(roleName);
	return false;
}

function updateRoleDescription()
{
	var textNode = document.getElementById("mr_txtNewRoleDesc");
	var desc = util.trim(textNode.value);
	xajax_updateRoleDescription(desc);
}

function addNewUser()
{
	var textNode = document.getElementById("mu_txtNewUserName");
	var textVal = util.trim(textNode.value);
//alert('addNewUser->'+textVal);
	xajax_addNewUser(textVal);
}

function updateUserPassword()
{
	var textNode = document.getElementById("mu_txtUserPassword");
	var textVal = util.trim(textNode.value);
//alert('updateUserPassword->'+textVal);
	xajax_updateUserPassword(textVal);
}

function checkQueryReport(checkbox)
{
	var checkStatus = checkbox.checked;
//alert('check->'+checkStatus);
	xajax_setReportQuery(checkStatus);
}

function testConfirm()
{
	xajax_testConfirm('This is a confirmation test.');
}

function dumpObj(obj)
{
	try
	{
		alert(xajax.objectToXML(obj));
	}
	catch(e)
	{
		alert(e.name+": "+e.message);
	}
}
function dumpAttributes(node)
{
	for (var j=0; j<node.attributes.length; j++)
	{
		alert (node.attributes[j].name);
	}
}

function testCheck()
{
	element = document.getElementById('pr_checklist');
	mr.removeAllChildren(element);

	var label =  mr.setText(mr.appendChild (element, "label"), 'An option');
	var input =  mr.appendChild (label, "input", {"type":"checkbox"});
	label =  mr.setText(mr.appendChild (element, "label"), 'Another option');
	input =  mr.appendChild (label, "input", {"type":"checkbox", "checked":"checked", "disabled":"disabled"});
}

function testImgButton()
{
	trace('in testImgButton()');
}

function testTeuker()
{
//alert('javascript testTeuker()');
	xajax_testTeuker();
}

function processTeukerResponse(xmlString)
{
	tk.processResponse(xmlString)
}

function testSelect()
{
	select = document.getElementById('pr_sellist');
	mr.removeAllChildren(select);

	var option = mr.setText (mr.appendChild (select, "option", {"value":"1"}), "one");
	option =	 mr.setText (mr.appendChild (select, "option", {"value":"2"}), "two");
}

function testSelect2(selectNode)
{
	var idx = selectNode.selectedIndex;
	alert(selectNode.childNodes[idx].innerHTML);
	return false;
}

function confirmPendingAction(txt)
{
	if (confirm(txt))
	{
		xajax_executePendingAction();
	}
	else
	{
		xajax_clearPendingAction();
	}
};

function changePassword()
{
	var textNode = document.getElementById("pf_txtPassword1");
	var pwd1 = util.trim(textNode.value);
	textNode = document.getElementById("pf_txtPassword2");
	var pwd2 = util.trim(textNode.value);

	textNode = document.getElementById("pf_txtPassword1Error");
	if (pwd1 != pwd2)
	{
		textNode.innerHTML = 'The passwords do not match.';
	}
	else
	{
		xajax_changePassword(pwd1);
	}
}
