Form.THIS = function(element) {
    while (element.parentNode && (!element.tagName ||
        (element.tagName.toUpperCase() != 'FORM')))
      element = element.parentNode;
    return element;
}

Form.getElement = function(form, name) {
	return form.elements[name]
}

var $FORM = Form.THIS;
var $ELEM = Form.getElement;
var $SET  = function(currentelem, targetname, val) {
	$ELEM($FORM(currentelem),targetname).value=val;
}

//----------------- Form utils -------------------
function setClassValue(element, classValue) {
	setAttributeValue(element, 'class', classValue);
}

function setAttributeValue(element, attributeName, attributeValue) {
	for(var j = 0; j < element.attributes.length; j++) {
		if (element.attributes.item(j).nodeName == attributeName) {
			element.attributes.item(j).nodeValue = attributeValue;
		}
    }
}

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

function _goto(url)
{
	window.location.href=url;
}

reportwindow = "";
function _openReport(url){
    if(reportwindow){
        if(reportwindow.closed){
            reportwindow = _openReportWin(url);
        } else { 
            reportwindow.focus();
        }
    } else {
        reportwindow = _openReportWin(url);
    }
}

function _openReportWin(url) {
	window.open(url, "reportwindow", "top=" + ((screen.availHeight/2) - (780 / 2)) + ",left=" + ((screen.availWidth/2) - (580 / 2)) + ",width=780,height=580,resizable=1,toolbar=0,scrollbars=1,location=0,status=0,menubar=0");
}

//---------------- Enter Key Handling -------------
function handleEnterKey(event,tform) {
	//if (window.event) alert("winevent "+window.event+" "+window.event.keyCode);
	//if (event) alert("event "+event+" "+event.which);
  	//allow enter, tested with IE6, Opera 8.51
  	//Firefox 1.5 notices error, but it is skipped
	if (window.event && window.event.keyCode == 13)
	{
	    return false;
	}
	else if (event && event.which==13) 
	{
	    return false;
	}
	else 
	{
		return true;
	}
}

//----------------- Table utils -------------------
var Table = {
}

Table.selfRowMoveUp = function (element)
{
	var tr = Table.detectTR(element);
	var table = tr.parentNode;
	var idx = Table.detectRowIdx(tr);

	if (idx==0 || table.rows.length<=idx) return;
	table.insertRow(idx-1);	
	Table.copyRow(table,idx+1,idx-1);
	table.deleteRow(idx+1);	
}

Table.selfRowMoveUpDom = function (element)
{
	var tr = Table.detectTR(element);
	var table = tr.parentNode;
	var idx = Table.detectRowIdx(tr);

	if (idx==0 || table.rows.length<=idx) return;
	
	table.insertRow(idx-1);	
	Table.copyRowDom(table,idx+1,idx-1);
	table.deleteRow(idx+1);	
}

Table.selfRowDelete = function(element) {
	var tr = Table.detectTR(element);
	tr.parentNode.deleteRow(Table.detectRowIdx(tr));
}


Table.selfRowMoveDown = function(element){
	var tr = Table.detectTR(element);
	var table = tr.parentNode;
	var idx = Table.detectRowIdx(tr);

	if ((table.rows.length-1)<=idx) return;
	table.insertRow(idx+2);	
	Table.copyRow(table,idx,idx+2);
	table.deleteRow(idx);	
}

Table.selfRowMoveDownDom = function(element){
	var tr = Table.detectTR(element);
	var table = tr.parentNode;
	var idx = Table.detectRowIdx(tr);

	if ((table.rows.length-1)<=idx) return;
	table.insertRow(idx+2);	
	Table.copyRowDom(table,idx,idx+2);
	table.deleteRow(idx);	
}

Table.detectTR = function(element) {
    while (element.parentNode && (!element.tagName ||
        (element.tagName.toUpperCase() != 'TR')))
      element = element.parentNode;
	return element;
}

Table.detectRowIdx = function(element) {
	var table = element.parentNode;
	for (i=0; i<table.rows.length; i++) {
		if (table.rows[i]==element) {
			return i;
		}
	}
	alert('error, row not found');
}

Table.copyRow=function (table,from,to) 
{
	for (i=0; i<table.rows[from].cells.length; i++) {
		table.rows[to].insertCell(i);
		table.rows[to].cells[i].innerHTML = table.rows[from].cells[i].innerHTML;
	}
}

Table.copyRowDom=function (table, from, to) 
{
	var fromRow = table.rows[from];
	var toRow = table.rows[to];
	var cellCount = fromRow.cells.length;
	var cellArrayReverse = [];
	var index = 0;
	
	//toRow.style.backgroundColor = fromRow.style.backgroundColor;
	toRow.className = fromRow.className;
	
	for (var i = cellCount; i > 0; i--) {
		var cell = fromRow.cells[i - 1];
		fromRow.removeChild(cell);
		cellArrayReverse[index++] = cell;
	}
	
	for (var i = cellCount; i > 0; i--) {
		var cell = cellArrayReverse[i - 1];
		toRow.appendChild(cell);
	}
}

Table.saveRowsOrder = function (tableName, rowOrderVariable) 
{
	var table = $(tableName);
	var str = '';
	
	for (i = 1; i < table.rows.length; i++)
	{
		var tableData = table.rows[i].cells[0];
	
		if (tableData.colSpan > 1) {
			// It means that there is no data in table.
			return true;
		}
		
		if (i > 1) str+=',';
		str += tableData.innerHTML;
	}
	
	$(rowOrderVariable).value=str;
	return true;
}


//----------- actions -------------
function setEditAction(form, property, action, index) {
	actstr='actionName='+action+',property='+property+',index='+index;
	//alert(actstr);
	form.elements["_action"].value=actstr;
}

function invokeSubmit(form) {
	if (form.onsubmit) {
		form.onsubmit();
	}
	form.submit();
}


//---------- img popup ------------


// Script Source: CodeLifter.com
// Copyright 2003
// Do not remove this notice.

// SETUPS:
// ===============================

// Set the horizontal and vertical position for the popup

PositionX = 100;
PositionY = 100;

// Set these value approximately 20 pixels greater than the
// size of the largest image to be used (needed for Netscape)

defaultWidth  = 550;
defaultHeight = 550;

// Set autoclose true to have the window close automatically
// Set autoclose false to allow multiple popup windows

var AutoClose = true;

// Do not edit below this line...
// ================================
if (parseInt(navigator.appVersion.charAt(0))>=4){
var isNN=(navigator.appName=="Netscape")?1:0;
var isIE=(navigator.appName.indexOf("Microsoft")!=-1)?1:0;}
var optNN='scrollbars=no,width='+defaultWidth+',height='+defaultHeight+',left='+PositionX+',top='+PositionY;
var optIE='scrollbars=no,width=150,height=100,left='+PositionX+',top='+PositionY;
function popImage(imageURL,imageTitle){
if (isNN){imgWin=window.open('about:blank','',optNN);}
if (isIE){imgWin=window.open('about:blank','',optIE);}
with (imgWin.document){
writeln('<html><head><title>Loading...</title><style>body{margin:0px;}</style>');writeln('<sc'+'ript>');
writeln('var isNN,isIE;');writeln('if (parseInt(navigator.appVersion.charAt(0))>=4){');
writeln('isNN=(navigator.appName=="Netscape")?1:0;');writeln('isIE=(navigator.appName.indexOf("Microsoft")!=-1)?1:0;}');
writeln('function reSizeToImage(){');writeln('if (isIE){');writeln('window.resizeTo(100,100);');
writeln('width=100-(document.body.clientWidth-document.images[0].width);');
writeln('height=100-(document.body.clientHeight-document.images[0].height);');
writeln('window.resizeTo(width,height);}');writeln('if (isNN){');       
writeln('window.innerWidth=document.images["George"].width;');writeln('window.innerHeight=document.images["George"].height;}}');
writeln('function doTitle(){document.title="'+imageTitle+'";}');writeln('</sc'+'ript>');
if (!AutoClose) writeln('</head><body bgcolor=ffffff scroll="no" onload="reSizeToImage();doTitle();self.focus()">')
else writeln('</head><body bgcolor=ffffff scroll="no" onload="reSizeToImage();doTitle();self.focus()" onblur="self.close()">');
writeln('<img name="George" src='+imageURL+' style="display:block"></body></html>');
close();		
}}
