
//var LinksEditor_BrowserUrl = "/woodgrovenet/BrowserDialogs/LinkEditorDialog.htm";
var LinksEditor_WindowOptions = "toolbar=no,status=no,resizable=yes,dependent=yes,scrollbars=yes";
var ImagePicker_WindowOptions = "toolbar=no,status=no,resizable=yes,dependent=yes,scrollbars=yes";

var LinksEditor_XmlID = "";
var LinksEditor_BoxID = "";
var LinksEditor_Index = -1;

var ImagePicker_SrcID = "";

var LinksEditor_TextRegEx = /text=".*?"/
var LinksEditor_TitleRegEx = /title=".*?"/
var LinksEditor_TargetRegEx = /target=".*?"/
var LinksEditor_UrlRegEx = /url=".*?"/
var LinksEditor_SizeRegEx = /size=".*?"/
var LinksEditor_ThumbnailRegEx = /thumbnail=".*?"/
var LinksEditor_QueryStringRegEx = /query=".*?"/
var LinksEditor_IDRegEx = /id=".*?"/

var ImagePicker_SrcRegEx = /src=".*?"/
var ImagePicker_AltRegEx = /alt=".*?"/

function LinksEditor_AddLink(xmlID, boxID)
{
	LinksEditor_XmlID = xmlID;
	LinksEditor_BoxID = boxID;
	LinksEditor_Index = -1;
	var xml = document.getElementById(xmlID);
	if (!xml)
		return false;
	var browserUrl = xml.BrowserUrl;
	var separator = "?";
	
	if (!xml.EnableText)
	{
		browserUrl += separator + "enableText=false";
		separator = "\&";
	}
	if (!xml.EnableUrl)
	{
		browserUrl += separator + "enableUrl=false";
		separator = "\&";
	}
	if (!xml.EnableTarget)
	{
		browserUrl += separator + "enableTarget=false";
		separator = "\&";
	}
	if (!xml.EnableTitle)
	{
		browserUrl += separator + "enableTitle=false";
		separator = "\&";
	}
	if (!xml.ShowBrowser)
	{
		browserUrl += separator + "showBrowser=false";
		separator = "\&";
	}
	if (xml.DefaultTarget)
	{
		browserUrl += separator + "target=" + encodeParameter(xml.DefaultTarget);
		separator = "\&";
	}
	if (xml.BrowserPage)
	{
		browserUrl += separator + "page=" + encodeParameter(xml.BrowserPage);
		separator = "\&";
	}
	if (xml.BrowserFilter)
	{
		browserUrl += separator + "Filter=" + encodeParameter(xml.BrowserFilter);
		separator = "\&";
	}
	if (xml.BrowserInitialPath)
	{
		browserUrl += separator + "InitialPath=" + encodeParameter(xml.BrowserInitialPath);
		separator = "\&";
	}
	if (!xml.ShowSize)
	{
		browserUrl += separator + "showSize=false";
		separator = "\&";
	}
	if (!xml.ShowThumbnail)
	{
		browserUrl += separator + "showThumbnail=false";
		separator = "\&";
	}
	
	if (window.showModalDialog)
	{
		LinksEditor_SetReturnValue(window.showModalDialog(browserUrl));
	}
	else
	{
		window.open(browserUrl,'LinkEditorDialog',LinksEditor_WindowOptions)
	}
	return false;
}

function encodeParameter(p)
{
	if (encodeURIComponent)
		return encodeURIComponent(p);
	return p;
}

function LinksEditor_EditLink(xmlID, boxID, index)
{
	LinksEditor_XmlID = xmlID;
	LinksEditor_BoxID = boxID;
	LinksEditor_Index = index;
	
	var xml = document.getElementById(xmlID);
	if (!xml)
		return false;
		
	
	var text, title, target, url, sizeInBytes, thumbnail, query, id, match;
	var c = document.getElementById(xmlID).links[index];
	match = c.match(LinksEditor_TextRegEx);
	if (match)
		text = encodeParameter(xmlDecode(match[0].substring(6,match[0].length-1)));
	match = c.match(LinksEditor_TargetRegEx);
	if (match)
		target = encodeParameter(xmlDecode(match[0].substring(8,match[0].length-1)));
	match = c.match(LinksEditor_UrlRegEx);
	if (match)
		url = encodeParameter(xmlDecode(match[0].substring(5,match[0].length-1)));
	match = c.match(LinksEditor_TitleRegEx);
	if (match)
		title = encodeParameter(xmlDecode(match[0].substring(7,match[0].length-1)));
	match = c.match(LinksEditor_SizeRegEx);
	if (match)
		sizeInBytes = encodeParameter(xmlDecode(match[0].substring(6,match[0].length-1)));
	match = c.match(LinksEditor_ThumbnailRegEx);
	if (match)
		thumbnail = encodeParameter(xmlDecode(match[0].substring(11,match[0].length-1)));
	match = c.match(LinksEditor_QueryStringRegEx);
	if (match)
		query = encodeParameter(xmlDecode(match[0].substring(7,match[0].length-1)));
	match = c.match(LinksEditor_IDRegEx);
	if (match)
		id = encodeParameter(xmlDecode(match[0].substring(4,match[0].length-1)));
		
	var browserUrl = xml.BrowserUrl + "?url=" + url + "\&text=" + text + "\&title=" + title + "\&target=" + target + "\&size=" + sizeInBytes + "\&thumbnail=" + thumbnail + "\&query=" + query + "\&id=" + id;
	var separator = "\&";
	
	if (!xml.EnableText)
		browserUrl += separator + "enableText=false";
	if (!xml.EnableUrl)
		browserUrl += separator + "enableUrl=false";
	if (!xml.EnableTarget)
		browserUrl += separator + "enableTarget=false";
	if (!xml.EnableTitle)
		browserUrl += separator + "enableTitle=false";
	if (!xml.ShowBrowser)
		browserUrl += separator + "showBrowser=false";
	if (xml.BrowserPage)
		browserUrl += separator + "page=" + encodeParameter(xml.BrowserPage);
	if (xml.BrowserFilter)
		browserUrl += separator + "Filter=" + encodeParameter(xml.BrowserFilter);
	if (xml.BrowserInitialPath)
		browserUrl += separator + "InitialPath=" + encodeParameter(xml.BrowserInitialPath);
	if (!xml.ShowSize)
		browserUrl += separator + "showSize=false";
	if (!xml.ShowThumbnail)
		browserUrl += separator + "showThumbnail=false";

	if (window.showModalDialog)
	{
		LinksEditor_SetReturnValue(window.showModalDialog(browserUrl));
	}
	else
	{
		window.open(browserUrl,'LinkEditorDialog',LinksEditor_WindowOptions)
	}
	return false;
}

function LinksEditor_RemoveLink(xmlID, boxID, index)
{
	var xmlInput = document.getElementById(xmlID)
	if (xmlInput)
	{
		xmlInput.links.splice(index,1);
		LinksEditor_OutputArray(xmlID, boxID);
	}
	return false;
}

function LinksEditor_UpLink(xmlID, boxID, index)
{
	var xml = document.getElementById(xmlID);
	if (xml)
	{
		if (index>0 && index<xml.links.length)
		{
			var temp = xml.links[index-1];
			xml.links[index-1] = xml.links[index];
			xml.links[index] = temp;
			LinksEditor_OutputArray(xmlID, boxID);
		}
	}
	return false;
}

function LinksEditor_DownLink(xmlID, boxID, index)
{
	var xml = document.getElementById(xmlID);
	if (xml)
	{
		if (index>-1 && index<xml.links.length-1)
		{
			var temp = xml.links[index+1];
			xml.links[index+1] = xml.links[index];
			xml.links[index] = temp;
			LinksEditor_OutputArray(xmlID, boxID);
		}
	}
	return false;
}

function LinksEditor_SetReturnValue(retValue)
{
	if (retValue && retValue.toLowerCase() != 'cancel')
	{
		var xml = document.getElementById(LinksEditor_XmlID);
		var box = document.getElementById(LinksEditor_BoxID);
		var index = LinksEditor_Index;
		if (!box) return;
		if (!xml) return;
		if (index==-1)
		{
			xml.links = xml.links.concat(retValue)
		}
		else
		{
			xml.links[index] = retValue;
		}
		LinksEditor_OutputArray(LinksEditor_XmlID, LinksEditor_BoxID);
	}
}

function LinksEditor_OutputArray(xmlID, boxID)
{
	var xmlInput = document.getElementById(xmlID)
	if (xmlInput)
	{
		xmlInput.value = "<links>";
		var innerHtml = "";
		innerHtml = "<ul>"
		for (i=0;i<xmlInput.links.length;i++)
		{
			xmlInput.value += xmlInput.links[i];
			var match = xmlInput.links[i].match(LinksEditor_TextRegEx);
			if (match)
			{
				// Remove &apos as is an XML entity not an HTML one
				var text = match[0].replace(/&apos;/g,"'");
				text = text.substring(6,text.length-1);
				innerHtml += "<li>" + text + " " + LinksEditor_RenderButtons(xmlID, boxID, i) + "</li>"
			}
		}
		xmlInput.value += "</links>";
		if (xmlInput.MaxLinks)
		{
			if (xmlInput.MaxLinks > 0 && xmlInput.links.length<xmlInput.MaxLinks)
			{
				innerHtml += "<li><a href=\"#\" onclick=\"return LinksEditor_AddLink('" + xmlID + "','" + boxID + "');\">Add new item</a></li>";
			}
		}
		else
		{
			innerHtml += "<li><a href=\"#\" onclick=\"return LinksEditor_AddLink('" + xmlID + "','" + boxID + "');\">Add new item</a></li>";
		}
		innerHtml += "</ul>"
		
		var box = document.getElementById(boxID);
		if (box)
		{
			box.innerHTML = innerHtml;
		}
	}
}

function LinksEditor_RenderButtons(xmlID, boxID, index)
{
	var xml = document.getElementById(xmlID);
	var s = "<div class=\"LinkPickerButtons\">";
	s +=	"<a href=\"#\" onclick=\"return LinksEditor_EditLink('" + xmlID + "','" + boxID + "', " + index + ");\"><img src='" + xml.EditImageUrl + "' alt='Edit' /></a> ";
	s +=	"<a href=\"#\" onclick=\"return LinksEditor_RemoveLink('" + xmlID + "','" + boxID + "', " + index + ");\"><img src='" + xml.RemoveImageUrl + "' alt='Remove' /></a> ";
	s +=	"<a href=\"#\" onclick=\"return LinksEditor_UpLink('" + xmlID + "','" + boxID + "', " + index + ");\"><img src='" + xml.UpImageUrl + "' alt='Up' /></a> ";
	s +=	"<a href=\"#\" onclick=\"return LinksEditor_DownLink('" + xmlID + "','" + boxID + "', " + index + ");\"><img src='" + xml.DownImageUrl + "' alt='Down' /></a> ";
	s +=	"</div>";
	return s;
}

function ImagePicker_RemoveImage(srcID, emptyImageUrl)
{
	var src = document.getElementById(srcID);
	if (!src)
		return false;
	src.value = "";
	src.altCtrl.value = "";
	src.imgCtrl.src = emptyImageUrl;
	return false;
}

function ImagePicker_EditImage(srcID)
{
	ImagePicker_SrcID = srcID;
	
	var src = document.getElementById(srcID);
	if (!src)
		return false;
	
	var txSrc, txAlt;
	txSrc = encodeParameter(src.value);
	txAlt = encodeParameter(src.altCtrl.value);
		
	var browserUrl = src.BrowserUrl + "?src=" + txSrc + "\&alt=" + txAlt;
	
	var separator = "\&";
	
	if (!src.EnableSrc)
		browserUrl += separator + "enableSrc=false";
	if (!src.EnableAlt)
		browserUrl += separator + "enableAlt=false";
	if (!src.ShowBrowser)
		browserUrl += separator + "showBrowser=false";
	if (src.BrowserPage)
		browserUrl += separator + "page=" + encodeParameter(src.BrowserPage);
	if (src.BrowserInitialPath)
		browserUrl += separator + "InitialPath=" + encodeParameter(src.BrowserInitialPath);
	if (src.BrowserFilter)
		browserUrl += separator + "Filter=" + encodeParameter(src.BrowserFilter);
	
	if (window.showModalDialog)
	{
		ImagePicker_SetReturnValue(window.showModalDialog(browserUrl));
	}
	else
	{
		window.open(browserUrl,'ImagePickerDialog',ImagePicker_WindowOptions)
	}
	return false;
}

function ImagePicker_SetReturnValue(retValue)
{
	if (retValue && retValue.toLowerCase() != 'cancel')
	{
		var src = document.getElementById(ImagePicker_SrcID);		
		if (!src) return;
		
		var txSrc, txAlt, match;
		var c = retValue;		

		match = c.match(ImagePicker_SrcRegEx);
		if (match)
			txSrc = xmlDecode(match[0].substring(5,match[0].length-1));
		match = c.match(ImagePicker_AltRegEx);
		if (match)
			txAlt = xmlDecode(match[0].substring(5,match[0].length-1));		
			
		src.value = txSrc;
		src.altCtrl.value = txAlt;
				
		src.imgCtrl.src = txSrc;
	}
}

function xmlDecode(s)
{
	s = s.replace(/&amp;/g, "\&");
	s = s.replace(/&quot;/g, "\"");
	s = s.replace(/&apos;/g, "'");
	s = s.replace(/&gt;/g, ">");
	s = s.replace(/&lt;/g, "<");
	return s;
}

