function Pricelist(pricelist) {
	this.pricelist = pricelist;
	this.errors = [];
}

Pricelist.prototype.getPriceForServiceDate = function(iServiceId, date) {
	var bFound = false, prices = null;
	for (var index in this.pricelist) {
		var item = this.pricelist[index];
		var from = getDate(item.act0014datefrom_);
		var to = getDate(item.act0014dateto___); 
		if (date.between(from, to)) {
			if (typeof(item.prices[iServiceId])!='undefined') {
				bFound = true;
				prices = item.prices[iServiceId];
				break;
			}
		}
	}
	if (!bFound)
		return false;
	// neni vyplenena ani jedna cena
	if (isEmpty(prices['n']) && isEmpty(prices['s']))
		return null;
	// pouze normalni cena
	if (is_numeric(prices['n']) && isEmpty(prices['s']))
		return prices['n'];
	// specialni cena
	return prices['s'];
  
}

Pricelist.prototype.getPriceForServiceTerms = function(iServiceId, from, to) {
	var totalprice = 0, service_price_per_day = null, i = 0;
	var date_iterator = new Date(from);
	while (date_iterator<to && i++<1000) {
		if ((service_price_per_day = this.getPriceForServiceDate(iServiceId, date_iterator))==false)
			return false;//throw 'No price found for date `' + toLocaleString() + '`';
		else
			totalprice += parseFloat(service_price_per_day);
		date_iterator.addDay();
	}
	return totalprice;
}


function changeTotalPrice() {
	for (var i=0; i<g_services_ids.length; i++) {
		if ((nrOfRooms = gebi('service-'+g_services_ids[i]).value)>0) {
			var serviceId = g_services_ids[i]; 
			gebi('service-'+serviceId).value = parseInt(nrOfRooms);
			g_services_prices[serviceId] = g_pricelist.getPriceForServiceTerms(serviceId, from, to);
			gebi('price-'+serviceId).innerHTML = g_services_prices[serviceId] + g_currency.code;
		}
	}
}

// pri zmene datumu prepocita vsechny ceny
function changePrices() {
	if (!g_pricelist || typeof(g_pricelist)=='undefined')
		return false;
	var from = getArrivalDate();
	var to = getDepartureDate();
	// spocitej ceny vsech sluzeb
	for (var i=0; i<g_services_ids.length; i++)
		g_services_prices[g_services_ids[i]] = g_pricelist.getPriceForServiceTerms(g_services_ids[i], from, to);
	showPrices();
}

// pri zmene poctu pokoju zobrazi novou cenu
function changePrice(service_id) {
	if (!g_services_prices || !g_services_prices[service_id] || g_services_prices[service_id]===false)
		return;
	var client_currency_id = getComboValue('currency');
	var rooms_nr = 1*gebi('service-'+service_id).value; 
	gebi('price-'+service_id).innerHTML = number_format(g_services_prices[service_id]*rooms_nr, 0, '', ' ') + ' ' + g_currency.code;
	gebi('curr-price-'+service_id).innerHTML = number_format(recountPrice(g_services_prices[service_id]*rooms_nr, g_currency.id, client_currency_id), 0, '', ' ') + ' ' + g_curr_rates[client_currency_id]['act0005code_____'];
	changeTotalPrice();
}

function changeTotalPrice() {
	var uponRequestFound = false;
	for (var i=0; i<g_services_ids.length; i++) {
		if (g_services_prices[g_services_ids[i]]===false) {
			uponRequestFound = true;
			break;
		}
	}
	if (uponRequestFound) {
		gebi('total-price').innerHTML = '<acronym title="' + g_txt['price-upon-text-info'] + '">' + g_txt['price-upon-request'] + '</acronym>';
		return false;
	}
	var total_price = 0;
	var client_currency_id = getComboValue('currency');
	for (var i=0; i<g_services_ids.length; i++)
		total_price += gebi('service-'+g_services_ids[i]).value * g_services_prices[g_services_ids[i]];
	gebi('total-price').innerHTML = number_format(total_price, 0, '', ' ') + ' ' + g_currency.code;
	gebi('curr-total-price').innerHTML = number_format(recountPrice(total_price, g_currency.id, client_currency_id), 0, '', ' ') + ' ' + g_curr_rates[client_currency_id]['act0005code_____']; 
	return true;
}

function showPrices() {
	var client_currency_id = getComboValue('currency');
	var iNumberOfRooms = null, iNumberOfNights = gebi('nights').value;
	if (iNumberOfNights<1)
		iNumberOfNights = 1; 
	for (var i=0; i<g_services_ids.length; i++) {
		if ((iNumberOfRooms = gebi('service-'+g_services_ids[i]).value)<1)
			iNumberOfRooms = null;
		if (g_services_prices[g_services_ids[i]]===false)
			gebi('price-'+g_services_ids[i]).innerHTML = '<acronym title="' + g_txt['price-upon-text-info'] + '">' + g_txt['price-upon-request'] + '</acronym>'; 
		else {
			gebi('price-night-'+g_services_ids[i]).innerHTML = number_format(g_services_prices[g_services_ids[i]]/iNumberOfNights, 0, '', ' ') + ' ' + g_currency.code;
			if (iNumberOfRooms > 0) {
	  		gebi('price-' + g_services_ids[i]).innerHTML = number_format(iNumberOfRooms * g_services_prices[g_services_ids[i]], 0, '', ' ') + ' ' + g_currency.code;
	  		gebi('curr-price-' + g_services_ids[i]).innerHTML = number_format(recountPrice(iNumberOfRooms * g_services_prices[g_services_ids[i]], g_currency.id, client_currency_id), 0, '', ' ') + ' ' + g_curr_rates[client_currency_id]['act0005code_____'];
	  	}
		}
	}
}

