////
// Polpulates a div with a basket
// Requires Prototype
//
// @version $Id: showBasket.js,v 1.10 2010/05/20 15:13:22 hakwaa Exp $
//

var basket_json;

function getShoppingBasket (cookieName, targetElementId, section, site, partner, basketId, basketCheck)
{
    getShoppingBasket (targetElementId, section, site, partner, basketId + '|' + basketCheck);
}

function getShoppingBasket (cookieName, targetElementId, section, site, partner, basketInfo)
{
    var url    = '/' + site + '/shopping/cgi-bin/show_basket_ajax.cgi';
    getBasket(url, cookieName, targetElementId, section, partner, basketInfo);
}

function getBasket (url, cookieName, targetElementId, section, partner, basketInfo)
{
    var params = "section=" + section + "&basket_info=" + basketInfo + "&partner=" + partner;

    new Ajax.Request(url, {
	    parameters: params,
		onSuccess:  populate.bind(this, targetElementId),
		onFailure:  showError.bind(this, cookieName)
		});
}

function populate (targetElementId, request)
{
    try {
	basket_json = eval("(" + request.responseText + ")");
    }
    catch (e) {
	//alert ('nåt gick snett i eval av JSONsvaret');
    }

    if ($(targetElementId)) {
	$(targetElementId).innerHTML = basket_json.html;
	Element.show($(targetElementId));
	if ($('tnButtonProceedToCheckout'))
	    Element.show($('tnButtonProceedToCheckout'));
    }

    if (basket_json && basket_json.has_passengers) {
	if (setSelectBoxValue('adults', basket_json.adults)) {
	    //	    $('adults').disabled = true;
	}

	if (basket_json.children > 0) {
	    if (setSelectBoxValue('children', basket_json.children)) {
		//	    $('children').disabled = true;
	    }

	    if ($('children_age') && basket_json.children_age) {
		$('children_age').value = basket_json.children_age;
		$('chldAge').style.visibility = "";
		//$('children_age').disabled = true;
	    }
	}

	if($('numberOfRooms'))
	    {
		basketPassengersIntoRooms();
	    }
    }
}

function basketPassengersIntoRooms ( )
{
	var basketAdults = basket_json.adults;
	var basketChildren = basket_json.children;
	var basketChildrenAge =  new Array();
	var insertedAdults = 0;
	var insertedChildren = 0;
	var maxAdultsPerRoom = 2;
	var maxChildrenPerRoom = 3;
    
	if(3 * basketAdults < basketChildren)
	{
	}
    	else 
	{
		var roomsRequired = Math.ceil(basketAdults/2);
		var roomsRequiredByChildren = Math.ceil(basketChildren/3)
	    
		// populate rooms
		if(roomsRequiredByChildren > roomsRequired) 
		{
			maxAdultsPerRoom = 1;
			roomsRequired = roomsRequiredByChildren;
			setSelectBoxValue('numberOfRooms', roomsRequired);
			populateRooms(roomsRequired);
			reCalcDivs();
		    	while(insertedAdults < basketAdults)
			{
				for(var x = 0; x < roomsRequired; x++)
				{
					var y = getSelectBoxValue('adults_' + x);
				    	setSelectBoxValue('adults_' + x, y+maxAdultsPerRoom);
				    	insertedAdults++;
				}
			}
    		}
		else
		{
		    	setSelectBoxValue('numberOfRooms', roomsRequired);
			populateRooms(roomsRequired);
		    	reCalcDivs();
			for(var x = 0; x < roomsRequired; x++)
			{
				for(var y = 0; y < maxAdultsPerRoom && insertedAdults < basketAdults; y++)
				{
					setSelectBoxValue('adults_' + x, y+1);
				    	insertedAdults++;
				}
			}
		}
	    
		// fill in children ages
		if(basketChildren > 0)
		{
			for(var x = 0; x < basket_json.children_age.length; x++) 
			{
				basketChildrenAge.push(basket_json.children_age[x]);
			}

			checkAgeField();
			for(x = 0; x < roomsRequired; x++)
			{
				$('children_age_' + x).value = "";
			    	setSelectBoxValue('children_' + x, 0);
			    	for(y = 0; y < maxChildrenPerRoom && insertedChildren < basketChildren; y++)
				{
					setSelectBoxValue('children_' + x, y+1);
				    	if(y+1 < maxChildrenPerRoom && basketChildrenAge.length != 1)
					{
					    	appendInputFieldValue('children_age_' + x, basketChildrenAge.pop() + ',');
					}
				    	else
					{
						appendInputFieldValue('children_age_' + x, basketChildrenAge.pop());
					}   
				    	insertedChildren++;
				}
			}
		}
	}
}

function showError (cookieName, request)
{
    deleteCookie(cookieName);

    // Fix this with some parameters
    Element.hide($('shoppingBasketNotEmpty'));
    Element.show($('shoppingBasketEmpty'));
   
}

// Prototype Cookie extension from http://wiki.script.aculo.us/scriptaculous/show/Cookie
var Cookie = {
  set: function(nameCookie, value, daysToExpire) {
    var expire = '';
    if (daysToExpire != undefined) {
      var d = new Date();
      d.setTime(d.getTime() + (86400000 * parseFloat(daysToExpire)));
      expire = '; expires=' + d.toGMTString();
    }
    return (document.cookie = escape(nameCookie) + '=' + escape(value || '') + "; path=/; " + expire + "; domain=" + location.hostname.replace(/^(www\.)?/, '.'));
  },
  get: function(nameCookie) {
    var cookie = document.cookie.match(new RegExp('(^|;)\\s*' + escape(nameCookie) + '=([^;\\s]*)'));
    return (cookie ? unescape(cookie[2]) : null);
  },
  erase: function(nameCookie) {
    var cookie = Cookie.get(nameCookie) || true;
    Cookie.set(nameCookie, '', -1);
    return cookie;
  },
  accept: function() {
    if (typeof navigator.cookieEnabled == 'boolean') {
      return navigator.cookieEnabled;
    }
    Cookie.set('_test', '1');
    return (Cookie.erase('_test') === '1');
  }
};
//

function deleteCookie(nameCookie) {
    Cookie.erase(nameCookie);
}

function getCookie(nameCookie) {
    return Cookie.get(nameCookie);
}

function appendInputFieldValue( id, input) {
    var obj = $(id);
    if (obj) {
	obj.value += input;
	return true;
    }
    return false;
}

function setSelectBoxValue( id, selectedValue) {
    var obj = $(id);
    if (obj) {
	$A( obj.getElementsByTagName('option') ).each(function(node){
		if (node.value == selectedValue)
		    {
			node.selected = "selected";
			return true;
		    }
	    });
    }
    return false;
}

function getSelectBoxValue( id ) {
    var obj = $(id);
    if (obj) {
	$A( obj.getElementsByTagName('option') ).each(function(node){
		if (node.selected)
		    {
			selectedValue = node.value;
			return selectedValue;
		    }
	    });
    }
    return false;
}

