// JavaScript Document

function addOnload(func)
{
	if (typeof window.onload != 'function')
		window.onload = func;
	else
	{
		var oldOnload = window.onload;
		window.onload = function()
		{
			oldOnload();
			func();
		}
	}
}

function limitChars(input, length)
{
	if (input.value.length > length)
		input.value = input.value.substring(0, length);
}

function openWindow(url, w, h)
{
	var winl = (screen.width - w) / 2;
	var wint = (screen.height - h) / 2;
	winprops = 'height='+h+',width='+w+',top='+wint+',left='+winl+',scrollbars=no,resizable';
	win = window.open(url, 'myWindow', winprops);

	if (win)
	{
		if (parseInt(navigator.appVersion) >= 4) { win.window.focus();}
		return win;
	}
	
	return null;
}

function showComments(id, caller)
{
	var commentRows = $(id).rows;
	for (var i = 0; i < commentRows.length; i++)
		commentRows[i].style.display = "block";
		
	caller.onclick = function() { hideComments(id, this); return false; };
	caller.innerHTML = '<strong>Hide Comments</strong>';
}
function hideComments(id, caller)
{
	var commentRows = $(id).rows;
	for (var i = 0; i < commentRows.length; i++)
		if (i > 2)
			commentRows[i].style.display = "none";
			
	caller.onclick = function() { showComments(id, this); return false; };
	caller.innerHTML = '<strong>View all Comments(' + caller.getAttribute('numComments') + ')</strong>';
}

function showHide(id, caller, text)
{
	var element = document.getElementById(id);
	
	element.style.display = (element.style.display == "block") ? "none" : "block";
	
	if (caller && text)
	{
		var word = (element.style.display == "block") ? "Hide" : "Show";
		document.getElementById(caller).innerHTML = text.replace(/\%s/, word);
	}
}

function show(id, caller, text)
{
	var element = document.getElementById(id);
	
	element.style.display = "block";
	
	if (caller && text)
	{
		var word = "Hide";
		document.getElementById(caller).innerHTML = text.replace(/\%s/, word);
	}
}

function hide(id, caller, text)
{
	var element = document.getElementById(id);
	
	element.style.display = "none";
	
	if (caller && text)
	{
		var word = "Show";
		document.getElementById(caller).innerHTML = text.replace(/\%s/, word);
	}
}

function addTableRow(id)
{
	var table = document.getElementById(id).getElementsByTagName('TBODY')[0];
	var rows = table.getElementsByTagName('TR');
	var row = rows[0]
	var cells = row.getElementsByTagName('TD');
		
	var newRow = document.createElement('tr');
	
	for (var i = 0; i < cells.length; i++)
	{
		var cell = document.createElement('td');
		cell.innerHTML = cells[i].innerHTML;
		
		newRow.appendChild(cell);
	}	
	
	table.appendChild(newRow);
}

function submitFormOnEnter(event, form)
{
	if (getKey(event) == 13)
		form.submit();
}

function doOnEnter(event, func)
{	
	if (getKey(event) == 13)
		func();
}

function getKey(event)
{
	return window.event ? window.event.keyCode : (event ? event.which : (event.keyCode ? event.keyCode : 0));
}

function selectAll(form, isChecked)
{
	var inputs = form.getElementsByTagName('input');
	if (inputs)
	{
		for (var i = 0; i < inputs.length; i++)
		{
			if (inputs[i].type == 'checkbox')
				inputs[i].checked = isChecked;
		}
	}
}

function allSelected(inputs)
{
	if (inputs.constructor != Array)
		inputs = inputs.getElementsByTagName('input');
		
	if (inputs)
	{
		for (var i = 0; i < inputs.length; i++)
		{
			if (inputs[i].type == 'checkbox' && !inputs[i].checked)
				return false;
		}
	}
	return true;
}

// Unselect a radio group
function unselect(inputName)
{
	var inputs = document.getElementsByTagName('input');
	
	for (var i = 0; i < inputs.length; i++)
	{
		if (inputs[i].type == 'radio' && inputs[i].name == inputName)
			inputs[i].checked = false;
	}
}

function setBackgroundText(textboxID, value)
{
	bgTextColor = "#999999";
	normalColor = "#000000";
	
	var textbox = document.getElementById(textboxID);
	if (textbox.value != "")
		return;

	textbox.value = value;
	textbox.style.color = bgTextColor;
	
	textbox.onfocus = function() { if (textbox.value == value) {textbox.value = ''; textbox.style.color = normalColor;} }
	textbox.onblur = function() { if (textbox.value == '') {textbox.value = value; textbox.style.color = bgTextColor;} }

	if (textbox.form)
	{
		if (typeof textbox.form.onsubmit == 'function')
		{
			oldOnsubmit = textbox.form.onsubmit;
			textbox.form.onsubmit = function() { oldOnsubmit(); if (textbox.value == value) textbox.value = ''; return true; }
		}
		else
			textbox.form.onsubmit = function() { if (textbox.value == value) textbox.value = ''; return true; }
	}
}

function menuBindMouse()
{
	var menu = document.getElementById('subMenu');
	if (typeof menu == 'undefined' || menu.getElementsByTagName('ul').length == 0)
		return;
		
	var firstLevel = menu.getElementsByTagName('ul')[0].childNodes;

	for (var i = 0; i < firstLevel.length; i++)
	{
		var menuItem = firstLevel[i];
		menuItem.onmouseover = function()
		{
			if (this.getElementsByTagName('ul').length == 0)
				return;

			this.className = "menuMousedOver";

			this.getElementsByTagName('ul')[0].style.display = "block";
			var children = this.getElementsByTagName('li');
			for (var j = 0; j < children.length; j++) {
				children[j].onmouseover = function() {this.style.backgroundColor = "#36A1F6";};
				children[j].onmouseout = function() {this.style.backgroundColor = "#012258";};
			}
		};
		menuItem.onmouseout = function()
		{
			if (this.getElementsByTagName('ul').length == 0)
				return;

			this.className = "menuMousedOut";
			this.getElementsByTagName('ul')[0].style.display = "none";
		};
	}
}

function getUploadForm(forceImage, isProfilePic, callback)
{
	var form = document.createElement('form');
	form.method = "post";
	form.enctype = "multipart/form-data";
	form.encoding = "multipart/form-data";
	form.action = "/ajax/upload" + (forceImage ? "?forceimage=1" : "") + (isProfilePic ? "&picType=profile" : "");
	if (callback)
		form.action += (forceImage || isProfilePic ? '&' : '?') + 'callback=' + callback;
	form.target = "uploader";
	form.style.margin = "0";
	form.style.padding = "0";
	
	
	var inputName = createElement('input', 'inputname');
	inputName.type = "hidden";
	inputName.value = "fileupload";
	inputName.style.width = "0";
	
	var fileInput = createElement('input', 'fileupload');
	fileInput.id = 'fileupload';
	fileInput.type = "file";
	fileInput.onchange = function()
	{
		if (validateUpload(this, forceImage))
		{
			var image = new Image();
			image.id = 'loadingAnimation';
			image.src = '/images/loadingAnimation.gif';
			this.parentNode.insertBefore(image, this);
			this.parentNode.removeChild(this);
		}
	};
	
	var iframe = createElement('iframe', 'uploader');
	iframe.id = 'uploader';
	iframe.src = "#";
	iframe.style.width = "0px";
	iframe.style.height = "0px";
	iframe.style.border = "0px solid #FFFFFF";
	
	form.appendChild(inputName);
	form.appendChild(fileInput);
	
	return {'form':form, 'iframe':iframe};
}


function showUploadDialog(caller, forceImage, isProfilePic, callback)
{
	var obj = getUploadForm(forceImage, isProfilePic, callback);
	var form = obj.form;
	var iframe = obj.iframe;
	
	if (!$(iframe.id))
		document.body.appendChild(iframe);
	
	caller.onclick = function() { this.parentNode.removeChild(form); document.body.removeChild(iframe); this.onclick = function() {showUploadDialog(this, forceImage, isProfilePic, callback)} };
	
	caller.parentNode.insertBefore(form, caller.nextSibling);
}

function showFileInput(elementID)
{
	var obj = getUploadForm(false, false, 'linkPostUpload');
	obj.form.style.paddingTop = "5px";
	
	var holder = $(elementID);
	while (holder.childNodes.length > 0)
		holder.removeChild(holder.firstChild);
	
	holder.appendChild(obj.form);
	holder.appendChild(obj.iframe);
}

function showAttachmentDialog(caller_id, forceImage, isProfilePic)
{
	var input = createElement('input', 'fileupload[]');
	input.type = 'file';
	var caller = document.getElementById(caller_id);
	caller.appendChild(input);
	caller.appendChild(document.createElement('br'));
}

function removeAttachmentDialog()
{
	var inputs = document.getElementsByName('fileupload[]');
	if (inputs.length > 0)
	{
		var last = inputs[inputs.length - 1];
		var br = last.previousSibling;
		last.parentNode.removeChild(last);
		br.parentNode.removeChild(br);
	}
}

function createElement(elName, name)
{
	if (!name) name = "";
	
	if (window.attachEvent) // if IE
		return document.createElement('<' + elName + ' name="' + name + '">');
	else
	{
		var e = document.createElement(elName);
		e.name = name;
		return e;
	}
}

function validateUpload(file, forceImage)
{
	var goodExtensions = ['gif', 'jpeg', 'jpg', 'jpe', 'jif', 'jfif', 'jfi', 'png', 'pdf', 'doc', 'txt', 'rtf', 'xls', 'pps', 'ppt', 'zip', 'rar'];
	var imageExtensions = ['gif', 'jpeg', 'jpg', 'jpe', 'jif', 'jfif', 'jfi', 'png'];
	
	var filename = file.value;
	
	var split = filename.split('.');
	var extension = split[split.length - 1];
	
	var valid;

	if (forceImage)
	{
		if ((valid = arraySearch(imageExtensions, extension)) == -1)
			alert('File must be image (jpeg, gif or png)');
	}
	else
	{
		if ((valid = arraySearch(goodExtensions, extension)) == -1)
			alert('Invalid file extension');
	}
	
	if (valid != -1)
	{
		file.form.submit();
		return true;
	}
	return false;
}

function tooltip(text)
{
	if (text && text != "")
	{
		var tooltip = document.tooltipElm ? document.tooltipElm : document.createElement('div');
		tooltip.className = 'tooltip';
		tooltip.innerHTML = text;
		document.body.appendChild(tooltip);
		
		document.tooltipElm = tooltip;
		
		addEvent(document, 'mousemove', getMousePos, false);
	}
	else
	{
		if (document.tooltipElm && document.tooltipElm.parentNode)
			document.tooltipElm.parentNode.removeChild(document.tooltipElm);
		removeEvent(document, 'mousemove', getMousePos, false);
	}
}


function getMousePos(e) {
	var IE = document.all ? true : false;

	if (IE)
	{
		mouse_x = event.clientX + document.body.scrollLeft
		mouse_y = event.clientY + document.body.scrollTop
	}
	else
	{
		mouse_x = e.pageX
		mouse_y = e.pageY
	}  

	document.tooltipElm.style.left = mouse_x + "px";
	document.tooltipElm.style.top = mouse_y + 20 + "px";
}

function addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);
		return true;
	}
	else if (elm.attachEvent) {
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	}
	else {
		elm['on' + evType] = fn;
	}
}

function removeEvent(elm, evType, fn, useCapture) {
	if (elm.removeEventListener) {
		elm.removeEventListener(evType, fn, useCapture);
		return true;
	}
	else if (elm.detachEvent) {
		return elm.detachEvent('on' + evType, fn);
	}
	else {
		elm['on' + evType] = null;
	}
}

function getElementsByClassName(className)
{
	var els = document.getElementsByTagName('*');	
	var result = [];
	
	for (var i = 0; i < els.length; i++)
	{
		if (els[i].className == className)
			result[result.length] = els[i];
	}
	
	return result;
}

function bindButtons()
{
	var btns = getElementsByClassName('thebutton');
	for (var i = 0; i < btns.length; i++)
	{
		btns[i].onmouseover = function() { this.className = 'thebutton2'; };
		btns[i].onmouseout = function() { this.className = 'thebutton'; };
	}
}

function arraySearch(array, value)
{
	for (var i = 0; i < array.length; i++)
		if (array[i].toLowerCase() == value.toLowerCase())
			return i;

	return -1;
}

function range(low, high, step)
{
	if (typeof step == 'undefined')
		step = 1;
	
	result = new Array()
	for (var i = low; i <= high; i += step)
	{
		result.push(i);
	}
	
	return result;
}


function findPos(obj)
{
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return {left:curleft, top:curtop};
}