// ==========================================================================================
// HISTORY
// Version	Date		Who	What
// 2.8		07.01.02	nst	updated adjustDate: small bugfixes
// 2.7		07.11.01	ul	selectSelecter now accepts defaut values and clears all items that are not in the parameter (trigger od defaultvalue)
// 2.6		02.11.01	ul	checkRadios now accepts default values
//						nst	fixed formclearer: opera compatibility, scrolltop-fix, only text/textarea/pw-fields get focused
// 2.5		01.11.01	sh	added disableField("formname","fieldname",delete) (if delete=true then values will be deleted)
// 2.4		23.10.01	ul	checkboxChecker extended
// 2.3		22.10.01	ul	getIndex() added
// 2.2		13.09.01	sh	formClearer only deletes value if first and last! chars are %
// 2.1		16.08.01 	sh  	changed chekboxChecker to handle values different from 0 and 1
// 2.0		08.08.01 	lp  	function checkLogout
// 1.1		23.07.01 	ul	selectSelecter return selectedIndex and formClearer jumps to the top
// 1.0		13.07.01
// ==========================================================================================

var STANDARD_TIME_PATTERN = "%D.%M.%Y";

// ==========================================================================================


// call after every checkbox that needs to be checked or not according to the state of trigger
// trigger can either be 0 or 1 or false or true
// example for call: <input type=checkbox ....><script>checkboxChecker("%module.criteria%")</script>
function checkboxChecker(trigger,def)
{
	if(trigger.substr(0,1)=='%')
	{
		if(def) document.forms[document.forms.length-1].elements[document.forms[document.forms.length-1].elements.length-1].checked=true;
	 	return;
	}
	document.forms[document.forms.length-1].elements[document.forms[document.forms.length-1].elements.length-1].checked=(document.forms[document.forms.length-1].elements[document.forms[document.forms.length-1].elements.length-1].value==trigger);
}


// returns the index of the form-elements that this function is places behind.
function getIndex()
{
	return document.forms[document.forms.length-1].elements.length-1;
}


// call after every selectbox whitch items need to be selected according to the state of trigger
// trigger can be one or more values (comma-separated). Every item with the same value as on of the triggers will be selected
// example for call: <select ....><script>selectSelecter("%module.criteria%")</script>


function selectSelecter(trigger,defaultvalue)
{

	if(trigger.substr(0,1)=='%')
	{
		if(defaultvalue) trigger=defaultvalue;
		else return 0;
	}

	myselect=document.forms[document.forms.length-1].elements[document.forms[document.forms.length-1].elements.length-1];
	items = trigger.split(",");
	for(j=0;j<myselect.options.length;j++)
	{
		myselect.options[j].selected=false;
	}
	for(i=0;i<items.length;i++)
	{
		for(j=0;j<myselect.options.length;j++)
		{
			if(myselect.options[j].value==items[i])
			{
				myselect.options[j].selected=true;
			}
			

		}

	}
	if(myselect.selectedIndex>=0) return myselect.selectedIndex;
	else return 0;
}

// call after every inputfield whitch property needs to be updates
// example for call: <input ....><script>setProperty("name","gugus")</script>
function setProperty(prop,value)
{
	myfield=document.forms[document.forms.length-1].elements[document.forms[document.forms.length-1].elements.length-1];
	eval("myfield."+prop+"="+value+";");
}

// call after the last radiobutten whitch items need to be selected according to the state of trigger
// trigger must be one of the values of the radio-buttons.
// example for call: <input type="radio" value="pic_ico_graph.gif" name="content.data[type]><script>checkRadios("%module.criteria%")</script>

function checkRadios(trigger,defaultvalue)
{
	if(trigger.substr(0,1)=='%')
	{
		 if(typeof(defaultvalue)!="undefined") trigger=defaultvalue;
		 else return;
	}

	myselect=document.forms[document.forms.length-1].elements[document.forms[document.forms.length-1].elements.length-1];
	myradio = document.forms[document.forms.length-1].elements[myselect.name];
	for(i=0;i<myradio.length;i++)
	{
		if(myradio[i].value==trigger)
		{
			myradio[i].checked=true;
			break;
		}

	}

}


//-----------------------------------------------------------------------------
// formClearer()
//=============================================================================
// Descr: 	Scans all fields of all forms of the current document and clears 
// 			them if value starts AND ends with '%'.
// 
// Insert the following code into your html-file AFTER the </body>-tag:
//	<script>
//	<!--
//	formClearer();
//	if( -1 != navigator.appName.toLowerCase().indexOf("opera") )
//	{	setTimeout( "formClearer();", 500 );	}	// Opera needs this!
//	// -->
//	</script>
//-----------------------------------------------------------------------------
function formClearer()
{
	var i = 0;
	var j = 0;
	for(i=document.forms.length-1;i>=0;i--)
	{
		if(document.forms[i].elements.length > 0)
		{
			for(j=document.forms[i].elements.length-1;j>=0;j--)
			{
				if(	document.forms[i].elements[j].value )
				{
					val = document.forms[i].elements[j].value;
					if(val.search(/^\%([^ ,:;]*)\%$/)>-1)
					{
						document.forms[i].elements[j].value="";
						if ( (
								document.forms[i].elements[j].type=="text" 
								|| document.forms[i].elements[j].type=="textarea" 
								|| document.forms[i].elements[j].type=="password" 
							 )
							&& !document.forms[i].elements[j].disabled)
						{
							document.forms[i].elements[j].focus();
							document.forms[i].elements[j].blur();
						}
					}
				}
			}
		}
	}
	i = 0;
	j = 0;
	while( document.forms[j].elements.length == 0 )
	{	j++;	}
	while( document.forms[j].elements[i] 
			&& ( document.forms[j].elements[i].type != "textarea"
				&& document.forms[j].elements[i].type != "text"
				&& document.forms[j].elements[i].type != "password" ) )
	{	i++;	}
	if( document.forms[j].elements[i] 
		&& ( document.forms[j].elements[i].type == "textarea"
				|| document.forms[j].elements[i].type == "text"
				|| document.forms[j].elements[i].type == "password" ) 
		)
	{	document.forms[j].elements[i].focus();	}
	setTimeout("scrollTo(0,0);", 100);	// scroll to the top of the page
}
// ----------------------------------------------------------------------------







// call after the form element which focus needs to be set
// example for call: <input type=checkbox ....><script>setFocus()</script>
var focusobject=null;

function setFocus()
{
	if(focusobject)
		focusobject.focus();
	else
	{
		if(!document.forms.length) return;
		focusobject=document.forms[document.forms.length-1].elements[document.forms[document.forms.length-1].elements.length-1];
		focusobject.focus();

	}
}


function setInputName(name)
{
	if(!document.forms.length) return;
	myobject=document.forms[document.forms.length-1].elements[document.forms[document.forms.length-1].elements.length-1];
	myobject.name=name;
}

function setInputValue(value)
{
	if(!document.forms.length) return;
	myobject=document.forms[document.forms.length-1].elements[document.forms[document.forms.length-1].elements.length-1];
	myobject.value=value;
}


// color fields in forms
// used styles: "formactive", "formfull", and "formempty"

function colorIt(myform)
{
	if (document.all)
	myform.className = "formactive";
}

function noColor(myform)
{
	if (document.all)
	myform.className = "formfull";
}

function checkField(field)
{
	if (document.all)
	{
		if (field.value.length>1)
			field.className = "formfull";
		else
			field.className = "formempty";
	}
}

// stuff for the menu-bar navigation
// used vars
mOff	= "_off";
mMs	= "_ms";
navExt	= ".gif";
navPath	= "images/";
navName	= "nav_";
itemName = "nav";

function hiLight(number,button,status)
{
	if (window.document.images)
	{
		eval("window.document.nav"+number+".src = navPathCorr+navPath+navName+button+mMs+navExt;");
		window.status = status;
	}
}

function nohiLight(number,button)
{
	if (window.document.images)
	{
		eval("window.document.nav"+number+".src = navPathCorr+navPath+navName+button+mOff+navExt;");
		window.status = "";
	}
}

// confirmation to log out
function checkLogout(msg,dummy)  //some old templates use 2 params
{
	check = confirm(msg);
	if(check != false)
	{
		document.location.href = navPathCorr+"logout.html?SID="+SID;
	}
}

// confirmatioon to delete records
function delRecord(msg)
{
	check = confirm(msg);
	if(check != false)
	{
		alert("okay, delete record");
	}
}

function disableField(formname,inputname,delcont)
{
	myElement=document.forms[formname].elements[inputname];
	if(document.layers)
		myElement.onfocus = doBlurField;
	else
		myElement.disabled = true;
	if (delcont)
		myElement.value = "";
}

function enableField(formname,inputname)
{
	myElement=document.forms[formname].elements[inputname];
	if(document.layers)
		myElement.onfocus = "";
	else
		myElement.disabled = false;
}

function doBlurField()
{
	this.blur();
}

// ------------------------------------------------------------------------------------------
// Time and date function to use with icms and forms
// ------------------------------------------------------------------------------------------

// ==========================================================================================
// INPUT: mysqlTimestamp yyyymmddhhmmss
// pattern : string with the following parameter
// capital letter means with additional 0 before values lower than 10
// %d / %D - day of the month
// %m / %M - month (1 - 12)
// %y / %Y - year format 01 / 2001
// OUTPUT:  string according to pattern
// ------------------------------------------------------------------------------------------
function ts2date(mysqlTs_,pattern_)
{
	if( mysqlTs_.length != 14 )
	{
		alert("Invalid mysqlTimestamp length! (should be 14)");
		return("");
	}
	if( !pattern_ )
	{
		pattern_= STANDARD_TIME_PATTERN;
	}
	output = "";

	nYear 		= mysqlTs_.slice(0, 4);
	nMonth		= mysqlTs_.slice(4, 6);
	nDay		= mysqlTs_.slice(6, 8);
	nHours		= mysqlTs_.slice(8, 10);
	nMinutes	= mysqlTs_.slice(10, 12);
	nSeconds	= mysqlTs_.slice(12, 14);

	nCurrentIndex = pattern_.indexOf("%", 0);
	while( nCurrentIndex != -1)
	{
		param = pattern_.charAt( nCurrentIndex+1 );

		// handle the parameter
		switch( param )
		{
		case 'd':
			output += nDay*1;
			break;
		case 'D':
			output += nDay;
			break;
		case 'm':
			output += nMonth*1;
			break;
		case 'M':
			output += nMonth;
			break;
		case 'y':
			output += nYear.substring(2, 4);
			break;
		case 'Y':
			output += nYear;
			break;
		default:
			alert("Wrong parameter supplied to the ts2date function: %" + param);
		}

		// check for next occurence of "%"
		nLastIndex = nCurrentIndex+2;
		nCurrentIndex = pattern_.indexOf("%", nCurrentIndex+1);

		// fill stuff between parameters
		if( nCurrentIndex != -1 )
		{
			output += pattern_.substring( nLastIndex, nCurrentIndex );
		}
	}

	return(output);
}
// ------------------------------------------------------------------------------------------

// ==========================================================================================
// INPUT:
// date  -> format: [d]d.[m]m.[yy]yy
// time  -> format: true - sets time of the moment (clients time)
//			     [h]h.[m]m.[s]s
// OUTPUT: mysqlTimestamp yyyymmddhhmmss
// ------------------------------------------------------------------------------------------
function date2ts(date_, time_)
{
	output = "";
	// validate the date_ parameter
	date_ = adjustDate(date_, true);

	nYear 		= date_.substr(6, 4);
	nMonth		= date_.substr(3, 2);
	nDay		= date_.substr(0, 2);
	nHours		= 0;
	nMinutes	= 0;
	nSeconds	= 0;

	if( time_ == true )
	{
		// use the current time
		today 		= new Date();
		time_		= adjustTime( today.getHours() + "."
									+ today.getMinutes() + "."
									+ today.getSeconds() );
	}
	else
	{
		// use suplied time (string)
		time_		= adjustTime( time_ );
	}

	nHours 		= time_.substr( 0, 2 );
	nMinutes	= time_.substr( 3, 2 );
	nSeconds	= time_.substr( 6, 2 );

	output = nYear + nMonth + nDay + nHours + nMinutes + nSeconds;

	return(output);
}
// ------------------------------------------------------------------------------------------

// ==========================================================================================
//INPUT: date: format [d]d.[m]m.[yy]yy
//
//OUTPUT: correct date in format d.m.y or dd.mm.yy according to full
// ------------------------------------------------------------------------------------------
function adjustDate(dateString, full, bShowErrMsg_, nAdjustByDays_)
{
	if( !full )
	{
		full = false;
	}
	if( typeof bShowErrMsg_ == 'undefined' )
	{
		bShowErrMsg_ = true;	
	}
	if( typeof nAdjustByDays_ == 'undefined' )
	{
		nAdjustByDays_ = 0;
	}
	splitedDate = dateString.match(/(\d+\.)|(\d+$)/g);
	flag=true;
	if(splitedDate)
	{
		if(splitedDate.length==2)
		{
			var today = new Date();
			splitedDate[2] = today.getYear();
		}
		if(splitedDate.length!=3)
		{
			flag=false;
		}
		else
		{
			for(i=0;i<splitedDate.length;i++)
			{
				splitedDate[i]=splitedDate[i]*1;
			}
		}
	}
	else
	{
		flag= false;
	}
	if(!flag)
	{
		if( bShowErrMsg_ )
		{
			alert("Feld für Datum: Falsches Format.\nBitte das folgende Format verwenden:\nTT.MM.JJJJ");
		}
		today= new Date();
		year = today.getYear();
		if(year < 1000) year+= 1900;

		if( full == true )
		{
			var nDay = today.getDate()+1+nAdjustByDays_;
			var nMonth = today.getMonth()+1;
			if( nDay < 10 )
			{
				nDay = "0" + nDay;
			}
			if( nMonth < 10 )
			{
				nMonth = "0" + nMonth;
			}
			myDate = nDay + "." + nMonth + "." + year;
		}
		else
		{
			myDate = (today.getDate()+1+nAdjustByDays_)+"."+(today.getMonth()+1)+"."+year;
		}
	}
	else
	{
		if(splitedDate[2]<70) splitedDate[2]+=2000;
		myDate = new Date(splitedDate[2],splitedDate[1]-1,splitedDate[0]);
		year =myDate.getYear();
		
		if( (year + "").length == 3 || (year + "").length > 4 || (year + "").length == 0 )
		{
			today = new Date();
			year = today.getYear();
		}
		
		if(year < 1000) year+= 1900;

		if( full == true )
		{
			var nDay = myDate.getDate() + nAdjustByDays_;
			var nMonth = myDate.getMonth()+1;
			if( nDay < 10 )
			{
				nDay = "0" + nDay;
			}
			if( nMonth < 10 )
			{
				nMonth = "0" + nMonth;
			}
			myDate = nDay + "." + nMonth + "." + year;
		}
		else
		{
			var x = myDate.getDate()+nAdjustByDays_;
			myDate = x+"."+(myDate.getMonth()+1)+"."+year;
		}
	}

	return myDate;
}
// ------------------------------------------------------------------------------------------


// ==========================================================================================
//INPUT: time: format [h]h.[m]m.[s]s
//
//OUTPUT: success: 	correct time in format hh.mm.ss
// 		  fail: 	return 00.00.00
// ------------------------------------------------------------------------------------------
function adjustTime(timeString_)
{
	output = "";
	if( !timeString_ )
	{
		return( "00.00.00" );
	}

	nLastIndex 		= 0;
	nCurrentIndex 	= timeString_.indexOf(".", 0);
	// hours:
	Value = timeString_.substring(nLastIndex, nCurrentIndex);
	Value %= 24;
	if( (Value * 1) < 10 )
	{
		Value = "0" + Value;
	}
	output += Value + ".";

	nLastIndex 		= nCurrentIndex;
	nCurrentIndex 	= timeString_.indexOf(".", nLastIndex + 1);
	// minutes:
	Value = timeString_.substring(nLastIndex + 1, nCurrentIndex) + ".";
	Value %= 60;
	if( (Value * 1) < 10 )
	{
		Value = "0" + Value;
	}
	output += Value + ".";

	// seconds:
	Value = timeString_.substring(nCurrentIndex + 1, timeString_.length);
	Value %= 60;
	if( (Value * 1) < 10 )
	{
		Value = "0" + Value;
	}
	output += Value;

	return(output);
}
// ------------------------------------------------------------------------------------------


// ==========================================================================================
//INPUT: datestring (dd.mm.yyyy)
//
//OUTPUT: success: 	string {"Montag", "Dienstag, ... ,"Sonntag"}
// 		  fail: 	return "getWeekDay::ERROR!"
// ------------------------------------------------------------------------------------------
function getWeekDay(dateString)
{
	splitedDate = dateString.match(/(\d+\.)|(\d+$)/g);
	convertedDate = 0;
	result = 0;
	flag=true;
	if(splitedDate)
	{
		if(splitedDate.length!=3)
		{	
			flag=false;
		}
		else
		{
			for(i=0;i<splitedDate.length;i++)
			{
				splitedDate[i]=splitedDate[i]*1;
			}
		}	
	}
	else	
	{
		flag= false;
	}
	if(!flag)
	{
		today= new Date();
		year = today.getYear();
		if(year < 1000) year+= 1900;
		myDate = new Date( year, today.getMonth(), today.getDate(), 12, 00, 00 );
	}
	else
	{	
		if(splitedDate[2]<70) splitedDate[2]+=2000;
		myDate = new Date(splitedDate[2],splitedDate[1]-1,splitedDate[0]);
		year =myDate.getYear();
		if(year < 1000) year+= 1900;
		myDate = new Date( year, myDate.getMonth(), myDate.getDate(), 12, 00, 00 );
	}
	switch ( myDate.getDay() )
	{		
	case 0:
		return "Sonntag";
	case 1:
		return "Montag";
	case 2:
		return "Dienstag";
	case 3:
		return "Mittwoch";
	case 4:
		return "Donnerstag";
	case 5:
		return "Freitag";
	case 6:
		return "Samstag";
	default:
		alert("getWeekDay::ERROR!");
		return "getWeekDay::ERROR!";
		break;
	}
}
// ------------------------------------------------------------------------------------------


