// ----------------
// Table sorting
function setSort(inName, inValue)
{
	var sort = document.getElementById(inName + "_sort");
	
	if(sort)
	{
		sort.value = inValue;
	}
}

function sendemail(inEmail, inSubject, inMessage)
{
	var url = "mailto:" + inEmail + "?subject=" + inSubject + "&body=" + inMessage;

	window.location.href = url;
}

function sendErrorReport(inLanguage)
{
	if(inLanguage == "en")
	{
		inLanguage = "";
	}
	else
	{
		inLanguage = "_" + inLanguage;
	}

	window.open('/server/html/errorreport' + inLanguage + '.html', 'errorreport', 'height=300,width=400,toolbar=no,status=no,scrollbars=yes,resizable=yes');
}

// ----------------
// Pickers

var pickerElementID;

var pickerChangeAction;

function openPicker(inURL, inElementID, inChangeAction)
{
	pickerElementID = inElementID;

	pickerChangeAction = inChangeAction;

	open(inURL, 'picker', 'width=440,height=440,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no');
}

function getPickerElement()
{
	if(pickerElementID)
	{
		var element = document.getElementById(pickerElementID);

		if(element)
		{
			return element.value;
		}
	}

	return null;
}

function updatePickerElement(inValue, inHTML)
{
	if(pickerElementID)
	{
		var fireChange = false;

		var element = document.getElementById(pickerElementID);

		if(element)
		{
			element.value = inValue;
		}

		var elementHTML = document.getElementById(pickerElementID + "_html");
		
		if(elementHTML)
		{
			elementHTML.innerHTML = inHTML;
		}

		if(pickerChangeAction)
		{
			eval(pickerChangeAction);
		}
	}

	pickerElementID = null;
}

// ----------------
// Date Picker

var dateElementID;

function openDatePicker(inElementID, inLocale)
{
	dateElementID = inElementID;

	var url = "/server/calendar/calendar.html";

	if(inLocale)
	{
		url += "?locale=" + inLocale;
	}

	open(url, 'picker', 'width=220,height=220,menubar=no,resizable=yes,scrollbars=no,status=no,toolbar=no');
}

function getDatePicker()
{
	if(dateElementID)
	{
		return document.getElementById(dateElementID);
	}

	return null;
}

function setDatePicker(inYear, inMonth, inDay)
{
	var dateElement = getDatePicker();

	if(dateElement)
	{
		var hourElement = document.getElementById(dateElement.id + "_hour");
		var minuteElement = document.getElementById(dateElement.id + "_min");
		
		var hour = 0;
		var minute = 0;
		
		if(hourElement)
		{
			hour = parseInt(hourElement.value);
			minute = parseInt(minuteElement.value);
		}
		
		dateElement.value = "" + inYear + "-" + inMonth + "-" + inDay + "-" + hour + "-" + minute;

		updateDateControls(dateElementID);
	}

	self.focus();
}

function updateDatePicker(inElementID)
{
	var dateElement = document.getElementById(inElementID);

	if(dateElement)
	{
		var yearElement = document.getElementById(inElementID + "_year");
		var monthElement = document.getElementById(inElementID + "_month");
		var dayElement = document.getElementById(inElementID + "_day");
		var hourElement = document.getElementById(inElementID + "_hour");
		var minuteElement = document.getElementById(inElementID + "_min");
	
		var year = parseInt(yearElement.value);
		var month = parseInt(monthElement.value);
		var day = parseInt(dayElement.value);
		var hour = 0;
		var minute = 0;
		
		if(hourElement)
		{
			hour = parseInt(hourElement.value);
			minute = parseInt(minuteElement.value);
		}

		dateElement.value = year + "-" + month + "-" + day + "-" + hour + "-" + minute;

		updateDateControls(inElementID);
	}
}

function updateDateControls(inElementID)
{
	var dateElement = document.getElementById(inElementID);
	var yearElement = document.getElementById(inElementID + "_year");
	var monthElement = document.getElementById(inElementID + "_month");
	var dayElement = document.getElementById(inElementID + "_day");
	var hourElement = document.getElementById(inElementID + "_hour");
	var minuteElement = document.getElementById(inElementID + "_min");

	var parts = dateElement.value.split("-");
	var year = parseInt(parts[0]);
	var month = parseInt(parts[1]);
	var day = parseInt(parts[2]);
	var hour = 0;
	var minute = 0;
	
	if(parts.length > 3)
	{
		hour = parseInt(parts[3]);
		minute = parseInt(parts[4]);
	}

	var i;
	
	if(yearElement)
	{
		yearElement.value = year;
	}

	if(monthElement)
	{
		for(i = 0; i < monthElement.options.length; i++)
		{
			if(monthElement.options[i].value == month)
			{
				monthElement.options[i].selected = true;
			}
			else
			{
				monthElement.options[i].selected = false;
			}
		}

		var daysInMonth = new Date(year, month, 0).getDate();

		if(day > daysInMonth)
		{
			day = daysInMonth;

			dateElement.value = year + "-" + month + "-" + day + "-" + hour + "-" + minute;
		}
	}

	if(dayElement)
	{
		var count = 0;

		for(i = 1; i <= 31; i++)
		{
			if(i <= daysInMonth)
			{
				var name = new String(i);

				dayElement.options[count] = new Option(name, name);

				if(i == day)
				{
					dayElement.options[count].selected = true;
				}

				count++;
			}
			else
			{
				dayElement.options[count] = null;
			}
		}
	}
	
	if(hourElement)
	{
		for(i = 0; i < hourElement.options.length; i++)
		{
			if(hourElement.options[i].value == hour)
			{
				hourElement.options[i].selected = true;
			}
			else
			{
				hourElement.options[i].selected = false;
			}
		}
	}
	
	if(minuteElement)
	{
		for(i = 0; i < minuteElement.options.length; i++)
		{
			if(minuteElement.options[i].value == minute)
			{
				minuteElement.options[i].selected = true;
			}
			else
			{
				minuteElement.options[i].selected = false;
			}
		}
	}
}

// -------------
// Browser checking

function checkCookies()
{
	var cookietest = getCookie("cookietest");

	var cookies = false;

	if(cookietest)
	{
		cookies = cookietest == "ok";
	}

	var detector = document.getElementById("cookiedetector");

	if(!cookies)
	{
		detector.style.display = "";
	}
	else
	{
		detector.style.display = "none";
	}
}

function checkCapsLock(e)
{
	var myKeyCode = 0;
	var myShiftKey = false;
	var myCapsLock = false;

	if(document.all) // Internet Explorer
	{
		e = window.event;
		myKeyCode = e.keyCode;
		myShiftKey = e.shiftKey;
	}
	else if(document.layers) // Netscape 4
	{
		myKeyCode = e.which;
		myShiftKey = (myKeyCode == 16) ? true : false;
	}
	else if(document.getElementById) // Netscape 6
	{
		myKeyCode = e.which;
		myShiftKey = e.shiftKey || ( e.modifiers && ( e.modifiers & 4 ) );
	}

	if((myKeyCode >= 65 && myKeyCode <= 90) && !myShiftKey)
	{
		myCapsLock = true;
	}
	else if((myKeyCode >= 97 && myKeyCode <= 122) && myShiftKey)
	{
		myCapsLock = true;
	}

	var detector = document.getElementById("capslockdetector");

	if(myCapsLock)
	{
		detector.style.display = "";
	}
	else
	{
		detector.style.display = "none";
	}
}

// -------------

function verify(msg)
{
	if (!confirm(msg))
	{
		if(browser.ie)
		{
			event.cancelBubble = true;
		}

		return false;
	}
	return true;
}


var alreadyVerified = false;

function verifyOnce(msg)
{
	if(!alreadyVerified)
	{
		alreadyVerified = verify(msg);
	}
	
	return alreadyVerified;
}

document.write("<div id='positionmask' onmouseup='endPositioning(event)' onmousemove='movePositioning(event)' style='cursor:pointer;display:none;background-image:url(\"/server/images/spacer.gif?version=1\");z-index:100;position:absolute;left:0;top:0;width:100%;height:100%'></div>");

document.write("<img id='positionarrow' src='/server/images/arrow.gif' style='display:none;z-index:99;position:absolute;'>");

function updatePositionMask()
{
	var mask = document.getElementById("positionmask");

	mask.style.width = document.body.scrollWidth;

	mask.style.height = document.body.scrollHeight;
}

function toggleRadioCheckBoxes(current)
{
	var isChecked = current.checked;

	for(i=0 ; i < eval('current.form.' + current.name + '.length'); i++)
	{
		eval('current.form.' + current.name + '[' + i + ']').checked = false;
	}

	if(isChecked)
	{
		current.checked = true;
	}
}

// -------------------

function togglePanel(idDiv, idSpan, title, hide, show)
{ 
	var obj = document.getElementById(idDiv); 
	if(obj.style.display == "none")
	{
		document.getElementById(idSpan).innerHTML = show + ' ' + title;
		obj.style.display = ""; 
	}
	else
	{ 
		document.getElementById(idSpan).innerHTML = hide + ' ' + title;
		obj.style.display = "none";
	}
}


// -------------------

function updateRadioButtons(inName, inID, inTotal)
{
	for(var i = 1; i <= inTotal; i++)
	{
		var element = document.getElementById("other" + inName + i);
		
		if(element)
		{
			if(i == inID)
			{
				element.style.display = "";
			}
			else
			{
				element.style.display = "none";
			}
		}
	}
}

// -------------------

var inlineFrames = new Array();

function registerFrame(inName)
{
	inlineFrames[inlineFrames.length] = inName;
	
	resizeFrame(inName);
}

function resizeFrame(inName)
{
	var frame = document.getElementById("frameid_" + inName);
	
	if(frame)
	{
		var source = window.frames["framename_" + inName].document;
		
		if(source)
		{
			var offset = 0;
			
			if(document.getElementById && !document.all)
			{
				offset=20;
			}
			
			if (navigator.appName.indexOf("Microsoft")!=-1)
			{
				frame.height = source.body.scrollHeight;
			}
			else
			{
				frame.height = source.body.offsetHeight + offset;
			}
		}
	}
}

function resizeFrames()
{
	for(i = 0; i < inlineFrames.length; i++)
	{
		resizeFrame(inlineFrames[i]);
	}
}

// -------------------

var clickOnceButtons = new Array();

function resetClickOnce()
{
	clickOnceButtons = new Array();
}

function clickOnce(inButton)
{
	for(i = 0; i < clickOnceButtons.length; i++)
	{
		if(clickOnceButtons[i] == inButton.name)
		{
			return false;
		}
	}
	
	clickOnceButtons[clickOnceButtons.length] = inButton.name;
	
	return true;
}

// -------------------
// Browser Functions

Object.extend(document.viewport,
{
	getBounds: function()
	{
		var topLeft = this.getScrollOffsets();
		
		return {
			top: topLeft.top,
			left: topLeft.left,
			bottom: topLeft.top + this.getHeight(),
			right: topLeft.left + this.getWidth()
		};
	},
	
	getWidth: function()
	{
		return this.pickResults (
			window.innerWidth ? window.innerWidth : 0,
			document.documentElement ? document.documentElement.clientWidth : 0,
			document.body ? document.body.clientWidth : 0);
	},
	
	getHeight: function()
	{
		return this.pickResults (
			window.innerHeight ? window.innerHeight : 0,
			document.documentElement ? document.documentElement.clientHeight : 0,
			document.body ? document.body.clientHeight : 0);
	},
	
	pickResults: function(n_win, n_docel, n_body)
	{
		var n_result = n_win ? n_win : 0;
		if (n_docel && (!n_result || (n_result > n_docel)))
			n_result = n_docel;
		return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
	}
});


function Browser()
{ 
	this.version	= navigator.appVersion;
	this.agent		= navigator.userAgent;
	this.dom		= document.getElementById?1:0;
	this.opera5		= this.agent.indexOf("Opera 5")>-1;
	this.ie4		= (document.all && !this.dom && !this.opera5)?1:0;
	this.ie5		= (this.version.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0; 
	this.ie6		= (this.version.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
	this.ie7		= (this.version.indexOf("MSIE 7")>-1 && this.dom && !this.opera5)?1:0;
	this.ie			= this.ie4||this.ie5||this.ie6||this.ie7;
	this.mac		= this.agent.indexOf("Mac")>-1;
	this.ns6		= (this.dom && parseInt(this.version) >= 5) ?1:0; 
	this.ns4		= (document.layers && !this.dom)?1:0;
	this.bw			= (this.ie7 || this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5);
	return this;
}

browser = new Browser();

function setCookie(name, value, expirydays, path)
{
	var expiry = "";
	
	if(name == "")
		return;

	if(expirydays > 0)
	{
		var	expiryDate = new Date();
		
		expiryDate.setTime(expiryDate.getTime() + (expirydays * 24 * 60 * 60 * 1000));
		
		expiry = expiryDate.toGMTString();
	}
	
	var cookieString = name + "=" + escape(value) +
					   ((expiry == "") ? "" : ("; expires=" + expiry)) +
					   ((path == "")   ? "" : ("; path=" + path));
	
	document.cookie = cookieString;
}

function getCookie(name)
{
	var arg = name + "=";
	var arglength = arg.length;
	var cookielength = document.cookie.length;
	var i = 0;
	
	while(i < cookielength)
	{
		var j = i + arglength;
		
		if(document.cookie.substring(i, j) == arg)
		{
			k = document.cookie.indexOf(";", j);
			
			if(k < 0)
			{
				k = cookielength;
			}
			
			return unescape(document.cookie.substring(j, k));
		}
			
		i = document.cookie.indexOf(" ", i) + 1;
		
		if(i == 0)
		{
			break;
		}
	}
	
	return "";
}

function debug(object)
{
	var keys = Object.keys(object).sort();
	
	for(var i = 0; i < keys.length; i++)
	{
		try
		{
			var value = object[keys[i]];
			
			console.log(keys[i] + ' = ' + value);
		}
		catch(e)
		{
			console.log(keys[i] + ' = ' + e);
		}
	}
}

if(browser.ie && !browser.ie7)
{
	window.attachEvent("onload", fixPNG);
	
	for(var i = 0; i < document.styleSheets.length; i++)
	{
		for(var j = 0; j < document.styleSheets[i].rules.length; j++)
		{
			if(document.styleSheets[i].rules[j].selectorText == ".png")
			{
				document.styleSheets[i].rules[j].style.visibility = 'hidden';
			}
		}
	}
}

function fixPNG()
{
	if(browser.ie && !browser.ie7)
	{
		for(var i = 0; i < document.all.length; i++)
		{
			var element = document.all[i];
			
			if(element.className.indexOf('png') >= 0 && element.tagName == 'IMG')
			{
				fixSinglePNG(element);
			}
			else if(element.className.indexOf('png') >= 0)
			{
				fixBackgroundPNG(element);
			}
		}
	}
}

function fixSinglePNG(element) 
{
	if(browser.ie && !browser.ie7)
	{
		if(element)
		{
			var width = element.width;
			var height = element.height;
			var source = element.src;
			
			element.src = '/server/images/spacer.gif?version=1';
			element.width = width;
			element.height = height;
			element.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + source + "', sizingMethod='image', enabled='true')";
			element.style.visibility = 'visible';
		}
	}
}

function fixBackgroundPNG(element) 
{
	if(browser.ie && !browser.ie7)
	{
		if(element)
		{
			var bg = element.currentStyle.backgroundImage;
			var img = bg.substring(5,bg.length-2);
			var position = element.style.backgroundPosition;
			
			element.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+img+"', sizingMethod='scale')";
			element.style.backgroundImage = "url('/server/images/spacer.gif?version=1')";
			element.style.backgroundPosition = position; // reapply
			element.style.visibility = 'visible';
		}
	}
}

function autoResize()
{
	if(browser.ie)
	{
		window.resizeBy(document.body.scrollWidth - document.body.clientWidth, document.body.scrollHeight - document.body.clientHeight);
	}
	else
	{
		var maxWidth = 0;
		var maxHeight = 0;
		
		for(var i = 0; i < document.body.childNodes.length; i++)
		{		
			if(document.body.childNodes[i].offsetWidth)
			{
				var width = document.body.childNodes[i].offsetLeft + document.body.childNodes[i].offsetWidth;
				var height = document.body.childNodes[i].offsetTop + document.body.childNodes[i].offsetHeight;
				
				if(width > maxWidth)
				{
					maxWidth = width;
				}
				
				if(height > maxHeight)
				{
					maxHeight = height;
				}
			}
		}

		var extraY = window.outerHeight - window.innerHeight;
		
		var extraX = window.outerWidth - window.innerWidth;
		
		if(extraX < 0)
		{
			extraX *= -1;
		}

		window.resizeTo(maxWidth + extraX, maxHeight + extraY);
	}
}

function maxLength(inEvent, inElement, inLength)
{
	if(browser.ie)
	{
		;
	}
	else
	{
		if(inElement.selectionStart != inElement.selectionEnd)
		{
			return true;
		}
		else if(inEvent.which == 0 || inEvent.which == inEvent.DOM_VK_BACK_SPACE)
		{
			return true;
		}
	}
	
	if(inElement.value.length >= inLength)
	{
		inElement.value = inElement.value.substring(0, inLength);
		
		return false;
	}
	
	return true;
}

function trimLength(element, length)
{
	if(element.value.length >= length)
	{
		element.value = element.value.substring(0, length);
	}
}

function Message(inName, inMessage)
{
	this.name = inName;
	this.message = inMessage;
}

var messages = new Array();

function addMessage(inName, inMessage)
{
	messages[messages.length] = new Message(inName, inMessage);
}

function getMessage(inName)
{
	for(i = 0; i < messages.length; i++)
	{
		if(messages[i].name == inName)
		{
			return messages[i].message;
		}
	}
}

function preventEvent(event)
{
	if(event.preventDefault)
	{
		event.preventDefault();
	}
	else
	{
		event.returnValue = false;
	}
}

function cancelEvent(event)
{
	if(!event)
	{
		event = window.event;
	}

	if(event.stopPropagation)
	{
		event.stopPropagation();
	}
	else
	{
		event.cancelBubble = true;
	}
	
	if(browser.ie)
	{
		var targetElement = event.srcElement;
	}
	else
	{
		var targetElement = event.target || event.srcElement;
	}
	
	return false;
}

function addEvent(obj, type, fn)
{
	if (obj.attachEvent)
	{
		obj['e'+type+fn] = fn;
		obj[type+fn] = function(e){obj['e'+type+fn](e);}
		obj.attachEvent( 'on'+type, obj[type+fn] );
	}
	else
	{
		obj.addEventListener( type, fn, false );
	}
}
	
function removeEvent(obj, type, fn)
{
	if(obj.detachEvent)
	{
		obj.detachEvent( 'on'+type, obj[type+fn] );
		obj[type+fn] = null;
		obj['e'+type+fn] = null;
	}
	else
	{
		obj.removeEventListener( type, fn, false );
	}
}
