/**
* This file contains all functions needed for the basket of the frontoffice.
* 
* @author Jens Kendl
* @package Imevia
* @subpackage Frontoffice
*/

/**
* Will put a offer identified by houseid and offerid into the basket by using an asynchonous request
* It will give the response to the updateFunction of the basket
* @param int houseid
* @param int offerid
* @param int catering The catering selected
* @param bool timespanSearch This flag switches to use results generated by a individual timespan search for a given house
*/
function putOfferIntoBasket(houseid, offerid, catering, extras, timespanSearch) {
	//alert("Put into basket.\nhouseid: "+houseid+"\nofferid: "+offerid+"catering: "+catering+"extras:"+extras);
	//alert("Put into basket.\nhouseid="+houseid+"&offerid="+offerid+"&catering="+catering+"&addoffer=1&timespanSearch="+timespanSearch+"&extras="+serialize(extras));
	
	GDownloadUrl("addOfferToBasket.php?houseid="+houseid+"&offerid="+offerid+"&catering="+catering+"&addoffer=1&timespanSearch="+timespanSearch+"&extras="+serialize(extras), updateBasket);
}

/**
* This function will create the display of the basket out of a xml document.
* The function is used to work the response of an asynchronous request.
* It will generate a short overview with the last added item and a short overview with all items.
* Therefore html elements with the following ids are needed:
* - basketHeader: For the overall number of offers in the basket
* - shortBasketText: For one item short overview
* - overallBasketPrice: For one item short overview
* - completeBasketEntries: For all items short overiew
* - basketPrice: Contains the overallBasketPrice and will be made visible
* - moreBasket: Containing the link to the detailed basket and will be made visible
* - basketLongLink: The link, which opens completeBasketEntries. This will be made visible
*
* @param string data The response body of the request
* @param int responseCode The response code of the request 
*/
function updateBasket(data, responseCode) {

	document.getElementById('debug').value=data;
	var basketXML = GXml.parse(data);
	
	var longBasket = '';
	
	var offers = basketXML.documentElement.getElementsByTagName('offer');
	var price;
	var overview;
	var duration;
	var catering;
	var overviewShort = texts['basketEmpty'];
	var cateringShort;
	var priceShort;
	
	document.getElementById('basketHeader').innerHTML = offers.length;
	
	//Generate all items overview
	for (var i=(offers.length-1); i>=0; i--) {
		
		price = offers[i].getElementsByTagName('price');
		price = price[0].getAttribute('value');
		overview = offers[i].getElementsByTagName('overview');
		duration = offers[i].getElementsByTagName('duration');
		catering = offers[i].getElementsByTagName('catering');
		catering = texts['catering'][catering[0].getAttribute('value')];
		
		if ( i==(offers.length-1) ) {
			var overviewShort = overview[0];
			var cateringShort = catering;
			var priceShort = price;
			
			
		}
		
		longBasket += '<div class="basketLongItem">';
		longBasket += '<div class="basketLongPrice">'+number_format((price/100), 2, ',', '.')+' '+texts['euroSign']+'</div>';
		longBasket += '<span>'+GXml.value(overview[0])+"</span><br/>";
		longBasket += '<div class="duration">'+GXml.value(duration[0])+'</div>'+catering+'&nbsp;';
		longBasket += '</div>';
	}
	
	document.getElementById('completeBasketEntries').innerHTML = longBasket;
	
	//the one item overview
	if (price!=undefined) {
		document.getElementById('shortBasketText').innerHTML = GXml.value(overviewShort);
		document.getElementById('overallBasketPrice').innerHTML = number_format((priceShort/100), 2, ',', '.');
	}
	
	document.getElementById('basketPrice').style.display = "block";
	document.getElementById('moreBasket').style.display = "block";
	document.getElementById('basketLongLink').style.display = "block";
	
	//Show confirmation alert
	//alert(texts['putIntoBasketMessage']);
	
	basketInfoPanel.setHeader(texts['basketOfferInBasketHeader']);
	basketInfoPanel.setContent( buildBasketMessage(offers[offers.length-1]) );
	basketInfoPanel.show();
	
}

/**
*
* @uses roomCategories
*/
function buildBasketMessage(offer) {

	var price = offer.getElementsByTagName('price')[0];
	price = price.getAttribute('value');
	var overview = offer.getElementsByTagName('overview');
	var house = offer.getElementsByTagName('house')[0];
	var room = house.getElementsByTagName('room')[0];
	var housename = house.getAttribute('name');
	var nrOfRooms = room.getAttribute('nrofrooms');
	var roomCat = roomCategories[room.getAttribute('roomcat')];
	var duration = offer.getElementsByTagName('duration')[0];
	var catering = offer.getElementsByTagName('catering')[0];
	catering = texts['catering'][catering.getAttribute('value')];
	
	var persons = offer.getElementsByTagName('persons')[0];
	var adults = persons.getAttribute('adult');
	var children = persons.getAttribute('child');
	persons = '';
	if (adults>0) {
		persons+= adults+' '+texts['adults'];
	}
	if (children>0) {
		if (persons.length>0) {
			persons+= '; ';
		}
		persons+= children+' '+texts['children'];
	}
	
	var extras = offer.getElementsByTagName('extra');
	var extra;
	var extraName;
	var extraPersons;
	var extraAdults;
	var extraChildren;
	var extraPrices;
	var extraPriceAdult;
	var extraPriceChild;
	
	var text = '<div class="offerInBasket">';
	text+= '<div class="basketDesc">';
	text+= texts['basketDesc'];
	text+= '</div>';
	text+= texts['basketOfferInBasket']+':';
	text+= '<div class="offer">';
	text+= '<h3>'+housename+'</h3>';
	text+= GXml.value(duration)+'<br/>';
	text+= persons+'<br/>';
	text+= '<div style="float:right;">'+number_format((price/100), 2, ',', '.')+' '+texts['euroSign']+'</div>';
	text+= '<div style="float:left; margin-right: 20px;">'+nrOfRooms+' '+roomCat+'</div><div style="float:left;">'+catering+'</div>';
	text+= '<div style="clear:both"></div>';
	text+= '</div>';
	if (extras.length>0) {
		text+= texts['basketExtras']+':';
		for(var i=0; i<extras.length; i++) {
			extra = extras[i];
			extraname = extra.getAttribute('name');
			extraPersons = extra.getElementsByTagName('persons')[0];
			extraAdults = extraPersons.getAttribute('adult');
			extraChildren = extraPersons.getAttribute('child');
			persons = '';
			if (extraAdults>0) {
				persons+= extraAdults+' '+texts['adults'];
			}
			if (extraChildren>0) {
				if (persons.length>0) {
					persons+= '; ';
				}
				persons+= extraChildren+' '+texts['children'];
			}
			
			text+= '<div class="extra">';
			text+= '<b>'+extraname+'</b><br/>';
			text+= persons;
			text+= '</div>';
		}
	}
	text+= '</div>';
	
	return text;
	/*<offer>
      <price value="14200"/>
      <overview>(1) Hotel am Park</overview>
      <duration>10.07.-11.07.2007</duration>
      <catering value="1"/>
      <persons adult="2" child="0"/>
      <house name="Hotel am Park">
        <room nrofrooms="1" roomcat="1"/>
      </house>
      <extras>
        <extra id="2" name="Eintrittskarten Europapark">
          <prices adult="2500" child="2300"/>
          <persons adult="2" child="1"/>
          <description>Wir bieten ihnen EP karten, ganz ohne was drauf zu hauen, toll oder?</description>
        </extra>
      </extras>
    </offer>*/

}

/**
* This function will display the all items overview and hide the one item overview.
*/
function showCompleteBasket() {
	document.getElementById("shortBasket").style.display="none";
	document.getElementById("completeBasket").style.display="block";
	document.getElementById("completeBasket").style.position="absolute";
	
	document.getElementById("basketLongLink").style.display="none";
	document.getElementById("basketShortLink").style.display="block";
}

/**
* This function will hide the all items overview and display the one item overview.
*/
function hideCompleteBasket() {
	document.getElementById("basket").style.position="relative";
	document.getElementById("completeBasket").style.display="none";
	document.getElementById("shortBasket").style.display="block";
	
	document.getElementById("basketLongLink").style.display="block";
	document.getElementById("basketShortLink").style.display="none";
}

/**
* This function will send the form "bookOfferForm" for removing an offer from the basket.
* The form has to have (hidden) textfields named offerid, step and action.
*
* @param int offerid The id of the offer to get rid of.
*/
function sendRemoveOfferForm(offerid) {
	document.forms.bookOfferForm.offerid.value = offerid;
	document.forms.bookOfferForm.step.value = 1;
	document.forms.bookOfferForm.action.value = 'removeOffer';
	document.forms.bookOfferForm.submit();
}
/**
* This function will send the form "bookOfferForm" for booking an offer.
* The form has to have (hidden) textfields named offerid, step and action.
*
* @param int offerid The id of the offer to book.
*/
function sendBookOfferForm(offerid) {
	document.forms.bookOfferForm.offerid.value = offerid;
	document.forms.bookOfferForm.step.value = 2;
	document.forms.bookOfferForm.action.value = 'bookOffer';
	document.forms.bookOfferForm.submit();
}

/**
* This function will check the form "bookOfferForm".
* The form may only be sent, if one radio button "offer" is checked.
*
* @return bool 
*
function checkSendBookOfferForm() {
	var offers = document.forms.bookOfferForm.offer;
	var oneChecked = false;
	if (offers.value==undefined) {
		for (var i=0; i<offers.length; i++) {
			if ( true == offers[i].checked) {
				oneChecked = true;
				break;
			}
		}
	} else { //Maybe it?s only one radiobutton...
		if ( true == offers.checked) {
			oneChecked = true;
		}
	}
	return oneChecked;
}*/