var strChildPrefix = '...';

// Assumes page contains divs whose ids have a prefix of divIdPrefix.
// Displays div whose id ends in enableIndex. Hides other with the
// same prefix.
function enableDivListItem(divIdPrefix, enableIndex, maxIndex) 
{ 
   var i ;
   var objElementStyle;
   
   for (i = 1;i <= maxIndex; i++) 
   { 
      objElementStyle = document.getElementById(divIdPrefix + i).style;

      
      if (i == enableIndex) 
      {
         objElementStyle.display = "block"; 
      }
      else 
      {
         objElementStyle.display = "none"; 
      }
   } 
}

function deleteComment(strFormName)
{
  if (confirm("Are you sure you wish to delete this comment?"))
     document.getElementsByName(strFormName)(0).submit();
}


function deleteTaskWaivers(projectNo, taskId, eventId)
{
  
  if (confirm("Are you sure you wish to delete this task and its waivers?"))
  {
    document.location = "Main.asp?ACTION=DeleteProjectTaskWaivers&TASK_ID=" + taskId + "&EVENT_ID=" + eventId + "&PROJECT_NO=" + projectNo;
  }

}



function ExpandCollapseAll(sectionPrefix, statusId)
{
    var docObjects = document.all; 
    var i;
    var newImageName;
    var newClassName;
    var blnStatus = document.getElementById(statusId).value;


    if (blnStatus == "false")
    {
	newImageName = "IMAGES/Minus.GIF";
        newClassName = "showBlk";
	document.getElementById(statusId).value = "true";
    }
    else
    {
	newImageName = "IMAGES/Plus.GIF";
        newClassName = "hideBlk";
	document.getElementById(statusId).value = "false";
    }

    for (i=0; i < docObjects.length; i++)
    {
       if (docObjects[i].id.indexOf(sectionPrefix, docObjects[i].id) == 0)
       {
          docObjects[i].className=newClassName;
	}

       if (docObjects[i].id.indexOf("img_" + sectionPrefix, docObjects[i].id) == 0)
          docObjects[i].src = newImageName;

    }

}


// Gathers appropriation allocations and puts them into a well formed XML string.
// Sets hidden input to this xml string.
function SetInputsForProcessing()
{
	var objXMLDOMDoc      = new ActiveXObject("Msxml.DOMDocument");
	var objNode;
	var objFormElements;
	var i;

	// Save the values of all inputs and put it in INPUT_VALUES
	objXMLDOMDoc = new ActiveXObject("Msxml.DOMDocument");
	objXMLDOMDoc.insertBefore(objXMLDOMDoc.createElement("WAIVERS"), null);


	objFormElements	= document.getElementsByName("WAIVER");

	for (i = 0; i < objFormElements.length; i++)
	{

	   if (objFormElements(i).checked == true)
	   {

	      objNode = objXMLDOMDoc.createElement("WAIVER_TYPE");
	      objNode.text = objFormElements(i).id;
	      objXMLDOMDoc.firstChild.appendChild(objNode);

	   } 
	}



	document.getElementById("WAIVER_INPUTS").value = objXMLDOMDoc.xml;


}





///////// BEGIN generic list select box functions /////////
// Moves option(s) from one select box to another
function MoveOptions(objSrcSelect, objDestSelect)
{
	var objOption;
	var i;
	var j;

	var lastDeletedIndex = 0;
	var insertIndex;
	var lstSelectedIds = new Array();

	if (objSrcSelect.selectedIndex == -1) return;


	// copy options to destination select
	for (i=0; i < objSrcSelect.options.length; i++)
	{
		if (objSrcSelect.options[i].selected)
		{
			objOption       = document.createElement("OPTION");
			objOption.value = objSrcSelect.options[i].value;
			objOption.text  = objSrcSelect.options[i].text;  

			objDestSelect.options.add(objOption, objDestSelect.selectedIndex + 1);
			objDestSelect.selectedIndex++;

				//objDestSelect.options[objDestSelect.selectedIndex].scrollTop = 0;
		        lstSelectedIds.push(objOption.value);
		}
	}

		
	
	
	// remove options from the source select
	for (i=0; i < lstSelectedIds.length; i++)
	{
		for(j=0; j < objSrcSelect.options.length; j++)
		{
			if (objSrcSelect.options[j].value == lstSelectedIds[i])
			{
				objSrcSelect.options.remove(j);  
				lastDeletedIndex = j;
			}

		}

	}


	if (objSrcSelect.options.length > 0)
	{ 
		if (lastDeletedIndex > (objSrcSelect.options.length - 1))
			lastDeletedIndex--;

		objSrcSelect.options[lastDeletedIndex].selected = true; 

	}
}

// Moves an option up or down within a select box
function MoveOptionWithinSelect(srcSelect, strUpDown)
{
   var optText1;
   var optText2;

   var optValue1;
   var optValue2;

   var countSelected = 0;
   var i;

   if (srcSelect.options.length ==  0) return; // no options
   if (srcSelect.selectedIndex < 0)    return; // nothing selected

   // count selected
   for (i=0; i < srcSelect.options.length; i++)
   {
	if (srcSelect.options[i].selected)
	   countSelected++;
   }	

   if (countSelected > 1) return;

   if (strUpDown == 'DOWN')
   {
	if (srcSelect.selectedIndex == (srcSelect.length - 1))    return; // you can't move down bottem most option
	optText1  = srcSelect.options[srcSelect.selectedIndex].text;	
	optValue1 = srcSelect.options[srcSelect.selectedIndex].value;	

	optText2  = srcSelect.options[srcSelect.selectedIndex + 1].text;	
	optValue2 = srcSelect.options[srcSelect.selectedIndex + 1].value;

	srcSelect.options[srcSelect.selectedIndex].text   = optText2;	
	srcSelect.options[srcSelect.selectedIndex].value  = optValue2;

	srcSelect.options[srcSelect.selectedIndex + 1].text   = optText1;	
	srcSelect.options[srcSelect.selectedIndex + 1].value  = optValue1;


	srcSelect.selectedIndex++;

   }


   if (strUpDown == 'UP')
   {
	if (srcSelect.selectedIndex == 0)    return; // you can't move up top most option
	optText1  = srcSelect.options[srcSelect.selectedIndex].text;	
	optValue1 = srcSelect.options[srcSelect.selectedIndex].value;	

	optText2  = srcSelect.options[srcSelect.selectedIndex - 1].text;	
	optValue2 = srcSelect.options[srcSelect.selectedIndex - 1].value;

	srcSelect.options[srcSelect.selectedIndex].text   = optText2;	
	srcSelect.options[srcSelect.selectedIndex].value  = optValue2;

	srcSelect.options[srcSelect.selectedIndex - 1].text   = optText1;	
	srcSelect.options[srcSelect.selectedIndex - 1].value  = optValue1;

	srcSelect.selectedIndex--;   
  }
}

function IndentOptionWithinSelect(srcSelect, strLeftRight)
{
   var objOption;
   var objOptionPrev;
   var countSelected = 0;
   var i;
   var nPrefixes = 0;
   var nPrefixesPrev = 0;

   if (srcSelect.options.length ==  0) return; // no options
   if (srcSelect.selectedIndex < 0)    return; // nothing selected

   // count selected
   for (i=0; i < srcSelect.options.length; i++)
   {
      if (srcSelect.options[i].selected)
         countSelected++;
   }  

   if (countSelected > 1)            return;
   if (srcSelect.selectedIndex == 0) return; // top most option can't be child

   objOption     = srcSelect.options[srcSelect.selectedIndex];
   objOptionPrev = srcSelect.options[srcSelect.selectedIndex - 1];

   if (strLeftRight == 'RIGHT')
   {
      nPrefixes     = countPrefixes(objOption.text,     strChildPrefix);
      nPrefixesPrev = countPrefixes(objOptionPrev.text, strChildPrefix);
      if (nPrefixes <= nPrefixesPrev) objOption.text = strChildPrefix + objOption.text;
   }
   if (strLeftRight == 'LEFT')
   {
      if (objOption.text.substring(0, strChildPrefix.length) == strChildPrefix)
      {
         objOption.text = objOption.text.substring(strChildPrefix.length, objOption.text.length);
      }
   }
   
   objOption.selected = true;
}

function countPrefixes(strText, strPrefix)
{
   var n = 0;
   var i = 0;
   while (   (i + strPrefix.length < strText.length) 
          && (strText.substring(i, i+strPrefix.length) == strPrefix))
   {
      n++;
      i += strPrefix.length;
   }
   return n;
}
						
function selectAllOptions(objSelect)
{
	for (var i = 0; i < objSelect.length; i++)
		objSelect.options[i].selected = true;
}



function RemoveOptions(objDestSelect)
{
    var SelectedOptionsText   = new Array();
    var SelectedOptionsValues = new Array();

    for (var i=0; i < objDestSelect.length; i++)
    {
        if (objDestSelect.options[i].selected != true)
        {
            SelectedOptionsText.push(objDestSelect.options[i].text);
            SelectedOptionsValues.push(objDestSelect.options[i].value);
        }
    }

    SetSelectOptionValues(objDestSelect, SelectedOptionsText,SelectedOptionsValues);
}

///////// END generic list select box functions /////////







function ShowRelationshipProperty(objSelect, objCheckBox, strXMLAttributeName)
{
	var strXML;
	var objXMLDOMDoc    = new ActiveXObject("Msxml.DOMDocument");
	var objTaskTypeNode;
	var blnRetVal;

	objCheckBox.checked  = false;
	objCheckBox.disabled = true;


	if (objSelect.selectedIndex < 0) return;


	strXML = objSelect.options[objSelect.selectedIndex].value;

	objCheckBox.disabled = false;

	// Load from XML embeded in the html page.
	blnRetVal = objXMLDOMDoc.loadXML(strXML);

	if (blnRetVal)
	{
		objTaskTypeNode = objXMLDOMDoc.firstChild;

		if (objTaskTypeNode.getAttribute(strXMLAttributeName) == "1")
		{
			objCheckBox.checked = true; 
		}
	}
}








function InsertBridgeRow(intCounter, strTableName, intRowIndex, strValue)
{
  var strRowId      = 'BRIDGE_ROW_' + intCounter;
  var strInnerHTML  = "<INPUT  name=\"BRIDGE_NO\" class=\"inputText\" maxlength=\"10\" value=\"" + strValue + "\"/>";
      strInnerHTML += "<button class=\"actionLink\" onclick=\"DeleteTableRow('" + strRowId + "');\">delete</button>";

  InsertTableRow    (strTableName, strRowId, intRowIndex);
  InsertTableRowCell(strRowId, "attrName", "", -1);
  InsertTableRowCell(strRowId, "attrValue", strInnerHTML, -1);

  document.all.NEW_BRIDGE_NO.value="";
}



function CreateBridgeNumbersXML(strSrcInputsName, strDestInputName)
{
	var objInputs = document.getElementsByName(strSrcInputsName);
	var objXMLDoc = new ActiveXObject("Msxml.DOMDocument");
	var objNode   = null;
	var i;

	objNode = objXMLDoc.createElement("BRIDGES");
	objXMLDoc.insertBefore(objNode, null);	

	for (i=0; i < objInputs.length; i++)
	{
		if (objInputs[i].value.length != 0)
		{
			objNode = objXMLDoc.createElement("BRIDGE");
			objNode.setAttribute("ID", objInputs[i].value);
			objXMLDoc.firstChild.appendChild(objNode);
		}
	}

	document.getElementsByName(strDestInputName)(0).value = objXMLDoc.xml;
}			


function CreateRelationshipsXML(objSrcSelect, objDestInput, strTypeCode, strTypeCodeXMLAttributeName)
{
	var objXMLDoc    = new ActiveXObject("Msxml.DOMDocument");
	var objRelXMLDoc = new ActiveXObject("Msxml.DOMDocument");
	var objNode      = null;

	var strAttrName;
	var strAttrValue;

	var intOptionsIndex;
	var intAttrIndex;

	objNode = objRelXMLDoc.createElement("CODE_LINKS");
	objRelXMLDoc.insertBefore(objNode, null);

	for (intOptionsIndex=0; intOptionsIndex < objSrcSelect.options.length; intOptionsIndex++)
	{
		objXMLDoc.loadXML(objSrcSelect.options[intOptionsIndex].value);
		objNode = objXMLDoc.createElement("LNK");

		objNode.setAttribute(strTypeCodeXMLAttributeName, strTypeCode);

		for (intAttrIndex=0; intAttrIndex < objXMLDoc.firstChild.attributes.length; intAttrIndex++)
		{
			strAttrName  = objXMLDoc.firstChild.attributes[intAttrIndex].name;
			strAttrValue = objXMLDoc.firstChild.attributes[intAttrIndex].value;
			
			objNode.setAttribute(strAttrName, strAttrValue);

		}

		objRelXMLDoc.firstChild.appendChild(objNode);
	}

	objDestInput.value = objRelXMLDoc.xml;
}

//This function makes XML for *both* the list boxes and assigns it to the objDestInput form element
function CreateRelationshipsXMLDest(objSrcSelect,objDestSelect, objDestInput,  strTypeCodeXMLAttributeNameSrc , strTypeCodeXMLAttributeNameDest){
	var objXMLDoc    = new ActiveXObject("Msxml.DOMDocument");
	var objNode      = null;
	var objNodeSrc   = null;
	var objNodeDest  = null;
	var objNodeSrcRow = null;
	var objNodeDestRow = null;

	var strAttrName;
	var strAttrValue;

	var intOptionsIndex;
	var intAttrIndex;

	objNode     = objXMLDoc.createElement("BOTH_SRC_DEST");
	objNodeSrc  = objXMLDoc.createElement(strTypeCodeXMLAttributeNameSrc);
	objNodeDest = objXMLDoc.createElement(strTypeCodeXMLAttributeNameDest);
	
	objXMLDoc.appendChild(objNode);		
	objNode.appendChild(objNodeSrc);
	objNode.appendChild(objNodeDest);
	
	
	//Add the src elements
	for (intOptionsIndex=0; intOptionsIndex < objSrcSelect.options.length; intOptionsIndex++)
	{
		
		objNodeSrcRow = objXMLDoc.createElement("ROW");
		objNodeSrcRow.setAttribute("VALUE",objSrcSelect.options[intOptionsIndex].value );
		objNodeSrc.appendChild(objNodeSrcRow);
		
	}
	
	//Add the destination elements
	for (intOptionsIndex=0; intOptionsIndex < objDestSelect.options.length; intOptionsIndex++)
	{
			
		objNodeDestRow = objXMLDoc.createElement("ROW");
		objNodeDestRow.setAttribute("VALUE",objDestSelect.options[intOptionsIndex].value );
		objNodeDest.appendChild(objNodeDestRow);
	}
		
	
	objDestInput.value = objXMLDoc.xml;
	
}




function CreateJurisdictionIDsXML(strSrcInputsName, strDestInputName)
{
	var objRadioInputs = document.getElementsByName(strSrcInputsName);
	var objXMLDoc      = new ActiveXObject("Msxml.DOMDocument");
	var objNode        = null;
	var intGeoAssocId;
	var objSelect;
	var i;

	for (i=0; i < objRadioInputs.length; i++)
	{
		if (objRadioInputs[i].checked)
		{
			intGeoAssocId = objRadioInputs[i].value;
			break;
		}
	}

	if ((intGeoAssocId == 1) || (intGeoAssocId == 2))
	{
		objNode = objXMLDoc.createElement("JURISDICTIONS");
		objNode.setAttribute("GEO_ASSOC_ID", intGeoAssocId);
	

		objXMLDoc.insertBefore(objNode, null);

		if (intGeoAssocId == 1)
			objSelect = document.all.CITIES_ID;
		else
			objSelect = document.all.DISTRICT_ID;

		for (i=0; i < objSelect.options.length; i++)
		{
			objNode = objXMLDoc.createElement("JURISDICTION");
			objNode.setAttribute("ID",objSelect.options[i].value);
			objXMLDoc.firstChild.appendChild(objNode);
		}


		document.getElementsByName(strDestInputName)(0).value = objXMLDoc.xml;
	}
}



function UpdateRelationshipProperty(objSelect, objCheck, strAttributeName)
{
	var strXML = objSelect.options[objSelect.selectedIndex].value;
	var objXMLDOMDoc    = new ActiveXObject("Msxml.DOMDocument");
	var objTaskTypeNode;
	var blnRetVal;

	// Load from XML embeded in the html page.
	blnRetVal = objXMLDOMDoc.loadXML(strXML);

	if (blnRetVal)
	{
		objTaskTypeNode = objXMLDOMDoc.firstChild;

		if (objCheck.checked)
		{
			objTaskTypeNode.setAttribute(strAttributeName) = "1";
		}
		else
		{
			objTaskTypeNode.setAttribute(strAttributeName) = "0";
		}

		objSelect.options[objSelect.selectedIndex].value = objTaskTypeNode.xml;
	}
}


// EditTaskEventTypeRelationships.xsl
function UpdateTypeProperty(objSelect, objCheck, strAttributeName)
{
	var strXML = objSelect.options[objSelect.selectedIndex].value;
	var objXMLDOMDoc    = new ActiveXObject("Msxml.DOMDocument");
	var objTaskTypeNode;
	var blnRetVal;

	// Load from XML embeded in the html page.
	blnRetVal = objXMLDOMDoc.loadXML(strXML);

	if (blnRetVal)
	{
		objTaskTypeNode = objXMLDOMDoc.firstChild;

		if (objCheck.checked)
		{
			objTaskTypeNode.setAttribute(strAttributeName) = "1";
		}
		else
		{
			objTaskTypeNode.setAttribute(strAttributeName) = "0";
		}

		if (objTaskTypeNode.getAttribute("SEARCHDSC") != null)
		{
			objTaskTypeNode.setAttribute("SEARCHDSC") = document.frmEditTaskEventTypeRelationships.SEARCH_DESC.value
		}
	
		if (objTaskTypeNode.getAttribute("QSEARCH") == "1")
		{
			document.frmEditTaskEventTypeRelationships.SEARCH_DESC.disabled = false;
		}

		if (objTaskTypeNode.getAttribute("QSEARCH") == "0")
		{
			document.frmEditTaskEventTypeRelationships.SEARCH_DESC.disabled = true;
		}

		objSelect.options[objSelect.selectedIndex].value = objTaskTypeNode.xml;
		
	}	
}



// EditTaskEventTypeRelationships.xsl
function UpdateEventTypes()
{
	var strTypeCode  = document.frmEditTaskEventTypeRelationships.TASK_TYPE_CODE.value;
	document.frmUpdateEventTypes.TASK_TYPE_CODE.value = strTypeCode;
	document.frmUpdateEventTypes.submit();
}


// EditTaskEventTypeRelationships.xsl
function ShowTypeProperty(objSelect, objCheckBox, strXMLAttributeName)
{
	var strXML;
	var objXMLDOMDoc    = new ActiveXObject("Msxml.DOMDocument");
	var objTaskTypeNode;
	var blnRetVal;

	if (objSelect.selectedIndex < 0) return;

	objCheckBox.checked  = false;
	objCheckBox.disabled = true;
	document.frmEditTaskEventTypeRelationships.SEARCH_DESC.value = "";

	strXML = objSelect.options[objSelect.selectedIndex].value;

	objCheckBox.disabled = false;

	// Load from XML embeded in the html page.
	blnRetVal = objXMLDOMDoc.loadXML(strXML);

	if (blnRetVal)
	{
		objTaskTypeNode = objXMLDOMDoc.firstChild;

		if (objTaskTypeNode.getAttribute(strXMLAttributeName) == "1")
		{
			objCheckBox.checked = true; 
		}
		if (objTaskTypeNode.getAttribute("SEARCHDSC") != null)
		{
			document.frmEditTaskEventTypeRelationships.SEARCH_DESC.value = objTaskTypeNode.getAttribute("SEARCHDSC")
		}
	}
}

// EditTaskEventTypeRelationships.xsl 
function ShowTypeProperties(objSelect, chkDefault, chkRequired, chkActive, chkRepeatable, chkQuickSearch, strLableTaskTypeId)
{

	var strXML;
	var objXMLDOMDoc    = new ActiveXObject("Msxml.DOMDocument");
	var objTaskTypeNode;
	var countSelected = 0;
	var i;
	var blnRetVal;

	chkDefault.checked = false; 
	chkRequired.checked = false;
	chkActive.checked = false;
	chkRepeatable.checked = false;
	chkQuickSearch.checked = false;
	//document.frmEditTaskEventTypeRelationships.SEARCH_DESC.value = "";

	chkDefault.disabled = true; 
	chkRequired.disabled = true;
	chkActive.disabled = true;
	chkRepeatable.disabled = true;
	chkQuickSearch.disabled = true;
	document.frmEditTaskEventTypeRelationships.SEARCH_DESC.disabled = true;


	document.getElementById(strLableTaskTypeId).innerHTML = "N/A";

	for (i=0; i < objSelect.options.length; i++)
	{
		if (objSelect.options[i].selected)
			countSelected++;
	}

	if (countSelected != 1) return;

	strXML = objSelect.options[objSelect.selectedIndex].value;

	chkDefault.disabled = false; 
	chkRequired.disabled = false;
	chkActive.disabled = false;
	chkRepeatable.disabled = false;
	chkQuickSearch.disabled = false;

	// Load from XML embeded in the html page.
	blnRetVal = objXMLDOMDoc.loadXML(strXML);

	if (blnRetVal)
	{
		objTaskTypeNode = objXMLDOMDoc.firstChild;

		if (objTaskTypeNode.getAttribute("DFLT") == "1")
		{
			chkDefault.checked = true; 
		}

		if (objTaskTypeNode.getAttribute("RQD") == "1")
		{
			chkRequired.checked = true; 
		}

		if (objTaskTypeNode.getAttribute("ACT") == "1")
		{
			chkActive.checked = true;
		}

		if (objTaskTypeNode.getAttribute("REP") == "1")
		{
			chkRepeatable.checked = true;
		}

		if (objTaskTypeNode.getAttribute("QSEARCH") == "1")
		{
			chkQuickSearch.checked = true;
			document.frmEditTaskEventTypeRelationships.SEARCH_DESC.disabled = false;
		}	
		

		document.getElementById(strLableTaskTypeId).innerHTML = objSelect.options[objSelect.selectedIndex].text;
	}


}

// EditTaskEventTypeRelationships.xsl
function CreateTypeCodesXML(objSrcInput, objDestInput)
{
	var i;
	var strXML = "";

	for (i=0; i < objSrcInput.options.length; i++)
	{
		if (objSrcInput.options[i].value.length != 0)
		{
			strXML += objSrcInput.options[i].value;
		}
	}

	objDestInput.value = "<TYPE_CODES>" + strXML + "</TYPE_CODES>";
}


