
var g_bIElt7 = false
if(document.all && !window.opera)
{
	var ieVer = parseInt(navigator.appVersion.substr(navigator.appVersion.indexOf('MSIE')+4));
	if(ieVer<7)
	g_bIElt7 = true;
}


var g_calendar;
var g_oldOnClick;
/**
 * @param elem	the target element that receives the date
 * @param elem2	the 2nd element that receives the adjactent date
 * @param diff	the difference to the adjactent date
 * @param minTS	minimal timestamp
 * @param maxTS	maximal timestamp
 * @param lang
 */
function doCalendar(elem, elem2, diff, minTS, maxTS, lang)
{
	//determine current date
	if(document.getElementById(elem))
	{
		dateReadable = document.getElementById(elem).value;
		date = dateReadable.explode('.');
		month = date[1];
		year = date[2];
	}
	else
	{
		now = new Date();
		month = String(now.getMonth()+1);
		year = now.getFullYear();
	}
	
	g_calendar = new CCalendar(year, month, elem, elem2, diff, minTS, maxTS, lang);
	addEvent(document, 'mouseup', g_calendar.destroy );
	return false;
}


function onCalendarFinished(ts1, id1, ts2, id2)
{
	if(document.getElementById(id1))
	{
		var date = new Date(ts1*1000);
		document.getElementById(id1).value = sprintf("%02d.%02d.%d", date.getDate(), date.getMonth()+1, date.getFullYear());
	}
	
	if(document.getElementById(id2))
	{
		var date = new Date(ts2*1000);
		document.getElementById(id2).value = sprintf("%02d.%02d.%d", date.getDate(),date.getMonth()+1, date.getFullYear());
	}
	g_calendar.destroy();
}

function CCalendar(year, month, elementID, elementID2, diff, minTS, maxTS,lang)
{
	var self = this;

	var month = Number(month);
	var year = Number(year);
	if(isNaN(year) || isNaN(month))
	{
		testDate = new Date();
		month = testDate.getMonth()+1;
		year = testDate.getFullYear();	
	}
	else
	{
		var testDate = new Date( year, month-1, 1 );
		if(testDate.getTime()/1000<minTS || testDate.getTime()/1000>maxTS)
		{
			testDate = new Date();
			month = testDate.getMonth()+1;
			year = testDate.getFullYear();	
		}
	}
	var div = document.getElementById('calendarDiv');
	
	var oneYearBack = function()
	{
		year -= 1;
		build();
		return false;
	};
	var oneMonthBack = function()
	{
		month = month==0?11:month-1;
		year = (month==11)?year-1:year;
		build();
		return false;
	};
	var oneMonthForth = function()
	{
		month = month==11?0:month+1;
		year = (month==0)?year+1:year;
		build();
		return false;
	};
	var oneYearForth = function(e)
	{
		year += 1;
		build();
		return false;
	};
	
	var build = function()
	{
		while(div.childNodes.length)div.removeChild(div.firstChild);

		var date = new Date( year, month-1, 1 );
		
		var table = document.createElement('table');
		if(table.onselectstart)
			table.onselectstart = function(){return false};
		else if(typeof table.style.MozUserSelect != 'undefined')
			table.style.MozUserSelect = 'none';
		div.appendChild(table);
		table.id = "calendarTable";
		var tbody = document.createElement('tbody');
		table.appendChild(tbody);
		var tr = document.createElement('tr');
		tr.id = "calendarHeader";
		tbody.appendChild(tr);
		// year back
		var td = document.createElement('td');
		td.onclick = oneYearBack;
		td.innerHTML = '&lt;&lt;';
		tr.appendChild(td);
			
		// month back
		td = document.createElement('td');
		td.onclick = oneMonthBack;
		td.innerHTML = '&lt;';
		tr.appendChild(td);
			
		// current month
		td = document.createElement('td');
		td.id = "yearMonth";
		td.style.whiteSpace = "nowrap";
		if(document.createAttribute)
		{
			var cspan = document.createAttribute("colspan");
			cspan.nodeValue = "3";
			td.setAttributeNode(cspan);	
		}
		else
		{	// IE<6
			td.setAttribute('colSpan', 3);
		}
		td.innerHTML = translateMonth(date.getMonth()+1) +' '+date.getFullYear();
		tr.appendChild(td);
			
		// month forth
		td = document.createElement('td');
		td.onclick = oneMonthForth;
		td.innerHTML = '&gt;';
		tr.appendChild(td);
			
		//year forth
		td = document.createElement('td');
		td.onclick = oneYearForth;
		td.innerHTML = '&gt;&gt;';
		tr.appendChild(td);
			
		// day abbrev. row
		tr = document.createElement('tr');
		tr.id = "calendarDays";
		var days = new Array('Mo','Di','Mi','Do','Fr','Sa','So');
		for(var i=0; i<days.length; i++)
		{
			td = document.createElement('td');
			td.innerHTML = days[i];
			tr.appendChild(td);
		}
		tbody.appendChild(tr);

		tr = document.createElement('tr');
		
		var d = 1;
	    var startMonth = date.getMonth();
		var lastDay; // daylight saving time issue
	    while(d!=date.getDay())
	    {
	    	var dayyd = date.getTime()/1000 - ((date.getDay()==0?7:date.getDay())-d)*60*60*24;
			if(dayyd>=minTS && dayyd<=maxTS)
			{
				tmpArr = new Date(dayyd*1000);
				tmpDep = new Date((dayyd + diff*60*60*24)*1000);
				td = document.createElement('td');
				td.className = "blindDays";
				td.id = (tmpArr.getTime()/1000) + '_' + (tmpDep.getTime()/1000);
				td.onclick = function()
					{
						timestamps = this.id.explode('_'); 
						onCalendarFinished(timestamps[0],elementID,	timestamps[1], elementID2);
						return false;
					};
				td.innerHTML = tmpArr.getDate();
	        	if(td.innerHTML != lastDay) tr.appendChild(td);
				lastDay = td.innerHTML;
			}
			else
			{
				tmpArr = new Date(dayyd*1000);
	    		td = document.createElement('td');
				td.className = "nonLinkDays";
				td.onclick = function()	{ return false;	};
				td.innerHTML = tmpArr.getDate();
				if(td.innerHTML != lastDay) tr.appendChild(td);
				lastDay = td.innerHTML;
			}
			d++;
			d%=7;if(date.getDay()==7)alert("FHELREERJK!!!!");
	    }

	    do
	    {
	        if(date.getTime()/1000>=minTS && date.getTime()/1000<=maxTS)
	        {
				var diffLater = new Date(date.getTime()+(1000*60*60*24*diff));
	        	td = document.createElement('td');
				td.className = "linkDays";
				td.id = (date.getTime()/1000) + '_' + (diffLater.getTime()/1000);
				td.onclick = function()
					{
						timestamps = this.id.explode('_'); 
						onCalendarFinished(timestamps[0],elementID,	timestamps[1], elementID2);
						return false;
					};
				td.innerHTML = date.getDate();
	        	if(td.innerHTML != lastDay) tr.appendChild(td);
				lastDay = td.innerHTML;
			}
	        else
	        {
	        	td = document.createElement('td');
				td.className = "nonLinkDays";
				td.onclick = function()	{ return false;	};
	        	td.innerHTML = date.getDate();
	        	if(td.innerHTML != lastDay) tr.appendChild(td);
				lastDay = td.innerHTML;
	        }
			date = new Date( date.getTime()+ 1000*60*60*24 );
			if(date.getDay()==1)
			{
				tbody.appendChild(tr);
				tr = document.createElement('tr');			
			}
	    }while(date.getMonth()==startMonth);
	
	    d = date.getDay()==0?7:date.getDay();
	    dayyd = date.getTime()/1000;
		while(d>1 && d<=7)
	    {
			tmpArr = new Date(dayyd*1000);
			if(dayyd>=minTS && dayyd<=maxTS)
			{
				tmpDep = new Date((dayyd + diff*60*60*24)*1000);
	        	td = document.createElement('td');
				td.className = "blindDays";
				td.id = (tmpArr.getTime()/1000) + '_' + (tmpDep.getTime()/1000);
				td.onclick = function()
					{
						timestamps = this.id.explode('_'); 
						onCalendarFinished(timestamps[0],elementID,	timestamps[1], elementID2);
						return false;
					};
				td.innerHTML = tmpArr.getDate();
	        	tr.appendChild(td);
			}
			else
			{
	        	td = document.createElement('td');
				td.className = "nonLinkDays";
				td.onclick = function()	{ return false;	};
	        	td.innerHTML = tmpArr.getDate();
	        	if(td.innerHTML != lastDay) tr.appendChild(td);
				lastDay = td.innerHTML;
			}
			dayyd += 60*60*24;
			d++;
	    }
		tbody.appendChild(tr);
		div.appendChild(table);
		
		div.style.visibility = 'visible';
		div.style.display = 'block';
	};
	
	
	var translateMonth = function(m)
	{
		if(lang=='de')
		{
			switch(m)
			{
				case 1:
					return 'Januar';
				break;
				case 2:
					return 'Februar';
				break;
				case 3:
					return 'M&auml;rz'.unescapeHTML();
				break;
				case 4:
					return 'April';
				break;
				case 5:
					return 'Mai';
				break;
				case 6:
					return 'Juni';
				break;
				case 7:
					return 'Juli';
				break;
				case 8:
					return 'August';
				break;
				case 9:
					return 'September';
				break;
				case 10:
					return 'Oktober';
				break;
				case 11:
					return 'November';
				break;
				case 12:
					return 'Dezember';
				break;
			}	
		}
		else
		{
			switch(m)
			{
				case 1:
					return 'January';
				break;
				case 2:
					return 'February';
				break;
				case 3:
					return 'March';
				break;
				case 4:
					return 'April';
				break;
				case 5:
					return 'May';
				break;
				case 6:
					return 'June';
				break;
				case 7:
					return 'July';
				break;
				case 8:
					return 'August';
				break;
				case 9:
					return 'September';
				break;
				case 10:
					return 'October';
				break;
				case 11:
					return 'November';
				break;
				case 12:
					return 'December';
				break;
			}	
		}
	};
	

    div.style.display='block';
    div.style.visibility='visible';
	

	build();
	this.destroy = function()
	{
		div.style.visibility = 'hidden';
		div.style.display = 'none';
	};
}










