
// used to hide/show a link group
// LinkGroupID - ID of the container that holds the controls
function toggleLinkGroupVisiblity(LinkGroupID, Visible)
{
	var linkgroup = document.getElementById(LinkGroupID);
	
	if (linkgroup != null)
	{
		if (Visible == false)
		{
			linkgroup.style.display = "none";
		}
		else
		{
			linkgroup.style.display = "block";
		}
		
		var ShortPrefixIndex = LinkGroupID.indexOf("_");
		var ObjNameShortPrefix = LinkGroupID.substr(0, ShortPrefixIndex+1);
		
		// update XML placeholder
		WriteToXMLTextBox(ObjNameShortPrefix)
	}
}

// Edits a link
function EditLink(objContainer, GroupID, RowID)
{
	// used to update correct cells in table
	var prefixIndex = "";
	var ObjNamePrefix = "";
	
	if (objContainer != null)
	{
		prefixIndex = objContainer.id.lastIndexOf("_");
		ObjNamePrefix = objContainer.id.substr(0, prefixIndex+1);
		
		var ShortPrefixIndex = objContainer.id.indexOf("_");
		var ObjNameShortPrefix = objContainer.id.substr(0, ShortPrefixIndex+1);
		
		var txtObjNamePrefix = document.getElementById(ObjNameShortPrefix + "txtCtrlPrefix");
		var txtEditRowIndex = document.getElementById(ObjNameShortPrefix + "txtRowNumber");
		
		// assign object ID and row index to hidden text boxes to be used when saving the updated text
		if (txtObjNamePrefix != null)
			txtObjNamePrefix.value = ObjNamePrefix;
			
		if (txtEditRowIndex != null)
			txtEditRowIndex.value = RowID;
		
		// get values from table to edit
		var DisplayName = document.getElementById(ObjNamePrefix + "divDisplayName");
		var LinkTitle = document.getElementById(ObjNamePrefix + "Link" + RowID);
		var LinkUrl = document.getElementById(ObjNamePrefix + "LinkUrl" + RowID);
		var LinkDescription = document.getElementById(ObjNamePrefix + "LinkDescription" + RowID);

		// enable save & cancel buttons and edit fields
		var tdEditColumn = document.getElementById(ObjNameShortPrefix + "EditColumn");
		if (tdEditColumn != null)
			tdEditColumn.disabled = false;
			
		// assign values from table cells to Edit content text boxes
		var txtLinkTitle = document.getElementById(ObjNameShortPrefix + "txtTitle");
		if ((txtLinkTitle != null) && (LinkTitle != null))
		{
			txtLinkTitle.value = LinkTitle.innerText;
			txtLinkTitle.focus();
		}
		
		var txtLinkUrl = document.getElementById(ObjNameShortPrefix + "txtUrl");
		if ((txtLinkUrl != null) && (LinkUrl != null))
		{
			txtLinkUrl.value = LinkUrl.innerText;
		}			
		
		var txtLinkDescription = document.getElementById(ObjNameShortPrefix + "txtDescription");
		if ((txtLinkDescription != null) && (LinkDescription != null))
		{
			txtLinkDescription.value = LinkDescription.innerText;
		}
		
		var txtDisplayName = document.getElementById(ObjNameShortPrefix + "txtDisplayName");
		if ((txtDisplayName != null) && (DisplayName != null))
		{
			txtDisplayName.value = DisplayName.innerText;
		}	
		
	}
}

function CancelEdit(btnCancel)
{
	var ObjNamePrefix = "";
	
	if (btnCancel != null)
	{
		var ShortPrefixIndex = btnCancel.id.indexOf("_");
		var ObjNameShortPrefix = btnCancel.id.substr(0, ShortPrefixIndex+1);

		var txtLinkTitle = document.getElementById(ObjNameShortPrefix + "txtTitle");
		var txtLinkUrl = document.getElementById(ObjNameShortPrefix + "txtUrl");
		var txtLinkDescription = document.getElementById(ObjNameShortPrefix + "txtDescription");
		var txtDisplayName = document.getElementById(ObjNameShortPrefix + "txtDisplayName");
			
		// assign values from table cells to Edit content text boxes
		if (txtLinkTitle != null)
		{
			txtLinkTitle.value = "";
		}
		
		if (txtLinkUrl != null)
		{
			txtLinkUrl.value = "";
		}

		if (txtLinkDescription != null)
		{
			txtLinkDescription.value = "";
		}
		
		if (txtDisplayName != null) 
		{
			txtDisplayName.value = "";
		}		
				
		// enable save & cancel buttons and edit fields
		var tdEditColumn = document.getElementById(ObjNameShortPrefix + "EditColumn");
		if (tdEditColumn != null)
			tdEditColumn.disabled = true;
			
	}

}

// saves link back to the link control
function SaveLink(btnSave)
{
	var ObjNamePrefix = "";
	
	if (btnSave != null)
	{
		var ShortPrefixIndex = btnSave.id.indexOf("_");
		var ObjNameShortPrefix = btnSave.id.substr(0, ShortPrefixIndex+1);
		
		// get information to see where to save the data to
		var txtObjNamePrefix = document.getElementById(ObjNameShortPrefix + "txtCtrlPrefix");
		var txtEditRowIndex = document.getElementById(ObjNameShortPrefix + "txtRowNumber");
		
		if ((txtObjNamePrefix != null) && (txtEditRowIndex != null))
		{
			ObjNamePrefix = txtObjNamePrefix.value;
			
			var EditRowID = txtEditRowIndex.value;
			
			// get values from table to edit
			var divDisplayName = document.getElementById(ObjNamePrefix + "divDisplayName");
			var divLinkTitle = document.getElementById(ObjNamePrefix + "LinkTitle" + EditRowID);
			var divLinkUrl = document.getElementById(ObjNamePrefix + "LinkUrl" + EditRowID);
			var divLinkDescription = document.getElementById(ObjNamePrefix + "LinkDescription" + EditRowID);
			var divLink = document.getElementById(ObjNamePrefix + "Link" + EditRowID);
			
			var txtLinkTitle = document.getElementById(ObjNameShortPrefix + "txtTitle");
			var txtLinkUrl = document.getElementById(ObjNameShortPrefix + "txtUrl");
			var txtLinkDescription = document.getElementById(ObjNameShortPrefix + "txtDescription");
			var txtDisplayName = document.getElementById(ObjNameShortPrefix + "txtDisplayName");
			
			// assign values from table cells to Edit content text boxes
			if ((txtLinkTitle != null) && (divLinkTitle != null))
			{
				divLinkTitle.innerText = txtLinkTitle.value;
				txtLinkTitle.value = "";
			}
			
			if ((txtLinkUrl != null) && (divLinkUrl != null))
			{
				divLinkUrl.innerText = txtLinkUrl.value
				txtLinkUrl.value = "";
			}
			
			if ((divLink != null) && (divLinkTitle.innerText != null) && (divLinkUrl.innerText != null))
				divLink.innerHTML = "<a href='" + divLinkUrl.innerText + "'>" + divLinkTitle.innerText + "</a>";
			
			if ((txtLinkDescription != null) && (divLinkDescription != null))
			{
				divLinkDescription.innerText = txtLinkDescription.value;
				txtLinkDescription.value = "";
			}
			
			if ((txtDisplayName != null) && (divDisplayName != null))
			{
				divDisplayName.innerText = txtDisplayName.value;
				txtDisplayName.value = "";
			}		
					
			// disable save button and set reset values in the edit form
			txtObjNamePrefix.value = "";
			txtEditRowIndex.value = "";

			// enable save & cancel buttons and edit fields
			var tdEditColumn = document.getElementById(ObjNameShortPrefix + "EditColumn");
			if (tdEditColumn != null)
				tdEditColumn.disabled = true;
			
			// update XML placeholder
			WriteToXMLTextBox (ObjNameShortPrefix);
		}
	}
}

// updates XML placeholder
// ObjNameShortPrefix is the client side ID of the control
function WriteToXMLTextBox (ObjNameShortPrefix)
{
	// create XML doc object, this is IE only since Authoring Mode is IE only
	if (window.ActiveXObject)
	{
		var links;
		var link;
		var displayname;
		var linkgroupvisible;
		var linktitle;
		var linkurl;
		var linkdescription;
		var linkorder;
		var divDisplayName;
		var divLinkTitle;
		var divLinkUrl;
		var divLinkDescription;
		var chkVisible;
		var trRow;
		var NumLinkGroups = document.getElementById(ObjNameShortPrefix + "txtNumLinkGroups");
		
		if (NumLinkGroups != null)
			NumLinkGroups = NumLinkGroups.value;
		else
			NumLinkGroups = 0;
		
		
		
		// create xml document with root node
		var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.loadXML("<linkgroups />");
		
		
		
		for (var iLinkGroupIndex=0; iLinkGroupIndex < NumLinkGroups; iLinkGroupIndex++)
		{
		
			links = xmlDoc.createElement("links");
			
			// save value for display name
			displayname = xmlDoc.createElement("displayname");
			divDisplayName = document.getElementById(ObjNameShortPrefix + "rLinks__ctl" + iLinkGroupIndex + "_divDisplayName");
			
			if (divDisplayName != null)
				displayname.appendChild(xmlDoc.createTextNode(divDisplayName.innerText));
			else
				displayname.appendChild(xmlDoc.createTextNode(""));
			
			links.appendChild(displayname);
			
			// save value for link group visibility
			linkgroupvisible = xmlDoc.createElement("visible");
			chkVisible = document.getElementById(ObjNameShortPrefix + "rLinks__ctl" + iLinkGroupIndex + "_chkVisible");
			
			if (chkVisible != null)
			{
				if (chkVisible.checked)
					linkgroupvisible.appendChild(xmlDoc.createTextNode("1"));
				else
					linkgroupvisible.appendChild(xmlDoc.createTextNode("0"));
			}
			else
				linkgroupvisible.appendChild(xmlDoc.createTextNode(""));
			
			links.appendChild(linkgroupvisible);
			
			// loops through all the links in the link group
			
			for (var iLinkIndex=1; iLinkIndex<=10; iLinkIndex++)
			{
				trRow = document.getElementById(ObjNameShortPrefix + "rLinks__ctl" + iLinkGroupIndex + "_row" + iLinkIndex);

				// if the row is not hidden
				if ((trRow != null) && (trRow.style.display != "none"))
				{
					link = xmlDoc.createElement("link");
					
					// save value for link title
					linktitle = xmlDoc.createElement("title");
					divLinkTitle = document.getElementById(ObjNameShortPrefix + "rLinks__ctl" + iLinkGroupIndex + "_LinkTitle" + iLinkIndex);
					
					if (divLinkTitle != null)
						linktitle.appendChild(xmlDoc.createTextNode(divLinkTitle.innerText));
					else
						linktitle.appendChild(xmlDoc.createTextNode(""));
					
					link.appendChild(linktitle);
				
					// save value for link url
					linkurl = xmlDoc.createElement("url");
					divLinkUrl = document.getElementById(ObjNameShortPrefix + "rLinks__ctl" + iLinkGroupIndex + "_LinkUrl" + iLinkIndex);
					
					if (divLinkUrl != null)
						linkurl.appendChild(xmlDoc.createTextNode(divLinkUrl.innerText));
					else
						linkurl.appendChild(xmlDoc.createTextNode(""));
					
					link.appendChild(linkurl);
				
					// save value for link description
					linkdescription = xmlDoc.createElement("description");
					divLinkDescription = document.getElementById(ObjNameShortPrefix + "rLinks__ctl" + iLinkGroupIndex + "_LinkDescription" + iLinkIndex);
					
					if (divLinkDescription != null)
						linkdescription.appendChild(xmlDoc.createTextNode(divLinkDescription.innerText));
					else
						linkdescription.appendChild(xmlDoc.createTextNode(""));
					
					link.appendChild(linkdescription);

					//if ((linktitle.text != "") && (linkurl.text != ""))
					links.appendChild(link);
				}
			}
			
			// append to xml document
			xmlDoc.documentElement.appendChild(links);
		}
		
		

		// get the ID of the placeholder control
		var XmlPlaceholderID = document.getElementById(ObjNameShortPrefix + "txtXmlPlaceholderID");
		
		if (XmlPlaceholderID != null) 
		{
			var XmlPlaceholder = document.getElementById(XmlPlaceholderID.value);
			
			if ((XmlPlaceholder != null) && (XmlPlaceholder.children.length > 0))
			{
				// set reference to the text area
				XmlPlaceholder = XmlPlaceholder.children(0);
			
				// set XML value
				XmlPlaceholder.value = xmlDoc.xml;
			}
		}
		
	}
}

// obj is child element of object that contains the datagrid client ID prefix
function MoveDown(obj, LinkGroupIndex, RowIndex)
{
	if (RowIndex < 10)
	{
		if ((obj.id != null) && (obj.id.lastIndexOf("_") > -1))
		{
			var prefixIndex = obj.id.lastIndexOf("_");
			var ObjNamePrefix = obj.id.substr(0, prefixIndex+1);
		}
		else
		{
			var prefixIndex = obj.parentElement.id.lastIndexOf("_");			
			var ObjNamePrefix = obj.parentElement.id.substr(0, prefixIndex+1);
		}
		
		var divLinkTitle = document.getElementById(ObjNamePrefix + "LinkTitle" + RowIndex);
		var divLinkDescription = document.getElementById(ObjNamePrefix + "LinkDescription" + RowIndex);
		var divLinkUrl = document.getElementById(ObjNamePrefix + "LinkUrl" + RowIndex);
		var divLink = document.getElementById(ObjNamePrefix + "Link" + RowIndex);

		var divLinkTitle2 = document.getElementById(ObjNamePrefix + "LinkTitle" + (RowIndex+1) );
		var divLinkDescription2 = document.getElementById(ObjNamePrefix + "LinkDescription" + (RowIndex+1) );
		var divLinkUrl2 = document.getElementById(ObjNamePrefix + "LinkUrl" + (RowIndex+1) );
		var divLink2 = document.getElementById(ObjNamePrefix + "Link" + (RowIndex+1) );

		// swaps two rows of values (current row with next row)
		SwapObjectHTML(divLinkTitle, divLinkTitle2);	
		SwapObjectHTML(divLinkUrl, divLinkUrl2);		
		SwapObjectHTML(divLinkDescription, divLinkDescription2);		
		SwapObjectHTML(divLink, divLink2);
	}
	
	WriteToXMLTextBox ('LinksCtrl_');

}


function MoveUp(obj, LinkGroupIndex, RowIndex)
{
	if (RowIndex > 1)
	{
		if ((obj.id != null) && (obj.id.lastIndexOf("_") > -1))
		{
			var prefixIndex = obj.id.lastIndexOf("_");
			var ObjNamePrefix = obj.id.substr(0, prefixIndex+1);
		}
		else
		{
			var prefixIndex = obj.parentElement.id.lastIndexOf("_");			
			var ObjNamePrefix = obj.parentElement.id.substr(0, prefixIndex+1);
		}
		
		var divLinkTitle = document.getElementById(ObjNamePrefix + "LinkTitle" + RowIndex);
		var divLinkDescription = document.getElementById(ObjNamePrefix + "LinkDescription" + RowIndex);
		var divLinkUrl = document.getElementById(ObjNamePrefix + "LinkUrl" + RowIndex);
		var divLink = document.getElementById(ObjNamePrefix + "Link" + RowIndex);

		var divLinkTitle2 = document.getElementById(ObjNamePrefix + "LinkTitle" + (RowIndex-1) );
		var divLinkDescription2 = document.getElementById(ObjNamePrefix + "LinkDescription" + (RowIndex-1) );
		var divLinkUrl2 = document.getElementById(ObjNamePrefix + "LinkUrl" + (RowIndex-1) );
		var divLink2 = document.getElementById(ObjNamePrefix + "Link" + (RowIndex-1) );

		SwapObjectHTML(divLinkTitle, divLinkTitle2);		
		SwapObjectHTML(divLinkUrl, divLinkUrl2);		
		SwapObjectHTML(divLinkDescription, divLinkDescription2);		
		SwapObjectHTML(divLink, divLink2);		
	}
	
	WriteToXMLTextBox ('LinksCtrl_');
}

function SwapObjectHTML(obj1, obj2)
{
	if 	((obj1 != null) && (obj2 != null))		
	{
		var temp = 	obj1.innerHTML;
		obj1.innerHTML = obj2.innerHTML;
		obj2.innerHTML = temp;
	}
}

// make arrows show up on the first colum of the row that the mouse cursor is currently over
function ShowArrows(obj, GroupID, RowID)
{
	var prefixIndex = obj.id.lastIndexOf("_");
	var ObjNamePrefix = obj.id.substr(0, prefixIndex+1);
	var divArrows = document.getElementById(ObjNamePrefix + "LinkOrder" + RowID);

	if (divArrows != null)
	{
		divArrows.style.display = "block";
	}
}

// make arrows hidden on the first colum of the row that the mouse cursor was last over
function HideArrows(obj, GroupID, RowID)
{
	var prefixIndex = obj.id.lastIndexOf("_");
	var ObjNamePrefix = obj.id.substr(0, prefixIndex+1);
	var divArrows = document.getElementById(ObjNamePrefix + "LinkOrder" + RowID);

	if (divArrows != null)
	{
		divArrows.style.display = "none";
	}
}


// objContainer is the table row reference that is to be deleted
function DeleteLink(objContainer, GroupID, RowID)
{
	var prefixIndex = objContainer.id.lastIndexOf("_");
	var ObjNamePrefix = objContainer.id.substr(0, prefixIndex+1);

	// get values from table to edit
	var divLinkTitle = document.getElementById(ObjNamePrefix + "LinkTitle" + RowID);
	var divLinkUrl = document.getElementById(ObjNamePrefix + "LinkUrl" + RowID);
	var divLinkDescription = document.getElementById(ObjNamePrefix + "LinkDescription" + RowID);
	var divLink = document.getElementById(ObjNamePrefix + "Link" + RowID);
	
	// clear the current row values
	if (divLinkTitle != null)
		divLinkTitle.innerText = "";

	if (divLinkUrl != null)
		divLinkUrl.innerText = "";

	if (divLink != null)
		divLink.innerHTML = "";

	if (divLinkDescription != null)
		divLinkDescription.innerText = "";
	
	// declare object variables for swapping	
	var divLinkTitle2;
	var divLinkDescription2;
	var divLinkUrl2;
	var divLink2;
	
	// swap current row with next row
	for (var RowIndex=RowID; RowIndex<10; RowIndex++)
	{
		divLinkTitle = document.getElementById(ObjNamePrefix + "LinkTitle" + RowIndex);
		divLinkDescription = document.getElementById(ObjNamePrefix + "LinkDescription" + RowIndex);
		divLinkUrl = document.getElementById(ObjNamePrefix + "LinkUrl" + RowIndex);
		divLink = document.getElementById(ObjNamePrefix + "Link" + RowIndex);

		divLinkTitle2 = document.getElementById(ObjNamePrefix + "LinkTitle" + (RowIndex+1) );
		divLinkDescription2 = document.getElementById(ObjNamePrefix + "LinkDescription" + (RowIndex+1) );
		divLinkUrl2 = document.getElementById(ObjNamePrefix + "LinkUrl" + (RowIndex+1) );
		divLink2 = document.getElementById(ObjNamePrefix + "Link" + (RowIndex+1) );

		SwapObjectHTML(divLinkTitle, divLinkTitle2);		
		SwapObjectHTML(divLinkUrl, divLinkUrl2);		
		SwapObjectHTML(divLinkDescription, divLinkDescription2);		
		SwapObjectHTML(divLink, divLink2);			
	}
	
	// hide last row, which is blank now
	var txtRowsVisible = document.getElementById(ObjNamePrefix + "txtRowsVisible");
	
	if (txtRowsVisible != null)
	{
		var RowsVisible = txtRowsVisible.value;
		
		if ( (!isNaN(RowsVisible)) && (parseInt(RowsVisible) > 0))
		{
			RowsVisible = parseInt(RowsVisible);
			var DeletedRow = document.getElementById(ObjNamePrefix + "row" + RowsVisible);
			DeletedRow.style.display = "none";
			
			RowsVisible = RowsVisible - 1;
			txtRowsVisible.value = RowsVisible;
			
			var LastMoveDownArrow = document.getElementById(ObjNamePrefix + "lnkMoveDown" + RowsVisible);
			
			if (LastMoveDownArrow != null)
			{
				LastMoveDownArrow.style.display = "none";
			}	
			
			var AddLink = document.getElementById(ObjNamePrefix + "lnkAdd");
			AddLink.style.display = "block";
		}
	}
	
	// update XML placeholder
	//Name should be modified
	WriteToXMLTextBox ('LinksCtrl_');
	
}

// objContainer is an object that has the control ID prefix
function AddLink(objContainer)
{
	var prefixIndex = objContainer.id.lastIndexOf("_");			
	var ObjNamePrefix = objContainer.id.substr(0, prefixIndex+1);
	
	var txtRowsVisible = document.getElementById(ObjNamePrefix + "txtRowsVisible");
	
	if (txtRowsVisible != null)
	{
		var RowsVisible = txtRowsVisible.value;
		
		if (isNaN(RowsVisible))
			RowsVisible = 0;
		else
			RowsVisible = parseInt(RowsVisible);
			
		var LastMoveDownArrow = document.getElementById(ObjNamePrefix + "lnkMoveDown" + RowsVisible);
		
		if (LastMoveDownArrow != null)
		{
			LastMoveDownArrow.style.display = "inline";
		}	
		
		RowsVisible = RowsVisible + 1
		txtRowsVisible.value = RowsVisible;	
		
		var NewRow = document.getElementById(ObjNamePrefix + "row" + RowsVisible);
		NewRow.style.display = "block";
		
		LastMoveDownArrow = document.getElementById(ObjNamePrefix + "lnkMoveDown" + RowsVisible);
		
		var divLinkTitle = document.getElementById(ObjNamePrefix + "LinkTitle" + RowsVisible);
		var divLinkDescription = document.getElementById(ObjNamePrefix + "LinkDescription" + RowsVisible);
		var divLinkUrl = document.getElementById(ObjNamePrefix + "LinkUrl" + RowsVisible);
		var divLink = document.getElementById(ObjNamePrefix + "Link" + RowsVisible);
		
		// clear the current row values
		if (divLinkTitle != null)
			divLinkTitle.innerText = "";

		if (divLinkUrl != null)
			divLinkUrl.innerText = "";

		if (divLink != null)
			divLink.innerHTML = "";

		if (divLinkDescription != null)
			divLinkDescription.innerText = "";
			
		if (LastMoveDownArrow != null)
		{
			LastMoveDownArrow.style.display = "none";
		}			
		
		if (RowsVisible == 10)
		{
			var AddLink = document.getElementById(ObjNamePrefix + "lnkAdd");
			AddLink.style.display = "none";
		}
	}
}


