var isLoginVisible = false;
var isAuthorized = false;
var isContentClickDisabled = true;
var ignoredElementsOnPageEdit = "<A>, <INPUT>, <SELECT>, <OPTION>, <IMG>";
var coordinateX;
var coordinateY;
var timers = {};
var step = 25;

function init() {
	document.onmousemove = mouseMove;

	var menuElements = getInactiveMenuElements();
	
	for (var i = 0; (element = menuElements[i]) != null; i++) {

		if (element.addEventListener) {
			element.addEventListener ("mouseover", function () { fadeIn(this) }, false);
			element.addEventListener ("mouseout", function () { fadeOut(this) }, false);
		} else if (element.attachEvent) {
			element.attachEvent ("onmouseover", function () { fadeIn(this) });
			element.attachEvent ("onmouseout", function () { fadeOut(this) });
		} else {
			element.onmouseover = function () { fadeIn(this) };
			element.onmouseout = function () { fadeOut(this) };
		}
	}
}

function mouseMove(event) {

	var contentCoordinates = elementPosition('content');

	var contentLeft   = contentCoordinates[0];
	var contentTop    = contentCoordinates[1];
	var contentRight  = contentCoordinates[2];
	var contentBottom = contentCoordinates[3];

	if (document.all) {

		coordinateX = window.event.x + contentLeft;
		coordinateY = window.event.y + contentTop;

	} else {

		coordinateX = event.pageX;
		coordinateY = event.pageY;
	}

	if ((coordinateX > 265 || coordinateY > 160) && isLoginVisible) {

		hideLogin();
	}

	if (contentLeft < coordinateX && coordinateX < contentRight && contentTop < coordinateY && coordinateY < contentBottom && isAuthorized && window.location.pathname.indexOf("preferences.php") < 0) {

		enableContentClick();

	} else {

		if (!isContentClickDisabled)
			disableContentClick();
	}
}

function elementPosition(id) {

	var obj = document.getElementById(id);

	var curleft = curtop = 0;

	var width = obj.offsetWidth;
	var height = obj.offsetHeight;

	if (obj.offsetParent) {

		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;

		while (obj = obj.offsetParent) {

			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}

	return [curleft,curtop,curleft+width,curtop+height];
}

function enableContentClick() {

	isContentClickDisabled = false;

	var content = document.getElementById('content');
	content.style.cursor = 'pointer';
	content.style.border = 'thin dotted red';
	document.onclick = editPage;
}

function disableContentClick() {

	isContentClickDisabled = true;

	var content = document.getElementById('content');
	content.style.cursor = 'auto';
	content.style.border = 'thin solid transparent';
	document.onclick = "";
}

function displayLogin() {

	var element = "login";
	var from = -265;
	var to = 0;
	var amount = 15;
	var timeout = 0;

	document.getElementById("logintoggle").onclick = "";

	moveElement(element, from, to, amount, timeout);

	isLoginVisible = true;
}

function hideLogin() {

	var element = "login";
	var from = 0;
	var to = -265;
	var amount = 15;
	var timeout = 0;

	moveElement(element, from, to, amount, timeout);

	document.getElementById("logintoggle").onclick = displayLogin;

	isLoginVisible = false;
}

function moveElement(element, from, to, amount, timeout) {

	var direction = from < to ? 1 : (from > to ? -1 : 0);

	if (direction == 0) {

		return;

	} else if ((direction == 1 && from + amount > to) || (direction == -1 && from - amount < to)) {

		from = to;

	} else {

		from += direction * amount;
	}

	document.getElementById(element).style.left = from + "px";

	setTimeout("moveElement('" + element + "', " + from + ", " + to + ", " + amount + ", " + timeout + ")", timeout);
}

function editPage(event) {

	var element = "<" + resolveElement(event) + ">";

	if (ignoredElementsOnPageEdit.indexOf(element) < 0) {

		disableContentClick();
		window.open(document.getElementById('editPage').href, '_blank', 'directories=0,location=0,menubar=0,scrollbars=1;status=0,titlebar=0,toolbar=0', false);
	}
}

function resolveElement(event) {

	var target;

	if (!event)
		var event = window.event;

	if (event.target) {

		target = event.target;

	} else if (event.srcElement) {

		target = event.srcElement;
	}

	if (target.nodeType == 3) // defeat Safari bug
		target = element.parentNode;

	return target.tagName;
}

function getElementsByClass(clazz) {

	var allElements = new Array();
	var elements = new Array();	

	var allElements = document.getElementsByTagName("*");
	
	var j = 0;

	for (i = 0; i < allElements.length; i++) {
	
		if (allElements[i].className == clazz) {
		
			elements[j] = allElements[i];
			j++;
		}
	}

	return elements;
}

function localize() {

	// Insert localized text strings to their wrapper elements
	var elements = getElementsByClass('localizable');
	for (i = 0; i < elements.length; i++) {
		var element = elements[i];
		if (element.id != '') {
			element.innerHTML = TEXT[element.id];
		}
	}
}

function hideEmptyRows() {

	// Hide those multipage rows that have an empty value column
	var elements = getElementsByClass('value_column');
	for (i = 0; i < elements.length; i++) {
		var element = elements[i];
		if (element.innerHTML.replace(/(<([^>]+)>)([\s\S]*)(<([^>]+)>)/ig,"") == '') {
			for (; element.tagName != 'TR' && element.tagName != 'BODY'; element = element.parentNode);
			if (element.tagName == 'TR')
				element.style.display = 'none';
		}
	}
}

function showTooltip(text) {

	document.getElementById('tooltip-content').innerHTML = text;

	var tooltip = document.getElementById('tooltip');
	tooltip.style.top = coordinateY + 'px';
	tooltip.style.left = coordinateX + 'px';
	tooltip.style.display = 'block';
}

function hideTooltip() {

	document.getElementById('tooltip').style.display = 'none';
	document.getElementById('tooltip-content').innerHTML = '';
}

function fadeOut(element) {

	var opacity = getOpacity(element);
	var timer = 0;

	if (timers[element.href])
		clearTimeouts(timers[element.href].values);

	timers[element.href] = {values:new Array()};
	
	if (opacity > 100) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 100) }, timer++ * step));
	if (opacity > 90) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 90) }, timer++ * step));
	if (opacity > 80) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 80) }, timer++ * step));
	if (opacity > 70) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 70) }, timer++ * step));
	if (opacity > 60) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 60) }, timer++ * step));
	if (opacity > 50) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 50) }, timer++ * step));
	if (opacity > 40) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 40) }, timer++ * step));
	if (opacity > 30) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 30) }, timer++ * step));
	if (opacity > 20) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 20) }, timer++ * step));
	if (opacity > 10) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 10) }, timer++ * step));
	if (opacity > 0) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 0) }, timer++ * step));
}

function fadeIn(element) {

	var opacity = getOpacity(element);
	var timer = 0;

	if (timers[element.href])
		clearTimeouts(timers[element.href].values);

	timers[element.href] = {values:new Array()};
	
	if (opacity < 0) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 0) }, timer++ * step));
	if (opacity < 10) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 10) }, timer++ * step));
	if (opacity < 20) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 20) }, timer++ * step));
	if (opacity < 30) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 30) }, timer++ * step));
	if (opacity < 40) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 40) }, timer++ * step));
	if (opacity < 50) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 50) }, timer++ * step));
	if (opacity < 60) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 60) }, timer++ * step));
	if (opacity < 70) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 70) }, timer++ * step));
	if (opacity < 80) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 80) }, timer++ * step));
	if (opacity < 90) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 90) }, timer++ * step));
	if (opacity < 100) timers[element.href].values.push(setTimeout(function () { setOpacity(element, 100) }, timer++ * step));
}

function clearTimeouts(timers) {

	for (var i = 0; i < timers.length; i++)
		clearTimeout(timers[i]);
}

function setOpacity(element, opacity) {

	if (element && element.style) {
		element.style.background = (opacity < 100 ? "transparent" : "#FFFFFF") + " " + 
					   (0 < opacity && opacity < 100 ? "url(http://www.nordicjewels.com/templates/nordicjewels/images/transparent_pixel_" + opacity + ".png) repeat" : "none");
	
		if (document.all) DD_belatedPNG.fixPng(element);
	}
}

function getOpacity(element) {

	if (element && element.style && element.style.backgroundColor && element.style.backgroundColor != "transparent") return 100;
	
	var backgroundImage = element && element.style && element.style.backgroundImage ? element.style.backgroundImage : "none";
	
	if (backgroundImage == "none") return 0;
	
	var start = backgroundImage.lastIndexOf("_");
	var end = backgroundImage.indexOf(".png");
	
	return backgroundImage.substring(start + 1, end);
}

function getInactiveMenuElements() {

	var className = 'menu_default';
	var hasClassName = new RegExp("(?:^|\\s)" + className + "(?:$|\\s)");
	var allLinks = document.getElementsByTagName("a");
	var results = [];

	var element;
	for (var i = 0; (element = allLinks[i]) != null; i++) {
		var elementClass = element.className;
		if (elementClass && elementClass.indexOf(className) != -1 && hasClassName.test(elementClass))
			results.push(element);
	}

	return results;
}

