//---------- HELPER FUNCTIONS

function disableEnterKey(ev)
{
	if(window.event)
		keyCode = window.event.keyCode;
	else
		keyCode = ev.which;

	if(keyCode == 13)
		return false;
	else
		return true;
}

function getElementAt(nodeList, n)
{
	var cnt = 0;
	for(var c=0; c<nodeList.length; c++)
		if(nodeList[c].nodeType ==1)
		{
			if(cnt == n)
				return nodeList[c];
			cnt++;
		}
}

function setSelectByValue(elmtSelect, val)
{
	for(var c=0; c<elmtSelect.options.length; c++)
	{
		if(val == elmtSelect.options[c].value)
		{
			elmtSelect.options.selectedIndex = c;
			return;
		}
	}
}
function disableSubmit(ctrlId, loadId)
{
	$(ctrlId).style.display = 'none';
	$(loadId).style.display = 'block';
}

function arraySearch(needle, haystack)
{
	for(var c=0; c<haystack.length; c++)
	{
		if(needle == haystack[c])
			return c;
	}
	return -1;
}
function show(id)
{
	$(id).style.display='block';
}
function hide(id)
{
	$(id).style.display = 'none';
}
function toggleDisplay(id)
{
	var elmt = $(id);
	if(elmt.style.display == 'none')
	show(id);
	else
	hide(id);
}

function toggleDisplayRow(id)
{
	var elmt = $(id);
	if(elmt.style.display == 'none')
	elmt.style.display = '';
	else
	elmt.style.display = 'none';
}
function goto(url)
{
	location.href=url;
}

function getNextElement(currentElement)
{
	var x = currentElement.nextSibling;
	if(!x) return null;

	while(x.nodeType != 1)
	{
		x = x.nextSibling;
		if(!x) return null;
	}
	return x;
}


function getPreviousElement(currentElement)
{
	var x = currentElement.previousSibling;
	if(!x) return null;

	while(x.nodeType != 1)
	{
		x = x.previousSibling;
		if(!x) return null;
	}
	return x;
}

/***************************************************

	SCROLLING FUNCTIONS

***************************************************/
function scrollTop()
{
        var pos = document.body.scrollTop;

        if(pos == 0)
        {
                if(window.pageYOffset)
                        pos = window.pageYOffset;
                else
                        pos = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
        }
        return pos;
}

function scrollBottom()
{
	var pos = scrollTop();
	var delta = window.innerHeight;

	if(window.innerHeight)
	{
		pos += window.innerHeight;
	}
	else if(document.body.parentElement.clientHeight)
	{
		pos += document.body.parentElement.clientHeight;
	}
	return pos;
}

function scrollCenter(isHorizontal)
{
	if(isHorizontal)
	{
		if(window.innerWidth)
			return window.innerWidth/2;
		else if(document.body.parentElement.clientWidth)
			return document.body.parentElement.clientWidth/2;
		return 0;
	}

	return (scrollBottom() + scrollTop())/2;
}

// deprecated - use scrollTop()
function scrollYPosition()
{
	var top = document.body.scrollTop;

	if(top == 0)
	{
		if(window.pageYOffset)
			top = window.pageYOffset;
		else
			top = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
	}
	return top;
}

// deprecated
function showPopUpWindow(e, id, top)
{
	show(id);
	
	$(id).style.left = '200px';
	$(id).style.top = scrollYPosition() + top +'px';
}

// containerId is the id of the element you want the player to show up in
function loadPlayer(containerId, link,autostart, loop)
{
	var autostart = (autostart) ? ' autostart="true" ' : '';
	var loop = (loop) ? ' loop="true" ' : '';
	var tpl = '<object><embed src="'+link+'" '+autostart+loop+' ></object>';
	$(containerId).innerHTML = tpl;
}

/***************************************************

	TBL OBJECT
	- object for helping you move table rows

****************************************************

INSTRUCTIONS
============

STEP1: Layout your table with as many columns you'd like, OR
	layout rows of div elements.
	Remember to give the tbody and each row an id.
<table>
<tbody id="container">
        <tr id="r1">
                <td>Move</td>
        </tr>
        <tr id="r2">
                <td>Move 2</td>
        </tr>
        <tr id="r3">
                <td>Move 3</td>
        </tr>

        <tr id="r4">
                <td>Move 4</td>
        </tr>
</tbody>
</table>

OR

<div id="container">
        <div id="blah1">
                div 1
        </div>
        <div id="blah2">
                div 2
        </div>
        <div id="blah3">
                div 3
        </div>
</div>

STEP2: Instantiate the Tbl Object
<script type="text/javascript" language="javascript">
var t = new Tbl('container');
</script>

STEP3: Provide controls for manipulating rows
<div>
<input type="button" value="up" onclick="t.moveUp(); "/>
<input type="button" value="down" onclick="t.moveDown(); "/>
<input type="button" value="delete" onclick="t.deleteRow();" />
</div>

***************************************************/

function Tbl(containerId)
{
	this.rowTag = null; // the element tag name of row
	this.containerId = containerId;
	this.selectedRowId = null;
	this.cssRowUnSelect = '';
	this.cssRowSelect = 'selected';
	this.deleteMsg = 'Are you sure you want to delete this item?';

	this.destruct = _destruct;
	this.deleteRow = _deleteRow;
	this.moveUp = _moveUp;
	this.moveDown = _moveDown;
	this.selectRow = _selectRow;
	this.init = _init;
	this.refresh = _init;	

	this.init();
}

// this will set the onclick event handler for each row
// you can override by hardcoding an event handler
// in the html
function _init()
{
	var container = $(this.containerId);
	var rows = container.childNodes;
	var obj = this;

	for(var c=0; c<rows.length; c++)
	{
		if(rows[c].nodeType == 1)
		{
			if(!this.rowTag) this.rowTag = rows[c].nodeName;
			if(!rows[c].onclick)
			{
				rows[c].onclick = function()
				{
					if(!this.id) { alert('row missing id'); return;}
					obj.selectRow(this.id);
				}
			}
		}
	}
}

function _destruct()
{
	var selectedRowId = this.selectedRowId;
	if(selectedRowId)
		$(selectedRowId).className = this.cssTrNotSelected;

	var container = $(this.containerId);
	var rows = container.childNodes;
	var obj = this;

	for(var c=0; c<rows.length; c++)
	{
		if(rows[c].nodeType == 1)
		{
			if(!this.rowTag) this.rowTag = rows[c].nodeName;
			if(rows[c].onclick) rows[c].onclick =null; 
		}
	}


}


function _deleteRow()
{
	if(this.selectedRowId)
		if(confirm(this.deleteMsg))
		{
			var container = $(this.containerId);
			container.removeChild($(this.selectedRowId));
			this.selectedRowId = null;
		}
}

function _selectRow(id)
{
	if(this.selectedRowId)
		$(this.selectedRowId).className = this.cssRowUnSelect;

	this.selectedRowId = id;
	$(this.selectedRowId).className = this.cssRowSelect;
}

function _moveDown()
{
	var container = $(this.containerId);
	var nodeList = container.getElementsByTagName(this.rowTag);
	var currentElement = $(this.selectedRowId);

	if(!currentElement) return;
	var nextElement = getNextElement(currentElement);

	if(nextElement)
	if(nextElement.nodeName == currentElement.nodeName)
	container.insertBefore(nextElement, currentElement);
}

function _moveUp()
{
	var container = $(this.containerId);
	var nodeList = container.getElementsByTagName(this.rowTag);
	var currentElement = $(this.selectedRowId);

	if(!currentElement) return;
	var previousElement = getPreviousElement(currentElement);

	if(previousElement)
	if(previousElement.nodeName == currentElement.nodeName)
	container.insertBefore(currentElement, previousElement);
}

/***************************************************

	CMS IFRAME FUNCTIONS

	1) copy css styles over from em/tpl/cms/style.css
	2) use showCMSWindow() to open up a window

***************************************************/

function disableActions()
{
	$('loading').style.display = 'block';
	$('save').style.display = 'none';
	$('close').style.display = 'none';

	$('loading-top').style.display = 'block';
	$('save-top').style.display = 'none';
	$('close-top').style.display = 'none';


}

function showCMSWindow(url,dimx,dimy)
{
	var x = scrollCenter(true) - dimx/2;
	var y = scrollCenter(false) - dimy/2;
	var div = $('cms-window');
	if(!div)
	{
		div = document.createElement('div');
		div.id = 'cms-window';
		div.style.width = dimx+'px';
		div.style.height = dimy+'px';
		div.style.position = 'absolute';

		var iframe = document.createElement('iframe');
		iframe.id = 'cms-iframe';
		iframe.style.width = '100%';
		iframe.style.height = '100%';

		div.appendChild(iframe);
		document.body.appendChild(div);
	}
	$('cms-iframe').src = url;
	div.style.top = y+'px';
	div.style.left = x+'px';
	div.style.display = '';
}

