function $(id){
	return document.getElementById(id);
}	

function hoverImg(oLink,fileName){
	var regExpFileName = /[^\/]+$/ig;
	var oImg = oLink.getElementsByTagName("IMG")[0]; 
	oImg.src = oImg.src.replace(regExpFileName,fileName);
}



var selectBox = {
	init: function(id){
		var tFormElem = $(id);
		var tWidth = parseInt(tFormElem.style.width);
		var oDiv = document.createElement("DIV");
		var str = '<div class="selectBox" style="width:'+tWidth+'px" onclick="selectBox.click(this)"><div onmouseover="this.className=\'hover\'" onmouseout="this.className=\'\'"><div><span class="'+tFormElem.options[tFormElem.selectedIndex].className+'">'+tFormElem.options[tFormElem.selectedIndex].text+'</span></div></div></div>';	
			str+= '<div class="selectDrillDown" style="width:'+tWidth+'px;display:none"><b class="ct cl"><b></b></b><b class="ct cr"><b></b></b><div class="innerSelectDrillDown">';
			for(var i=0; i<tFormElem.options.length; i++){
				str+= '<div onclick="selectBox.select(this,'+i+');return false" onmouseover="this.className=\'hover\'" onmouseout="this.className=\'\'"><span class="'+tFormElem.options[i].className+'">'+tFormElem.options[i].text+'</span></div>'
			}
			str+='<a href="#"></a>';
			str+='</div><b class="cb cl"><b></b></b><b class="cb cr"><b></b></b></div>';
			oDiv.innerHTML = str;
			tFormElem.parentNode.insertBefore(oDiv,tFormElem);			
	}
	,
	
	click: function(obj){
		var oDrillDown = obj.nextSibling;	
		if(oDrillDown.style.display=="none"){
			oDrillDown.style.display = "block";

			oDrillDown.getElementsByTagName("A")[0].focus();
			oDrillDown.getElementsByTagName("A")[0].onblur = function(obj){ return function(){ setTimeout( function(obj){ return function(){obj.style.display = "none"}}(obj), 200);   }}(oDrillDown);
		}
		else{
			oDrillDown.style.display = "none";		
		}
	}
	,
	
	select: function(obj,item){
		var oDrillDown = obj.parentNode.parentNode;
		var oSelect = oDrillDown.previousSibling;
		var oFormElem = oSelect.parentNode.parentNode.getElementsByTagName("SELECT")[0];
		
		oFormElem.options[item].selected = true;
		oSelect.getElementsByTagName("SPAN")[0].innerHTML = oFormElem.options[item].text;
		oSelect.getElementsByTagName("SPAN")[0].className = oFormElem.options[item].className;
		oDrillDown.style.display = "none";
		if(oFormElem.onchange){
			oFormElem.onchange();
		}		
	}
}

var radioGroup = {
	init: function(id){
		var tFormElem = $(id);
		var tObj = tFormElem;
			do{
				tObj = tObj.parentNode;
			}while(tObj.tagName != 'TABLE');

		var tViewElems = tObj.getElementsByTagName("IMG");
		for(var i=0; i<tViewElems.length; i++){
			if(i+1 == tFormElem.value){
				this.setImg(tViewElems[i], 'on');
			}
			else{
				this.setImg(tViewElems[i], 'off');
			}
		}
	}
	,

	click: function(obj){
		var tObj = obj;
		do{
			tObj = tObj.parentNode;
		}while(tObj.tagName != 'TABLE');

		var tFormElem = tObj.getElementsByTagName("INPUT")[0];
		var tViewElems = tObj.getElementsByTagName("IMG");

		for(var i=0; i<tViewElems.length; i++){
			if(obj == tViewElems[i]){
				this.setImg(tViewElems[i], 'on');
				tFormElem.value = (i+1);
			}
			else{
				this.setImg(tViewElems[i], 'off');
			}
		}
	}
	,
	
	clickOnLabel: function(id){
		$(id).onclick();
	}
	,
	
	setImg: function(obj,value){
		obj.src = (value=="on")? obj.src.replace(/[^_]+$/ig,"on.gif"): obj.src.replace(/[^_]+$/ig,"off.gif");
	}
}


/* toolTip */
var toolTip = {
	oToolTip: null,
	oCurrentOver: null,
	
	init: function (o) {
		if (!this.oToolTip) {
			this.oToolTip = document.createElement('DIV');
			this.oToolTip.className = 'toolTip';
			this.oToolTip.innerHTML = '';
			document.body.appendChild(this.oToolTip);
		}
	}
	,
	
	over: function (o, e) {
		this.init(o);
		
		if(this.oCurrentOver != o){
			this.oCurrentOver = o;
			o.style.cursor = "pointer";
			this.oToolTip.style.display = 'none';
			
			var arrDivs = o.getElementsByTagName("DIV");
			var oTtoolTipInfo = null;
			for(var i=0; i<arrDivs.length; i++){
				if(arrDivs[i].className == "toolTipInfo"){
					oTtoolTipInfo = arrDivs[i];
					break;
				}
			}
			
			if(!oTtoolTipInfo){
				return;
			}
			
			this.oToolTip.innerHTML = '<b class="t l"><b></b></b><b class="t r"><b></b></b><div class="innerToolTip"><table class="toolTipWrap"><tr><td>'+oTtoolTipInfo.innerHTML+'</td></tr></table></div><b class="b l"><b></b></b><b class="b r"><b></b></b>';
			
			if (!o.onmouseout){ o.onmouseout = function () {toolTip.out(this)}};
			if (!o.onmousemove){ o.onmousemove = function (evt) {toolTip.move(this,evt)}};
		}
		this.setPosition(e);
		this.oToolTip.style.display = 'block';

	}
	,
	
	out: function (o) {
		this.oToolTip.style.display = 'none';
	}
	,
	
	move: function (o, e) {
		this.setPosition(e);
	},
	
	setPosition: function (e) {
		var x, y;
		e = (e) ? e : window.event;
		
		if (e.pageX || e.pageY){
			x = e.pageX;
			y = e.pageY;
		}
		else if (e.clientX || e.clientY){
			x = e.clientX + document.body.scrollLeft;
			y = e.clientY + document.body.scrollTop;
		}		
		
		this.oToolTip.style.left = x + 0;
		this.oToolTip.style.top = y + 10;
	}	

}


/* calendar */

var fakeCalendarData = {
	"08-2008" : ['#1','#2','#3','#4','#5','#6','#7','','#9','#10','#11','#12','#13','','#15','#16','#17','#18','#19','#20','#21','#22','#23','#24','#25','#26','#27','#28','#29','#30','#31']
	,
	"07-2008" : ['#1','#2','#3','#4','#5','#6','#7','#8','#9','#10','#11','#12','#13','#14','#15','#16','#17','#18','#19','#20','','','#23','#24','#25','','#27','#28','#29','#30','#31']
	,
	"06-2008" : ['#1','','#3','#4','#5','#6','#7','#8','#9','#10','#11','#12','#13','#14','#15','','#17','#18','#19','#20','#21','#22','#23','#24','#25','#26','#27','#28','#29','#30','#31']
	,
	"05-2008" : ['#1','#2','#3','#4','#5','#6','#7','','#9','#10','#11','#12','#13','','#15','#16','#17','#18','#19','#20','#21','#22','#23','#24','#25','#26','#27','#28','#29','#30','#31']
	,
	"04-2008" : ['#1','#2','#3','#4','#5','#6','#7','#8','#9','#10','#11','#12','#13','#14','#15','#16','#17','#18','#19','#20','','','#23','#24','#25','','#27','#28','#29','#30','#31']
	,
	"03-2008" : ['#1','','#3','#4','#5','#6','#7','#8','#9','#10','#11','#12','#13','#14','#15','','#17','#18','#19','#20','#21','#22','#23','#24','#25','#26','#27','#28','#29','#30','#31']
	,
	"02-2008" : ['#1','#2','#3','#4','#5','#6','#7','','#9','#10','#11','#12','#13','','#15','#16','#17','#18','#19','#20','#21','#22','#23','#24','#25','#26','#27','#28','#29','#30','#31']
	,
	"01-2008" : ['#1','#2','#3','#4','#5','#6','#7','#8','#9','#10','#11','#12','#13','#14','#15','#16','#17','#18','#19','#20','','','#23','#24','#25','','#27','#28','#29','#30','#31']
	,
	"00-2008" : ['#1','','#3','#4','#5','#6','#7','#8','#9','#10','#11','#12','#13','#14','#15','','#17','#18','#19','#20','#21','#22','#23','#24','#25','#26','#27','#28','#29','#30','#31']
	,
	"11-2007" : ['#1','#2','#3','#4','#5','#6','#7','','#9','#10','#11','#12','#13','','#15','#16','#17','#18','#19','#20','#21','#22','#23','#24','#25','#26','#27','#28','#29','#30','#31']
	,
	"10-2007" : ['#1','#2','#3','#4','#5','#6','#7','#8','#9','#10','#11','#12','#13','#14','#15','#16','#17','#18','#19','#20','','','#23','#24','#25','','#27','#28','#29','#30','#31']
	,
	"09-2007" : ['#1','','#3','#4','#5','#6','#7','#8','#9','#10','#11','#12','#13','#14','#15','','#17','#18','#19','#20','#21','#22','#23','#24','#25','#26','#27','#28','#29','#30','#31']
		

}

var calendar = {
	days: ["Lu", "Ma", "Me", "Je", "Ve", "Sa", "Di"],
	oCalendar: null,
	oSelect: null,
	dataPool: null,

	init: function(idCalendar, idSelect, data){
		oCalendar = $(idCalendar);
		oSelect = $(idSelect);	
		dataPool = data; 
		this.show(oSelect.value);	
	}
	,
	
	show: function(date){ /* date format is mm-yyyy */
		if(!dataPool[date]){
			oCalendar.style.display = "none";
			return false;
		}
		else {
			var month = parseInt(date,10);
			var year = parseInt(date.substr(date.length-4),10);
			var str='';
			
			var firstDay = this.getWeekDay(1, month-1, year);
			var maxDay = this.getMaxDay(month-1, year)
			var today = new Date();
			
			var col;
			
			str+='<table><thead><tr>';
			for(var i=0; i<7; i++){
				str+='<td><div>'+this.days[i]+'</div></td>';	
			}			
			
			str+='</tr></thead><tbody><tr>';
			
			for(col=0; col<firstDay-1; col++){
				str+='<td><div>&nbsp;</div></td>';	
			}
			
			for(var i=0; i<maxDay; i++){
				var dayCss = "";	
				var tempDate = new Date(date.year,date.month,(i+1));
				
				if(today.getDate() == (i+1) && today.getMonth() == month && today.getFullYear() == year){
					dayCss += "today ";
				}

				if(this.getWeekDay((i+1), month-1, year)>5){
					dayCss += "dayoff ";
				}				

				if(dataPool[date][i]){
					
					dataPool[date][i]=dataPool[date][i].replace(/events/,"agenda");
					str += '<td><div class="'+dayCss+'"><a href="'+dataPool[date][i]+'">'+(i+1)+'</a></div></td>';						
					
				}
				
				else {
					str += '<td><div class="'+dayCss+'"><div>'+(i+1)+'</div></div></td>';	
				}
				
				if (++col == 7){
					col = 0;
					str+='</tr>';
				}
			}		
			
			if(col){
				for(; col<7; col++){
					str+='<td><div>&nbsp;</div></td>';	
				}
				str+='</tr></tbody></table>';
			}
			oCalendar.innerHTML = str;
			oCalendar.style.display = "block";
		}	
	
	}
	,
	
	getMaxDay: function(month,year){
		/* monday=1, tuesday=2, ... , sunday = 7 */
		var d = new Date (year,month+1,0);
		return d.getDate();
	}	
	,
	
	getWeekDay: function(day,month,year){
		var d = new Date (year,month,day).getDay();
		d = (d==0)?7:d; 		
		return d;
	}

}


/* tree */

function collapseTree(o){
	var status = (o.className == "plus")? true : false;
	var oNode = o.parentNode.parentNode.parentNode;
	
	o.className = (status)? "minus" : "plus";
	oNode.className = (status)? oNode.className.replace('nodeClosed','nodeOpened') : oNode.className.replace('nodeOpened','nodeClosed');
}

