
/**
* This file contains methods necessary to run the standard PPCM page and
* will be included when PPCMPage output is sent to the user.
* This code must not be customized unless PPCMPage requires.
*/

var ID_DELIM = " ";
var SUB_COMP_PREFIX = "_sc";

var defDateFormat = "yyyy-MM-dd";
var defDateRE = "[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}";

var reqParams;
var reqValues;

var modTrackIDs = new SimpleMap();

var labelMap = new Object();
var reqAttrMap = new Array();

var inputDateArr = new Array();

var ERR_COLOR = 'orange';

/* manage port objects to communicate between widnwos */
var portMgr = new PortManager();

/* required fields are checked and give error message if they are blank */
//var reqFields = new Array();

/* in error message, the labels in this variables are used instead of column name */
//var labelMap = function(){};

/* the standard page maintains the modified fields in this variable. */
var modFields = new Array();

/* keeps track of selected object ids */
var selOIDList = new Array();

var floatingHeaders = new Array();

var openerPortMgr;


/* grabs and sets the port manager if the opener exists */
if(opener){
	openerPortMgr = opener.portMgr;
}

function checkPDTReferenceID(obj){
	return true;
}

function checkPDTObjID(obj){
	return true;
}

function checkPDTObjRef(obj){
	return true;
}

function checkPDTBoolOnOff(obj){
	return ture;
}

function checkPDTBoolTrueFalse(obj){
	return true;
}

function checkPDTBoolYesNo(obj){
	return true;
}

function checkPDTTimeStamp(obj, nofocus){
	var val = getObjValue(obj);
	if(isEmpty(val)){
		return true;
	}
	if(!validDate("yyyy-MM-dd HH:mm:ss.SSS", val)){
		var lbl = labelMap[obj.name];
		alert("Please, enter an valid date " + (lbl?"for " + lbl + " ":"")  + "in the formt, yyyy-MM-dd HH:mm:ss.SSS!");	
		setErrCSS(obj);
		if(!nofocus){
			obj.focus();
		}
		return;
	}
	removeErrCSS(obj);
	return true;
}

function checkPDTDatetime(obj, nofocus){
	var val = getObjValue(obj);
	if(isEmpty(val)){
		return true;
	}
	if(!validDate("yyyy-MM-dd HH:mm", val)){
		var lbl = labelMap[obj.name];
		alert("Please, enter an valid date time " + (lbl?"for " + lbl + " ":"")  + "in the formt, yyyy-MM-dd HH:mm!");	
		setErrCSS(obj);	
		if(!nofocus){
			obj.focus();
		}
		return;
	}
	removeErrCSS(obj);	
	return true;
}

function checkPDTDate(obj, nofocus){
	var val = getObjValue(obj);
	if(isEmpty(val)){
		return true;
	}
	if(!validDate(defDateFormat, val)){
		var lbl = labelMap[obj.name];
		alert("Please, enter an valid date " + (lbl?"for " + lbl + " ":"")  + "in the formt, yyyy-MM-dd!");
		setErrCSS(obj);
		if(!nofocus){
			obj.focus();
		}
		return;
	}
	removeErrCSS(obj);	
	return true;
}

function checkPDTTime(obj, nofocus){
	var val = getObjValue(obj);
	if(isEmpty(val)){
		return true;
	}
	if(!validDate("HH:mm", val)){
		var lbl = labelMap[obj.name];
		alert("Please, enter an valid time " + (lbl?"for " + lbl + " ":"")  + "in the formt, HH:mm !");	
		setErrCSS(obj);
		if(!nofocus){
			obj.focus();
		}
		return;
	}
	removeErrCSS(obj);
	return true;
}

function checkPDTDelimText(obj){
	return true;
}

function checkPDTDecimal(obj){
	var val = getObjValue(obj);
	if(isEmpty(val)){
		return true;
	}
	if(!validFloat(val)){
		var lbl = labelMap[obj.name];	
		alert("Please, enter a valid decimal number " + (lbl?"for " + lbl + " ":"")  + " !");
//		var xafdef = obj.getAttribute("xdef");
//		
//		if(xafdef){
//			setObjValue(obj, xafdef);
//		}else{
//			setObjValue(obj, '');		
//		}
		setErrCSS(obj);
		obj.focus();
		return false;
	}
	removeErrCSS(obj);	
	return true;
}

function checkPDTEmail(obj){
	var val = getObjValue(obj);
	if(isEmpty(val)){
		return true;
	}
	if(!validEmail(val)){
		var lbl = labelMap[obj.name];		
		alert("Please, enter an valid email " + (lbl?"for " + lbl + " ":"")  + " !");
//		var xafdef = obj.getAttribute("xdef");
//		
//		if(xafdef){
//			setObjValue(obj, xafdef);
//		}else{
//			setObjValue(obj, '');		
//		}		
		setErrCSS(obj);		
		obj.focus();		
		return false;
	}
	removeErrCSS(obj);	
	return true;
}

function checkPDTEncrypedText(obj){
	return true;
}

function checkPDTNumber(obj){
	var val = getObjValue(obj);
	if(isEmpty(val)){
		return true;
	}
	if(!validInt(val)){
		var lbl = labelMap[obj.name];		
		alert("Please, enter a valid integer " + (lbl?"for " + lbl + " ":"")  + " !");
//		var xafdef = obj.getAttribute("xdef");
//		
//		if(xafdef){
//			setObjValue(obj, xafdef);
//		}else{
//			setObjValue(obj, '');
//		}
		setErrCSS(obj);		
		obj.focus();
		return false;
	}
	removeErrCSS(obj);	
	return true;
}

function checkPDTPassword(obj){
	return true;
}

function checkPDTText(obj){
	return true;
}

function checkPDTURL(obj){
	return true;
}

/* Check if the value of the given object conforms to the date format */
function checkDate(dateformat, dateStr){
	dateformat = dateformat.replace(/^\s+|\s+$/g, '');
	dateStr = dateStr.replace(/^\s+|\s+$/g, '');

	if(!validDateFormat(dateformat, dateStr)){
		alert("Please, enter a valid date or time in the format, " + dateformat);
//		setObjValue(obj, '');
		setErrCSS(obj);		
		obj.focus();		
		return;
	}
	
	if(!validDate(dateformat, dateStr)){
		alert("Invalid date or time : " + dateStr);
//		setObjValue(obj, '');
		setErrCSS(obj);		
		obj.focus();		
		return;
	}
	removeErrCSS(obj);
	return true;
}

function clearSearchForm(){
  	var elements = document.forms[0].elements;
 	for(var i = 0; i < elements.length; i++){
 		var obj = elements[i];
 		if(obj.name.indexOf('_from')>0 || obj.name.indexOf('_to')>0){
			clearValue(obj);
		}
 	}
}

function isEmpty(val){
	if(val === undefined || val === null || val.trim() == ''){
		return true;
	}
	return false;
}

function getDefaultValue(obj){
	return obj.getAttribute("xdef");
}

function removeErrCSS(obj){
//	var ocls = obj.getAttribute('xcss');
//	var css = obj.className;
//	
//	if(isEmpty(ocls)){
//		obj.className = ocls;
//	}
}

function setErrCSS(obj){
//	var css = obj.getAttribute("class");
//	obj.setAttribute('xcss', css);
//	css = css==null?"":css;
//	obj.className = css + " p-err-focus";
//	alert(obj.className);
}

function checkRequired(){
	
	for(var i = 0; i < reqAttrMap.length; i++){
		var objnm = reqAttrMap[i];
		var objs = document.getElementsByName(objnm);
		
		for(var j = 0; j < objs.length; j++){
			var obj = objs[j];
			var val = getObjValue(obj);
			if(val == undefined || val == '' || new String(val).trim() == ''){
				var label = labelMap[obj.name];
				alert("Please, enter " + label + " !");	
				setErrCSS(obj);
				try{				
					obj.focus();
				}catch(e){
					var subojb = document.getElementById("_sc " + obj.id + " date");
					subojb.focus();
				}
				return false;			
			}
		}
	}

	return true;
}

/** We need to generalize this. Currently, hard coded **/
function submitToOpener(obj, portId, actionId){
	var openerPort = openerPortMgr.getPort(portId);
	
	if(actionId == 'SET_VALUE'){
		var oid = obj.value;
		openerPort.accept(actionId, oid);
	}
	
	window.close();
}

/**
*	1. execute customScript;
*	2. combineDateInfo
*/
function submitWOCheck(obj, customScript, dontEnableFields){
	var rslt =  true;
	var data;
	
 	if(customScript != undefined && customScript != ''){
 		rslt = eval(customScript);	
 	}
	 	
 	if(!rslt){
 		return;
 	}
 	
 	if (!document.forms[0]) {
 		addForm();
 	}
 	
	document.forms[0].action = "/IMPPCM/PPCM";

	/* set the params and values to return from the next page */	
	
	var isReturnable = obj.getAttribute("xafReturnable") == 'true';
	
	if(isReturnable){
		setReturnable(obj);
	}
	
	assignObjSpecificAttrs(document.forms[0], obj);

	if (!document.forms[0].pagemodfield) {
	
		var hiddenObj;
		
		hiddenObj = addHiddenParam(document.forms[0], "pageid");
		setObjValue(hiddenObj, document.getElementById("pageid").value);
		
		hiddenObj = addHiddenParam(document.forms[0], "pagevent");
		setObjValue(hiddenObj, document.getElementById("pagevent").value);
				
		hiddenObj = addHiddenParam(document.forms[0], "pagemodfield");
		setObjValue(hiddenObj, document.getElementById("pagemodfield").value);
		
		hiddenObj = addHiddenParam(document.forms[0], "pageseloids");
		setObjValue(hiddenObj, document.getElementById("pageseloids").value);
		
		hiddenObj = addHiddenParam(document.forms[0], "pageportid");
		setObjValue(hiddenObj, document.getElementById("pageportid").value);
		
		hiddenObj = addHiddenParam(document.forms[0], "pagesequence");
		setObjValue(hiddenObj, document.getElementById("pagesequence").value);
		
		hiddenObj = addHiddenParam(document.forms[0], "hidemenu");
		setObjValue(hiddenObj, document.getElementById("hidemenu").value);
		
		hiddenObj = addHiddenParam(document.forms[0], "pagemenu");
		setObjValue(hiddenObj, document.getElementById("pagemenu").value);
		
		hiddenObj = addHiddenParam(document.forms[0], "sortcol");
		setObjValue(hiddenObj, document.getElementById("sortcol").value);
		
		hiddenObj = addHiddenParam(document.forms[0], "sortorder");
		setObjValue(hiddenObj, document.getElementById("sortorder").value);
		
		hiddenObj = addHiddenParam(document.forms[0], "actions");
		setObjValue(hiddenObj, document.getElementById("actions").value);
		
		hiddenObj = addHiddenParam(document.forms[0], "actionLabels");
		setObjValue(hiddenObj, document.getElementById("actionLabels").value);
		
	}
	
	document.forms[0].pagemodfield.value = modTrackIDs.toString();
	document.forms[0].pagevent.value = getEvent(obj);
 	
 	if(!dontEnableFields){
 		enableFields();
 	}
 	
 	document.forms[0].submit();
}

function checkModified(obj){
	var nomod = obj.getAttribute("modTracking");
	
	if(nomod == 'false'){
		return;
	}

	var defval = obj.getAttribute("xdef");
	var val = getObjValue(obj);

	if(defval != val){
		modTrackIDs.add(obj.id);
	}
}

/**
*	1. execute customScript;
*	2. check for required fields
*   3. execute another customScript;
*	4. combineDateInfo
*/
function submitIt(obj, preChkReqScript, postChkReqScript){
	
	var rslt =  true;
	var data;
	
	if(preChkReqScript != undefined && preChkReqScript != ''){
		rslt = eval(preChkReqScript);
	}
	
	if(!rslt){
		return;
	}

 	if(!checkRequired()){
 		return;
 	}

 	if(postChkReqScript != undefined && postChkReqScript != ''){
 		rslt = eval(postChkReqScript);	
 	}
 	
 	if(!rslt){
 		return;
 	}
 	
 	/* combines all modifed values to make one value */
 	// 	alert(document.forms[0].pageseloid.value);
	// 	document.forms[0].pagereturn.value = obj.getAttribute("pagereturn");

	document.forms[0].action = "/IMPPCM/PPCM";

//	combineDateInfo();

	/* set the params and values to return from the next page */	
	
	var isReturnable = obj.getAttribute("xafReturnable") == 'true';
	
	if(isReturnable){
		setReturnable(obj);
	}

	assignObjSpecificAttrs(document.forms[0], obj);

 	document.forms[0].pagemodfield.value = modTrackIDs.toString();
 	document.forms[0].pagevent.value = getEvent(obj);
 	enableFields();
 	document.forms[0].submit();
}

/*
*	1. submit to return;
*/
function submitReturn(obj){
	var form = document.createElement('form');
	
	var bodyobj = document.getElementsByTagName('body');
	bodyobj[0].appendChild(form);
	
	form.action = "/IMPPCM/PPCM";
	
	assignObjSpecificAttrs(form, obj, true);	
 	enableFields();
	form.submit();
}

function enableFields(){
	var modFields = document.forms[0].pagemodfield.value;
	var array = modFields.split(",");
	
	var map = new Object();
	var list = new Array();
	
	for(var i = 0; i < array.length; i++){
		var fid = array[i];
		var comps = fid.split(ID_DELIM);
		var name = comps[0] + ID_DELIM + comps[1];
		
		if(!map[name]){
			list.push(name);
			map[name] = 'true';
		}
	}
	
	for(var i = 0; i < list.length; i++){
		var name = list[i];
		var objs = document.getElementsByName(name);
		for(var j = 0; j < objs.length; j++){
			var obj = objs[j];
			obj.disabled = false;
		}
	}
}

//
///*
//*  1. submit
//*/
//function submitSimple(obj){
//
//	/* set the params and values to return from the next page */	
//	var isReturnable = obj.getAttribute("xafReturnable") == 'true';
//
//	document.forms[0].action = "/IMPPCM/PPCM";
//	
//	if(isReturnable){
//		setReturnable(obj);
//	}
//	
//	assignObjSpecificAttrs(document.forms[0], obj);
//
// 	document.forms[0].pagevent.value = getEvent(obj);
// 	document.forms[0].submit();
//}

/* this is used by redirect only */
function submitRedirect(obj){
	assignObjSpecificAttrs(document.forms[0], obj);
// 	document.forms[0].pagevent.value = getEvent(obj);
 	document.forms[0].submit();
}

function setReturnable(obj){
	if(reqParams && reqValues){
		obj.setAttribute("DHI_RTPARAMS", reqParams);
		obj.setAttribute("DHI_RTVALUES", reqValues);
	}
}

function getEvent(obj){

	var ev = obj.getAttribute("DHI_pagevent");
	
	if(ev == undefined){
		ev = obj.getAttribute("name");
	}
	return ev;
}

function assignObjSpecificAttrs(formobj, obj, isReturn){
	var attrObjList = obj.attributes;
	
	for(var i = 0; i < attrObjList.length; i++){
		var attrObj = attrObjList[i];
		var name = attrObj.name;
		var val = attrObj.value;
		// DHT stands for dynamic hidden input.
		var uppername = name.toUpperCase();
		if(uppername.indexOf('DHI_') == 0){
			var inputName = name.replace(/^[Dd][Hh][Ii]_/, '');
			inputName = inputName.replace(/\-/g, ID_DELIM);
			
			var obj = document.getElementById(inputName);

			if(obj == undefined || isReturn){
				obj = addHiddenParam(formobj, inputName);
			}
			setObjValue(obj,val);
		}
	}
}

function addForm(name) {
	var form = document.createElement("form");
	document.getElementById('gwt-app').appendChild(form);
	return;
}

// creates a hidden tag and attaches to the first form object.
function addHiddenParam(formobj, name){
	var hidden = document.createElement("input");
	hidden.type = "hidden";
	hidden.name = name;
	hidden.id = name;
	formobj.appendChild(hidden);
	return hidden;
}

function init(){
//	var img = document.getElementById('XAFImgLoading');
//	var body = document.getElementById('MAIN_PANEL');
//	img.style.display = 'none';
//	body.style.display = 'block';
}

function hideLoadingImg(){
	var img = document.getElementById('XAFImgLoading');
	var body = document.getElementById('MAIN-PANEL');
	img.style.display = 'none';
}

function showLoadingImg(){
	var img = document.getElementById('XAFImgLoading');
	var body = document.getElementById('MAIN-PANEL');
	img.style.display = 'block';
	body.style.display = 'none';
}

function enforceTwoDigit(val){
	var valint = parseInt(val, 10);
	
	if(valint < 10){
		return '0' + valint;
	}
	return valint;
}

// if hour or min is modified, this function is called
function dateCompModified(obj){
	
	var idcomps = obj.id.split(ID_DELIM);
	var isSearchByExample = false;
	
	if(idcomps.length == 3){
		isSearchByExample = true
	}

	var tid = isSearchByExample?idcomps[1]:idcomps[1] + ID_DELIM + idcomps[2] + ID_DELIM + idcomps[3];
	var did = "_sc" + ID_DELIM + tid + " date";
	var hid = "_sc" + ID_DELIM + tid + " hour";
	var mid = "_sc" + ID_DELIM + tid + " min";

	var dateTargetObj = document.getElementById(tid);
	var dateObj = document.getElementById(did);	
	var hourObj = document.getElementById(hid);	
	var minObj = document.getElementById(mid);
	
	var date = dateObj?dateObj.value:undefined;
	var hour = hourObj?hourObj.value:undefined;
	var min = minObj?minObj.value:undefined;
	
	hour = hour == undefined || hour == ''?'00':enforceTwoDigit(hour);
	min = min == undefined || min == ''?'00':enforceTwoDigit(min);
	
//	if(!validDate('yyyy-MM-dd', date)){
//		alert("Date must be in the format of yyyy-mm-ddd");
//		dateObj.focus();
//		return false;
//	}
	
//	if(parseInt(hour, 10) <0 || parseInt(hour, 10) > 23){
//		alert("Hour must be between 0 and 23");
//		hourObj.focus();
//		return false;
//	}
	
//	if(parseInt(min, 10) <0 || parseInt(min, 10) > 59){
//		alert("Minute must be between 0 and 59");
//		minObj.focus();
//		return false;
//	}
		
	if(hourObj){
		hourObj.value = hour;
	}
	if(minObj){
		minObj.value = min;
	}		
	
	var dateTarget = date;
	if(hourObj){
		dateTarget += " " + hour;
	}
	if(minObj){
		dateTarget += ":" + min;
	}
	
	dateTargetObj.value = dateTarget;
	dateTargetObj.onchange();
	return true;
}

//function combineDateInfo(){
//	for(var i = 0; i < inputDateArr.length; i++){
//		var objid = inputDateArr[i];
//		var obj = document.getElementById(objid);
//		
//		var hourObj = document.getElementById(obj.name + "_hour");
//		var minObj = document.getElementById(obj.name + "_min");
//		
//		if(hourObj){
//			var hr = hourObj.value;
//			if(hr != undefined && hr.trim() != ''){
//				obj.value += ID_DELIM;
//				hr = hr.trim();
//				hr = enforceTwoDigit(hr);
//				obj.value += hr + ":";
//
//				var min = minObj.value;
//				min = min.trim();
//				min = enforceTwoDigit(min);
//				obj.value += min;
//			}
//		}
//		
//		var date = obj.value;
//		if(date.match(/^[\s|\:]*$/)){
//			obj.value = "";			
//		}
//		obj.value = obj.value.trim();
//	}
//}

///* used by MultipleObjViewer.java */
//function submitItWithOID(obj, oid){
//	var objArr = document.getElementsByName("pageobjid");
//	var oidobj = objArr[0];
//	oidobj.value = oid;
//	submitIt(obj);
//}


function toggleSearchInput(obj, cval){
	var tid = obj.getAttribute("xafNextId");
	var target = document.getElementById(tid);
	var val = cval == undefined || cval == ''?getObjValue(obj):cval;
	var nextid = target?target.getAttribute("xafNextId"):undefined;
	
	if(nextid && nextid.indexOf(' date') < 0){
		if(val == 'between'){
			target.style.display = 'inline';
		}else{
			target.style.display = 'none';	
		}
	}
	
	if(nextid){
		toggleSearchInput(target, val);
	}
}

function setSelOID(obj){
	var oid = obj.getAttribute("xafoid");
	selOIDList = new Array(oid);
}

function massOIDCheck(obj){
	var checked = obj.checked;
	var checkboxes = document.getElementsByName(obj.name);
	
	for(var i = 0; i < checkboxes.length; i++){
		var cbox = checkboxes[i];
		cbox.checked = checked;
	}
}

/* opens a window and setup to communicate with opener */
function openCommWin(portId, actionId, url){
	// creates a port.
	var port = new DataPort(portId);
	portMgr.addPort(portId, port);
	
	// opens a new window
	url += "&pageportid=" + portId + "&pageactionid=" + actionId;
	window.open(url, '', "directories=no,height=500,width=550,location=no,resizable=yes,status=no,titlebar=no,toolbar=no");
}



/* opens a 500 by 600 window without toolbar, menu, statusbar */ 
function popup(url) {
  var h=Math.min(600,screen.height-50);
  window.open(url,'popup','width=500,height='+h+',toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=0,resizable=1');
  return false;
}


/**
 * opens a 500 by 400 window without toolbar, menubar, statusbar, etc. for Help Page
 *
 */
function helpPopUp(linkRef) {
  if (!window.focus) return true;

  // get the link
  var href;
  if (typeof(linkRef) == 'string') href = linkRef;
  else href = linkRef.href;

  // pop the window, bring to top/focus
  var newWin;
  newWin = window.open(href, 'helpPopUp', 'width=500,height=400,toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1');
  newWin.focus();
  return false;
}


/**************************************************************
*  Max character count functions
***************************************************************/

function initCharCount(){
	var inputList = document.getElementsByTagName("input");
	var taList = document.getElementsByTagName('textarea');

	for(var i = 0; i < inputList.length; i++){
		var obj = inputList[i];
		if(hasMaxCharCnt(obj)){
			calculateCharCnt(obj);
		}
	}

	for(var i = 0; i < taList.length; i++){
		var obj = taList[i];
		if(hasMaxCharCnt(obj)){
			calculateCharCnt(obj);
		}
	}
}

//function checkCharCnt(obj){
//	var maxLen = obj.getAttribute("xafMaxLength");
//	var curLen = !obj.value?0:obj.value.length;
//	
//	if(curLen > parseInt(maxLen, 10)){
//		alert("The number of character is too large.\n It should be less than or equal to " + maxLen);
//		obj.focus();
//		return false;
//	}
//	return true;
//}

function calculateCharCnt(obj){
	var maxLen = obj.getAttribute("xafMaxLength");
	var curLen = !obj.value?0:obj.value.length;
	
	var curCharObj = document.getElementById(obj.id + " curr");
	var maxCharObj = document.getElementById(obj.id + " max");
	var panObj = document.getElementById(obj.id + " panel");
	
	if(closeToMax(curLen, parseInt(maxLen, 10))){
		curCharObj.style.color="red";
		if(curLen > parseInt(maxLen, 10)){
			obj.value = obj.value.substring(0, parseInt(maxLen, 10));
		}
		if(panObj){
			panObj.style.display = '';
		}
	}else{
		curCharObj.style.color='';
		if(panObj){
			panObj.style.display = 'none';
		}
	}
	
	curCharObj.innerHTML = obj.value.length;
	maxCharObj.innerHTML = obj.getAttribute("xafMaxLength");
//	return !tooMany;
}

function closeToMax(curLen, maxLen){
	return curLen >= maxLen - 5;
}

function hasMaxCharCnt(obj){
	var maxLen = obj.getAttribute("xafMaxLength");
	if(maxLen){
		return true;
	}
	return false;
}

function getAttr(objid){
	var array = objid.split(ID_DELIM);
	var idx;
	
	if(objid.indexOf(SUB_COMP_PREFIX) >= 0){
		idx = 2;
	}else{
		idx = 1;
	}
	return array[idx];
}

function getClassName(objid){
	var array = objid.split(ID_DELIM);
	
	if(objid.indexOf(SUB_COMP_PREFIX) >= 0){
		idx = 1;
	}else{
		idx = 0;
	}
	return array[idx];
}

function getRowID(objid){
	var array = objid.split(ID_DELIM);
	
	//check if array length 4 is possible, it seems that a code bug.
	if(array.length != 3 && array.length != 4 && array.length != 5){
		return;
	}
	
	var rid = array[array.length-1];
	return rid;
}

function getRequired(obj){
	var nm = obj.getAttribute("name");
	var req = requiredAttrs[nm];
	var objreq = obj.getAttribute("xafReq");
	
	if(objreq != undefined && objreq != ''){
		req = objreq;
	}
	
	return req == 'true';
}

function getParentID(obj){
	var id = obj.id;
	var arrs = id.split(ID_DELIM);
	var type = arrs[0];
	var cls = arrs[1];
	var att = arrs[2];
	var rid = arrs[3];
	
	return cls + ID_DELIM + att + ID_DELIM + rid;
}

function getRequired(obj){
	var req = obj.getAttribute("xreq");
	if(req == undefined){
		req = reqAttrMap[obj.name];
	}
	return req == "true";
}

function getLabel(obj){
	var label = obj.getAttribute("xlbl");
	if(!label){
		label = labelMap[obj.name];
	}
}

function setPPCMObjValue(obj, value, eventStr){
	setObjValue(obj, value);
	var str = "obj.on" + eventStr + "();";
	try{
		eval(str);
	}catch(e){
		// Keep going even thought the event function is not defined..
	}
}

function assigned(obj){
	var val = getObjValue(obj);
	if(val === undefined || val === null || val == ''){
		return false;
	}
	return true;
}

function setErrBG(obj){
	var bg = obj.style.backgroundColor;
	obj.setAttribute("xbg", bg);
	obj.style.backgroundColor = ERR_COLOR;
}

function clearErrBG(obj){
	obj.style.backgroundColor=obj.getAttribute("xbg");
}

/* argument 0 -> table id, argument 1, 2, 3.. -> headers to move */
function moveHeader(){
	var keytbl = document.getElementById(floatingHeaders[0]);
	var pos = findPos(keytbl);
	
	var headerTop = pos[1];
	var scrolled = document.body.scrollTop;
	
	var hobjlist = new Array();
	
	for(var i = 1; i < floatingHeaders.length; i++){
		var obj = document.getElementById(floatingHeaders[i]);
		hobjlist.push(obj);
	}
	
	if(scrolled != 0 && headerTop < scrolled){
		headerTop = scrolled + 20;
		for(var i = 0; i < hobjlist.length; i++){
			var hobj = hobjlist[i];
			hobj.style.position = "absolute";
			hobj.style.top = headerTop;
			headerTop += hobj.offsetHeight;
		}
	}else{
		for(var i = 0; i < hobjlist.length; i++){
			var hobj = hobjlist[i];
			hobj.style.position = "relative";
			hobj.style.top = "auto";
		}
	}
}

function addModifiedVal(clsnm, attrnm, rowid){
	modTrackIDs.add(clsnm + ID_DELIM + attrnm + ID_DELIM + rowid);
}

function removeModifiedVal(clsnm, attrnm, rowid){
	modTrackIDs.remove(clsnm + ID_DELIM + attrnm + ID_DELIM + rowid);
}
function validateTextField(obj, label, maxLength){
	
	if(!obj.value){
		alert(label + " is required!");
		obj.focus();
		obj.focus();
		return false;
	}
	
	if(obj.value.length > maxLength){
		alert(label + " can not be more than " + maxLength + " characters!");
		obj.focus();
		obj.focus();
		return false;
	}
	
	return true;
}

function validateEmailField(obj, label, maxLength){
	
	if(!validateTextField(obj, label, maxLength)){
		return false;
	}
	
	if(!validEmail(obj.value)){
		alert(label + " is not valid!");
		obj.focus();
		obj.focus();
		return false;
	}
	
	return true;
}

function clickMenu(label){
	document.getElementById('menu_' + label).onclick();
}

function clickSubMenu(label){
	document.getElementById('menu_sub_' + label).onclick();
}
