var browser=navigator.appName;
var version=navigator.appVersion;
var is_nav = false;
var is_ie = false;
// find which browser it is   
if (browser.indexOf("Netscape") >= 0) {
  if (version.indexOf("5.") >= 0) {
      is_nav = true;
      is_ie = false;
   }
}else if (browser.indexOf("Microsoft") >= 0) {
  if (version.indexOf("4.") >= 0) {
       is_ie = true;
       is_nav = false;
    }
}

var tempSelectedCell;
var hasPageMessage=false;
var tempChildren = new Array( 1 );
var tempHTML;
var tempOnClick;
var tempDiv;
var pageMessageNode;
var prevCellType;
var previousSelectedRowCt = 0;
var selectedRowArray = new Array();
var selectionOptionForDD;

 function getParentElement(pe){
  if(pe.tagName == 'TD'){
	return pe;
  }else{
	return getParentElement(pe.parentElement);	    	
  }
 }
 
 //gets the parent row of a cell
 function getParentRowElement(cell){
  if(cell.tagName == 'TR' || cell.tagName == 'tr'){
	return cell;
  }else{
	return getParentRowElement(cell.parentNode);	    	
  }
 }
 
 
 //Builds a combo
function populateComboWithElements( listOfItems ){
     var el = document.forms[0].replaceSelectParam;
     el.options.length = 0;
	 for( var i=0; i<listOfItems.length; i++){
	   el.options[i] = new Option(listOfItems[i].code,listOfItems[i].name);
	   if( el.options[i].text == selectionOptionForDD ){
	   		el.options[i].selected = true;
	   }
	 }
}
 
 
 
function buildObjectBasedOnObjectType(tdId, idKey, td1){
  if( prevCellType == "select"){
      //override this function on ur page
	   buildRequiredComboInformation(tdId, idKey, td1.getAttribute("dataColId"));
   }
}
 

//This is the function that gets kicked off when the user tabs into 
//or clicks on a cell
function replaceThis(tdId, idKey)
{
	if(!hasPageMessage)
	{
		setSelectedCellKey(tdId, idKey);
		var td1 = document.getElementById(tdId);
		writeValueToSelectedCell(td1);	
		prevCellType = td1.getAttribute("replaceObjectType");
		buildObjectBasedOnObjectType(tdId, idKey, td1);
		//set focus
		if( is_nav )
		{
		  if( prevCellType == "input" ){
	    	td1.getElementsByTagName('INPUT')[0].focus();
		  }else if( prevCellType == "select" ){
		    td1.getElementsByTagName('SELECT')[0].focus();
		  } 
		}else if( is_ie )
		{
		  if( prevCellType == "input" ){
		    if( document.getElementById( 'replaceDivSelectParam' ) != null ){
		    	document.getElementById( 'replaceDivSelectParam' ).style.display = "none"; 
			}
			// wont set focus with one command...dont ask me why :(
			var width = td1.getAttribute("replaceObjectWidth");
			//alert(width);
			td1.getElementsByTagName('INPUT')[0].size = width;
			td1.getElementsByTagName('INPUT')[0].focus();
			td1.getElementsByTagName('INPUT')[0].focus();
			td1.getElementsByTagName('INPUT')[0].select();			
		  }else if( prevCellType == "select" ){
		    replacementDiv = document.getElementById( 'replaceDivInputParam' );
		    if( replacementDiv == null ){
	 			replacementDiv = document.getElementById('replaceDivParam');
	  		}
		    replacementDiv.style.display = "none"; 
		    td1.getElementsByTagName('SELECT')[0].focus();
		  }
		}
	}
}

//Replaces the selected Cell with the appropriate Div
function replaceChildrenWithDiv(parent, object)
{
	if( parent.childNodes[0].innerHTML == "&nbsp;&nbsp;"){
	 if( object.getElementsByTagName('INPUT')[0] )
	    object.getElementsByTagName('INPUT')[0].value = "";
	  else
	     object.getElementsByTagName('SELECT')[0].value = "";
	}else{
		var elTxt = null;
	    for( var ct=0; ct<parent.childNodes.length; ct++) {
	     if( parent.childNodes[ct].tagName == "A" ){
	     	elTxt = parent.childNodes[ct].innerHTML;
	     }
	    }
	  if( object.getElementsByTagName('INPUT')[0] ){
	    object.getElementsByTagName('INPUT')[0].value = elTxt;
	   }else{
	     selectionOptionForDD = elTxt;
	   }
	}
	for(var nIndex1=0;nIndex1<parent.childNodes.length;nIndex1++)
	{
	 var subParent = parent.childNodes[nIndex1];
	 if( subParent.tagName != "DIV" )
	 {
		for( var nIndex2=0; nIndex2<subParent.childNodes.length; nIndex2++ ){
		    subParent.removeChild( subParent.childNodes[ nIndex2 ] );		
		}
	   parent.removeChild(parent.childNodes[nIndex1]);
	  }
	}	
	parent.appendChild(object);
}

//Executes when the user changes something and tabs to the next cell
//It replaces the Div with the previously saved children and the 
//modified value if it exists
function replaceDivWithChildren()
{
	if(tempSelectedCell)
	{
		var parentCell = tempChildren[0][0];
		for(var i=0; i<tempChildren.length; i++ ){
		  for(var j=1; j<tempChildren[i].length; j++ ){
		    parentCell.appendChild( tempChildren[i][j] );
		  }
		}
		tempDiv.style.display='none';
		tempSelectedCell.appendChild(parentCell);
		tempSelectedCell.onclick=tempOnClick;
	}
}

//Executes when the user changes something and tabs to the next cell
//It replaces the Div with the previously saved children and the 
//modified value if it exists. Does not execute if the previously changed 
//element was a popup
function replaceDivWithCurrentValues(){
	if(tempSelectedCell)
	{
	 if( prevCellType != "popup"){ 
	//	var parentCell = tempChildren[0][0];
	  var parentCell = null;
	  for( var ct=0; ct<tempChildren.length; ct++ ){
	  	if( tempChildren[ct][0].tagName != "DIV" ){
	  	 parentCell = tempChildren[ct][0];
	  	}
	   }
	  if( tempDiv.getElementsByTagName('INPUT')[0] ){
		 parentCell.innerHTML = tempDiv.getElementsByTagName('INPUT')[0].value;
	   }else{
		 var selectEl = tempDiv.getElementsByTagName('SELECT')[0];
		 for( var selectElCtr = 0; selectElCtr< selectEl.options.length; selectElCtr++ ){
		   if( selectEl.options[ selectElCtr ].selected )
		   {
		    parentCell.innerHTML = selectEl.options[ selectElCtr ].text;
		   }
		 }
	   }
	  tempDiv.style.display='none';
	  tempSelectedCell.appendChild(parentCell);
	  tempSelectedCell.onclick=tempOnClick;
	}
  }
}


function writeValueToSelectedCell(cell,idKey)
{
	if( tempDiv != null  )
	{
      replaceDivWithCurrentValues(cell);
	}else
	{
	  replaceDivWithChildren();
	}
	tempChildren = new Array();	
	if(cell.tagName != 'TD')
	{
	 cell = getParentElement(cell);
	}
	tempChildren = new Array( cell.childNodes.length );
	for(var nIndex = 0;nIndex<cell.childNodes.length;nIndex++)
	{
 	   var subCell = cell.childNodes[nIndex];
	   tempChildren[ nIndex ] = new Array( subCell.childNodes.length );
	   tempChildren[nIndex][0] = subCell;
	   for( var nIndex2=0; nIndex2<subCell.childNodes.length; nIndex2++ )
	   {
		   tempChildren[nIndex][nIndex2+1] = subCell.childNodes[nIndex2]
	   }
	}
	var replacementDiv = null;
	if( cell.getAttribute("replaceObjectType") == "input" ){
	  replacementDiv =  document.getElementById('replaceDivInputParam');
	 if( replacementDiv == null ){
	 	replacementDiv = document.getElementById('replaceDivParam');
	  }
	}else if( cell.getAttribute("replaceObjectType") == "select" ){
	  replacementDiv =  document.getElementById('replaceDivSelectParam');
	}
	if( cell.getAttribute("replaceObjectType") == "input" ||  cell.getAttribute("replaceObjectType") == "select" ){
		replacementDiv.style.display='inline';
		replaceChildrenWithDiv(cell,replacementDiv);
		tempSelectedCell = cell;
		tempOnClick = tempSelectedCell.onclick;
		tempSelectedCell.onclick="";
		tempDiv = replacementDiv; 
	}
}


function handleResults(results)
{

	if(results.list.length >0 && results.list[0].key == 'MESSAGE')
	{
		displayPageInfoMessage(results.list[ 0 ].value);
		replaceMultiValues(results);
		hasPageMessage = true;
		return false;
	}else
	{
		replaceMultiValues(results);
		return true;			
	}
}

function displayPageInfoMessage(message)
{
	  enableAlertDialog(message,'clearPageMessage()');
}

function clearPageMessage()
{
	var replacementDiv = document.getElementById( 'replaceDivInputParam' );
	if( replacementDiv == null ){
	 	document.getElementById('replaceObjectParam').focus();
	 	document.getElementById('replaceObjectParam').select();
	 }else if( replacementDiv != null && replacementDiv.style.display !=  'none' ){
	 	document.getElementById('replaceInputParam').focus();
		document.getElementById('replaceInputParam').select();
	 }else{
		replacementDiv = document.getElementById('replaceDivSelectParam');
		if( replacementDiv.style.display != "none" ){
			document.getElementById('replaceSelectParam').focus();
			document.getElementById('replaceSelectParam').select();
		}
	}
	hasPageMessage = false;
}

function replaceMultiValues(replaceList)
{

	var hasChanges = false;
 	for( replaceListCt = 0; replaceListCt < replaceList.list.length; replaceListCt++ )
 	{
		if(replaceList.list[ replaceListCt ].key == 'MESSAGE')
		{
			//do nothing. handled in handleResults
		}
		else if(document.getElementById(replaceList.list[ replaceListCt ].key) !=null)
		{
			var anchor = document.getElementById(replaceList.list[ replaceListCt ].key);
			anchor.innerHTML = replaceList.list[ replaceListCt ].value;
			hasChanges = true;
		}else
		{
			//field may be editable, set value in input text
			if(obtainForm().selectedTdId !=null)
			{
				var selectedTdId = obtainForm().selectedTdId.value;
				var selectedTd = document.getElementById(selectedTdId);
				if(selectedTd && selectedTd.getAttribute("cellKey")== replaceList.list[ replaceListCt ].key)
				{
					document.getElementById('replaceObjectParam').value = replaceList.list[ replaceListCt ].value;
					hasChanges = true;
				}
			}
		}
	}
	if(hasChanges)
	{
		document.getElementById('changesMessage').style.display = "block";
	}
}

function displayError(e)
{
	  enableAlertDialog(e.message + " in class: "+e.name);
}

function setSelectedCellKey(tdId,cellKey)
{
	var form = obtainForm();
	form.selectedCell.value = cellKey;
	form.selectedTdId.value = tdId;
	
	var td1 = document.getElementById(tdId);
	if( td1.getAttribute("dataColId") != null && td1.getAttribute("dataColId") != "undefined" ){
		form.selectedDataColId.value = td1.getAttribute("dataColId");
	}
}

 function getParentElementTable(pe){
  if(pe.tagName == 'TABLE'){
	return pe;
  }else{
	return getParentElement(pe.parentElement);	    	
  }
 }


function initScroll() 
{
	//find the event and where the event originated
	var tables = document.getElementsByTagName("TABLE");
	for( var i=0; i<tables.length; i++ )
	{
	var tableElement = tables[i].id;
	var topRightDiv = document.getElementById( tableElement + "topRight1")
	if(topRightDiv !=undefined)
	{
		var bottomRightDiv = document.getElementById(tableElement + "bottomRight1");
		var bottomLeftDiv = document.getElementById(tableElement + "bottomLeft1")
		addScrollSynchronization(topRightDiv, bottomRightDiv, "horizontal");
		addScrollSynchronization(bottomLeftDiv, bottomRightDiv, "vertical");
	}
    changesNode = document.getElementById("changesMessage");
    }

}

function replaceMultiValues(replaceList)
{
	var hasChanges = false;
 	for( replaceListCt = 0; replaceListCt < replaceList.list.length; replaceListCt++ )
 	{
		if(replaceList.list[ replaceListCt ].key == 'MESSAGE')
		{
			//do nothing. handled in handleResults
		}
		else if(document.getElementById(replaceList.list[ replaceListCt ].key) !=null)
		{
			var anchor = document.getElementById(replaceList.list[ replaceListCt ].key);
			anchor.innerHTML = replaceList.list[ replaceListCt ].value;
			hasChanges = true;
		}else
		{
			//field may be editable, set value in input text
			if(obtainForm().selectedTdId !=null)
			{
				var selectedTdId = obtainForm().selectedTdId.value;
				var selectedTd = document.getElementById(selectedTdId);
				if(selectedTd && selectedTd.getAttribute("cellKey")== replaceList.list[ replaceListCt ].key)
				{
					//Modify this line if called on a grid page that can support combos as well
					document.getElementById('replaceObjectParam').value = replaceList.list[ replaceListCt ].value;
					hasChanges = true;
				}
			}
		}
	}
	if(hasChanges)
	{
		document.getElementById('changesMessage').style.display = "block";
	}
}






