var maxPoints = 20;

function placeItem(e) {
	var evt = e ? e : window.event;

	var map = document.getElementById("map");
	if (!map)
		return;

	var xpos, ypos;
	var pos = utilGetElementPosition(map);
	if (typeof evt.pageX != 'undefined') {
		xpos = evt.pageX - pos.left;
		ypos = evt.pageY - pos.top;
	} else {
		var pageX = evt.clientX + (document.documentElement.scrollLeft ?
			document.documentElement.scrollLeft : document.body.scrollLeft);
		var pageY = evt.clientY + (document.documentElement.scrollTop ?
			document.documentElement.scrollTop : document.body.scrollTop);
		xpos = pageX - pos.left;
		ypos = pageY - pos.top;
	}
	if (currItem >= 0) {
		mapPoints[currItem].x = xpos;
		mapPoints[currItem].y = ypos;
		editItem(currItem);
		showPoints();
	}
}

function showPoints() {
	var map = document.getElementById("map");
	if (!map) return;

	for (var i = 0; i < mapPoints.length; i++) {
		var div = mapPoints[i].div;

		if (!div) {
			div = document.createElement("div");
			mapPoints[i].div = div;
			div.style.position = "absolute";
			div.style.width = "20px";
			div.style.height = "30px";
			div.style.background = "url('../lib/mapimages/mappoint.gif')";
			div.style.textAlign = "center";
			div.style.fontSize = "10px";
			div.style.paddingTop = "4px";
			map.appendChild(div);
		}
		div.innerHTML = "<b>" + (i + 1) + "</b>";
		div.style.left = (mapPoints[i].x - 10) + "px";
		div.style.top = (mapPoints[i].y - 34) + "px";
	}
}

function registerEvent() {
	if (!document.getElementById)
		return;

	var mp = document.getElementById("map");
	if (mp) {
		mp.onclick = placeItem;
	}
}

var mapPoints = new Array();
function newItem(xpos, ypos, title, description, size) {
	if (mapPoints.length >= maxPoints) {
		alert("Maximum number of points reached.");
		return;
	}

	var pnt = new Object();
	if (arguments.length > 0) {
		pnt.x = xpos;
		pnt.y = ypos;
		pnt.title = title;
		pnt.description = description;
		pnt.size = size;
	} else {
		pnt.x = -50;
		pnt.y = -50;
		pnt.title = "";
		pnt.description = "";
		pnt.size = 2;
		window.scrollTo(0, 500);
	}
	mapPoints.push(pnt);
	updatePointList();
	showPoints();
	editItem(mapPoints.length-1);
}

function updatePointList() {
	var html = "";
	for (var i = 0; i < mapPoints.length; i++) {
		html+= '<div id="' + i + '">';
		html+= '<a href="javascript:deleteItem(' + i + ');"><img src="../lib/mapimages/delete.gif" alt="[DEL]" title="Delete this item from the list" border="0" /></a>';
		if (document.getElementById("title_size")) {
			// Only change order if full controls are available
			html+= '<a href="javascript:moveItemUp(' + i + ');"><img src="../lib/mapimages/raise.gif" alt="[UP]" title="Move this item up the list" border="0" /></a>';
			html+= '<a href="javascript:moveItemDown(' + i + ');"><img src="../lib/mapimages/lower.gif" alt="[DOWN]" title="Move this item down the list" border="0" /></a>';
		}
		html+= '<a href="javascript:editItem(' + i + ');">';
		if (mapPoints[i].title && mapPoints[i].title.match(/\w/)) {
			html+= mapPoints[i].title
		} else {
			html+= "Point " + (i + 1);
		}
		html+= '</a>';
		html+= '</div>';
	}
	var list = document.getElementById("pointList");
	list.innerHTML = html;
	if (mapPoints.length > 0) {
		showPointEdit(true);
	} else {
		showPointEdit(false);
	}
}

function showPointEdit(show) {
	var ep0 = document.getElementById("EP0");
	var ep1 = document.getElementById("EP1");
	var ep2 = document.getElementById("EP2");
	if (show) {
		ep0.style.visibility = "";
		ep1.style.visibility = "";
		ep2.style.visibility = "";
	} else {
		ep0.style.visibility = "hidden";
		ep1.style.visibility = "hidden";
		ep2.style.visibility = "hidden";
	}
}

var currItem = -1;
function editItem(num) {
	updateItem();
	if (num >= 0) {
		var pnt = mapPoints[num];

		document.getElementById("TEMP_num_disp").innerHTML = num + 1;
		document.getElementById("TEMP_xpos_disp").innerHTML = pnt.x;
		document.getElementById("TEMP_ypos_disp").innerHTML = pnt.y;
		document.getElementById("TEMP_title").value = pnt.title;
		document.getElementById("TEMP_description").value = pnt.description;
		var bval = wysFindControl("TEMP_description");
		if (bval && bval.iframeid) {
			bval.setContent(pnt.description);
		} else {
			bval = document.getElementById("TEMP_description");
			if (bval) {
				bval.value = pnt.description;
			}
		}
		var sizeElem = document.getElementById("TEMP_title_size");
		if (sizeElem) {
			sizeElem.selectedIndex = pnt.size - 1;
		}
		for (var i = 0; i < maxPoints; i++) {
			var elem = document.getElementById("TEMP_image_layer" + i);
			if (elem) {
				if (i == num) {
					elem.style.display = "block";
				} else {
					elem.style.display = "none";
				}
			}
		}
	}
	currItem = num;
	updatePointList();
}

function updateItem() {
	if (currItem == -1)
		return;
	mapPoints[currItem].title = document.getElementById("TEMP_title").value;
	// mapPoints[currItem].description = document.getElementById("TEMP_description").value;
	var bval = wysFindControl("TEMP_description");
	if (bval && bval.iframeid) {
		mapPoints[currItem].description = bval.getContent();
	} else {
		bval = document.getElementById("TEMP_description");
		if (bval) {
			mapPoints[currItem].description = bval.value;
		}
	}
	var sizeElem = document.getElementById("TEMP_title_size");
	if (sizeElem)
		mapPoints[currItem].size = sizeElem.selectedIndex + 1;
}

function moveItemUp(num) {
	if (num == 0) return;

	var nList = new Array();
	for (var i = 0; i < mapPoints.length; i++) {
		if (i == num - 1) {
			nList.push(mapPoints[num]);
			nList.push(mapPoints[i]);
			i++;
		} else
			nList.push(mapPoints[i]);
	}
	mapPoints = nList;
	updatePointList();
	if (currItem == num) {
		currItem = -1;
		editItem(num - 1);
	} else if (currItem == num - 1) {
		currItem = -1;
		editItem(num);
	}
	showPoints();
}

function moveItemDown(num) {
	if (num == mapPoints.length - 1)
		return;

	var nList = new Array();
	for (var i = 0; i < mapPoints.length; i++) {
		if (i == num) {
			nList.push(mapPoints[i + 1]);
			nList.push(mapPoints[i]);
			i++;
		} else {
			nList.push(mapPoints[i]);
		}
	}
	mapPoints = nList;
	updatePointList();
	if (currItem == num) {
		currItem = -1;
		editItem(num + 1);
	} else if (currItem == num + 1) {
		currItem = -1;
		editItem(num);
	}
	showPoints();
}

function deleteItem(num) {
	if (!confirm("Really delete this item?"))
		return;

	var nList = new Array();
	for (var i = 0; i < mapPoints.length; i++) {
		if (i != num)
			nList.push(mapPoints[i]);
	}
	mapPoints = nList;
	updatePointList();
	if (currItem > nList.length - 1)
		editItem(currItem - 1);
	showPoints();
}

function prepareForm() {
	updateItem();
	var html = "<input type=\"hidden\" name=\"numpoints\" value=\"" + mapPoints.length + "\" />";
	for (var i = 0; i < mapPoints.length; i++) {
		html+= "<input type=\"hidden\" name=\"POINT" + i + "_xpos\" value=\"" + mapPoints[i].x + "\" />";
		html+= "<input type=\"hidden\" name=\"POINT" + i + "_ypos\" value=\"" + mapPoints[i].y + "\" />";
		html+= "<input type=\"hidden\" name=\"POINT" + i + "_title\" value=\"" + stringEncode(mapPoints[i].title) + "\" />";
		html+= "<input type=\"hidden\" name=\"POINT" + i + "_description\" value=\"" + stringEncode(mapPoints[i].description) + "\" />";
		html+= "<input type=\"hidden\" name=\"POINT" + i + "_size\" value=\"" + mapPoints[i].size + "\" />";
// IMAGE!
	}

	var formInsert = document.getElementById("formInsert");
	formInsert.innerHTML = html;

	// Manually call onsubmit();
	if (document.forms.mainFrm.onsubmit) {
		document.forms.mainFrm.onsubmit();
	}
	document.forms.mainFrm.submit();
}

function stringEncode(str) {
	str = str.replace(/&/g, "&amp;");
	str = str.replace(/"/g, "&quot;");

	return str;
}

function confirmDel(obj) {
	return confirm("Are you sure you want to delete this " + obj + "?");
}

function checkPerms() {
	var adm = document.getElementById("admin");
	var admin = false;
	if (!adm) {
		admin = true;
	} else if (adm.checked) {
		admin = true;
	}
	for (var i = 0; i < 20; i++) {
		var pb = document.getElementById("perm"+i);
		if (pb) {
			if (admin) {
				pb.checked = true;
				pb.disabled = true;
			} else {
				pb.disabled = false;
			}
		}
	}
}

function showPreview(img) {
	var pel = document.getElementById("preview");
	if (!pel)
		return

	pel.innerHTML = "<img src=\"" + img + "\" alt=\"Preview\" />";
}

function validateDate(field) {
	var dc = document.getElementById(field + "_day");
	var mc = document.getElementById(field + "_month");
	var yc = document.getElementById(field + "_year");

	if (dc && mc && yc) {
		var dv = parseInt(dc.value, 10);
		var mv = parseInt(mc.value, 10) - 1;
		var yv = parseInt(yc.value, 10);
		if (isNaN(dv)) dv = 1;
		if (isNaN(mv)) mv = 0;
		if (isNaN(yv)) yv = 2000;

		var d = new Date(yv, mv, dv);

		dc.value = d.getDate() > 9 ? d.getDate() : "0" + d.getDate();
		mc.value = d.getMonth() > 8 ? (d.getMonth() + 1) : "0" + (d.getMonth() + 1);
		yc.value = d.getFullYear();
	}
}

