/******************************************************
 General page handlers
******************************************************/

function init()
{
	if(self.runInitFuncs)
		self.runInitFuncs();
}

function exit()
{
	if(self.runExitFuncs)
		self.runExitFuncs();
}


function closeWindow()
{
	window.close();
}

function goBack(iNrOfSteps)
{
	if(!iNrOfSteps)
		iNrOfSteps = -1;

	self.history.go(iNrOfSteps);
}


/******************************************************
 Dialog openers
******************************************************/

function US_FilePicker()
{
	var arrFileData = new Array();

	arrFileData = window.showModalDialog("FilePicker.aspx","",
		"dialogHeight:400px; dialogWidth:250px; dialogTop:px; dialogLeft:px; " +
		"edge:Raised; center:Yes; help:Yes; resizable:Yes; status:Yes;");

	return arrFileData;
}


function US_PagePicker()
{
	var strPage = "";

	strPage = window.showModalDialog("DlgPagePicker.asp","",
		"dialogHeight:400px; dialogWidth:250px; dialogTop:px; dialogLeft:px; " +
		"edge:Raised; center:Yes; help:Yes; resizable:Yes; status:Yes;");

	return strPage;
}


function US_TemplatePicker(sNaviId)
{
	var strTemplate = "";

	strTemplate = window.showModalDialog("DlgTemplatePicker.asp?naviid="+sNaviId,"",
		"dialogHeight:400px; dialogWidth:250px; dialogTop:px; dialogLeft:px; " +
		"edge:Raised; center:Yes; help:Yes; resizable:Yes; status:Yes;");

	return strTemplate;
}


/******************************************************
 FineTools kernel request callers
******************************************************/

function FTModal(strXmlRequest,strMessage,strTitle,strActionType)
{
	var paramArray = new Array();
	paramArray[0] = new String(strXmlRequest);
	//alert(paramArray[0]);
	if(strMessage && strMessage!="" && strMessage!='undefined')
		paramArray[1] = strMessage;
	else
		paramArray[1] = "Var god vänta...";
	
	if(strTitle && strTitle!="" && strTitle!='undefined')
		paramArray[2] = strTitle;
	else
		paramArray[2] = "Var god vänta...";
	
	paramArray[3] = strActionType;
	
	return self.showModalDialog("FTModal.aspx",paramArray,
		"dialogHeight:50px; dialogWidth:250px; dialogTop:px; dialogLeft:px; " +
		"edge:Raised; center:Yes; help:Yes; resizable:No; status:No;");
}		

function FSModal(strXmlRequest,strMessage,strTitle)
{
	return FTModal(strXmlRequest,strMessage,strTitle,"FS");
}

function FAModal(strXmlRequest,strMessage,strTitle)
{
	return FTModal(strXmlRequest,strMessage,strTitle,"FA");
}

function FEModal(strXmlRequest,strMessage,strTitle)
{
	return FTModal(strXmlRequest,strMessage,strTitle,"FE");
}

function FAModal_DeletePage(strNaviid,strMessage,strTitle)
{
	return FAModal("<deletenavinode naviid='"+strNaviid+"' includeinfostruct='y'/>",strMessage,strTitle);
}


/******************************************************
 Form event handlers
******************************************************/

function getpage(strDest,strXferData,strParam,objForm,strTarget,strType,strAnchorRef)
{
	
	//	Mycket enkel felhantering....
	//alert("getpage:" + strDest+","+ strXferData+","+ strParam+"," +objForm+","+ strTarget+","+ strType);
	
	if(strDest == null) return;
	if(strDest == "/")
	{
		top.window.location = top.window.location;
		return;
	}
	if(strXferData == "y" && objForm == null) return;
	if(strParam == null) strParam = "";

	var strResult = "";
	if(strXferData == "y")
		strResult = generateXMLFromForm(objForm,false);

	if(strType != null)
	{
		if(strType == "")
			strTypeOpt = "";
		else
			strTypeOpt = " type='" + strType + "' ";
	}
	else
		strTypeOpt = "";
	if(isnumber(strDest))
		document.FTSubmitForm.request.value = "<getpage " + getcurrentid() + strTypeOpt + " naviid='" + strDest +
			"'><getpage-params>" + strResult + "<op-params>" + strParam + "</op-params></getpage-params></getpage>";
	else
		document.FTSubmitForm.request.value = "<getpage " + getcurrentid() + strTypeOpt + " alias='" + strDest +
			"'><getpage-params>" + strResult + "<op-params>" + strParam + "</op-params></getpage-params></getpage>";

	
	if(strTarget != null && strTarget != "")
		document.FTSubmitForm.target = strTarget;
	//alert(document.FTSubmitForm.request.value);
		document.FTSubmitForm.action = "FineDriver.aspx"+ ((strAnchorRef && strAnchorRef!='')?"#" + strAnchorRef:"");
	//alert("Action:" + document.FTSubmitForm.action + "\nRequest:\n" + document.FTSubmitForm.request.value + "\nTarget: " + document.FTSubmitForm.target);
	document.FTSubmitForm.submit();
}

/*
function getpage(strDest, strXferData, strParam, objForm, strTarget)
{
	getpage(strDest, strXferData, strParam, objForm, strTarget,"");
}
*/


function hrefgetpage(strDest,strXferData,strParam,strForm,strTarget,strType,strAnchorRef)
{
	if(strForm != null && strForm != "")
		getpage(strDest,strXferData,strParam,document.forms[strForm],strTarget,strType,strAnchorRef);
	else
		getpage(strDest,strXferData,strParam,null,strTarget,strType,strAnchorRef);
}


function wingetpage(strDest,strXferData,strParam,objForm,objWin)
{
	//	Mycket enkel felhantering....
	if(strDest == null) return;
	if(strXferData == "y" && objForm == null) return;
	if(strParam == null) strParam = "";

	var href      = "FineDriver.aspx";
	var strResult = "";

	if(strXferData == "y")
		strResult = generateXMLFromForm(objForm,false);

	if(isnumber(strDest))
		href += "?<getpage " + getcurrentid() + " naviid='" + strDest + "'><getpage-params>" + strResult +
			"<op-params>" + strParam + "</op-params></getpage-params></getpage>";
	else
		href += "?<getpage " + getcurrentid() + " alias='" + strDest + "'><getpage-params>" + strResult +
			"<op-params>" + strParam + "</op-params></getpage-params></getpage>";

	objWin.location.href = href;
}


function hrefgeturl(strDest,strXferData,strParam,strForm,strTarget)
{
	if(strForm != null)
		geturl(strDest,strXferData,strParam,document.forms[strForm],strTarget);
	else
		geturl(strDest,strXferData,strParam,null,strTarget);
}


function geturl(strDest,strXferData,strParam,objForm,strTarget)
{
	//	Mycket enkel felhantering....
	if ( strDest == null ) return;
	if ( strXferData == "y" && objForm == null ) return;
	if ( strParam == null ) strParam = "";

	var strResult = "";
	if ( strXferData == "y" )
		strResult = generateXMLFromForm(objForm, false);
	if ( strResult != "" || strParam != "" )
	{
		document.FTSubmitForm.request.value = "<geturl-params>" + strResult + "<op-params>" + strParam + "</op-params></geturl-params>";
		document.FTSubmitForm.method = "get";
	}
	else
	{
		document.FTSubmitForm.request.value = "";
		document.FTSubmitForm.method = "post";
	}
	
	if ( strTarget != null && strTarget != "" )
		document.FTSubmitForm.target = strTarget;
	
	if ( strDest.indexOf("://")<0 && strDest.substring(0,7) != "mailto:")
		strDest = "http://" + strDest;

	document.FTSubmitForm.action = strDest;

	if ( document.FTSubmitForm.method == "post")
	{
		if(strTarget != null)
		{
			if(strTarget == '_self')
			{
				document.FTSubmitForm.submit();
			}
			else if(strTarget == '_top')
			{
				top.document.location.href = strDest;
			}
			else
			{
				window.open(strDest);
			}
		}
		else		
			window.open(strDest);
	}
	else
		document.FTSubmitForm.submit();
}


function login()
{
	document.FTSubmitForm.request.value = "<login naviid='" + intThisNode + "'/>";
	document.FTSubmitForm.submit();
}


function getcurrentid()
{
	return  "source-naviid='" + intThisNode + "' source-naviparentid='" + intParentNode + "'";
}


function generateXMLFromForm(objForm, bnForSave)
{
	var strResult   = "";
	var bnInTempl   = false;
	var index       = 1;
	var strPrevName = "";
	var strElemName = "";

	for(var i=0; i<objForm.length; i++)
	{
		var strElemType = objForm.elements[i].type;
		var strElemDT   = null;
		var intDelimPos = -1;
		var strNextName = "";

		strPrevName = strElemName;
		strElemName = objForm.elements[i].name;

		if ( objForm.length > (i+1) ) strNextName = objForm.elements[i+1].name;

		if ( (intDelimPos = strElemName.indexOf("$")) > 0 )
		{
			strElemDT = strElemName.substring(intDelimPos+1);
			strElemName = strElemName.substring(0,intDelimPos);
		}

		//	Plugindata skickas aldrig ner till FineTools...
		if ( strElemName.substring(0,18) == "start-plugin-data:" )
		{
			var strPluginName = strElemName.substring(18);
			while(objForm.elements[i].name != ("end-plugin-data:"+strPluginName))
				i++;
			continue;
		}

		//	Dessa komponenter skippas
		if(strElemName.substring(0,8) == "end-ref:" && !bnInTempl)
			continue;
		else if(strElemName.substring(0,17) == "start-as-include:")
			continue;
		else if(strElemName.substring(0,15) == "end-as-include:")
			continue;
		else if(strElemType == "button" && strElemName.substring(0,5) != "xfer-")
			continue;

		//	Start-ref innebär att en malldefinition börjat, här gäller att
		//	1. innan man är inne i "rätt" definition så läggs allt platt,
		//	2. är det en "include" så hamnar data i "förälderdefinitionen".
		if(strElemName.substring(0,10) == "start-ref:")
		{
			if ( strPrevName.substring(0,17) == "start-as-include:" )
				continue;
			var strTemplID = strElemName.substring(10);
			if(strTemplID == strTemplateID || bnInTempl)
			{
				bnInTempl = true;
				strResult += "<infoleaf template='" + strTemplID + "'>";
			}
		}
		else if(strElemName.substring(0,8) == "end-ref:" && bnInTempl)
		{
			if ( strNextName.substring(0,15) == "end-as-include:" )
				continue;
			var strTemplID = strElemName.substring(8);
			if ( strTemplID == strTemplateID )
				bnInTempl = false;
			strResult += "</infoleaf>";
		}
		else if(strElemName.substring(0,11) == "start-comp:")
		{
			var strCompID = strElemName.substring(11);
			strResult += "<" + strCompID;
			while ( objForm.elements[i+1].name.substring(0,10) == "comp-attr:" )
			{
				i++;
				strElemName = objForm.elements[i].name.substring(10);
				strResult += " " + strElemName + "='" + AUX_GetValue(objForm.elements[i]) + "'";
				strPrevName = strElemName;
			}
			strResult += ">";

		}
		else if(strElemName.substring(0,9) == "end-comp:")
		{
			var strCompID = strElemName.substring(9);
			//alert("End-comp " + strCompID);
			strResult += "</" + strCompID + ">";
		}
		else
		{
			var strElemValue = AUX_GetValue(objForm.elements[i]);
			if(strElemType == "checkbox" || strElemType == "radio")
			{
				if(!objForm.elements[i].checked)
					continue;
			}
			if(strElemType.substring(0,6) == "select" && strElemName.indexOf(";") > 0)
			{
				var strSel  = strElemName.substring(0,strElemName.indexOf(";"));
				strElemName = strElemName.substring(strElemName.indexOf(";")+1);
				var strCol  = strElemName.substring(0,strElemName.indexOf(";"));
				strElemName = strElemName.substring(strElemName.indexOf(";")+1);
				var strName = strElemName.substring(0,strElemName.indexOf(";"));
				strElemName = strElemName.substring(strElemName.indexOf(";")+1);
				var strVal  = strElemName.substring(0);
				var objSel  = objForm.elements[i];

				if(!bnForSave)
					strResult += "<" + strCol + ">";

				for(var j=0; j<objSel.options.length; j++)
				{
					if(bnForSave)
					{
						if(objSel.options[j].selected)
						{
							strResult += "<" + strSel + " selected='y'><![CDATA[";
							strResult += AUX_GetValue(objSel.options[j]) + "]]></" + strSel + ">";
						}
					}
					else
					{
						strResult += "<" + strSel ;
						if ( objSel.options[j].selected ) strResult += " selected='y'";
						strResult += "><" + strName + "><![CDATA[" + objSel.options[j].text + "]]></" + strName + ">";
						strResult += "<" + strVal + "><![CDATA[" + AUX_GetValue(objSel.options[j]) + "]]></" + strVal + "></" + strSel + ">";
					}
				}

				if(!bnForSave)
					strResult += "</" + strCol + ">";
			}
			else
			{
				if(strElemName.length > 0)
				{
					strResult += "<" + strElemName;
					if(strElemDT != null)
						strResult += " dt='" + strElemDT + "'";
					strResult += "><![CDATA[" + strElemValue + "]]></" + strElemName + ">";
				}	
			}
		}
	}

	return strResult;
}


/*******************************************************************************************
 Presentation form event handlers (all-pres-pages.js)
*******************************************************************************************/

function createpage(strDest,strTarget,strChooseTemplate,strTemplateName)
{
	//alert(strDest + ", " + strTarget + ", " + strChooseTemplate + ", " + strTemplateName)
	if(strDest == null || strDest.length == 0)
		strDest = intParentNode;

	strTemplate = "";
	if(strTemplateName)
	{
		strTemplate = " templateid='" + strTemplateName + "'";
	}
	else if(strChooseTemplate!="n" && strChooseTemplate!="N")
	{
		strTemplateName = US_TemplatePicker(strDest);
		if(strTemplateName && strTemplateName != '')
		{
			if(strTemplateName!='DEFAULT')
				strTemplate = " templateid='" + strTemplateName + "'";
		}
		else
			return;
	}

	document.FTSubmitForm.request.value = "<getpage " + getcurrentid() + " type='edit' naviid='" + strDest + "'" +strTemplate+" force-create='y'/>";
	if ( strTarget != null && strTarget != "" )
		document.FTSubmitForm.target = strTarget;
	//alert("Anrop:" +document.FTSubmitForm.request.value);
 	document.FTSubmitForm.action = "FineDriver.aspx";
	document.FTSubmitForm.submit();
}


function editpage()
{

	document.FTSubmitForm.request.value = "<getpage " + getcurrentid() + " type='edit' naviid='" + intThisNode + "'/>";
	document.FTSubmitForm.action = "FineDriver.aspx";
	document.FTSubmitForm.submit();
}


/*******************************************************************************************
 Edit form event handlers (all-edit-pages.js)
*******************************************************************************************/

function edittemplate()
{
	document.FTSubmitForm.request.value = "<getpage " + " " + getcurrentid() + " templateid='" + FTEditForm["templates"].value + "' type='edit' naviid='" + intThisNode + "' force-create='y'></getpage>";
	document.FTSubmitForm.submit();
}


function savepageOld()
{
	var strResult = "";

	strResult = generateXMLFromForm(document.FTEditForm, true);
	document.FTSubmitForm.request.value = "<savepage " + strNameSpace+ " " + getcurrentid() + " naviid='" + intThisNode + "'><infoleaf>" + strResult + "</infoleaf></savepage>";

	//alert ("<savepage " + strNameSpace+ " " + getcurrentid() + " naviid='" + intThisNode + "'><infoleaf>" + strResult + "</infoleaf></savepage>");
	document.FTSubmitForm.submit();
}


function savepage_getsubmit(dest)
{
	for (var i=0;i<document.FTEditForm.length;i++ )
	{
		if(document.FTEditForm.elements[i].name=="fileCheckBoxes")
		{
			if(document.FTEditForm.elements[i].checked)
			{
				strFieldName = document.FTEditForm.elements[i].getAttribute("fieldId");
				//alert(strFieldName);
				if(document.FTEditForm.elements[strFieldName + "$upload"].value != document.FTEditForm.elements["lnk_"+strFieldName].value)
				{
					//alert(strFieldName + " ska rensas. Det gamla värdet: " + document.FTEditForm.all[strFieldName + "$upload"].value);
					document.FTEditForm.elements[strFieldName + "$upload"].value = "";
				}
			}
		}
		else if(document.FTEditForm.elements[i].name=="fileUploadCheckBoxes")
		{
			if(document.FTEditForm.elements[i].checked)
			{
				strFieldName = document.FTEditForm.elements[i].fieldId;
				document.FTEditForm.all[strFieldName + "$upload"].value = "";
			}
		}
	}

	if(document.all["destinationPage"])
		document.all["destinationPage"].value = dest;
	else
		document.FTEditForm.insertAdjacentHTML("BeforeEnd","<input name='start-plugin-data:_' type='hidden'/>"+
			"<input type='hidden' id='destinationPage' name='destinationPage' value='"+dest+"'/>"+
			"<input name='end-plugin-data:_' type='hidden'/>");

	//uploadFilesResult = window.open("blank.htm", "uploadFilesResult", "location=0, left=200, top=200, width=1, height=1, menubar=no, resizable=yes, scrollbars=auto");
	uploadFilesResult = window.open("ShowWaitMessage.aspx","uploadFilesResult",
		"location=0, left=300, top=250, width=250, height=50, menubar=no, resizable=yes, scrollbars=auto");
	if (!uploadFilesResult.opener)
		uploadFilesResult.opener = self;

	return document.FTEditForm.innerHTML;
}


function savepage(dest,filetypes,filesize)
{
	//alert("Destination" + dest);

	for(var i=0; i<document.FTEditForm.length; i++)
	{
		if(document.FTEditForm.elements[i].name == "fileUploadCheckBoxes")
		{
			if(document.FTEditForm.elements[i].checked)
			{
				strFieldName = document.FTEditForm.elements[i].getAttribute("fieldId");
				document.FTEditForm.elements[strFieldName+"$upload"].value = "";
			}
		}
	}

	if(document.getElementById("destinationPage"))
		document.getElementById("destinationPage").value = dest;
	else
	{
		var sExtraFields = "<input name='start-plugin-data:_' type='hidden'/>" +
				"<input type='hidden' id='destinationPage' name='destinationPage' value='"+dest+"'/>" +
				"<input name='end-plugin-data:_' type='hidden'/>";
		if(document.FTEditForm.insertAdjacentHTML)
		{
			document.FTEditForm.insertAdjacentHTML("BeforeEnd",sExtraFields);
		}
		else
		{
			document.FTEditForm.innerHTML += sExtraFields;
		}
	}
	
	uploadFilesResult = window.open("ShowWaitMessage.aspx","uploadFilesResult",
		"left=300,top=250,width=250,height=50,resizable,scrollbars");
	if(!uploadFilesResult.opener)
		uploadFilesResult.opener = self;

	if(document.all)
	{
		for(var i=0;i<htmlAreaFieldNames.length;i++)
			editor_filterOutput(htmlAreaFieldNames[i]);
	}
	
	var sQueryString = (filetypes?"filetypes="+filetypes:"");
	
	if(filesize)
	{
		if(sQueryString.length > 0)
			sQueryString += "&";
		sQueryString += "filesize=" + filesize;
	}
		
	document.FTEditForm.action="UploadFiles.aspx" + (sQueryString.length>0?"?"+sQueryString:"");
	uploadFilesResult.focus();
	document.FTEditForm.submit();
}


function savepage2(dest)
{
	//alert("Destination i savepage2:" + dest);
	if(uploadFilesResult)
		uploadFilesResult.close();

	if(dest!='undefined')
		strDest = " destination='"+dest+"' ";
	else
		strDest = "";

	var strResult = "";
	strResult = generateXMLFromForm(document.FTEditForm);
	//alert("generateXMLFromForm:"+strResult);
	document.FTSubmitForm.request.value = "<savepage " + strNameSpace + strDest + " " + getcurrentid() + " naviid='" + intThisNode + "'><infoleaf>" + strResult + "</infoleaf></savepage>";
	document.FTSubmitForm.action = "FineDriver.aspx";
	//alert(document.FTSubmitForm.request.value);
	document.FTSubmitForm.submit();
}


function deletepage()
{
	window.open("deleteNavinode.asp?id="+intThisNode,"delwin",
		"location=0,left=300,top=250,width=400,height=120,menubar=no,resizable=no,scrollbars=no");
}

function updateFileRef(strFieldName, strNewId)
{
	//alert("Updating " + strFieldName +", new value =" + strNewId);
	document.FTEditForm.elements[strFieldName + "$upload"].value = strNewId;
}

function removeFileRef(strFieldName, strMessage)
{
	if(strMessage!="")
		alert(strMessage);
	//document.forms.FTEditForm.item(strFieldName).outerHTML = "";
}

function duplicatecomponent(strComp)
{
	var strResult = "";
	var xmlTemporary = new ActiveXObject ("microsoft.xmldom");

	strResult = generateXMLFromForm(document.FTEditForm);
	strResult = "<duplicatedata " + strNameSpace + ">" + strResult + "</duplicatedata>";
	xmlTemporary.loadXML(strResult);

	XMLInfoStructure.selectSingleNode("//"+strComp).parentNode.parentNode.replaceChild(xmlTemporary.selectSingleNode("//"+strComp).parentNode, XMLInfoStructure.selectSingleNode("//"+strComp).parentNode);
	XMLInfoStructure.selectSingleNode("//"+strComp).parentNode.appendChild(XMLInfoStructure.selectSingleNode("//"+strComp).parentNode.lastChild.cloneNode(true));

	FineToolsHTML.innerHTML = XMLInfoStructure.getElementsByTagName("infoleaf").item(0).transformNode(XSLPresentation.documentElement);
}


function OpenFileSelector(objTextSpan, sFieldName)
{
	var arrayFileData = US_FilePicker();
	if (!arrayFileData)
		return;
	
	document.all[sFieldName + "$upload"].value = arrayFileData[0];
	objTextSpan.innerHTML = arrayFileData[1];
	
	document.all["cb_" + sFieldName].checked = false;
	document.all["fileref_" + sFieldName].style.display = "none";
}


function setImageData(intPos, strDir, intID, strExt)
{
	document.all[intPos].src = strDir + "/" + intID + "." + strExt;
	document.all[intPos-1].value = intID;
}


function setFileLinkData(intPos,intID)
{
	document.all[intPos-1].value = intID;
}


/******************************************************
 Text editor helpers
******************************************************/

// Temporärlagrar användarens textmarkering
var storedSelection;
var undoText = new String();

//	Hittar aktuell textarea
function findTA(me, taId)
{
	var bnStartLook = false;

	for(var i=0;i<document.all.length;i++)
	{
		if ( document.all[i] == me )
			bnStartLook = true;

		if ( bnStartLook && document.all[i].name == taId )
			return document.all[i];
	}

	return new Object();
}


// Lägger till valfri HTML-tag kring markerad text
function Insert(me, taId, HTMLTag)
{
	if(!document.selection)
		return;

	var objTA = findTA(me, taId);

	if (storedSelection)
	{
		// Spara text för ångrafunktion
		undoText.value = objTA.value;
		storedSelection.select();
		// Hämta texten från markeringen
		var OldText = storedSelection.text;
		// Hämta längden på HTML-taggen
		var TagLength = HTMLTag.length;
		var NewText;
		// Finns taggen redan, så ta bort den
		if (OldText.substr(0,2 + TagLength) == "<" + HTMLTag + ">" && OldText.substr(OldText.length - 3 - TagLength) == "</" + HTMLTag + ">")
		{
			NewText = OldText.substr(2 + TagLength, OldText.length - 5 - (TagLength * 2));
			storedSelection.text = NewText;
		}
		else
		{
			// Annars lägg till HTML-taggen omkring texten
			NewText = "<" + HTMLTag + ">" + OldText + "</" + HTMLTag + ">";
			storedSelection.text = NewText;
		}

		// Markera den nya texten

		//var TA = objTA.createTextRange();
		//TA.findText(NewText);
		//TA.select();
	}

	storedSelection = null;
}


// Lägger till punktlista
function InsertList(me, taId)
{
	if(!document.selection)
		return;
	var objTA = findTA(me, taId);
	if (storedSelection)
	{
		// Spara text för ångrafunktion
		undoText.value = objTA.value;
		storedSelection.select();
		var OldText = storedSelection.text;
		storedSelection.text = "<li/>" + OldText;
	}
}


// Lägger till länk
function cbInsertLink(taId, name, id)
{
	var objTA = document.all[taId];
	if (storedSelection)
	{
		// Spara text för ångrafunktion
		undoText.value = objTA.value;
		storedSelection.select();
		var OldText = storedSelection.text;
		storedSelection.text = "<a href='FineDriver.aspx?request=" + id + "'>" + OldText + "</a>"
	}
}


// Lägger till länk
function cbInsertLinkFromResourceLibrary(taId, name, id)
{
	var objTA = document.all[taId];
	if (storedSelection)
	{
		// Spara text för ångrafunktion
		undoText.value = objTA.value;
		storedSelection.select();
		var OldText = storedSelection.text;
		storedSelection.text = "<a href='../uploadarchive/" + id + "'>" + OldText + "</a>"
	}
}


function cbInsertImageFromResourceLibrary(taId, name, id)
{
	var objTA = document.all[taId];
	if (storedSelection)
	{
		// Spara text för ångrafunktion
		undoText.value = objTA.value;
		storedSelection.select();
		var OldText = storedSelection.text;
		storedSelection.text = "<img src='../uploadarchive/" + id + "'>" + OldText;
	}
}


/*
function InsertIntLink(me, taId)
{
	window.open("NaviMenu.asp?id="+taId.name, "menuwin", "location=0, left=300, top=250, width=400, height=500, menubar=no, resizable=yes, scrollbars=yes");
}
*/


function handleLink(me, taId)
{
	if(!storedSelection)
	{
		alert("Select some text or click inside the textarea where the link will be created!");
		return;
	}

	if(storedSelection.text=='')
		storedSelection.select();

	var tempStoredSelection = storedSelection.duplicate();

	objTA = GetDocumentField(taId);
	sExistingLink = getLink(taId);

	var arrayLinkAndPosition = sExistingLink.split(";");
	var bLinkExists = arrayLinkAndPosition[0]!="";
	//alert("Link:" + arrayLinkAndPosition[0] + "\nPosition:" + arrayLinkAndPosition[1] + "\nLink exists: " + bLinkExists);

	sUrl = "dlgLinkCreator.asp"

	var arrayParams = new Array();
	arrayParams[0] = arrayLinkAndPosition[0];
	arrayParams[1] = storedSelection.text;

	index1 = parseInt(arrayLinkAndPosition[1]);
	if(bLinkExists)
		index2 = index1 + arrayLinkAndPosition[0].length;
	else
	{
		index2 = index1 + storedSelection.text.length;
		while(index1<index2 && (objTA.value.charCodeAt(index1)==10 || objTA.value.charCodeAt(index1)==13))
		{
			index1++;
			index2++;
		}
	}

	/*
	alert("Position 1 " + index1 + "\nPosition 2 " + index2 +
			"\n\narrayLinkAndPosition:" + arrayLinkAndPosition +
			"\n\nArray:" + arrayParams +
			"\n\nbLinkExists = " + bLinkExists);
	*/
	var strNewLink = window.showModalDialog(sUrl,arrayParams,
		"dialogHeight: 400px; dialogWidth: 400px; dialogTop: px; dialogLeft: px; edge: " +
		"Raised; center: Yes; help: Yes; resizable: Yes; status: Yes; scroll: No");

	if(!strNewLink || strNewLink=="CANCEL")
		return;
	else
	{
		SaveUndo(objTA);
		/*
		alert("Index1 = " + index1 + "\n" +
			"Index2 = " + index2 + "\n" +
			"Character at " + (index1) + ": " + objTA.value.charAt(index1) + "(" +objTA.value.charCodeAt(index1) + ")\n" +
			"Character at " + (index1+1) + ": " + objTA.value.charAt(index1+1) + "(" +objTA.value.charCodeAt(index1+1) + ")\n" +
			"Character at " + (index1+2) + ": " + objTA.value.charAt(index1+2) + "(" +objTA.value.charCodeAt(index1+2) + ")\n" +
			"Character at " + (index1+3) + ": " + objTA.value.charAt(index1+3) + "(" +objTA.value.charCodeAt(index1+3) + ")\n" +
			"Character at " + (index1+4) + ": " + objTA.value.charAt(index1+4) + "(" +objTA.value.charCodeAt(index1+4) + ")\n" +

			"Svaret:" + strNewLink + "\n" +
			"Första delen av texten: " + objTA.value.substring(0,index1) + "\n" +
			"Text mellan: " + objTA.value.substring(index1,index2) + "\n" +
			"Andra delen av texten: " + objTA.value.substr(index2));
		*/

		objTA.value	=
			objTA.value.substring(0,index1) +
			(strNewLink=="REMOVE"?"":strNewLink) +
			objTA.value.substr(index2);

		if(strNewLink!="REMOVE")
		{
			storedSelection.findText(strNewLink);
			storedSelection.select();
		}
		else
		{
			storedSelection.setEndPoint("StartToStart",tempStoredSelection);
			storedSelection.select();
		}
	}
}


function InsertIntLink(me, taId)
{
	if(!document.selection)
		return;
	handleLink(me,taId);
	return;

	if(!storedSelection	|| storedSelection.text=='')
	{
		alert("Markera först vilken del av texten ska vara klickbar!");
		return;
	}

	var pageLink = US_PagePicker();
	if(!pageLink)
		return;

	if(typeof pageLink == 'string')
		cbInsertLink(taId,"",pageLink);
	else
	{
		//It is an array with the data about the page/document in the resource library
		cbInsertLinkFromResourceLibrary(taId,"",pageLink[0]+ pageLink[1].substr(pageLink[1].lastIndexOf(".")));
		//Eventuellt så ska man även returnera hela sökvägen till uploadarchive mappen från registret
		//ex. http://plusenergi/uploadarchive/1234.jpg
		//Behövs i fall mappen finns någoannanstans. Dessutom slipper man ta fram filändelsen här
	}
}


function InsertIntImage(me, taId)
{
	if(!document.selection)
		return;
	var imageLink = US_FilePicker();

	if(!imageLink)
		return;

	//It is an array with the data about the page/document in the resource library
	cbInsertImageFromResourceLibrary(taId,"",imageLink[0]+ imageLink[1].substr(imageLink[1].lastIndexOf(".")));
	//Eventuellt så ska man även returnera hela sökvägen till uploadarchive mappen från registret
	//ex. http://plusenergi/uploadarchive/1234.jpg
	//Behövs i fall mappen finns någoannanstans. Dessutom slipper man ta fram filändelsen här
}


function InsertExtLink(me, taId)
{
	if(!document.selection)
		return;
	handleLink(me,taId);
	return;

	var objTA = findTA(me, taId);
	if (storedSelection)
	{
		// Spara text för ångrafunktion
		undoText.value = objTA.value;
		storedSelection.select();
		var OldText = storedSelection.text;

		// Om den markerade texten börjar med http:// eller www., använd
		// denna text som länk, annars sätt blank.
		if (OldText.substr(0, 7).toUpperCase() == "HTTP://" || OldText.substr(0, 4).toUpperCase() == "WWW.")
		{
			if(OldText.substr(0, 4).toUpperCase() == "WWW.")
				OldText = "http://" + OldText;

			storedSelection.text = "<A HREF=\"" + OldText + "\" target=\"_blank\">" + OldText + "</A>";
		}
		else
			storedSelection.text = "<A HREF=\"http://" + OldText + "\" target=\"_blank\">" + OldText + "</A>";
	}
}


// Lagrar användarens aktuella textmarkering
function SaveSelection()
{
	if(document.selection)
		storedSelection = document.selection.createRange();
}


// Ångrar användarens senaste inmatning
function Undo(me, taId)
{
	var objTA = findTA(me, taId);
	var tmp = objTA.value;

	if(undoText.value)
	{
		objTA.value = undoText.value;
		undoText.value = tmp;
	}
}


// Sparar text innan tangentnedtryckning
function SaveUndo(objTA)
{
	undoText.value = objTA.value;
}


function getLink(sAreaID)
{
	var txtLink = "";
	var iStart = -1;
	var iFinalStartPosition = -1;

	//if(objDocTR.text != "")
	//{
		var objAreaElem = document.getElementById(sAreaID);
		// Create text range for the whole text area
		var objAreaTR = objAreaElem.parentTextEdit.createTextRange();
		objAreaTR.moveToElementText(objAreaElem);
		// Check length of whole text area
		var iAreaLen = objAreaTR.text.length;
		// Set end of AreaTR to the sztart of the selection objektet.
		objAreaTR.setEndPoint("EndToStart",storedSelection);
		// The length of the text in objAreaTR is now the start pos of the selection.
		var iSelStart = objAreaTR.text.length;

		while(iSelStart<(objAreaTR.text.length + storedSelection.text.length) &&
			(objTA.value.charCodeAt(iSelStart)==10 || objTA.value.charCodeAt(iSelStart)==13))
			iSelStart++;

		iFinalStartPosition = iSelStart;
		if((iSelStart > -1) && (iSelStart < iAreaLen))
		{
			var strTextArea = objAreaElem.value;

			iStart = strTextArea.toLowerCase().lastIndexOf("<a",iSelStart);
			if(iStart > -1)
			{
				var iEnd = strTextArea.toLowerCase().indexOf("</a>",iStart);
				if((iEnd > iStart) && (iStart <= iSelStart) && (iEnd+4 > iSelStart))
				{
					txtLink = strTextArea.substring(iStart,iEnd+4);
					iFinalStartPosition = iStart;
				}
			}
		}
	//}

	return txtLink+";"+iFinalStartPosition;
}

//************************* Bifoga flera filer  *******************************

function uploadOneMore(strDest, strXferData, strParam, strForm, strTarget)
{
	var strNextName = getNextName(strDest);
	if(GetDocumentField(strNextName) == null)
	{
		alert("Inga fler element");
		return;
	}
	GetDocumentField(strNextName).style.display="";
	
	if (GetDocumentField("button_"+ strDest))	
		GetDocumentField("button_"+ strDest).style.display="none";
	if (GetDocumentField("button_"+ strNextName))
		GetDocumentField("button_"+ strNextName).style.display="";
	if (GetDocumentField("newline_"+ strNextName))		
		GetDocumentField("newline_"+ strNextName).style.display="";
	if (GetDocumentField("h_" + strDest))			
		GetDocumentField("h_"+ strDest).style.display="";
}


function GetDocumentField(sFieldName)
{
	if(document.getElementById && document.getElementById(sFieldName))
		return document.getElementById(sFieldName);
	else
		return document.all[sFieldName];
		
}

function OrganizeUploadFiles()
{
	var strObjName;
	
	for(var i=0;i<FTEditForm.length;i++)
	{
		if (FTEditForm[i].name.indexOf("01$upload")!= -1)
		{
			var strThisNumber;
			var iThisNumber;
			var iLastFile  = 1;
			var strEmpty;
			
			//namn + 01 + $upload
			var thisGroup = FTEditForm[i].name.substring(0,FTEditForm[i].name.length-9);
			
			var thisFileObj = GetDocumentField(thisGroup + "01$upload");
			iThisNumber = 1;
			strThisNumber ="01";

			while(thisFileObj != null)
			{
				//Detta objekt innehåller en fil
				if(GetDocumentField(thisGroup + strThisNumber + "$upload").value != "")
				{
					//Tomma fält före filen, flytta upp den
					if(iLastFile < iThisNumber)
					{
						strEmpty = getStringNumber(iLastFile);
						GetDocumentField(thisGroup + strEmpty + "$upload").value = GetDocumentField(thisGroup + strThisNumber + "$upload").value;
						GetDocumentField("fileref_text_"+ thisGroup + strEmpty).innerHTML = GetDocumentField("fileref_text_"+ thisGroup + strThisNumber).innerHTML;
						
						GetDocumentField("fileref_text_"+ thisGroup + strThisNumber).innerHTML = "";
						GetDocumentField(thisGroup + strThisNumber + "$upload").value = "";
					
						showFileUploadField(thisGroup + strEmpty);	
						hideFileUploadField(thisGroup + strThisNumber);
						
						if (GetDocumentField("button_" + thisGroup + strEmpty) != null)
								GetDocumentField("button_" + thisGroup + strEmpty).style.display="none";
					}
					
					if(iLastFile == iThisNumber)
					{
						if (GetDocumentField("button_" + thisGroup + strThisNumber) != null)
								GetDocumentField("button_" + thisGroup + strThisNumber).style.display="none";
					}
					iLastFile++;
				}
				else //Ingen fil
				{
					hideFileUploadField(thisGroup + strThisNumber);
				}
				
				iThisNumber++;
				strThisNumber = getStringNumber(iThisNumber);
				thisFileObj = GetDocumentField(thisGroup + strThisNumber + "$upload");
			}
			
			strThisNumber = getStringNumber(iLastFile-1);

			//Visa lägg till-knapp och ta bort sista linjen
			if (GetDocumentField("button_" + thisGroup + strThisNumber))
				GetDocumentField("button_" + thisGroup + strThisNumber).style.display="";
			if (GetDocumentField("h_" + thisGroup + strThisNumber))
				GetDocumentField("h_"+ thisGroup + strThisNumber).style.display="none";
				
			//Visa ett tomt objekt sist i listan
			if (strThisNumber == "00")
			{
				if(GetDocumentField(thisGroup + "01"))
					showFileUploadField(thisGroup + "01");	
				if (GetDocumentField("h_" + thisGroup + "01"))
					GetDocumentField("h_"+ thisGroup + "01").style.display="none";
			}
		}//if
		
	}//loop
}

function getStringNumber(no)
{
	strNo = no + "";
   if (strNo.length == 1)
		strNo = "0" + strNo;	
	return strNo;
}


function showFileUploadField(name)
{
	GetDocumentField(name).style.display="";
	
	if (GetDocumentField("newline_" + name))
		GetDocumentField("newline_"+ name).style.display="";
	
	if (GetDocumentField("h_" + name))	
		GetDocumentField("h_"+ name).style.display="";
	
	if (GetDocumentField("button_" + name))
		GetDocumentField("button_" + name).style.display="";
	
	if(GetDocumentField("fileref_text_"+ name).innerHTML.length > 16)
		GetDocumentField("fileref_"+ name).style.display="block";
}

function hideFileUploadField(name)
{
	GetDocumentField("fileref_"+ name).style.display="none";
	GetDocumentField(name).style.display="none";
	
	if (GetDocumentField("newline_" + name))
		GetDocumentField("newline_"+ name).style.display="none";
	
	if (GetDocumentField("h_" + name))
		GetDocumentField("h_"+ name).style.display="none";

	if (GetDocumentField("button_" + name))
		GetDocumentField("button_" + name).style.display="none";
}

function getNextName(name)
{
	var strFileNo = name.substr(name.length-2,2);
	var strNextFileNo = (parseInt(strFileNo,10) + 1) + "";
	if (strNextFileNo.length == 1)
		strNextFileNo = "0" + strNextFileNo;
	
	return strNextFileName = name.substring(0,name.length-2) + strNextFileNo;
}

function getPrevName(name)
{
	var strFileNo = name.substr(name.length-2,2);
	
	if (strFileNo == "01")
		return null;
		
	var strPrevFileNo = (strFileNo - 1) + "";
	if (strPrevFileNo.length == 1)
		strPrevFileNo = "0" + strPrevFileNo;
		
	return strPrevObjName = name.substring(0,name.length-2) + strPrevFileNo;
}
/******************************************************
 Misc helper routines
******************************************************/

function AUX_GetValue(objElem)
{
	var strValue = objElem.value;

	if (strValue == null)
		strValue = "";

	if (strValue == "")
		strValue = objElem.getAttribute("value");

	return strValue;
}


function isnumber(id)
{
	var res = parseInt(id);
	return !(res == 0 || res == Number.NaN);
}


// Removes all whitespace characters
// from start and end of a string
function trim(sString)
{
   sTrimmedString = "";

   if(sString != "")
   {
      var iStart = 0;
      var iEnd = sString.length - 1;
      var sWhitespace = " \t\f\n\r\v";

      while(sWhitespace.indexOf(sString.charAt(iStart)) != -1)
      {
         iStart++;
         if (iStart > iEnd)
            break;
      }

      // If the string not just whitespace
      if (iStart <= iEnd)
      {
         while (sWhitespace.indexOf(sString.charAt(iEnd)) != -1)
            iEnd--;
         sTrimmedString = sString.substring(iStart,++iEnd);
      }
   }

   return sTrimmedString;
}

String.prototype.trim2 = function()
{
    // Use a regular expression to replace leading and trailing 
    // spaces with the empty string
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

function GetElementById(parentElement, id, tagName)
{
     if(!parentElement)
          return null;
          
     var objChildElements = parentElement.getElementsByTagName(tagName?tagName:"*");
     
     for(var i=0;i<objChildElements.length;i++)
     {
          if(objChildElements[i].id == id)
               return objChildElements[i];
     }
     
     return null;
} 

function GetElementByName(parentElement, name, tagName)
{
     if(!parentElement)
          return null;
          
     var objChildElements = parentElement.getElementsByTagName(tagName?tagName:"*");
     
     for(var i=0;i<objChildElements.length;i++)
     {
          if(objChildElements[i].name == name)
               return objChildElements[i];
     }
     
     return null;
} 

function GetElementByIdOrName(parentElement, id_or_name, tagName)
{
     if(!parentElement)
          return null;
          
     var objChildElements = parentElement.getElementsByTagName(tagName?tagName:"*");
     
     for(var i=0;i<objChildElements.length;i++)
     {
          if(objChildElements[i].name == id_or_name || objChildElements[i].id == id_or_name)
               return objChildElements[i];
     }
     
     return null;
}

function GetElementsById(parentElement, id, tagName)
{
	var objResultArray = new Array();
	objResultArray.length = 0;
    if(parentElement)
    {
		var objChildElements = parentElement.getElementsByTagName(tagName?tagName:"*");

		for(var i=0;i<objChildElements.length;i++)
		{
			if(objChildElements[i].id == id)
			{
				objResultArray[objResultArray.length] = objChildElements[i];
			}
		}
	}     
	
	return objResultArray;
}

function GetElementsByName(parentElement, name, tagName)
{
	var objResultArray = new Array();
	objResultArray.length = 0;
    if(parentElement)
    {
		var objChildElements = parentElement.getElementsByTagName(tagName?tagName:"*");

		for(var i=0;i<objChildElements.length;i++)
		{
			if(objChildElements[i].name == name)
			{
				objResultArray[objResultArray.length] = objChildElements[i];
			}
		}
	}     
	
	return objResultArray;
}

function GetElementsByIdOrName(parentElement, name, tagName)
{
	var objResultArray = new Array();
	objResultArray.length = 0;
    if(parentElement)
    {
		var objChildElements = parentElement.getElementsByTagName(tagName?tagName:"*");

		for(var i=0;i<objChildElements.length;i++)
		{
			if(objChildElements[i].name == name || objChildElements[i].id == name)
			{
				objResultArray[objResultArray.length] = objChildElements[i];
			}
		}
	}     
	
	return objResultArray;
}

function FindInnerText(objControl, innerText, nestingLevel)
{
	if(!objControl)
		return "";
	
	//maybe microsoft already done the job for us?
	if (typeof objControl.innerText != "undefined")
		return objControl.innerText;
	
	//standard browser. check recursion limit:
	if ((typeof nestingLevel != "undefined")&&(nestingLevel > 100))
		return innerText;
	
	//set defaults:
	if (typeof innerText == "undefined")
		innerText = "";
	if (typeof nestingLevel == "undefined")
		nestingLevel = 0;
	
	//stop condition:
	if (!objControl)
		return innerText;
	
	var text=objControl.nodeValue;
	if (!text)
		text = "";
	
	//take into consideration line breaks:
	if (objControl.nodeName.toLowerCase() == "br")
		return "\n";
	
	//iterate child elements:
	for (var i=0; i<objControl.childNodes.length; i++)
	{
		text += FindInnerText(objControl.childNodes[i], objControl.childNodes[i].nodeValue, nestingLevel+1);
	}
	
	//all done.
	return text;
}
