function advancedOptions(action){

	if(action=='hidden')
	{
		document.getElementById('moreOptionsButton').style.display='block';
		document.getElementById('fewerOptionsButton').style.display='none';
		document.getElementById('advancedOptions').style.display='none';
		document.getElementById('advancedOptionsMeansOfTransport').style.display='none';
		document.getElementById('advancedOptionsBike').style.display='none';
		document.getElementById('advancedOptionsChanges').style.display='none';
		document.forms[0].itdLPxx_enableMobilityRestrictionOptionsWithButton.value='0';
		
		if (viaInMobilityRestrictionOptions !== 'true' || 
			viaFlag === 'true' || 
			(document.forms[0].place_via && document.forms[0].place_via.value !== '') || 
			(document.forms[0].name_via && document.forms[0].name_via.value !== '')) {
			return;
		}
		
		if(document.getElementById('viaTable')){
			if(document.forms[0].nameState_via.value=='empty'){
				document.getElementById('viaTable').style.display='none';
				document.getElementById('viaTableSpace').style.display='none';
			}
		}
	}
	else
	{
		document.getElementById('moreOptionsButton').style.display='none';
		document.getElementById('fewerOptionsButton').style.display='';
		document.getElementById('advancedOptions').style.display='';
		document.getElementById('advancedOptionsMeansOfTransport').style.display='';
		document.getElementById('advancedOptionsBike').style.display='';
		document.getElementById('advancedOptionsChanges').style.display='';
		document.forms[0].itdLPxx_enableMobilityRestrictionOptionsWithButton.value='1'
		
		if (viaInMobilityRestrictionOptions !== 'true' || 
			viaFlag === 'true' || 
			(document.forms[0].place_via && document.forms[0].place_via.value !== '') || 
			(document.forms[0].name_via && document.forms[0].name_via.value !== '')) {
			return;
		}
		
		if(document.getElementById('viaTable')){
			document.getElementById('viaTable').style.display='';
			document.getElementById('viaTableSpace').style.display='';
		}
	}

}


function advancedPSOptions(action){

	if(action=='hidden')
	{
		document.getElementById('moreOptionsButton').style.display='block';
		document.getElementById('fewerOptionsButton').style.display='none';
		document.getElementById('advancedOptions').style.display='none';
		document.forms[0].itdLPxx_enablePSOptions.value='0';
	}
	else
	{
		document.getElementById('moreOptionsButton').style.display='none';
		document.getElementById('fewerOptionsButton').style.display='';
		document.getElementById('advancedOptions').style.display='';
		document.forms[0].itdLPxx_enablePSOptions.value='1'
	
	}

}




/* Karte anzeigen */
function showMap(mapid)
{

		if(document.getElementById("mapHolder_" + mapid)){
			document.getElementById("mapHolder_" + mapid).style.display="block";
		}
		
		if(document.getElementById("mapButton_" + mapid)){
			document.getElementById("mapButton_" + mapid).style.display="none";
		}
		
		if(document.getElementById("itdLPxx_mapState_" + mapid)){
			document.getElementById("itdLPxx_mapState_" + mapid).value="open";
		}
		
}


function hideMap(mapid)
{

		if(document.getElementById("mapHolder_" + mapid)){
			document.getElementById("mapHolder_" + mapid).style.display="none";
		}
		
		if(document.getElementById("mapButton_" + mapid)){
			document.getElementById("mapButton_" + mapid).style.display="block";
		}
		
		if(document.getElementById("itdLPxx_mapState_" + mapid)){
			document.getElementById("itdLPxx_mapState_" + mapid).value="close";
		}
};


function addInfoFilter(obj, filter){
	
		if(obj==true){
			document.forms[0].filterSourceSystemName.disabled=false;
			document.forms[0].itdLPxx_filterSourceSystemName.value= filter;
			document.forms[0].filterSourceSystemName.value= filter;
			document.forms[0].filterShowPlaceList.value=1;
			document.forms[0].submit();
		}
		else{
			document.forms[0].filterSourceSystemName.disabled=true;
			document.forms[0].itdLPxx_filterSourceSystemName.value= filter;
			document.forms[0].filterSourceSystemName.value= '';
			document.forms[0].filterShowPlaceList.value=1;
			document.forms[0].submit();
		}

};





/* *****************  */
/* **** calendar ***  */
/* *****************  */

Months = new Array(12);
Months[0] = "Januar";
Months[1] = "Februar";
Months[2] = "Marz";
Months[3] = "April";
Months[4] = "Mai";
Months[5] = "Juni";
Months[6] = "Juli";
Months[7] = "August";
Months[8] = "September";
Months[9] = "Oktober";
Months[10] = "November";
Months[11] = "Dezember";


function PadSpaces(TheString)
{
        var Spaces = "             ";
        len = Math.round((9 - TheString.length)/2);

        return Spaces.substring(0,len) + TheString;
}

function NumLeapYears(StartYear, EndYear)
{
        var LeapYears, i;

        if (EndYear >= StartYear){
                for(LeapYears = 0; StartYear <= EndYear; StartYear++)
                if (IsLeapYear(StartYear)) LeapYears++;
        }else{
        for(LeapYears = 0; EndYear <= StartYear; EndYear++)
                if (IsLeapYear(EndYear)) LeapYears++;
        }
        return LeapYears;
}

function IsLeapYear(Year)
{
        if(Math.round(Year/4) == Year/4){
                if(Math.round(Year/100) == Year/100){
                        if(Math.round(Year/400) == Year/400)
                                return true;
                        else return false;
                }else return true;
        }
        return false;
}

function Trim(TheString)
{
        var len;

        len = TheString.length;
        while(TheString.substring(0,1) == " "){ //trim left
                TheString = TheString.substring(1, len);
                len = TheString.length;
        }

        while(TheString.substring(len-1, len) == " "){ //trim right
                TheString = TheString.substring(0, len-1);
                len = TheString.length;
        }
        return TheString;
}

function DetermineMonthIdx()
{
        var i, month, month_s, len;


        month = Trim(document.getElementById('hiddenMonth').value);
        len = month.length;

        for( i = 0; i <12; i++){
                month_s = Months[i].substring(0,len);
                if (month_s.toUpperCase() == month.toUpperCase())
                        return (i);
        }
        return -1;
}


function FindNewYearStartingDay(Year)
{
        var LeapYears, Years, Day;

        LeapYears = NumLeapYears(1995, Year);

        if  (Year >=1995)
                Years = (Year -1995)+LeapYears;
        else    Years = (Year -1995)-LeapYears;

        if  (Year >=1995)
                Day = Math.round(((Years/7 - Math.floor(Years/7))*7)+.1);
        else    Day = Math.round(((Years/7 -  Math.ceil(Years/7))*7)-.1);

        if (Year >=1995){
                if(IsLeapYear(Year)) Day--;
        }else Day += 7;

        if(Day < 0) Day = 6;
        if(Day > 6) Day = 0;
        return Day;
}

function FindNumDaysInMonth(Year, Month)
{
        if(Month == 1){
                if(IsLeapYear(Year)) return 29;
                else return 28;
        }else{
                if(Month >6) Month++;
                if(Month/2 == Math.round(Month/2))  return 31;
        }
 return 30;
}

function FindMonthStartDay(NewYearDay, Year, Month)
{
        var MonthStartDay;

        AddArray = new Array(12);

        AddArray[0]=0;AddArray[1]=3;AddArray[2]=3;AddArray[3]=6;
        AddArray[4]=1;AddArray[5]=4;AddArray[6]=6;AddArray[7]=2;
        AddArray[8]=5;AddArray[9]=0;AddArray[10]=3;AddArray[11]=5;

        MonthStartDay = NewYearDay + AddArray[Month];
        if(IsLeapYear(Year)  && (Month ) > 1) MonthStartDay ++;

        if (MonthStartDay > 6) MonthStartDay -= 7;

        return MonthStartDay;
}

function  FillCalendar()
{

        var Year, Month, Midx, NewYearDay, MonthStartDay;
        var NumDaysInMonth, i, t, x;
        

       	Year = parseFloat(document.getElementById('hiddenYear').value);
        Month = document.getElementById('hiddenMonth').value;

        Midx  =  DetermineMonthIdx();
        if (Midx == -1){
                alert ("Can't recognize that month");
                return;
        }

        NewYearDay = FindNewYearStartingDay(Year);
        MonthStartDay = FindMonthStartDay(NewYearDay, Year,  Midx);
        NumDaysInMonth = FindNumDaysInMonth(Year, Midx);

        var allMyPrettyDivs = document.getElementsByTagName('div');
       
       
		var date=new Date(); 
		var dd=date.getDate(); 
		var mm=date.getMonth(); 
		var yy=date.getYear(); 
		var weekday=date.getDay(); 
		
		var dayLast=date.getDate(); 
		var monthLast=date.getMonth(); 
		var yearLast=date.getYear(); 
		
		
		if(date.getDate() +21 > NumDaysInMonth){
			dayLast = (dd + 21) - FindNumDaysInMonth(Year, Midx -1);
			monthLast = mm +1 
		}
		else{
			dayLast = date.getDate() +21;
		}

		
		if (yy < 999){
			 yy += 1900;
			 yearLast+= 1900;
		 }


        for(i = 0;  i < allMyPrettyDivs.length;  i++){

			if(i==0){
				x = 0;
			}

			if(allMyPrettyDivs[i].className == "row11" || allMyPrettyDivs[i].className == "row11before" || allMyPrettyDivs[i].className == "withoutDay" || allMyPrettyDivs[i].className == "row11today"){

				t = x + 2 - MonthStartDay;

				if ( t >= 1  &&  t <= NumDaysInMonth)
				{
						allMyPrettyDivs[i].innerHTML = t;
						
						if(dd == t && mm ==  Midx && yy == Year){
							allMyPrettyDivs[i].className = "row11today";
							
							
							allMyPrettyDivs[i].onclick = function (e) {

							var monthNumber = Midx + 1; 

							var dayDate = this.innerHTML;
							var monthDate = Midx + 1;

							if(this.innerHTML.length==1)dayDate ='0' + dayDate;

							if(monthDate < 10)monthDate ='0' + monthDate;


							/* month + day + year */
							var yearString = Year.toString();
							document.forms[0].itdDateDay.value = dayDate;
							document.forms[0].itdDateMonth.value = monthDate;
							document.forms[0].itdDateYear.value = yearString.substr(2,3);
							document.getElementById('calendar-border').style.display='none';
							};
							
							
						}
						else if(dd > t && mm ==  Midx && yy == Year || mm >  Midx && yy == Year || yy > Year){
							allMyPrettyDivs[i].className = "row11before";
						} 
						
					/*	else if(dayLast < t && monthLast ==  Midx && yearLast == Year || monthLast <  Midx && yearLast == Year || yearLast < Year){
							allMyPrettyDivs[i].className = "row11before";
						}  */

						
						else{
							allMyPrettyDivs[i].className = "row11";
							
							
							allMyPrettyDivs[i].onclick = function (e) {
	

							

							var monthNumber = Midx + 1; 

							var dayDate = this.innerHTML;
							var monthDate = Midx + 1;
							
							var weekday=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday", "Sunday");
							
							var weekdayNumber = this.id.split('-');

							if(this.innerHTML.length==1)dayDate ='0' + dayDate;

							if(monthDate < 10)monthDate ='0' + monthDate;


							/* month + day + year */
							
							//document.getElementById('weekday').innerHTML = weekday[weekdayNumber[1] -1];
							
							var yearString = Year.toString()

							//document.getElementById('monthDayYearField').value = monthNumber + '/' + this.innerHTML + '/' + Year;
							document.forms[0].itdDateDay.value = dayDate;
							document.forms[0].itdDateMonth.value = monthDate;
							document.forms[0].itdDateYear.value = yearString.substr(2,3);

							document.getElementById('calendar-border').style.display='none';
							
							};
							
						} 


				
						
				}
				else {
					allMyPrettyDivs[i].innerHTML= " ";
					allMyPrettyDivs[i].className = "withoutDay";
				}
				x = x+1;
		 	}

        }
}




function IncDecYear(step)
{
	val =0;

	if(DetermineMonthIdx()=='11' && step=='next'){
		val = 1;
	}

	if(DetermineMonthIdx()=='0' && step=='prev'){
		val = -1;
	}

        var valNum = parseInt(val);
        var valNum2 = parseInt(document.getElementById('hiddenYear').value)
        document.getElementById('hiddenYear').value = valNum2 + valNum;
        document.getElementById('year').innerHTML = valNum2 + valNum;

        FillCalendar()
        
        
        
     if(step=='prev'){
    	 IncDecMonth(-1);
     }
     else{
     	IncDecMonth(1);
     }
}





function IncDecMonth(val)
{
        var valNum = parseInt(val);
        var Midx  =  DetermineMonthIdx();
        
        var MonthSave = DetermineMonthIdx();

        Midx += valNum;
        if(Midx > 11) Midx = 0;
        if(Midx < 0)  Midx = 11;


        document.getElementById('hiddenMonth').value = PadSpaces(Months[Midx]);
        document.getElementById('month').innerHTML = PadSpaces(Months[Midx]);

        FillCalendar()
}


function getStringLengthOfPlace(usage)

{
	if(document.getElementsByName("place_" + usage)[0]){
	var placeValue = document.getElementsByName("place_" + usage)[0].value;
	var placeValueLength = placeValue.length;

	return placeValueLength;
	}
};


function callCheckPlaceOfOdv(errorMessage)
{

	var originPlaceStringLength = getStringLengthOfPlace("origin");
	var destinationPlaceStringLength = getStringLengthOfPlace("destination");
	
	var stateOrigin = document.forms[0].placeState_origin.value;
	var stateDestination = document.forms[0].placeState_destination.value;

	if (!(originPlaceStringLength > 0) && stateOrigin!='list' && stateOrigin!='identified' && stateDestination!='list' && stateDestination!='identified')
	{
		
		messagePlaceEmpty(errorMessage);
		
	}
	else if (!(destinationPlaceStringLength > 0) && stateOrigin!='list' && stateOrigin!='identified' && stateDestination!='list' && stateDestination!='identified')
	{

		messagePlaceEmpty(errorMessage);
		
	}
	else{
		document.forms[0].submit();
	}

};

function messagePlaceEmpty(errorMessage)
{
	alert(errorMessage);
	return false;
};

/*
    SL 090703
    Identifizierte ODV-Koordinate nach changeRequest/tripGoOn
    erneut mit typeInfo coord verschicken (und identischem nameValue/placeValue),
    wenn keines der beiden Eingabefelder verändert wurde.
    onsubmit auf form triggert reSubmitCoord.
    onchange-Handler auf den Eigabefeldern triggern preventReSubmitCoord.
*/
var coordsNotToResubmit = {};

function reSubmitCoord(usage) { //arg type is array

    var i, f = document.forms[0];
    
    for (i=0; i<usage.length; i++) {
        if (typeof coordsNotToResubmit[usage[i]] === 'undefined') {
            f['typeInfo_' + usage[i]].value = 'coord';
        }
    }
    return true;
}

function preventReSubmitCoord(usage) {
    coordsNotToResubmit[usage] = true;
}
