////
// Polpulates a div with a basket
// Requires Prototype
//
// @version $Id: showBasket.js,v 1.9 2008/05/05 15:31:39 raptor 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 roomsRequired = 0;
    var roomsRequiredByChildren = 0;
    var insertedAdults = 0;
    var insertedChildren = 0;
    var maxAdultsPerRoom = 2;
    var maxChildrenPerRoom = 3;
    
    if(3 * basketAdults < basketChildren)
	{
	}
    
    else
	{
	    for(var x = 0; x < basketAdults; x+=2)
		{
		    roomsRequired++;
		}
	    
	    if(basketChildren > 0)
		{
		    for(var x = 0; x < basket_json.children_age.length; x++)
			{
			    basketChildrenAge.push(basket_json.children_age[x]);
			}
		    
		    for(var y = 0; y < basketChildren; y+=3)
			{
			    roomsRequiredByChildren++;
			}
		}
	    
	    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++;
				}
			}
		}
	    
	    if(basketChildren > 0)
		{
		    checkAgeField(basketChildren,'childAgeHeader');
		    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;
}
