

/**
 * A shortcut for document.getElementById()
 */
function e(id){
	return document.getElementById(id);
}

function $(id){
	return document.getElementById(id);
}
	
/**
 * AJAX part
 */

// Global HTTP client varialbe
var xmlhttp;
var elementId;
var altURL;
var inProgress;
var lastRequest;

var pbRuning = false;
var pbColor;
var pbTimeout;
var pbCurrentStep;
var pbSteps;

var endCB;

function handleAJAXCallTransparantley 
	(
		AJAXUrl,					// url with AJAX aware server code
		AlternativeURL,		// in case AJAX fails (e.g. no browser support) we will fallbakc to this url.
		placeResultTo,			// id of element where result HTML will be posted to
		processingFunction,	// code that will be evaluated after request is submited (e.g. to show progress bar)
		finishFunction			// code that will be evaluated after response is recived.
	)
{
	/*alert("handleAJAXCallTasnparatley (AJAXUrl=" +AJAXUrl + "\n AlternativeURL=" 
			+AlternativeURL + "\n placeResultTo="+placeResultTo  
			+"\n processingFunction=" + processingFunction
			+"\n finishFunction=" + finishFunction
	)*/

	if (	 inProgress)	 {
		alert("Bitte haben Sie ein wenig Geduld. Ihre Abfrage läuft...");
		return;
	}
	
	altURL = AlternativeURL;
	elementId = placeResultTo;
	endCB = finishFunction;
	// code for Mozilla, etc.
	if (window.XMLHttpRequest)
	  {
	  xmlhttp=new XMLHttpRequest()
	  xmlhttp.onreadystatechange=xmlhttpChange
	  xmlhttp.open("GET",AJAXUrl,true)
	  xmlhttp.send(null);
	  eval(processingFunction);
	  inProgress = true;
	}
	// code for IE
	else if (window.ActiveXObject)
	  {
	  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
	    if (xmlhttp)
	    {
	    xmlhttp.onreadystatechange=xmlhttpChange
	    xmlhttp.open("GET",AJAXUrl,true)
	    xmlhttp.send();
	    eval(processingFunction);
	 	inProgress = true;
	    }
	  }
	 //Fallback to "normal" way
	else {
		document.location.href = AlternativeURL;
	}
	return false;
}

function xmlhttpChange()
{
// if xmlhttp shows "loaded"
if (xmlhttp.readyState==4)
  {
  eval(endCB);
  inProgress = false;
  // if "OK"
  if (xmlhttp.status==200)
    {
		document.getElementById(elementId).innerHTML = xmlhttp.responseText;
		if (document.location.href.indexOf("#") == -1) {
			document.location.href=document.location.href+"#$forceReload";
		} else if (document.location.href.indexOf("$forceReload") == -1) {
			document.location.href=document.location.href+"$forceReload";
		}
			
    }
  else
    {
		document.location.href = altURL;
    }
  }
 
}

	/**
	 * Progress Bar Implementation
	 */
	function startProgressBar
		(
			typicalTimeInSeconds,
			numberOfSteps,
			color
		)
	{
		pbColor = color;
		pbCurrentStep = 0;
		pbSteps = numberOfSteps;
		pbTimeout = (typicalTimeInSeconds * 1000) / numberOfSteps;
		pbRuning = true;
		makeProgress();
		document.body.style.cursor="wait";
	}
	
	function stopProgressBar() {
		pbRuning = false;
		document.body.style.cursor="auto";
		
	}
	
	function makeProgress(){
		pbCurrentStep++;
		if (pbCurrentStep > pbSteps) {
			pbCurrentStep = 1;
		}
		
		
		

		
		/*if (document.getElementById("ossi_AJAX_PB"))
		{ 
			document.getElementById("ossi_AJAX_PB").style.width = (pbCurrentStep / pbSteps) * 100 + "%";
		}*/
		if (pbRuning) {
				document.getElementById(elementId).innerHTML = "<span style='	background-color:" 
					+ pbColor 
					+ "; width:" + (pbCurrentStep / pbSteps) * 100 + "%;>&nbsp;'"
					+"</span>";
				
			setTimeout('makeProgress()',pbTimeout);
		}
	}
	
/**
 * end of AJAX part
 */

	//global const
	var image_root = "/oss/img/";
	var style_root = "/oss/style/";
	var js_root = "/oss/js/";
	var duration = 14;	
	

function showLayer(name){
	initCalendar(name);
}	


function bookingCookieCheck(newAdultFirstName,newAdultLastName,newAdultBirthday,newDepartureDate,newProduct,newDestination, checkCookie)
{
	var newCookieString = newAdultFirstName 
							+ '|' + newAdultLastName 
							+ '|' + newAdultBirthday 
							+ '|' + newDepartureDate
							+ '|' + newProduct
							+ '|' + newDestination;

	var existingCookieString = "";
	//alert("newCookieString "+ newCookieString);
	
	var cookies = document.cookie;	
	
	if (document.cookie != null)
	{
		var cookieArray = cookies.split(";");
		
		for (var i=0; i<cookieArray.length; i++) 
		{
			var c = cookieArray[i].split("=");
 			if (c[0] == " bookingInfo" || c[0] == "bookingInfo")
 			{
 				existingCookieString = c[1];//.substring(0, c[1].length-1);
				//alert("cookie: "+existingCookieString);
				break;
			}
		}
	}
	
	if (checkCookie === true) {
		if (existingCookieString != null && existingCookieString.length>0 && existingCookieString==newCookieString)
		{
			//alert("sie haben heute schon mit diesen daten gebucht!");		
			return false;
		}
		else 
		{	
			//alert("Setze Cookie");	
			var a = new Date();
			a = new Date(a.getTime() +1000*60*60*24);
			document.cookie = 'bookingInfo='+newCookieString+'; expires='+a.toGMTString()+';';
			return true;
		}
	}
	else 
	{
		return true;
	}
	return false;
}


/**
 * Cehcks input for searhc forms
 */
function checkInput(vForm){

	//If no hotel we could searhc for the same date.
	
	var includeHotel = false;
	var includeFlight = false;
	
	
	if(vForm.hotelSelected && vForm.hotelSelected.checked){
		includeHotel = true;
	}
	if(vForm.flightSelected && vForm.flightSelected.checked){
		includeFlight = true;
	}

	if(vForm.carSelected && vForm.carSelected.checked){
		if ( ! (includeHotel || includeFlight) ) {
				alert("Bitte wählen Sie eine weitere Leistung (Flug oder Hotel) aus.");
				return false;
		}
	} else if (vForm.carSelected){
			if ( ! (includeHotel || includeFlight) ) {
				alert("Bitte wählen Sie Ihr gewünschtes Produkt aus.");
				return false;
			}
	}
	
	
	//destination (dp)
	if(vForm.destName){
		if(vForm.destName.value==""){
			alert("Bitte ein Reiseziel angeben!");
			return false;
		}
	}
	
	//departures
	if(vForm.depAirport){
		if(vForm.depAirport.value==""){
			alert("Bitte einen Abflughafen angeben!");
			return false;
		}
	}
	
	
	//date check
	if(!checkDepartureReturnTwo(vForm.depDate.value,vForm.retDate.value, includeHotel)) {
		alert("Das Abflugdatum muss vor dem Rückflugdatum liegen!");
		return false;
	}		
	//duration
	if(vForm.duration && vForm.duration.value!=''){
		if(!durationMatches(vForm.depDate.value,vForm.retDate.value,vForm.duration.value)){
			alert('Die Reisedauer liegt nicht innerhalb des gewählten Zeitraums für Abflug und Rückflug. Bitte passen Sie die Daten an!');
			return false;
		}
	}
	//room allocation (dp)
	if(vForm.roomCount && !checkRoomAllocation()){
		alert("Die Summe der Erwachsenen in der Zimmerzuordnung stimmt nicht mit der Anzahl der reisenden Erwachsenen überein!");
		return false;	
	}
	//services count (dp)
	
	var servCount = 0;
	var dp = false;
	var flightSelected = false;
	
	if (vForm.hotelSelected){
		dp = true;
		if (vForm.hotelSelected.checked){
			servCount = servCount +1;
		}
	}	
	if (vForm.carSelected){
		dp = true;
		if (vForm.carSelected.checked){
			servCount = servCount +1;
		}
	}	
	if (vForm.flightSelected){
		dp = true;
		if (vForm.flightSelected.checked){
			flightSelected = true;
			servCount = servCount +1;
		} else {
			servCount = 0;
		}
	}
	var hotelSelected = false;
	if (vForm.hotelSelected){
		dp = true;
		if (vForm.hotelSelected.checked){
			hotelSelected = true;
		}
	}
	
	var railSelected = false;
	if (vForm.railSelected) {
		railSelected = vForm.railSelected.checked || vForm.railSelected.value == "on";
	}
	
	if (dpCheck && dp && ((!flightSelected || !hotelSelected) && !railSelected)){
		alert("Bitte mind. 2 Leistungen (Flug+Hotel od. Flug) wahlen!");
		return false;
	}	
	return true;
}

function updateRoomAllocation(src){//src:0-initialization,1-adult combo,2-kid combos,3 room count combo
	if (!document.getElementsByName('adultsInRoom')[0]){ //quick hack to save us fomr JS error if hotel part is missing e.g.  Fly-n-Drive
		return;
	}
	var adultAmount = parseInt(document.getElementById('adultAmount').value,10);
	var selAdults = document.getElementsByName('adultsInRoom');
	var roomCount;
	if (src == 3){
		roomCount = parseInt(document.getElementById('roomCount').value,10);
	} else {
		roomCount=Math.ceil(adultAmount/2);
		document.getElementById('roomCount').value = roomCount;
	}
	// 1 or mores combination lines	
	if(src<=1){//adult combo or init
		initSel(document.getElementById('roomCount'),1,adultAmount,roomCount);
	} 
	var adultsLeft = adultAmount;
	var adultsInRoom = Math.ceil(adultAmount/roomCount);
	for (var i=0; i<=8; i++){
		if (adultsLeft > 0){
			if (adultsLeft >=adultsInRoom){
				initSel(selAdults[i],1,parseInt(adultAmount,10),adultsInRoom);
				adultsLeft = adultsLeft-adultsInRoom;
			} else {
				initSel(selAdults[i],1,parseInt(adultAmount,10),adultsLeft);
				adultsLeft = 0;
			}
		}
	}
	
	for(var i=1;i<=8;i++){
		if(i<=roomCount) document.getElementById('room'+i).style.display='';
		else document.getElementById('room'+i).style.display='none';
	}

	updateKidSelection(1,document.getElementById('kid1Age'),src);
	updateKidSelection(2,document.getElementById('kid2Age'),src);
	updateKidSelection(3,document.getElementById('kid3Age'),src);

}

	function disableToolBars(){
	}
	
	/**
	 * Opens admin window
  	 */
	function openAdmin(w, url){
		if (window.parent && window.parent.brandingWindow){
			//Gets admin window from the parent frame - normal flow
			adminWindow = window.parent.brandingWindow;
		} else {
			//Popup case
			adminWindow = window.opener.parent.brandingWindow;
		}
		
		if (adminWindow.top){
			adminWindow.top.close();
		}
		adminWindow = window.open(url);
		
		if (window.parent && window.parent.brandingWindow){
			window.parent.brandingWindow =adminWindow;
		} else {
			window.opener.parent.brandingWindow =adminWindow;
		}
		
	}
		
	//format number
	function formatNumber(vNumber, laenge, sep, th_sep ) {
	
		var pre = "";
		if(vNumber < 0){
			pre = "-";
			vNumber *= (-1)
		}
		vNumber = Math.round( vNumber * Math.pow(10, laenge) ) / Math.pow(10, laenge);
		str_vNumber = vNumber+"";
		arr_int = str_vNumber.split(".");
		if(!arr_int[0]) arr_int[0] = "0";
		if(!arr_int[1]) arr_int[1] = "";
		if(arr_int[1].length < laenge){
			nachkomma = arr_int[1];
			for(i=arr_int[1].length+1; i <= laenge; i++){	nachkomma += "0";	}
			arr_int[1] = nachkomma;
		}
		if(th_sep != "" && arr_int[0].length > 3){
			Begriff = arr_int[0];
			arr_int[0] = "";
			for(j = 3; j < Begriff.length ; j+=3){
				Extrakt = Begriff.slice(Begriff.length - j, Begriff.length - j + 3);
				arr_int[0] = th_sep + Extrakt +  arr_int[0] + "";
			}
			str_first = Begriff.substr(0, (Begriff.length % 3 == 0)?3:(Begriff.length % 3));
			arr_int[0] = str_first + arr_int[0];
		}
		return pre+arr_int[0]+sep+arr_int[1];
	}
	
	//validate date
	function checkDatum (feld) {
		
	   var Monat = new  Array("01","02","03","04","05","06","07","08","09","10","11","12");
	   var Tag = new  Array("00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31");
	   var datum = feld.value
	  
	   if (!datum) return false;
	   datum=datum.toString();
	
	   //Aufspaltung des Datums
	   datum=datum.split(".");
	   if (datum.length!=3) return false;
	   //Entfernung der fuehrenden Nullen und Anpassung des Monats
	   datum[0]=parseInt(datum[0],10);
	   datum[1]=parseInt(datum[1],10)-1;
	   //Behandlung Jahr nur zweistellig
	   if (datum[2].length!=4) return false;
	   var kontrolldatum=new Date(datum[2],datum[1],datum[0]);
	   //Vergleich, ob das eingegebene Datum gleich dem JS-Datum ist
	   if (kontrolldatum.getDate()==datum[0] && kontrolldatum.getMonth()==datum[1] && kontrolldatum.getFullYear()==datum[2]) {
	       feld.value = Tag[kontrolldatum.getDate()]+"."+Monat[kontrolldatum.getMonth()]+"."+datum[2];	
	       return true; 
	   }
	   else {
		feld.focus();
		return false;
	   }
	
	}	

	//validate time
	function checkTime (field){
		if(field){
			var regExp = /^([0][0-9]|[1][0-9]|[2][0-3])((:[0-5][0-9])|([0-5][0-9]))?$/;
			if (regExp.test(field.value)){
				if(field.value.length==2){
					field.value = field.value+":00";	
				}				
				if(field.value.substr(2,1)!=":"){
					field.value = field.value.substr(0,2)+":"+field.value.substr(2,2);
				}										
				return true;			
			}else{
				return false;
			}	
		}
	}
	
	function toggleBlinkerBool(name, flag){
		if(flag){
			eval("document.images."+name+".style.display='none'");	
		}else{
			eval("document.images."+name+".style.display='block'");
		}
	}
	
	function toggleBlinker(name, chk){
		toggleBlinkerBool(name, chk.checked);
	}
	
	function toggleRB(rbNo) {	
		var x;	
		eval("x=document.oss.insuranceVal"+rbNo+".value");	
		if(x==1){
			eval("document.oss.insurance"+rbNo+".checked=true");
			eval("document.oss.insuranceVal"+rbNo+".value=0");
			document.oss.noInsurance.checked=false;
			document.oss.noInsuranceVal.value=1;		
		} else{
			eval("document.oss.insurance"+rbNo+".checked=false");
			eval("document.oss.insuranceVal"+rbNo+".value=1");		
		}	
		//select 'no insurance' if nothing checked	
		document.oss.noInsurance.checked=true;
		document.oss.noInsuranceVal.value=0;							
		for ( var i = 0; i < parseInt(document.oss.insCount.value,10); i++){
			if (i != rbNo){
				eval("document.oss.insurance"+i+".checked=false");
				eval("document.oss.insuranceVal"+i+".value=1");
			}
			if (eval("document.oss.insurance"+i+".checked")==true){
				document.oss.noInsurance.checked=false;
				document.oss.noInsuranceVal.value=1;
				cb = document.getElementById("chkAgbIns");
				if (cb.checked) {
					toggleBlinkerBool('blinkAgbIns',true);
			 	} else {
				 	toggleBlinkerBool('blinkAgbIns',false);
			 	}
			}
				
		}		
	}
	
	function clearRB() {	
		for ( var i = 0; i < parseInt(document.oss.insCount.value,10); i++){
			eval("document.oss.insurance"+i+".checked=false");
			eval("document.oss.insuranceVal"+i+".value=1");
		}		
	}
	
	//package info
	function packageInfo(link) {			
	    window.open(link, "hotel", "height=720,Width=700,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=no,directories=no,status=no,screenX=50,screenY=50");
	    return false;	
	}
	
	//hotel info
	function hotel(link) {			
	    var openWindow = window.open(link, "hotel", "height=720,Width=665,toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no,directories=no,status=no,screenX=50,screenY=50");
	    openWindow.focus();
	    return false;	
	}

	function hotelMap(lat, lon) {
		return pop("hotel_map.do?lat="+lat+"&lon="+lon,"hotel",600, 660)			
	}
		
	//car info
	function car(head, pu_id, do_id, sup_id, img, group, name, price){					
		var carlink="/servlet/redirect?url="+escape("http://www.holidayautos.de/prices/bookinfo.asp?Head="+escape(head)+"&Style=61382.css&TakeOverStationID="+pu_id+"&DropOffStationID="+do_id+"&Supplier="+sup_id+"&CarImi="+escape(img)+"&Car="+escape(group+"?"+name+"?"+price));
		window.open(carlink, "infos", "height=500,width=400,toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no,directories=no,status=no,left=50,top=50");		
	}

	function car2(head, pu_id, do_id, sup_id, img, group, name, price){					
		var carlink="/servlet/redirect?url="+escape("http://www.holidayautos.de/prices/bookinfo.asp?Head="+escape(head)+"&Style=61382.css&TakeOverStationID="+pu_id+"&DropOffStationID="+do_id+"&Supplier="+sup_id+"&CarImi="+escape(img)+"&Car="+escape(group+"?"+name+"?"+price));
		window.open(carlink, "infos", "height=500,width=400,toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no,directories=no,status=no,left=50,top=50");		
	}
	
	function carFTI(v, f, t1, s1, t2, s2){					
		var carlink="/servlet/redirect?url="+escape("http://www.drivefti.de/start.jsp?benum=131566&v="+v+"&f="+f+"&t1="+t1+"&s1="+s1+"&t2="+t2+"&s2="+s2);
		window.open(carlink, "infos", "height=700,width=630,toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no,directories=no,status=no,left=50,top=50");		
	}	

	function pop(link, name, width, height){
	    window.open(link, name, "height="+height+",Width="+width+",toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no,directories=no,status=no,screenX=50,screenY=50");
	    return false;		
	}	
	
	//flight info
	function flight(link){
	    window.open(link, "flight", "height=630,Width=630,toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no,directories=no,status=no,screenX=50,screenY=50");
	    return false;		
	}	

	function flightH(link, height){
	    window.open(link, "flight", "height=" +height+ ",Width=630,toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no,directories=no,status=no,screenX=50,screenY=50");
	    return false;		
	}	

	
	//CVC info
	function cvc(link){
	    window.open(link, "flight", "height=400,Width=630,toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no,directories=no,status=no,screenX=50,screenY=50");
	    return false;		
	}		
	
	//
	// calendar functions
	//
	
	function startUpExistingCalendar(stDate, formName, dd1, dm1, dd2, dm2, dd1Value,
										dm1Value, dd2Value, dm2Value, cBgColor, arrowrImg,
										arrowlImg, weekDays, wClose){
		if(N4)return;
		if(!document.all)document.all=document.getElementsByTagName("*");
		calForm=document.forms[formName];
		dropDay1=calForm[dd1];dropMonth1=calForm[dm1];
		dropDay2=calForm[dd2];dropMonth2=calForm[dm2];
		calBgColor = cBgColor;
		arrowr_img = arrowrImg;
		arrowl_img = arrowlImg;
		week_days = weekDays;
		window_close = wClose;
	
		calendar=new LayerFrame('cIframe');
		stPos=currpos=0;
		
		//initDate=stDate.split('/');
		initDay=stDate.getDate();
		initMonth=stDate.getMonth()+1
		initYear=stDate.getFullYear();
		endDate=stDate.getDate();
		endDay =stDate.getDate();
		numMonths=12;
		
		if(dropMonth1)setDropdowns(parseInt(dd1Value,10),parseInt(dm1Value,10),1);
		if(dropMonth2)setDropdowns(parseInt(dd2Value,10),parseInt(dm2Value,10),2);
	}
	
	function setCalendar(buttonNo){
		bPressed=true;
		currButtonNo=buttonNo;
		var ops=eval('dropMonth'+buttonNo);
		for(i=0;i<ops.length;i++){
			var opVal=ops.options[i].value;
			monthNames[opVal]=ops.options[i].text;
		}
	
		var currMonth=getChronMonth(eval('dropMonth'+buttonNo).value*1);
		currpos=calHeight*currMonth;
	
		getCalendarHTML();
		var cIframe=frames['cIframe'];
		cIframe.document.write(calendarHTML);
		cIframe.document.close();
	}
	
	function showCalendar(e){
		var button=new posElement((IE)?event.srcElement:e.target);
		posX=button.x;posY=button.y;
		doc_height=document.body.clientHeight+(IE?document.body.scrollTop:0);
		if(posY>doc_height-calHeight)calendar.show(posX+36,posY-calHeight+20);
		else calendar.show(posX+36,posY);
	}
	
	function posElement(element){
		this.x=element.offsetLeft;
		this.y=element.offsetTop;
	    var pElement=element.offsetParent;
	    while(pElement){
	        this.x+=pElement.offsetLeft;
	        this.y+=pElement.offsetTop;
	        pElement=pElement.offsetParent;}
	}
	
	function LayerFrame(id){
		this.style=eval('document.all.'+id).style;
		this.reset=cReset;
		this.show=function(x,y){cReset();this.style.left=x;this.style.top=y;}
		this.hide=function(){this.style.top=-2000;}
		this.next=scrollDown;
		this.previous=scrollUp;
	}
	
	function cReset(){
		//cIframe.scroll(0,stPos);currpos=stPos;
		cIframe.scroll(0,currpos);//keep state
	}
	
	function scrollDown(){
		currpos+=calHeight;
		cIframe.scroll(0,currpos);
	}
	
	function scrollUp(){
		currpos-=calHeight;
		if(currpos>0)cIframe.scroll(0,currpos);
		else{currpos=stPos;calendar.reset();}
	}
	
	function displayDate(dt){
		calendar.hide();
	
		var DMY=dt.split("/");
		var day=DMY[0];
		var month=DMY[1];
	
		setDropdowns(day,month,currButtonNo);
		if(dropDay2)syncDropdowns();
	}
	
	function syncDropdowns(){
		var d1=dropDay1.value*1;
		var d2=dropDay2.value*1;
		var m1=dropMonth1.value*1;
		var m2=dropMonth2.value*1;
		var cm1=getChronMonth(m1),cm2=getChronMonth(m2);
		if(cm1>cm2||(cm1==cm2&&d1>=d2)){
		var tg,setDay,setMonth;
			if(currButtonNo==1){
				setDay=d1+duration;setMonth=m1;
				if(!hasOptionVal(dropDay1,setDay)){
					setMonth+=1;
					if(setMonth>12) setMonth=1;
					setDay=duration-(getNumDays(m1)-d1);
				}
				if(m1==endMonth&&d1==endDay){
					setMonth=m1;setDay=d1;
				}
				setDropdowns(setDay,setMonth,2);
			}
		if(currButtonNo==2){
				setDay=d1;setMonth=m2;
			setDropdowns(setDay,setMonth,1);
			}
		}
	}
	
	function setDropdowns(dv,mv,bn){
		var drDay=eval("dropDay"+bn);
		var drMonth=eval("dropMonth"+bn);
			selOptionVal(drMonth,mv);
			setDays(bn);
			selOptionVal(drDay,dv);
	}
	
	function selOptionVal(ob,val){
		var ops=new Object();
		for(var i=0;i<ob.length;i++) {
			ops[ob[i].value]=ob[i];
			if(ops[val])
				ops[val].selected=true;
		}		
	}
	
	function hasOptionVal(ob,val){
		var ops=new Object();
		for(var i=0;i<ob.length;i++)ops[ob[i].value]=ob[i];
		if(ops[val])return true;
		else return false;
	}
	
	function getChronMonth(month){
		var cM=month-initMonth;
		return (cM<0)?cM+12:cM;
	}
	
	function getNumDays(M){
	    var curDate = new Date();
	    var curMonth = curDate.getMonth() + 1;
	    var curYear = curDate.getYear();
	    if (M < curMonth) {
	        curYear += 1;
	    }
	    if (curYear%4 == 0) {
	        return (M==9||M==4||M==6||M==11)?30:(M==2)?29:31;
	    } else {
	        return (M==9||M==4||M==6||M==11)?30:(M==2)?28:31;
	    }
	}
	
	//DROPDOWNS--
	function setDays(buttonNo){
		if(N4)return;
		var D=eval("dropDay"+buttonNo).value*1;
		var M=eval("dropMonth"+buttonNo).value*1;
		var daysDD=eval("dropDay"+buttonNo);
	
		daysDD.length=0;
		for(i=0;i<getNumDays(M);i++)daysDD.options[i]=new Option(i+1,i+1);
		if(hasOptionVal(daysDD,D))selOptionVal(daysDD,D);//keep day selected
		else daysDD[0].selected=true;//or set to first
	}
	
	function setDates(buttonNo){//onchange from month dropdown
		if(N4)return;
		setDays(buttonNo);
		currButtonNo=buttonNo;
		syncDropdowns();
	}
	
	//IFRAME
	function writeIFrame() {
		document.write('<iframe style="position:absolute;width:'+calWidth+';height:'+calHeight+';left:34;top:-500;" noresize frameborder="0" scrolling="no" id="cIframe" name="cIframe" src="javascript:\'\'"></iframe>');
	}
	
	function initCalendar(vForm) {
		//start,end,form,day1,month1,day2,month2
		// This was causing javascript errors for other searches
		var checkDateExisting = '13';
		var months = '11';
		var finishDate;
		
		
		  startUpExistingCalendar(new Date(),
	
			vForm,
			'depDay',
			'depMonth',
			'retDay',
			'retMonth',
			document.forms[vForm].depDay,
			document.forms[vForm].depMonth + 1,
			document.forms[vForm].retDay,
			document.forms[vForm].retMonth + 1,
			'#E43784',
			'',
			'',
			'MDMDFSS',
			'schliessen');		
	}
	
	function formatDate(vForm) {
		var aMonth = new  Array("00","01","02","03","04","05","06","07","08","09","10","11","12");
		var aDay = new  Array("00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31");			
		var vDay = document.forms[vForm].depDay.value;
		var vMonth = document.forms[vForm].depMonth.value;
		var depYear = new Date().getFullYear();if(depYear<2000)depYear+=1900;
        var retYear = new Date().getFullYear();if(retYear<2000)retYear+=1900;
		//departure
		if(vMonth < new Date().getMonth()+1){
			depYear = depYear + 1;	
		}else{
			if((vMonth == new Date().getMonth()+1) && (vDay < new Date().getDate())){
				depYear = depYear + 1;
			}	
		}
		document.forms[vForm].depDate.value = aDay[vDay] + '.' + aMonth[vMonth] + '.' + depYear.toString();		
		//arrival
		if(document.forms[vForm].retDay){
			vDay = document.forms[vForm].retDay.value;
			vMonth = document.forms[vForm].retMonth.value;
			if(vMonth < new Date().getMonth()+1){
				retYear = retYear + 1;
			}else{
				if((vMonth == new Date().getMonth()+1) && (vDay < new Date().getDate())){
					retYear = retYear + 1;
				}	
			}
			document.forms[vForm].retDate.value = aDay[vDay] + '.' + aMonth[vMonth] + '.' + retYear.toString();				
		}
	}
	
	function enableDateInput(val) {
		document.oss.depDay.disabled = !val;	
		document.oss.depMonth.disabled = !val;
		document.oss.retDay.disabled = !val;	
		document.oss.retMonth.disabled = !val;
		if (document.oss.pickupTime){
			document.oss.pickupTime.disabled  = !val;
		}
		if (document.oss.dropoffTime){
			document.oss.dropoffTime.disabled  = !val;
		}
		
		if(!val && document.oss.depDayFlight && document.oss.depMonthFlight && document.oss.retDayFlight && document.oss.retMonthFlight){//set dates back to flight
			document.oss.depDay.selectedIndex=document.oss.depDayFlight.value-1;
			document.oss.depMonth.selectedIndex=document.oss.depMonthFlight.value-1;
			document.oss.retDay.selectedIndex=document.oss.retDayFlight.value-1;
			document.oss.retMonth.selectedIndex=document.oss.retMonthFlight.value-1;			
		}
	}
		
	// x-car (booking details)			
	function changeCar(cars, textArray, isEmptyElement){
		var sel = cars.selectedIndex;
		var tmpSplit = cars[sel].value.split("##")
		var price = tmpSplit[0];
		var img = tmpSplit[1];
		var id = tmpSplit[2];
		var pic = new Image();
		// set the price (to calc.)
		if (typeof(document.oss.additionalCar) != 'undefined')document.oss.additionalCar.value = price.replace(/,/,'.');
		// set current offer
		document.oss.offer_id.value = id;		
		// set the image
		pic.src = img;
		document.images.ProdImgL.src = pic.src;
		if (isEmptyElement) {
			sel=sel-1;
		}					
		if (textArray && sel > -1 && textArray.length >= sel) {
			e("carPickup").innerHTML = textArray[sel*2];			
		  e("carDropoff").innerHTML = textArray[sel*2+1];	
		} else if (sel < 0) {	
			e("carPickup").innerHTML = "";
		  e("carDropoff").innerHTML = "";				
		}	
	}
	
	// payment visible/hidden (booking details)
	function checkPayment(){				
		if(document.oss.carInBasket){		
			if(document.oss.carInBasket.value=="true" || parseInt(document.oss.additionalFeesVal.value,10)>0){
				document.getElementById("payment").style.display="block";
				document.getElementById("noPayment").value="false";					
			}	
			else{
				document.getElementById("payment").style.display="none";
				document.getElementById("noPayment").value="true";
			}
		}
	}

	function checkDepartureReturnTwo(dep,ret, equals){
		var dat1 = dep.split(".");
		var dat2 = ret.split(".");
		var depDate = new Date(dat1[2],dat1[1]-1,dat1[0]);
		var retDate = new Date(dat2[2],dat2[1]-1,dat2[0]);
		if(retDate<depDate) {
			return false;
		}
		if (equals && (dep==ret)) {
			return false;
		}	
		return true;			
	}	
	
	// check if return is after departure
	function checkDepartureReturn(dep,ret){
		return checkDepartureReturnTwo(dep, ret, false)
	}
	
	//check Age D1:birthday, D2:date, op:operator (<>=), ctrAge:control age
	function checkAge(D1, D2, op, ctrAge){
		var aD1;var aD2;var age;
		aD1=D1.split(".");aD2=D2.split(".");

		for(var i = 0; i <= 2; i++)
			aD1[i] = parseInt(aD1[i],10);
		for(var i = 0; i <= 2; i++)
			aD2[i] = parseInt(aD2[i],10);
		
		//calc age
		age = aD2[2] - aD1[2];
		
		if (aD2[1]<aD1[1]){
			age=age-1; 
		}else{
			if(aD2[1] == aD1[1] && aD2[0]<aD1[0]) age = age - 1; 
		}
		if (eval("age "+op+" parseInt(ctrAge,10)")) return true;
		else return false;
	}
	
	// print the oss page
	function ossPrint(){
		window.print();return true;
		var html = document.getElementById('printArea').innerHTML.replace('writeIFrame();','');//delete this fct, cause iframe already exists
		html = html.replace(/<\//gi,"<\/");
		//if print area available, then open this area in sepearte window and print it
		//otherwise print all from this window
		if(!document.getElementById("printArea")){
			window.print();
			return true;
		}	
		var w = window.open("", "Druckansicht", "height=700,Width=650,toolbar=no,menubar=yes,scrollbars=yes,resizable=no,location=no,directories=no,status=no,screenX=50,screenY=50");		
		w.document.open();
		w.document.clear();
		//write the headers with writeln, otherwise script file is not recognized!?!
		w.document.writeln("<html><head><title>lastminute.com - Druckansicht<\/title>");
		w.document.writeln("<link rel=\"STYLESHEET\" type=\"text/css\" href=\"http://"+window.location.host+style_root+"nav_style.css\">");
		w.document.writeln("<link rel=\"STYLESHEET\" type=\"text/css\" href=\"http://"+window.location.host+style_root+"styles_dp.css\">");
		w.document.writeln("<link rel=\"STYLESHEET\" type=\"text/css\" href=\"http://"+window.location.host+style_root+"styles.css\">");
		w.document.writeln("<script type=\"text/javascript\" src=\"http://"+window.location.host+js_root+"oss_Script.js\"><\/script><\/head>");
		w.document.writeln("<body bgcolor=\"#FFFFFF\" text=\"#000000\" link=\"#000000\" vlink=\"#000000\" alink=\"#000000\" leftmargin=\"3\" topmargin=\"5\" marginwidth=\"0\">");
		w.document.writeln(html);
		w.document.writeln("<\/body><\/html>");
		w.document.close();
		w.print();
		return true;
	}
	
	// check duration between two dates
	function durationMatches (d1, d2, dur) {
		var sd1 = d1.split(".");var sd2 = d2.split(".");
		for(var i = 0; i <= 2; i++){
			sd1[i] = parseInt(sd1[i],10);
			sd2[i] = parseInt(sd2[i],10);
		}
		sd1[2]=sd1[2]+2000;sd2[2]=sd2[2]+2000;
		dat2 = new Date(sd2[2],sd2[1]-1,sd2[0]);
		if (dur == 0){
			dat3 = new Date(sd1[2],sd1[1]-1,sd1[0] + 22);
			if (dat2.getTime() >= dat3.getTime()) return true;
			else return false;
		}
		else{
			dat1 = new Date(sd1[2],sd1[1]-1,sd1[0] + parseInt(dur,10));
			if (dat2.getTime() >= dat1.getTime()) return true;
			else return false;
		}
	}	
	
	// open voucher in separate window	
	function openVoucher(vouch){		
		window.print();return true;	
		var w = window.open("", "Voucher");		
		w.document.open();
		w.document.clear();
		w.document.writeln("<html><head><title>lastminute.com - Voucher</title>");
		w.document.writeln("<link rel='STYLESHEET' type='text/css' href='http://"+window.location.host+style_root+"nav_style.css'>");
		w.document.writeln("<link rel='STYLESHEET' type='text/css' href='http://"+window.location.host+style_root+"styles_dp.css'>");
		w.document.writeln("<link rel='STYLESHEET' type='text/css' href='http://"+window.location.host+style_root+"styles.css'>");
		w.document.writeln("<script type='text/javascript' src='http://"+window.location.host+js_root+"oss_Script.js'></script></head>");
		w.document.writeln("<body bgcolor='#FFFFFF' text='#000000' link='#000000' vlink='#000000' alink='#000000' leftmargin='3' topmargin='5' marginwidth='0'><center>");
		w.document.writeln(vouch.innerHTML);
		w.document.writeln("</center></body></html>");
		w.document.close();
		return true;
	}	
	
	
	var element;
	var showBorder;
	var maxCounter = 10;
		
	function startBlinking(el){
		swap = element;
		element =el;
		if (swap){
			swap.style.border="1px none";
		}
		maxCounter=10;
	}
	
	
	// Blinking for admins interface
	var element;
	var showBorder;
	var maxCounter = 5;
	var started;
		
	function startBlinking(el){
		
		swap = element;
		element =el;
		if (swap){
			swap.style.border="1px none";
		}
		maxCounter=5;
	}
	
	function stopBlinking(el){
		swap = element;
		element =null;
		if (swap){
			swap.style.border="1px none";
		}
		if (!started) {
			blinkElement();
		}
		started = true;
	}
		
	function blinkElement(){
		if (showBorder & maxCounter>0) {
			if (element){
				element.style.border="2px solid Red";
				maxCounter--;
			}
		} else {
			if (element){
				element.style.border="2px none";
			}
		}
		showBorder=!showBorder;
		setTimeout("blinkElement()", 250);
	}
	
	
	function getCalendarHTML(){
		calendarHTML="";
		var currDate=new Date(Date.UTC(initYear,initMonth-1,initDay));//yyyy/mm from 0/d from 1
		calendarHTML+='<html><head><title>Kalender</title><style type="text/css">\
		body{font-family:Verdana,sans-serif;font-size:13px;}\
		a{text-decoration:none;}\
		a:hover{text-decoration:underline;}\
		td{font-family:Verdana,Helvetica,sans-serif;font-size:10px;text-align:center;color:#cccccc}\
		td a{color:#000000;}\
	b{color:#000000;}\}</style>';
	
		calendarHTML+='<LINK rel="STYLESHEET" type="text/css" href="/oss/style/styles_dp.css">';
		calendarHTML+='<LINK rel="STYLESHEET" type="text/css" href="'+ cssLink + '">';
	
		calendarHTML+='</head><body bgcolor="#000000" leftmargin="1" topmargin="1">';
	
		for(i=1;i<=numMonths;i++){//For each month
	
		var month=currDate.getMonth()+1;//mm is from 0
		var numDays=getNumDays(month);
		var year=currDate.getFullYear();if(year<2000)year+=1900;
	
		currDate.setDate(1);//set to first of the month and get day of the week
		var firstDay=currDate.getDay()-1;//Sun is 0 from getDay() but we run from Mon
		if(firstDay<0)firstDay=6;
	
		//Compile HTML
		var monthHTML='\
		<table border="0" cellspacing="0" cellpadding="0" height="180" width="140" bgcolor="#FFFFFF">\
		<tr><td height="20" width="15" class="CalendarSearch">';
		if(i>1)
		monthHTML+='<a href="javascript:parent.calendar.previous()"><img src="'+image_root+'arrowl.gif" hspace="2" width="15" height="13" border="0"></a>';
		else
		monthHTML+='<img src="'+image_root+'trans.gif" width="20" height="13" border="0">';
	
		monthHTML+='</td><td colspan="5" width="100" class="CalendarSearch">'+ monthNames[currDate.getMonth()+1] +
		' ' + year + '</td><td class="CalendarSearch" width="20">';
	
		if(i<numMonths)
		monthHTML+='<a href="javascript:parent.calendar.next()"><img src="'+image_root+'arrowr.gif" hspace="2" width="15" height="13" border="0"></a>';
		else
		monthHTML+='<img src="'+image_root+'trans.gif" width="15" height="13" border="0">';
	
		monthHTML+='</td></tr><tr><td height="20" width="20"><b>' + week_days.charAt(0) + '</b></td><td width="20"><b>' + week_days.charAt(1) + '</b></td><td width="20"><b>' + week_days.charAt(2) + '</b></td>\
		<td width="20"><b>' + week_days.charAt(3) + '</b></td><td width="20"><b>' + week_days.charAt(4) + '</b></td><td width="20"><b>' + week_days.charAt(5) + '</b></td><td width="20"><b>' + week_days.charAt(6) + '</b></td></tr>';
	
		for(j=0;j<42;j+=7){//for 6 week slots in month
	
		monthHTML+='<tr>';
	
		for(k=1;k<8;k++){//for each day of week
	
		var slotNo=j+k;
		var countFromFirstDay=slotNo-firstDay;
		var isLink=(slotNo>firstDay)&&(countFromFirstDay<=numDays);
		var preDays=(month==initMonth&&countFromFirstDay<initDay);
		if(currButtonNo==2){
		var M=dropMonth1.value*1,D=dropDay1.value*1;
		var M1=getChronMonth(M),cM=getChronMonth(month);
		preDays=(cM<M1)||(cM==M1&&countFromFirstDay<D);}
		var postDays=(month==endMonth&&countFromFirstDay>endDay);
		var dateToShow=(isLink)?countFromFirstDay:'';
	
		//compile displayDate('dd/mm/yyyy') argument for link
		var dateDay=countFromFirstDay;
		var dateMonth=currDate.getMonth()+1;
		var dateYear=currDate.getYear();
		var dateString=dateDay+"/"+dateMonth+"/"+dateYear;
	
		//Write table cell with link
		monthHTML+='<td height="20">';
		if(isLink&&!preDays&&!postDays)
		monthHTML+='<a href="javascript:parent.displayDate(\''+dateString+'\')">';
		monthHTML+=dateToShow;
		if(isLink&&!preDays&&!postDays)
		monthHTML+='</a>';
		monthHTML+='</td>';
		}
		monthHTML+='</tr>';
		}
		monthHTML+='\
		<tr><td height="20" class="CalendarSearch">&nbsp;</td>\
		<td colspan="5" class="CalendarSearch"><a href="javascript:parent.calendar.hide()" class="CalendarSearch">' + window_close + '</a></td>\
		<td class="CalendarSearch">&nbsp;</td></tr>\
		<tr><td colspan="7" bgcolor="#000000"><img src="'+image_root+'trans.gif" width="140" height="2"></td></tr></table>'
	
		calendarHTML+=monthHTML+'</body></html>';
	
		currDate.setMonth(currDate.getMonth()+1);
		}
	}

	
function setDateSelectOptions(selectDate) {
    var days = new Array(" - Sonntag", " - Montag", " - Dienstag", " - Mittwoch", " - Donnerstag", " - Freitag", " - Samstag");
    var month = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
    var day = 60 * 1000 * 60 * 24;
    var d = new Date();	
 	  var oldM = -1;
 		for (var i=0; i<365; i++) {
 			var m = d.getMonth();
 			if (oldM != m) {
 					if (i<0)
 						document.write("</optgroup>");
 					document.write("<optgroup label='" + month[m] + "'>");
 					oldM = m;		
 			}	
 			var dateString = formatNull(d.getDate()) + "." + formatNull(d.getMonth()*1+1) + "." + d.getFullYear();
    	if ((selectDate == null && i==0) || selectDate == dateString) {
      	  document.write("<option value=" + dateString + " selected='selected'>" + dateString + days[d.getDay()] + "</option>");
    	} else {
    			if (d.getDay() == 0)
    				document.write("<option value=" + dateString + " style='color:#ff0000'>" + dateString + days[d.getDay()] + "</option>");
    			else
  	      	document.write("<option value=" + dateString + ">" + dateString + days[d.getDay()] + "</option>");
  	  }             
	    d = new Date(d.getTime() + day);
 	  }
 	  document.write("</optgroup>");
}

function formatNull(c) {
    if (c < 10)
        return 0+""+c;
    return c;    
}	


function onChangeDate(formName, selectName, addDay) {
		var vForm = document.forms[formName];
		if (selectName == "depDate") {
				selectReturnOption(vForm.retDate, addDays(vForm.depDate.value, addDay));
		}				
}

function selectReturnOption(vSelect, vSelectDate) {
		for (var i=0; i<vSelect.options.length; i++) {
				if (vSelect.options[i].value == vSelectDate) {
						vSelect.options[i].selected = true; 
				} else if (vSelect.options[i].selected) {
						vSelect.options[i].selected = false;
				}		
		}	
}	

function addDays(fromDate, days) {
		var sp = fromDate.split(".");
		var d = new Date(sp[2], sp[1]*1-1, sp[0]);
		var day = 60 * 1000 * 60 * 24;
		d = new Date(d.getTime() + days*day);
		return formatNull(d.getDate()) + "." + formatNull(d.getMonth()*1+1) + "." + d.getFullYear(); 
}	


function setMonthSelectOptions(presel) {
		var month = new Array("Januar","Februar","M�rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
		var day = 60 * 1000 * 60 * 24;
		var d = new Date();	
		var oldM = -1;
 		for (var i=0; i<365; i++) {
 			var m = d.getMonth();
 			var val = formatNull(m+1) + "." + d.getFullYear();			
 			if (oldM != m) {
 					if (presel == val)
 							document.write("<option value=" + val + " selected='selected'>" + month[m] + " " + d.getFullYear() + "</option>");
 					else				
 						document.write("<option value=" + val + ">" + month[m] + " " + d.getFullYear() + "</option>");
 					oldM = m;		
 			}	      
	    d = new Date(d.getTime() + day);
 	  }
}	

/* ---------- START - Toggle Function 3D-Secure - Added 19.Feb 2010 ---------- */
// Val1 = Target ID
// Val2 = Trigger ID
/* ----------------------------------------------------------------------------- */

function gId(name){ return document.getElementById(name); }

function openNote(Val1,Val2){
 	gId(Val1).style.display = "block";
 	gId(Val2).onclick = new Function("closeNote('" + Val1 + "','" + Val2 + "')");
}

function closeNote(Val1,Val2){
 	gId(Val1).style.display = "none";
 	gId(Val2).onclick = new Function("openNote('" + Val1 + "','" + Val2 + "')");
}

/* --------------------- END - Toggle Function 3D-Secure ---------------------- */