/* 
	
	GPM Zeiterfassung 3.x, default theme
		
	filename:	/js/gpm-default-theme_gen.js
	version:	1.0 - 2006-02-07 - mkr

*/


function pageInit() {


		createStyledCornerNavigation ('mainnavigation', 'roundcorner', 'lr');
		createTableHover ('content','simulatehover');
		createLabelHeights ();

		var is = new BrowserCheck();
		
		// visual adjustments 
		if (is.ie && document.getElementById('subnavigation')) {
			document.getElementById('subnavigation').style.paddingBottom = '3px';
		}
		
}
// creates the styled navigation 
// uses styledCorner object
function createStyledCornerNavigation (parentlayer, marker, position) {
//	parentlayer: layer / object sourounding the navigation list, e.g. 'mainnavigation'
//	marker: marks the element that should be stlyed
// position: needed for styledCorner Object, l => styled top left corner, r=> styled top right corner
	
	//get parent layer, sourounding the elements to style
	var parentlayerObj = document.getElementById(parentlayer);
	if (parentlayerObj) {
		for (var i = 0; i < parentlayerObj.getElementsByTagName('li').length; i++){
			//store the current object
			var currentElement = parentlayerObj.getElementsByTagName('li')[i];
			var currentElementClassName = parentlayerObj.getElementsByTagName('li')[i].className;
	
			//check for marker 
			if (currentElementClassName.indexOf(marker) != -1) {
				
				//create corner id
				var cornerIdBase = parentlayer + i;
						
				//create styledCorner object 
				var corner = new styledCornersDiv(cornerIdBase, position); //document.createElement
				
	
				corner = new styledCornersImg(cornerIdBase, position); 
				//append created stuff
				if (position.indexOf('l') != -1) {currentElement.insertBefore(corner.myCornerTopLeft, currentElement.firstChild)};
				if (position.indexOf('r') != -1) {currentElement.insertBefore(corner.myCornerTopRight, currentElement.lastChild)};
	
				//corner = new styledCornersDiv(cornerIdBase, position); 
				//if (position.indexOf('l') != -1) {currentElement.innerHTML = (currentElement.innerHTML) ? corner.myCornerTopLeftBegin + currentElement.innerHTML + corner.myCornerTopLeftEnd : "";}
				//if (position.indexOf('r') != -1) {currentElement.innerHTML = (currentElement.innerHTML) ? corner.myCornerTopRightBegin + currentElement.innerHTML + corner.myCornerTopRightEnd : "";}
			}
		}
	}
}

// creates styledCorner objects (document.createElement)
function styledCornersDiv (id, position) {
// id:
// position: l => styled top left corner, r=> styled top right corner

	//config
	var topLeftImage = '/img/gen_roundcorner_top_left.gif';
	var topRightImage = '/img/gen_roundcorner_top_right.gif';

		//create topLeft corner
		if (position.indexOf('l') != -1) 
		{
			this.myCornerTopLeftBegin = '<div class="roundcornertopleft"';
			//this.myCornerTopLeftBegin += 'style="background: transparent url('+topLeftImage+') no-repeat top left"';
			this.myCornerTopLeftBegin += 'id= "'+id+'-topleft"';
			this.myCornerTopLeftEnd = '</div>';
		}

		//create topRight corner
		if (position.indexOf('r') != -1) 
		{
			this.myCornerTopRightBegin = '<div class="roundcornertopright"';
			//this.myCornerTopRightBegin += 'style="background: transparent url('+topRightImage+') no-repeat top right"';
			this.myCornerTopRightBegin += 'id= "'+id+'-topright"';
			this.myCornerTopRightEnd = '</div>';
		}
		
}

// creates styledCorner objects (document.createElement)
function styledCornersImg (id, position) {
// id:
// position: l => styled top left corner, r=> styled top right corner

	//config
	var topLeftImage = '/img/gen_roundcorner_top_left.gif';
	var topLeftImageHeight = '7px';
	var topLeftImageWidth = '7px';

	var topRightImage = '/img/gen_roundcorner_top_right.gif';
	var topRightImageHeight = '7px';
	var topRightImageWidth = '7px';

	if (position.indexOf('l') != -1) {
		//create topLeft corner
		this.myCornerTopLeft = document.createElement('img');
		this.myCornerTopLeft.src = topLeftImage;
		this.myCornerTopLeft.id = id + '-topleft';
		this.myCornerTopLeft.style.height = topLeftImageHeight;
		this.myCornerTopLeft.style.width = topLeftImageWidth;
		this.myCornerTopLeft.style.verticalAlign = 'top';
		//	this.myCornerTopLeft.style.display = 'inline';
		//	this.myCornerTopLeft.style.border = '1px solid red';
	}
	if (position.indexOf('r') != -1) {
		//create topRight corner
		this.myCornerTopRight = document.createElement('img');
		this.myCornerTopRight.src = topRightImage;
		this.myCornerTopRight.id = id + '-topright';
		this.myCornerTopRight.style.height = topRightImageHeight;
		this.myCornerTopRight.style.width = topRightImageWidth;
		this.myCornerTopRight.style.verticalAlign = 'top';
	//	this.myCornerTopLeft.style.display = 'inline';
	//	this.myCornerTopLeft.style.border = '1px solid red';
	}
//	document.getElementById(id).insertBefore(this.myCornerTopLeft, document.getElementById(id).firstChild);
//	document.getElementById(id).insertBefore(this.myCornerTopRight, document.getElementById(id).lastChild);

}

// simulates hover effekt on mainnavigation (kinda msover)
function simulateHover (obj, eventhandler) {
//	obj: this
//	eventhandler: onfocus, onblur, onmouseover, onmouseout

	switch (eventhandler) {

		case 'onmouseover':
			obj.parentNode.className = (obj.parentNode.className.indexOf('active') != -1) ? 'roundcorners active preserve' : 'roundcorners active';
		break;
	
		case 'onmouseout':
			obj.parentNode.className = (obj.parentNode.className.indexOf('preserve') != -1) ? 'roundcorners active' : 'roundcorners';
		break;
	
		case 'onfocus':
			obj.parentNode.className = (obj.parentNode.className.indexOf('active') != -1) ? 'roundcorners active preserve' : 'roundcorners active';
		break;
	
		case 'onblur':
			obj.parentNode.className = (obj.parentNode.className.indexOf('preserve') != -1) ? 'roundcorners active' : 'roundcorners';
		break;
	}

}

// creates Table hover effekt, needed 'cause ie6 doesn't understand tr:hover
// adds a generic eventhandler calling simulateTableHover to the table rows
function createTableHover (parentlayer,marker) {
//	parentlayer: layer / object sourounding the element
//	marker: marks the element that should get a generic eventhandler


	//get parent layer, surrounding the elements to style
	var parentlayerObj = document.getElementById(parentlayer);
	if (parentlayerObj) {
		for (var i = 0; i < parentlayerObj.getElementsByTagName('table').length; i++)
		{
			//store the current object
	//		parentlayerObj.getElementsByTagName('table')[i].hasLayout = true;
			var currentElement = parentlayerObj.getElementsByTagName('table')[i];
			var currentElementClassName = parentlayerObj.getElementsByTagName('table')[i].className;
	
			//check for marker 
			if (currentElementClassName.indexOf(marker) != -1) 
			{
	
				// get table rows
				for (var j = 0; j < currentElement.getElementsByTagName('tr').length; j++)
				{
		
					//store the current object
					var currentElementTr = currentElement.getElementsByTagName('tr')[j];
					var currentElementTrClassName = currentElement.getElementsByTagName('tr')[j].className;
					
					//check for marker 
					if (currentElementTrClassName.indexOf(marker) != -1) 
					{
						//add eventhandler
						if (!currentElementTr.onblur) { currentElementTr.onblur = function(){ simulateTableHover(this, 'onblur', 'hover')}; }
						if (!currentElementTr.onfocus) { currentElementTr.onfocus = function(){ simulateTableHover(this, 'onfocus', 'hover')}; }				
						if (!currentElementTr.onmouseover) { currentElementTr.onmouseover = function(){ simulateTableHover(this, 'onmouseover', 'hover')}; }
						if (!currentElementTr.onmouseout) { currentElementTr.onmouseout = function(){ simulateTableHover(this, 'onmouseout', 'hover')}; }				
					}
				}
			}
		}
	}
}

function createLabelHeights () {
	var objs = document.getElementsByTagName("div");
	for (var i=0; i<objs.length; i++) {
		if (objs[i].className=="needlabelheight") {
			var previous = objs[i].previousSibling;
			while (previous.innerHTML.substr(0, 6)!='<label' && previous.innerHTML.substr(0, 6)!='<LABEL' && previous.previousSibling) {
				previous = previous.previousSibling;
			}
			if (previous.offsetHeight) {
				objs[i].style.paddingTop = (previous.offsetHeight-(is.ie?15:14))+'px';
			}
		}
	}
}

// generic eventhandler, added by createTableHover
function simulateTableHover(obj, eventhandler, addClass) {
//	obj: this
//	eventhandler: onfocus, onblur, onmouseover, onmouseout
//	addClass: the "hover"-Class
	addClass = (!addClass) ? 'hover' : addClass;
	var defaultClass = '';
	
	//registering "e" as event-type
	if (!e) var e = window.event;	

	switch(eventhandler) {
		
		//onfocus	
		case 'onfocus':
			obj.className += ' '+ addClass;
		break;
		
		//onblur
		case 'onblur':
			while (obj.className.indexOf(' hover') != -1) {
				obj.className = obj.className.replace(/ hover/, '');
			}
		break;

		//onmouseover	
		case 'onmouseover':
			obj.className += ' '+ addClass;

		break;
		
		//onmouseout
		case 'onmouseout':
			while (obj.className.indexOf(' hover') != -1) {
				obj.className = obj.className.replace(/ hover/, '');
			}
		break;
	
	}

}

// changes className to checked, works for one or all checkboxes inside the table
function createVisualChecked(obj, eventhandler, type){
//	obj: this
//	eventhandler: onclick
//	type: null, 'all'

	switch(eventhandler) {
		
		//onclick	
		case 'onclick':

			//just this one
			if (type != 'all') {
				// get the checkbox's parent tr
				if (obj.parentNode.parentNode.className.indexOf('checked') != -1) {
					obj.parentNode.parentNode.className = obj.parentNode.parentNode.className.replace(/checked/, '');
				} else {
					obj.parentNode.parentNode.className += ' checked';
				}
			}

			//all			
			else if (type == 'all') {

				//check or uncheck ?
				var changeStatus = obj.checked;

				//get this elements parent table
				var parentTable = obj.parentNode.parentNode.parentNode.parentNode;

				//get all input-elements from this table
				for ( var i = 0; i < parentTable.getElementsByTagName('input').length; i++)
				{

					if (parentTable.getElementsByTagName('input')[i].type == 'checkbox') 
					{
						//check or uncheck checkboxes
						parentTable.getElementsByTagName('input')[i].checked = changeStatus;

						//change class for visualy checked effekt
						if (changeStatus) {
							parentTable.getElementsByTagName('input')[i].parentNode.parentNode.className += ' checked' ;
						} else {
							parentTable.getElementsByTagName('input')[i].parentNode.parentNode.className = parentTable.getElementsByTagName('input')[i].parentNode.parentNode.className.replace(/checked/, '') ;
						}

					}
				}
			}
		
		break;

	}
}


// simulates hover effekt on form elements 
function simulateFormHover (obj, eventhandler, hoverClass) {
//	obj: this
//	eventhandler: onfocus, onblur, onmouseover, onmouseout
// hoverClass: class that simulates hover effect, default: simhover

	hoverClass = (!hoverClass) ? 'simhover': hoverClass;
	
	var replaceString;
	var myRegExp;
	
	switch (eventhandler) {

		//onmouseover
		case 'onmouseover':
			if (obj.readOnly == false) {obj.className += ' ' + hoverClass;}
		break;
	
		//onmouseout
		case 'onmouseout':
			replaceString = ' '+hoverClass;
			myRegExp = new RegExp((replaceString), 'i');
			obj.className = obj.className.replace (myRegExp,'');
		break;
	
		//onfocus
		case 'onfocus':
			if (obj.readOnly == false) {obj.className += ' ' + hoverClass;}
		break;
	
		//onblur
		case 'onblur':
			replaceString = ' '+hoverClass;
			myRegExp = new RegExp((replaceString), 'i');
			obj.className = obj.className.replace (myRegExp,'');
		break;
	}

}


// foldes in / out 
function changeCalendar (thisObj, foldObjId, eventhandler, marker){
//	obj: this
//	eventhandler: onmouseover, onmouseout, onclick
//	marker: marks the element(s) that folds in/out

	var foldObj = document.getElementById(foldObjId);
	thisObj.xposition = getXPos(thisObj);
	thisObj.yposition = getYPos(thisObj);
	
	switch (eventhandler) {

		//onmouseover	
		case 'onmouseover':

		break;

		//onmouseout
		case 'onmouseout':
		break;

		//onclick	
		case 'onclick':
			foldObj.style.display = (foldObj.style.display == 'none') ? 'block' : 'none';
			thisObj.src = (foldObj.style.display == 'none') ? '/img/gen_icon_calendar.gif' : '/img/gen_icon_close.gif';
			foldObj.style.position = 'absolute';
			foldObj.style.top = (parseInt(thisObj.yposition)+0) + 'px';
//			foldObj.style.left = (parseInt(thisObj.yposition) + parseInt(thisObj.width) + 2) + 'px';
			foldObj.style.left = (parseInt(thisObj.xposition)+16) + 'px';
		break;
		
	}
}


// enable/disable "anzeige von - bis"
function changeTimeOptions (obj, eventhandler, marker){
//	obj: this
//	eventhandler: onmouseover, onmouseout, onclick
//	marker: marks the element(s) that folds in/out
	
	switch (eventhandler) {

		//onmouseover	
		case 'onmouseover':
			obj.parentNode.style.cursor = 'pointer';

		break;

		//onmouseout
		case 'onmouseout':
		break;

		//onclick	
		case 'onclick':

		this.hasSibling();

			
		break;
		
	}
}

function animate(objId,finalHeight,finalWidth) {

	var obj = document.getElementById(objId);

	var interval = 10;
	
	var me = this;
	
	this.startTimer = window.setInterval(function() {me.doAnimation(me);},interval);
	this.obj = obj;
	this.objOffsetHeight = obj.offsetHeight;
	this.objOffsetWidth = obj.offsetWidth;
	this.finalHeight = finalHeight;
	this.finalWidth = finalWidth;
	this.stopTimer = window.clearInterval(me.timer);
	this.obj.style.height = 1 +'px';
	this.obj.style.width = 1 +'px';
	this.obj.style.display = 'none';


}

animate.prototype.doAnimation = function(me){
	if (this.obj.style.display == 'none') {this.obj.style.display = 'block';}
	me.obj.style.height =  me.objOffsetHeight + 'px';
	if (me.objOffsetWidth < me.finalWidth) {
		me.obj.style.width += 10 + 'px';
	}

	if ( me.objOffsetHeight < me.finalHeight) {
		me.obj.style.height += 10 + 'px';
	}



}
function getXPos(obj) {
	var curleft = 0;
		if (obj.offsetParent) {
			
			while (obj.offsetParent) {
				curleft += obj.offsetLeft
				obj = obj.offsetParent;
			}
		}

		else if (obj.x) { curleft += obj.x;}

	return curleft;
}

// returns the y-pos of the obj
function getYPos(obj) {
	var curtop = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}

	else if (obj.y) {curtop += obj.y;}
	
	return curtop;
}

