function processing() {
	var processing, parent;
	if (processing = document.getElementById('processing')) {
		if (parent = processing.parentNode) {
			version = parseFloat(navigator.appVersion.split("MSIE")[1]);
			if (document.all && version < 7) {
				selectElements = parent.getElementsByTagName('select');
				for (i=0; i<selectElements.length; i++) {
					// selectElements[i].style.display = 'none';
					selectElements[i].style.visibility = 'hidden';
				}
			}
			processing.className = 'processing';
			processing.style.width = parent.offsetWidth+'px';
			processing.style.height = parent.offsetHeight+'px';
		}
	}
}

function processed() {
	var processing, parent;
	if (processing = document.getElementById('processing')) {
		if (parent = processing.parentNode) {
			version = parseFloat(navigator.appVersion.split("MSIE")[1]);
			if (document.all && version < 7) {
				selectElements = parent.getElementsByTagName('select');
				for (i=0; i<selectElements.length; i++) {
					// selectElements[i].style.display = 'inline';
					selectElements[i].style.visibility = 'visible';
				}
			}
			processing.className = 'hidden';
			processing.style.width = parent.offsetWidth+'px';
			processing.style.height = parent.offsetHeight+'px';
		}
	}
}

function processingCheck() {
	var i;
	if (document.processing) return true;
	if (typeof(document.processingHotel) == 'undefined') return false;
	for (i=0; i<document.processingHotel.length; i++) {
		if (document.processingHotel[i]) return true;
	}
	processed();
	return false;
}

function setParentBackground(obj, background) {
	var prev, parent, p, c, l;
	
	obj.style.fontWeight = background=='none' ? 'normal' : 'bold';

	if (!obj.parentNode) return;
	
	p = 0;
	c = obj;
	while (c.previousSibling != null) {
		c = c.previousSibling;
		if (c.nodeName == obj.nodeName) {
			c.style.background = background;
			l = c;
		}
		p++;
	}
	l.style.fontWeight = background=='none' ? 'normal' : 'bold';
	
	c = obj;
	while (c.nextSibling != null) {
		c = c.nextSibling;
		if (c.nodeName == obj.nodeName) {
			c.style.background = background;
		}
	}
	
	parent = obj.parentNode;
	while (parent.previousSibling != null) {
		parent = parent.previousSibling;
		if (parent.nodeName == obj.parentNode.nodeName) {
			parent.childNodes[p].style.background = background;
		}
	}
	parent.childNodes[p].style.fontWeight = background=='none' ? 'normal' : 'bold';
	
	parent = obj.parentNode;
	while (parent.nextSibling != null) {
		parent = parent.nextSibling;
		if (parent.nodeName == obj.parentNode.nodeName) {
			parent.childNodes[p].style.background = background;
		}
	}
	
	
}

/*swap flash hot tour images*/
var FLASH_IMAGES_REFRESH = 7000;
var FLASH_TOUR_REFRESH = 15000;
var FLASH_IMAGES_OFFSET = 800;

function swapHotImages() {
	var i;
	for (i=0; i<hotOffers.length; i++) {
		setTimeout("setFlashVar(hotOffers["+i+"].id,'nextImage',''+Math.random()+'');",i*FLASH_IMAGES_OFFSET);
	}
}
function swapHotTours() {
	var i;
	for (i=0; i<hotOffers.length; i++) {
		setTimeout("setFlashVar(hotOffers["+i+"].id,'nextOffer',''+Math.random()+'');updateHotOfferDetails(hotOffers["+i+"].detailsID,hotOffers["+i+"].id)",i*FLASH_IMAGES_OFFSET);
	}
}

function updateHotOfferDetails(targetID,flashObjectID) {
	setTimeout(function() {
			var obj = document.getElementById(targetID);
			if (obj) obj.innerHTML = getFlashVar(flashObjectID,'offerDetails');
		},
		3000
	);
}

/*Search Box*/
searchLayers = new Array("search-holidays","search-hotels","search-flights");
function swapImage(id,src) {
	var obj = document.getElementById(id);
	if (!obj) return;
	obj.oldSrc = obj.src;
	obj.src = src;
}

function restoreImage(id) {
	var obj = document.getElementById(id);
	if (!obj || !obj.oldSrc) return;
	obj.src = obj.oldSrc;
	//obj.oldSrc = null;
}

function typeDelimiter(id,className) {
	var obj;
	if (obj=document.getElementById(id)) {
		obj.className=className;
	}
}

function typeOver(obj,id,src,layerID) {
	var parentTable = getAncestorByName(obj, 'SPAN');
	var currentLayerID = parentTable.getAttribute('currentLayerID');
	if (currentLayerID == layerID) return;
	
	typeDelimiter(id+'-left','search-tab-left');
	typeDelimiter(id+'-right','search-tab-right');
	
	mouseOver(obj);
	swapImage(id,src);
}

function typeOut(obj,id,layerID) {
	var parentTable = getAncestorByName(obj, 'SPAN');
	var currentLayerID = parentTable.getAttribute('currentLayerID');
	if (currentLayerID == layerID && currentLayerID != '') return;

	typeDelimiter(id+'-left','');
	typeDelimiter(id+'-right','');

	mouseOut(obj);
	restoreImage(id);
}

function changeLayer(obj,layerID,imageID) {
	var i=0;
	var src = "";
	var button;
	var imgButton;
	var parentTable = getAncestorByName(obj, 'SPAN');
	var currentButtonImageID = (parentTable.getAttribute('currentButtonImageID') != '') ? parentTable.getAttribute('currentButtonImageID') : "";
	var currentLayerID = (parentTable.getAttribute('currentLayerID') != '') ? parentTable.getAttribute('currentLayerID') : "";
	
	if (currentLayerID == layerID) return;

	typeDelimiter(currentButtonImageID+'-left','');
	typeDelimiter(currentButtonImageID+'-right','');

	typeDelimiter(imageID+'-left','search-tab-left');
	typeDelimiter(imageID+'-right','search-tab-right');
	
	if (currentLayerID && currentLayerID != '') {
		button = document.getElementById(currentLayerID+"-button");
		if (!button.oldClassName) button.oldClassName = button.className.split("-over")[0];
		mouseOut(button);
		
		if (currentButtonImageID && currentButtonImageID != '') {
			imgButton = document.getElementById(currentButtonImageID);
			if (!imgButton.oldSrc) {
				src = imgButton.src.split("-over");
				imgButton.oldSrc = src[0]+src[1];
			}
			restoreImage(currentButtonImageID);
		}
	}
	
	setAttribute(parentTable,'currentButtonImageID',imageID);
	setAttribute(parentTable,'currentLayerID',layerID);

	for (i=0; i<searchLayers.length; i++) {
		document.getElementById(searchLayers[i]).className = (layerID != searchLayers[i]) ? 'hidden' : 'visible';
	}
}

function toggleLayerVisibility(element) {
	var obj = (typeof(element) == 'string') ? document.getElementById(element) : element;
	obj.className = (obj.className == 'visible') ? 'hidden' : 'visible';
}

function toggleAdvancedOptions(obj, strAdvanced, strRegular) {
	var i=0;
	var rows, t;
	var advancedOptionsLayer;
	var parentTable = getAncestorByName(obj, 'SPAN');
	var currentLayerID = (parentTable.getAttribute('currentLayerID') != '') ? parentTable.getAttribute('currentLayerID') : "";
	
	if (currentLayerID && currentLayerID != '') {
		advancedOptionsLayer = document.getElementsByName('SearchLayer');

		for (t=0; t<advancedOptionsLayer.length; t++) {
			rows = advancedOptionsLayer[t].getElementsByTagName('tr');
			
			var advanced = document.getElementsByName('advanced');
			for (i=0; i<advanced.length; i++) {
				advanced[i].value = (parseInt(advanced[i].value,10) == 0) ? 1 : 0;
			}

			for (i=0; i< rows.length; i++) {
				if (rows[i].className == 'hidden' || rows[i].className == 'visible') {
					toggleLayerVisibility(rows[i]);
					if (rows[i].className == 'hidden') obj.innerHTML = '<h3>'+strAdvanced+'</h3>';
					if (rows[i].className == 'visible') obj.innerHTML = '<h3>'+strRegular+'</h3>';
				}
			}
		}
		
	}
}

/* Tour Descriptions */
function toggleTab(tab) {
	var tabParent = tab.parentNode; //getAncestorByName(tab,'TR');
	var tabs = tabParent.childNodes; //tabParent.getElementsByTagName('td');
	var i;
	
	for (i=0; i<tabs.length; i++) {
		if (tabs[i].nodeType == 1) { //ELEMENT_NODE
			if (!tabs[i].oldClassName) tabs[i].oldClassName = tabs[i].className.split("-over")[0];
			if (tabs[i].className.search('-over') != -1 && tabs[i] != tab) mouseOut(tabs[i]);
		}
	}
	tab.oldClassName = null; // prevent execution of mouseOut
}

function toggleDescription(layerID) {
	var obj = document.getElementById('descriptions');
	var descriptions = obj.getElementsByTagName('div');
	var i=0;

	for (i=0; i<descriptions.length; i++) {
		descriptions[i].className = (descriptions[i].id == layerID) ? 'visible' : 'hidden';
	}
}

function toggleLayer(layerID,haystack) {
	var i,obj;
	for (i=0; i<haystack.length; i++) {
		obj = document.getElementById(haystack[i]);
		if (obj) {
			obj.className = (obj.id == layerID) ? 'visible' : 'hidden';
			if (obj.id == 'map_position' && obj.className=='visible') {
				showMap(MAP_POSITION);
			}
		}
	}
}

/* Gallery */
function galleryScroll(step) {
	var tmbContainer = document.getElementById('thumbnails');
	var tmbContainerWidth = parseInt(tmbContainer.style.width,10);
	var thumbnails = tmbContainer.getElementsByTagName('img');
	var thumbnailsParent = getChild(tmbContainer,"table");
	
	var i=0;
	thumbnailsWidth = 0;
	if (tmbContainer.intervalID) return;
	for (i=0; i<thumbnails.length;i++) thumbnailsWidth += parseInt(thumbnails[i].width,10);
	thumbnailsWidth += (thumbnails.length-1)*5; //add space between images
	if (tmbContainerWidth >= thumbnailsWidth) return;
	
	if (step < 0) {
		if (parseInt(thumbnailsParent.style.left,10) >= (tmbContainerWidth-thumbnailsWidth)) moveContainer(tmbContainerWidth,thumbnailsWidth,step);
	} else {
		if (parseInt(thumbnailsParent.style.left,10) < 0) moveContainer(tmbContainerWidth,thumbnailsWidth,step);
	}
}

function moveContainer(tmbContainerWidth,thumbnailsWidth, step) {
	var tmbContainer = document.getElementById('thumbnails');
	var thumbnails = getChild(tmbContainer,"table");
	
	thumbnails.style.left = parseInt(thumbnails.style.left,10)+step+"px";
	
	if (step < 0)  {
		if (parseInt(thumbnails.style.left,10) >= (tmbContainerWidth-thumbnailsWidth)) {
			tmbContainer.intervalID = setTimeout ("moveContainer("+tmbContainerWidth+","+thumbnailsWidth+","+step+")", 30);
			return;
		}
	} else {
		if (parseInt(thumbnails.style.left,10) < 0)  {
			tmbContainer.intervalID = setTimeout ("moveContainer("+tmbContainerWidth+","+thumbnailsWidth+","+step+")", 30);
			return;
		}
	}
	tmbContainer.intervalID = null;
}

function stopScroll() {
	var tmbContainer = document.getElementById('thumbnails');
	if (tmbContainer && tmbContainer.intervalID) {
		clearTimeout (tmbContainer.intervalID);
		tmbContainer.intervalID = null;
	}
}

function showImage() {
	var hotel_image = document.getElementById('hotel_image');
	if (hotel_image) {
		hotel_image.style.display = 'block';
		hotel_image.style.visibility = 'visible';
	}
	
	var map_image = document.getElementById('map');
	if (map_image) {
		map_image.style.display = 'none';
		map_image.style.visibility = 'hidden';
	}
}

function showMap(map_position) {
	var map_details = map_position.split(',');
	var lat = parseFloat(map_details[0]);
	var lng = parseFloat(map_details[1]);
	var zoom = parseFloat(map_details[2]);
	
	var hotel_image = document.getElementById('hotel_image');
	if (hotel_image) {
		hotel_image.style.display = 'none';
		hotel_image.style.visibility = 'hidden';
	}
	
	var map_holder = document.getElementById("map");
	if (!map_holder) return;
		
	map_holder.style.display = 'block';
	map_holder.style.visibility = 'visible';
	
	if (!map) {
		map = new GMap2(map_holder);
		if (map) {
			map.addControl(new GLargeMapControl());
			map.setCenter(new GLatLng(lat, lng), zoom);
			map.setMapType(G_SATELLITE_MAP);
			addMarker(lat,lng);
		}
		/*
		setTimeout(
			function () {
			},
			500
		);
		*/
	} else {
		map.setCenter(new GLatLng(lat, lng), zoom);
	}
}

function addMarker(lat,lng) {
	if (!lat || lat == "") return -1;
	if (!lng || lng == "") return -1;
	var icon = new GIcon(G_DEFAULT_ICON);
	///icon.image = ICONS_DIR+image;
	//icon.iconSize = new GSize(ICON_W, ICON_H);
	var markerOptions = { icon:icon };
	var point = new GLatLng(parseFloat(lat), parseFloat(lng));
	var marker = new GMarker(point, markerOptions);
	map.addOverlay(marker);
	marker.show();
	//markers.push(marker);
	//return markers.length-1; // return id to line
}

/*Business trip*/
function addTripItem(e) {
	var tr, tbody, new_row,cols, i, trip_items;
	var sel_countries, input_city, date, img, div;
	
	tr = document.getElementById('trip-item'); 
	tbody = getAncestorByName(tr, "TBODY");
	new_row = tr.cloneNode(true);
	cols = new_row.getElementsByTagName('td');
	cols[3].className = '';
	
	sel_countries = getChild(cols[0],"select");
	input_city = getChild(cols[1],"input");
	date = getChild(cols[2],"input");
	img = getChild(cols[2],"img");
	div = getChild(cols[2],"div");
	
	trip_items = (tbody.getAttribute('trip_items')) ? parseInt(tbody.getAttribute('trip_items'),10) : 1;
	trip_items++;
	
	new_row.id = "";
	sel_countries.id += trip_items;
	sel_countries.itemID = trip_items;
	input_city.id += trip_items;
	input_city.itemID = trip_items;
	input_city.value = "";
	date.id += trip_items;
	date.value = '';
	img.id += trip_items;
	div.id += trip_items;

	tbody.appendChild(new_row);
	setAttribute(tbody,'trip_items',trip_items);
	
	//sel_countries.onchange = function() {eval("trip_item_"+this.itemID+".listSelectionChanged(this);") };
	//sel_cities.onchange = function() { eval("trip_item_"+this.itemID+".listSelectionChanged(this);") };
	//eval("trip_item_"+trip_items+" = new listHierarchy(locations, '"+sel_countries.id+"', '"+sel_cities.id+"')");
	img.onclick = function() {showCalendar('DD-MM-YYYY', findMyIndex(date.id), findFormIndex(date.id), div.id, 180, 210);}
	new_row.className = 'visible';
}

function removeTripItem(e) {
	var tr, tbody;
	tr = getAncestorByName(e, 'TR');
	tbody = getAncestorByName(tr, 'TBODY');
	tbody.removeChild(tr);
	setAttribute(tbody,'trip_items',parseInt(tbody.getAttribute('trip_items'),10)-1);
}

function validateTrip() {
	var tr, tbody;
	tr = document.getElementById('trip-item');
	tbody = getAncestorByName(tr, "TBODY");
	tbody.removeChild(tr);
	return true;
}

function changeRooms(e,hidden_row_id) {
	var selected_rooms, tr, tbody, new_row, i, rows,trip_rooms,parent_tr,span;
	selected_rooms = e.options[e.selectedIndex].value;
	tr = document.getElementById(hidden_row_id);
	tbody = getAncestorByName(tr, "TBODY");
	parent_tr = getAncestorByName(e, "TR");
	trip_rooms = (parent_tr.getAttribute('trip_rooms')) ? parseInt(parent_tr.getAttribute('trip_rooms'),10) : 1;
	
	if (selected_rooms > trip_rooms) {
		while(selected_rooms > trip_rooms) {
			new_row = tr.cloneNode(true);
			new_row.id = '';
			span = getChild(new_row,'span');
			if (span) span.innerHTML = span.getAttribute('name')+' '+selected_rooms;
			tbody.appendChild(new_row);
			trip_rooms++;
		}
	} else {
		rows = tbody.getElementsByTagName('tr');
		i=1;
		while (trip_rooms > selected_rooms) {
			tbody.removeChild(rows[rows.length-i]);
			trip_rooms--;
		}
	}
	setAttribute(parent_tr,'trip_rooms',trip_rooms);
}

/*Tour*/
function _hotel_changed_(obj, checkinDay) {
	get_hotel_details(obj.options[obj.selectedIndex].value, checkinDay);
}

function _board_changed_(obj, checkinDay, list) {
	if (document.updatingHotelPrices) {
		setTimeout(
			function () {
				_board_changed_(obj, checkinDay, list);
			},
			500
		);
		return;
	}
	list.listSelectionChanged(obj);
	updateRooms(obj,'hotels_'+checkinDay+'_rooms_1');
	updatePrice(obj);
}

function _room_changed_(obj, list, h) {
	if (document.updatingHotelPrices) {
		setTimeout(
			function () {
				_room_changed_(obj, list, h);
			},
			500
		);
		return;
	}
	list.listSelectionChanged(obj);
	loadMaxPersons(obj,h);
	updatePrice(obj);
}

function _adults_changed_(obj) {
	if (document.updatingHotelPrices) {
		setTimeout(
			function () {
				_adults_changed_(obj);
			},
			500
		);
		return;
	}
	checkPassengers(obj);
	checkRoomMaxPersons(obj);
	updatePrice(obj);
}

function _children_changed_(h, obj) {
	if (!document.updatingHotelPrices) {
		addRemoveChildren(obj,h);
		checkPassengers(obj);
		checkRoomMaxPersons(obj);
		updatePrice(obj);
	} else {
		setTimeout(
			function () {
				_children_changed_(h, obj);
			},
			500
		);
	}
}


function changeTourHotelRooms(e,hidden_tbody_id) { // Add/Remove hotel Rooms
	var tbody, table,new_tbody, selected_rooms, current_rooms;
	
	tbody = document.getElementById(hidden_tbody_id);
	table = getAncestorByName(tbody, "TABLE");
	selected_rooms = e.options[e.selectedIndex].value;
	current_rooms = (e.getAttribute('rooms')) ? parseInt(e.getAttribute('rooms'),10) : 1;
	
	if (selected_rooms > current_rooms) {
		for (current_rooms; current_rooms < selected_rooms; current_rooms++) {
			new_tbody = tbody.cloneNode(true);
			new_tbody.id = null;
			table.appendChild(new_tbody);
			var selects = new_tbody.getElementsByTagName('select');
			selects[0].id = null;
			if (selects[0].onchange) selects[0].onchange() // roomtypes on change handler
		}
	} else {
		tbodies = table.getElementsByTagName('tbody');
		for (current_rooms = tbodies.length; current_rooms > selected_rooms; current_rooms--) {
			table.removeChild(tbodies[current_rooms-1]);
		}
	}
	
	setAttribute(e,'rooms',current_rooms);
	//e['rooms'] = current_rooms;
}

function addRemoveChildren(e,hotel_select_id) { // insert rows with valid children age for current hotelID
	var tr,tbody,selected_children,room_children,i,new_row;
	var hotel_select, hotelID, children_age_select,minAge,maxAge;

	tbody = getAncestorByName(e, "TBODY");
	tr = tbody.getElementsByTagName('tr');
	tr = tr[(tr.length-1)];
	
	selected_children = parseInt(e.options[e.selectedIndex].value,10);
	room_children = (e.getAttributeNode('current_children')) ? parseInt(e.getAttribute('current_children'),10) : 0;
	
	hotel_select = document.getElementById(hotel_select_id);
	
	if (hotel_select && hotel_select.options) hotelID = parseInt(hotel_select.options[hotel_select.selectedIndex].value,10); // TOUR Reservation
	else if(hotel_select && hotel_select.value) hotelID = hotel_select.value // INDIVIDUAL Hotel Reservation
	else hotelID = -1;
	
	if (!childrenAge[hotelID] || childrenAge[hotelID].length < 1) {
		maxAge = -1;
		minAge = -1;			
	} else if(childrenAge[hotelID].length < 2) {
		minAge = (childrenAge[hotelID]) ? childrenAge[hotelID][0].minAge : -1;
		maxAge = (childrenAge[hotelID]) ? childrenAge[hotelID][0].maxAge : -1;
	} else {
		minAge = Math.min(childrenAge[hotelID][0].minAge,childrenAge[hotelID][1].minAge);
		maxAge = Math.max(childrenAge[hotelID][0].maxAge,childrenAge[hotelID][1].maxAge);
		for (j=2;j<childrenAge[hotelID].length;j++) {
			minAge = Math.min(minAge,childrenAge[hotelID][j].minAge);
			maxAge = Math.max(maxAge,childrenAge[hotelID][j].maxAge);
		}
	}
	
	if (selected_children > room_children) {
		for (i=room_children; i< selected_children; i++) {
			new_row = tr.cloneNode(true);
			new_row.id = '';
			new_row.className = '';
			
			tbody.appendChild(new_row);
			room_children++;
			
			children_age_select = new_row.getElementsByTagName('select')[0];
			
			if (minAge > -1 && maxAge > -1 && children_age_select) {
				j = 0;
				for (var a=minAge; a<=maxAge; a++) {
					children_age_select.options[j] = new Option(a,a);
					j++;
				}
			}
		}
	} else {
		rows = tbody.getElementsByTagName('tr');
		for (i = rows.length-1; i > 0; i--) {
			if (i >= selected_children+2) {
				tbody.removeChild(rows[i]);
				room_children--;
			} else {
				var age_select = rows[i].getElementsByTagName('select')[0];
				if (age_select && age_select.selectedIndex >= 0) {
					var oldValue = age_select.options[age_select.selectedIndex].value;
					age_select.options.length = 0;
					j = 0;
					for (var a=minAge; a<=maxAge; a++) {
						age_select.options[j] = new Option(a,a);
						if (a==oldValue) {
							age_select.options[j].selected = true;
							age_select.selecttedIndex = j;
						}						
						j++;
					}
				}
				
				
			}
		}
	}
	setAttribute(e,'current_children',room_children);
	//e['children'] = hotel_children;
}

function updateRooms(e) {
	var table,current_tbodies,selects,source_room_options,i,j;
	table = getAncestorByName(e, "TABLE");
	if (!table) return;
	current_tbodies = table.getElementsByTagName('tbody');
	if (current_tbodies.length > 1) {
		selects = current_tbodies[0].getElementsByTagName('select');
		if (!selects || selects.length < 1) return;
		
		source_room_options = selects[0].options;
		for (i=1; i< current_tbodies.length; i++) {
			selects = current_tbodies[i].getElementsByTagName('select');
			selects[0].options.length = 0;
			for (j=0; j< source_room_options.length; j++) {
				current_tbodies[i].getElementsByTagName('select')[0].options[j] = new Option(source_room_options[j].text,source_room_options[j].value);
			}
			if (current_tbodies[i].getElementsByTagName('select')[0].onchange) current_tbodies[i].getElementsByTagName('select')[0].onchange();
		}
	}
}

function checkPassengers(e) {
	var table,tbodies,selects,current_adults,current_children,i,j;
	
	table = getAncestorByName(e, "TABLE");
	tbodies = table.getElementsByTagName('tbody');
	current_adults = 0;
	current_children = 0;
	for (i=0; i< tbodies.length; i++) {
		selects = tbodies[i].getElementsByTagName('select');
		for (j=0; j< selects.length; j++) {
			if (selects[j].getAttribute('select_adults_number') == 'yes' && selects[j].selectedIndex >= 0) {
				var adults = parseInt(selects[j].options[selects[j].selectedIndex].value,10);
				setAttribute(selects[j],'default_adults', adults);
				current_adults += adults;
			}
			
			if (selects[j].getAttribute('select_children_number') == 'yes' && selects[j].selectedIndex >= 0) {
				var children = parseInt(selects[j].options[selects[j].selectedIndex].value,10);
				setAttribute(selects[j],'default_children', children);
				current_children += children;
			}
		}
	}
	
	if (current_adults > adults_number) {
		//alert('wrong adults number');
		return false;
	}
	if (current_children > children_number) {
		//alert('wrong children number');
		return false;
	}
	return true;
}

function checkRoomMaxPersons(e) {
	var tr = getAncestorByName(e,'TR');
	var selects = tr.getElementsByTagName('select');
	var selectedRoomMaxPersons = 0;
	var roomMaxPersons = parseInt(e.getAttribute('roomMaxPersons'),10);
	for (var i=1; i< selects.length; i++) {
		selectedRoomMaxPersons += parseInt(selects[i].options[selects[i].selectedIndex].value,10);
	}
	if (selectedRoomMaxPersons > roomMaxPersons) {
		//alert('roomMaxPersons exceeded');
		return false;
	}
	return true;
}

function loadMaxPersons(e,hotel_select_id) {
	var tr,selects,hotel_select,roomTypeID,hotelID,adultsMaxPersons,childrenMaxPersons,i,j,minPersons,maxPersons,standardPersons;
	
	if (e.selectedIndex < 0) return;
	
	hotel_select = document.getElementById(hotel_select_id);
	roomTypeID = e.options[e.selectedIndex].value;

	if (hotel_select && hotel_select.options) hotelID = parseInt(hotel_select.options[hotel_select.selectedIndex].value,10);
	else if(hotel_select && hotel_select.value) hotelID = hotel_select.value
	else hotelID = -1;

	if (hotelID == -1) return;
	
	adultsMaxPersons = new Array();
	childrenMaxPersons = new Array();
	
	var min_childs = (roomTypesMaxPersons[hotelID+'_'+roomTypeID+'_2']) ? roomTypesMaxPersons[hotelID+'_'+roomTypeID+'_2'][0].minPersons : -1;
	var std_childs = (roomTypesMaxPersons[hotelID+'_'+roomTypeID+'_2']) ? roomTypesMaxPersons[hotelID+'_'+roomTypeID+'_2'][0].standardPersons : -1;
	var max_childs = (roomTypesMaxPersons[hotelID+'_'+roomTypeID+'_2']) ? roomTypesMaxPersons[hotelID+'_'+roomTypeID+'_2'][0].maxPersons : -1;
	
	var min_adults = (roomTypesMaxPersons[hotelID+'_'+roomTypeID+'_1']) ? roomTypesMaxPersons[hotelID+'_'+roomTypeID+'_1'][0].minPersons : -1;
	var std_adults = (roomTypesMaxPersons[hotelID+'_'+roomTypeID+'_1']) ? roomTypesMaxPersons[hotelID+'_'+roomTypeID+'_1'][0].standardPersons : -1;
	var max_adults = (roomTypesMaxPersons[hotelID+'_'+roomTypeID+'_1']) ? roomTypesMaxPersons[hotelID+'_'+roomTypeID+'_1'][0].maxPersons : -1;
	
	var room_max_persons = (max_adults > -1) ? roomTypesMaxPersons[hotelID+'_'+roomTypeID+'_1'][0].roomMaxPersons : -1;
	var room_min_persons = (min_adults > -1) ? roomTypesMaxPersons[hotelID+'_'+roomTypeID+'_1'][0].roomMinPersons : -1;
	
	if (min_childs > -1 && max_childs > -1 && min_adults > -1 && max_adults >-1) {
		tr = getAncestorByName(e,'TR');
		selects = tr.getElementsByTagName('select');
		
		for (i=1; i<selects.length;i++) {
			minPersons = (i==1) ? min_adults : min_childs;
			maxPersons = (i==1) ? max_adults : max_childs;
			standardPersons = (i==1) ? std_adults : std_childs;
			
			var j = 0;
			
			var oldValue = -1;
			if (selects[i].options.length > 0) {
				oldValue = selects[i].options[selects[i].selectedIndex].value;
			}
			if (selects[i].getAttribute('default_adults')) {
				oldValue = selects[i].getAttribute('default_adults');
			}			
			if (selects[i].getAttribute('default_children')) {
				oldValue = selects[i].getAttribute('default_children');
				setAttribute(selects[i],'current_children', oldValue);
			}

			selects[i].options.length = 0;
			setAttribute(selects[i],'roomMaxPersons',room_max_persons);
			setAttribute(selects[i],'standardPersons',standardPersons);
			setAttribute(selects[i],'roomMinPersons',room_min_persons);
			
			for (minPersons; minPersons <= maxPersons; minPersons++) {
				selects[i].options[j] = new Option(minPersons, minPersons);
				if (minPersons==oldValue || (oldValue<0 && i==1 && minPersons==standardPersons)) {
					selects[i].options[j].selected = true;
					selects[i].selecttedIndex = j;
				}
				j++;
			}
		}
		
		for (i=1; i<selects.length;i++) {
			if (selects[i].onchange) selects[i].onchange();
		}
	}
		
}

function fillPrice(price_element_id, price_field_id, raw_price_field_id) {
	var price_element = document.getElementById(price_element_id);
	var price_field = document.getElementById(price_field_id);
	var raw_price_field = document.getElementById(raw_price_field_id);
	if (!price_element || !price_field || !raw_price_field) return;
	//price_field.value = getChild(price_element,'h1').innerHTML;
	price_field.value = price_element.innerHTML;
	raw_price_field.value = price_element.getAttribute('rawPrice');
}

tour_errors = new Array();
document.priceCalcError = true;

function checkTour(e) {
	var formselects,tourDetails,groups,tbodies,selects,adult_passengers,children_passengers;
	var total_adults,total_children,group_adults,group_children,adults,children,roomMaxPersons,i,j,k;
	
	var ERROR_TOUR_ADULT_PASSENGERS = 0;
	var ERROR_CHILDREN_PASSNGERS = 1;
	var ERROR_EXCEEDS_ROOM_MAX_PERSONS = 2;
	var ERROR_EXCEEDS_ROOM_MIN_PERSONS = 3;
	
	document.priceCalcError = true;
	
	formselects = e.form.getElementsByTagName('select');
	for (i=0; i < formselects.length; i++) formselects[i].className = ''; //reset all select forms
	tour_errors.length = 0; //reset all errors
	
	tourDetails = document.getElementById('tour_details'); //contain all tour details tables
	groups = tourDetails.getElementsByTagName('table');
	
	selects = groups[0].getElementsByTagName('select');
	adult_passengers = selects[0];
	children_passengers = selects[1];
	
	total_adults = parseInt(adult_passengers.options[adult_passengers.selectedIndex].value,10);
	total_children = parseInt(children_passengers.options[children_passengers.selectedIndex].value,10);
	
	group_adults = new Array();
	group_adults.push(total_adults);
	
	group_children = new Array();
	group_children.push(total_children);
	
	for (i=1; i< groups.length; i++) {
	
		group_adults[i] = 0;
		group_children[i] = 0;
		
		tbodies = groups[i].getElementsByTagName('tbody');
		for (j=0; j < tbodies.length; j++) {
			selects = tbodies[j].getElementsByTagName('select');
			if (selects[1].options.length == 0 || selects[2].options.length == 0) {
				return;
			}
			adults = parseInt(selects[1].options[selects[1].selectedIndex].value,10);
			children = parseInt(selects[2].options[selects[2].selectedIndex].value,10);
			roomMaxPersons = parseInt(selects[1].getAttribute('roomMaxPersons'),10);
			roomMinPersons = parseInt(selects[1].getAttribute('roomMinPersons'),10);
			
			if (adults+children > roomMaxPersons) {
				for (k=0; k< 3; k++) selects[k].className='invalid'; // highlight the row with room type, number of adults and number of children
				if (!inArray(ERROR_EXCEEDS_ROOM_MAX_PERSONS,tour_errors)) tour_errors.push(ERROR_EXCEEDS_ROOM_MAX_PERSONS);
			}
			
			if (adults+children < roomMinPersons) {
				for (k=0; k< 3; k++) selects[k].className='invalid'; // highlight the row with room type, number of adults and number of children
				if (!inArray(ERROR_EXCEEDS_ROOM_MIN_PERSONS,tour_errors)) tour_errors.push(ERROR_EXCEEDS_ROOM_MIN_PERSONS);
			}
			
			group_adults[i] += adults;
			group_children[i] += children;
		}
		
		if (group_adults[i] != group_adults[0]) {
			for (j=0; j < tbodies.length; j++) {
				selects = tbodies[j].getElementsByTagName('select');
				selects[1].className = 'invalid';
				adult_passengers.className = 'invalid';
			}
			if (!inArray(ERROR_TOUR_ADULT_PASSENGERS,tour_errors))	tour_errors.push(ERROR_TOUR_ADULT_PASSENGERS);
		}
		
		if (group_children[i] != group_children[0]) {
			for (j=0; j < tbodies.length; j++) {
				selects = tbodies[j].getElementsByTagName('select');
				selects[2].className = 'invalid';
				children_passengers.className = 'invalid';
			}
			if (!inArray(ERROR_CHILDREN_PASSNGERS,tour_errors))	tour_errors.push(ERROR_CHILDREN_PASSNGERS);
		}
	}
	
	document.priceCalcError = (tour_errors.length > 0);
	return (tour_errors.length > 0) ? false : true;
}

function formatPrice(price) {
	var i, priceStr;
	
	priceStr = '';
	if (price > -1) {
		for (i=0; i<allCurrencies.length;i++) {
			style = (i > 0) ? "font-size:10px; line-height:10px; font-weight:normal;" : "";
			priceStr += "<span style='"+style+"'>"+Math.ceil(price/allCurrencies[i].rate)+' '+allCurrencies[i].currency;
			if (i < allCurrencies.length-1) priceStr += ' / ';
			priceStr +=" </span>";
		}
	}
	return priceStr;
}

function updatePrice(e) {
	var tour_price,tour_price_raw,error_container,adults_passengers,children_passengers,adult_passengers_number,children_passengers_number;
	var i,price,transport_price, adult_passengers_number,children_passengers_number,priceStr,style

	tour_price = document.getElementById('tour_price');
	error_container = document.getElementById('tour_errors');

	if (!tour_price || !error_container || document.updatingHotelPrices) {
		setTimeout(
			function() {
				updatePrice(e);
			}, 
			500
		);
		return;
	}
	
	error_container.innerHTML = '';
	if (!checkTour(e)) {
		if (document.discount != 0 || document.absoluteDiscount != 0) {
			if (tour_price_raw = document.getElementById('tour_price_raw')) {
				tour_price_raw.innerHTML = 'N/A';
			}
		}
		tour_price.innerHTML = 'N/A';
		for (i=0; i<tour_errors.length;i++) {
			error_container.innerHTML += tourErrorCodes[tour_errors[i]];
		}
	} else {
		price = calculatePrice(e);
		document.priceCalcError = (price < 0);

		if (price > 0) {
			adults_passengers = document.getElementById('adults_passengers');
			children_passengers = document.getElementById('children_passengers');
	
			adult_passengers_number = parseInt(adults_passengers.options[adults_passengers.selectedIndex].value,10);
			children_passengers_number = parseInt(children_passengers.options[children_passengers.selectedIndex].value,10);
			
			var transport = document.getElementById('transport_type');
			var transportTypeID = (!transport) ? -1 : transport.options[transport.selectedIndex].value;
			if (transportTypeID < 0 || !tour_transport_prices[document.departureDate+'_'+transportTypeID]) {
				tour_price.innerHTML = 'N/A';
			} else {
				transport_price = parseFloat(tour_transport_prices[document.departureDate+'_'+transportTypeID][0].price)*(adult_passengers_number+children_passengers_number);

				// alert(Math.round(price/1.95583)+'+'+Math.round(transport_price/1.95583)+'='+Math.round((price+transport_price)/1.95583));

				price += transport_price;
				
				if (document.discount != 0 || document.absoluteDiscount != 0) {
					priceStr = formatPrice(price);
					if (tour_price_raw = document.getElementById('tour_price_raw')) {
						tour_price_raw.innerHTML = ''+priceStr+'';
					}

					price = price * (1-document.discount/100) - (adult_passengers_number+children_passengers_number) * document.absoluteDiscount;
					
					if (document.absoluteDiscount != 0) {
						var discountStr = '-'+formatPrice((adult_passengers_number+children_passengers_number) * document.absoluteDiscount);
						var absDiscount;
						if (absDiscount = document.getElementById('absolute-discount')) {
							absDiscount.innerHTML = discountStr;
						}
					}
					if (document.discount != 0) {
						var discountStr = '-'+document.discount+'%';
						var discount;
						if (discount = document.getElementById('discount')) {
							discount.innerHTML = discountStr;
						}
					}
					showLayer('discount-details');
				} else hideLayer('discount-details');
				
				priceStr = formatPrice(price);
				setAttribute(tour_price,'rawPrice',price);
				tour_price.innerHTML = ''+priceStr+'';
			}
		} else {
			if (document.discount != 0) {
				if (tour_price_raw = document.getElementById('tour_price_raw')) {
					tour_price_raw.innerHTML = 'N/A';
				}
			}
			tour_price.rawPrice = -1;
			tour_price.innerHTML = 'N/A';
		}
	}
}

function calculatePrice(e) {
	var adults_passengers = document.getElementById('adults_passengers');
	var children_passengers = document.getElementById('children_passengers');
	
	tourDetails = document.getElementById('tour_details'); //contain all tour details tables
	groups = tourDetails.getElementsByTagName('table');
	var hotelIndexes = new Array();
	
	error_container = document.getElementById('tour_errors');
	error_container.innerHTML = '';
	var error_message = tourErrorCodes[4];
	var error_no_vacancy = tourErrorCodes[5];
	
	var price = 0;
	
	var departureDate = document.departureDate;
	if (inArray(departureDate, stopDates)) return -1;
	
	for (var i=1; i<groups.length; i++) {
		var thead = getChild(groups[i],'thead');
		var selects = thead.getElementsByTagName('select');
		var hotelID = selects[0].options[selects[0].selectedIndex].value;
		var boardTypeID = selects[1].options[selects[1].selectedIndex].value;
		var roomsNumber = selects[2].options[selects[2].selectedIndex].value;

		var checkinDay = selects[0].id.split('_')[1];

		var tbodies = groups[i].getElementsByTagName('tbody');
		
		for (var j=0; j<tbodies.length; j++) { // number of rooms
			var selects = tbodies[j].getElementsByTagName('select');
			
			var roomTypeID = selects[0].options[selects[0].selectedIndex].value;
			if (inArray(roomTypeID, hotel_stops[checkinDay])) {
				error_container.innerHTML = error_no_vacancy;
				return -1;
			}
			
			var adultsNumber = selects[1].options[selects[1].selectedIndex].value;
			var standardAdults = selects[1].getAttribute('standardPersons');
			
			var childrenNumber = selects[2].options[selects[2].selectedIndex].value;
			var standardChildren = selects[2].getAttribute('standardPersons');

			var childrenAges = new Array();
			if (childrenNumber > 0) {
				for (var k=0; k<childrenNumber;k++) {
					if (selects[k+4]) {
						childrenAges.push(selects[k+4].options[selects[k+4].selectedIndex].value);
					}
				}
			}
			
			for (var period=0; period<hotel_periods[checkinDay].length; period++) {
				tour_hotel_prices = _tour_hotel_prices_[checkinDay][hotel_periods[checkinDay][period]];
				
				for (var r=0; r<adultsNumber;r++) {
					if (adultsNumber == standardAdults) var isStandard = 1;
					else if(adultsNumber > standardAdults && r+1 <= standardAdults) var isStandard = 1;
					else if(adultsNumber > standardAdults && r+1 >= standardAdults) var isStandard = 3;
					else var isStandard = 2;
					
					var index = departureDate+'_'+hotelID+'_'+boardTypeID+'_'+roomTypeID+'_1_'+isStandard;
					var index_standard = departureDate+'_'+hotelID+'_'+boardTypeID+'_'+roomTypeID+'_1_1';
					if (tour_hotel_prices[index]) {
						var adult_price = tour_hotel_prices[index][0].price;
					} else if(isStandard != 1 && tour_hotel_prices[index_standard]) {
						var adult_price = tour_hotel_prices[index_standard][0].price;
					} else {
						// alert('adults price fail at location:'+i+' at room:'+j+' at adult number:'+r+' width requested index='+index);
						error_container.innerHTML = error_message;
						return -1;
					}
					price += parseFloat(adult_price);
				}
				
				var hotel_adult = price;

				if (childrenNumber==0) continue;
				
				var	index_standard = departureDate+'_'+hotelID+'_'+boardTypeID+'_'+roomTypeID+'_2_1';
				var calcType = tour_hotel_prices[index_standard][0].calcType;
	
				switch (calcType) {
					case 1 : 
						childrenAges.sort(function (a, b) {return a-b;});
					break;
					case 2 : 
						childrenAges.sort(function (a, b) {return b-a;});
					break;
				}
		
				// initializing arrays with each child age index
				// and order by child index
				var childrenByIndex = new Array();
				var childIndex = new Array();
				var childOrder = new Array();
				for (r=0; r<childrenNumber; r++) {
					var child_age = childrenAges[r];
					for (z=0; z<tour_hotel_prices[index_standard].length;z++) {
						if (child_age >= tour_hotel_prices[index_standard][z].minAge && child_age <= tour_hotel_prices[index_standard][z].maxAge) {
							childIndex[r] = '('+tour_hotel_prices[index_standard][z].minAge+'-'+tour_hotel_prices[index_standard][z].maxAge+')';
							if (childrenByIndex[childIndex[r]])
								childrenByIndex[childIndex[r]]++;
							else 
								childrenByIndex[childIndex[r]]=1;
								
							childOrder[r] = childrenByIndex[childIndex[r]];
							break;
						}
					}
				}
	
				for (var r=0; r<childrenNumber;r++) {
					var cNum = (calcType == 3) ? childrenByIndex[childIndex[r]] : childrenNumber;
					var cOrd = (calcType == 3) ? childOrder[r] : r+1;
					
					if (cNum == standardChildren) isStandard = 1;
					else if(cNum > standardChildren && cOrd <= standardChildren) isStandard = 1;
					else if(cNum > standardChildren && cOrd > standardChildren) isStandard = 3;
					else isStandard = 2;
	/*				
					alert(
						'\ncNum='+cNum+
						'\ncOrd='+cOrd+
						'\nstandardChildren='+standardChildren+
						'\nisStandard = '+isStandard
					);
	*/				
					index = departureDate+'_'+hotelID+'_'+boardTypeID+'_'+roomTypeID+'_2_'+isStandard;
					index_standard = departureDate+'_'+hotelID+'_'+boardTypeID+'_'+roomTypeID+'_2_1';
					
					if (tour_hotel_prices[index]) index = index;
					else if(isStandard != 1 && tour_hotel_prices[index_standard]) index = index_standard;
					else {
						// alert('child price fail at location:'+i+' at room:'+j+' at adult number:'+r+' width requested index='+index);
						error_container.innerHTML = error_message;
						return -1;
					}
					
					var child_age = childrenAges[r];
					var child_price = -1;
					for (z=0; z<tour_hotel_prices[index].length;z++) {
						if (child_age >= tour_hotel_prices[index][z].minAge && child_age <= tour_hotel_prices[index][z].maxAge) {
							child_price = tour_hotel_prices[index][z].price;
							break;
						}
					}
					if (child_price > -1) price+= parseFloat(child_price);
					else {
						error_container.innerHTML = error_message;
						// alert('child age price fail at location:'+i+' at room:'+j+' at child number:'+r+' width requested index='+index);
						return -1;
					}
				}
			
			} // periods
			
		}

	}
	/*
	alert(
		'Hotel - Adilt: '+Math.round(hotel_adult)+'\n'+
		'Hotel - Children: '+Math.round(price - hotel_adult)+'\n'
	);
	*/
	return price;
}


/*Hotel*/
function loadSelectedPersons(e,rooms) {
	var table = getAncestorByName(e, 'TABLE');
	var tbodies = table.getElementsByTagName('tbody');
	if (rooms.length != tbodies.length) {
		//alert('rooms number is not equal to tbody elements !');
		return;
	}
	for (var i=0; i< tbodies.length;i++) {
		var selects = tbodies[i].getElementsByTagName('select');
		var selectedIndex = getSelectIndex(selects[0],rooms[i].roomType);
		if (selectedIndex != -1) {
			selects[0].selectedIndex = selectedIndex;
			if (selects[0].onchange) selects[0].onchange();
		}
		var selectedIndex = getSelectIndex(selects[1],rooms[i].adults);
		if (selectedIndex != -1) selects[1].selectedIndex = selectedIndex;
		if (rooms[i].children.length > 0) {
			var selectedIndex = getSelectIndex(selects[2],rooms[i].children.length);
			if (selectedIndex != -1) {
				selects[2].selectedIndex = selectedIndex;
				if (selects[2].onchange) selects[2].onchange();
			}
			var k=0;
			for (var j=4; j<4+rooms[i].children.length; j++) {
				var selectedIndex = getSelectIndex(selects[j],rooms[i].children[k]);
				if (selectedIndex != -1) {
					selects[j].selectedIndex = selectedIndex;
				}
				k++;
			}
		}
		
	}
}

hotel_errors = new Array();
function checkHotel(e) {
	var formselects,hotelDetails,groups,tbodies,selects,adult_passengers,children_passengers;
	var total_adults,total_children,group_adults,group_children,adults,children,roomMaxPersons,i,j,k;
	
	var ERROR_TOUR_ADULT_PASSENGERS = 0;
	var ERROR_CHILDREN_PASSNGERS = 1;
	var ERROR_EXCEEDS_ROOM_MAX_PERSONS = 2;
	
	formselects = e.form.getElementsByTagName('select');
	for (i=0; i < formselects.length; i++) formselects[i].className = ''; //reset all select forms
	hotel_errors.length = 0; //reset all errors
	
	hotelDetails = document.getElementById('hotel_details'); //contain all tour details tables
	groups = hotelDetails.getElementsByTagName('table');
	
	selects = groups[0].getElementsByTagName('select');
	
	for (i=0; i< groups.length; i++) {
		tbodies = groups[i].getElementsByTagName('tbody');
		for (j=0; j < tbodies.length; j++) {
			selects = tbodies[j].getElementsByTagName('select');
			adults = parseInt(selects[1].options[selects[1].selectedIndex].value,10);
			children = parseInt(selects[2].options[selects[2].selectedIndex].value,10);
			roomMaxPersons = parseInt(selects[1].getAttribute('roomMaxPersons'),10);
			
			if (adults+children > roomMaxPersons) {
				for (k=0; k< 3; k++) selects[k].className='invalid'; // highlight the row with room type, number of adults and number of children
				if (!inArray(ERROR_EXCEEDS_ROOM_MAX_PERSONS,hotel_errors)) hotel_errors.push(ERROR_EXCEEDS_ROOM_MAX_PERSONS);
			}
		}
	}
	return (hotel_errors.length > 0) ? false : true;
}

function addDate(dateStr,interval,format) {
	if (!format) format = 'DD-MM-YYYY';
	var dateParse = isDate(format,dateStr);
	if (!dateParse) return false;;
	
	var date = new Date(dateParse[3], dateParse[2]-1, dateParse[1], 0, 0, 0);
	var ms = date.getTime();
	var intervalMs = interval*86400*1000;
	var new_date = new Date((ms+intervalMs));
	
	var day = (new_date.getDate() < 10) ? '0'+new_date.getDate() : new_date.getDate();
	var month = (new_date.getMonth() < 9) ? '0'+(new_date.getMonth()+1) : new_date.getMonth()+1;
	var year = new_date.getFullYear();

	return day+'-'+month+'-'+year;
}

function timeStamp(dateStr,format) {
	if (!format) format = 'DD-MM-YYYY';
	var dateParse = isDate(format,dateStr);
	if (dateParse) {
		var day = dateParse[1];
		var month = dateParse[2]-1;
		var year = dateParse[3];
		
		var date = new Date(year, month, day);
		return date.getTime();
	}
}

function calculateHotelPrice(e) {
	var duration_select,error_container,hotel_details,groups,tbodies,hotelIndexes,thead,selects,hotelID,boardTypeID,roomTypeID,roomsNumber,childrenAges
	var duration,error_message,price,departureDate,endDate,currentDate,is_in_dates,i,j,k,l,r,z,adultsNumber,standardAdults,childrenNumber,child_age,standardChildren,isStandard,index,index_standard
	
	duration_select = document.getElementById('duration');
	duration = duration_select.options[duration_select.selectedIndex].value;
	
	error_container = document.getElementById('hotel_errors');
	error_container.innerHTML = '';
	error_message = '<p>Няма налична цена за избраната комбинация. Моля свържете се с нас за повече информация.</p>';
	
	hotel_details = document.getElementById('hotel_details'); //contain all tour details tables
	groups = hotel_details.getElementsByTagName('table');
	hotelIndexes = new Array();
	
	price = 0;
	
	departureDate = document.departureDate;
	endDate = addDate(departureDate,duration);

	for (i=0; i<groups.length; i++) {
		thead = getChild(groups[i],'thead');
		selects = thead.getElementsByTagName('select');
		hotelID = document.getElementById('hotelID').value;
		boardTypeID = selects[0].options[selects[0].selectedIndex].value;
		roomsNumber = selects[1].options[selects[1].selectedIndex].value;
	
		tbodies = groups[i].getElementsByTagName('tbody');
		
		for (j=0; j<tbodies.length; j++) { // number of rooms
			selects = tbodies[j].getElementsByTagName('select');
			roomTypeID = selects[0].options[selects[0].selectedIndex].value;
			adultsNumber = selects[1].options[selects[1].selectedIndex].value;
			standardAdults = selects[1].getAttribute('standardPersons');
			childrenNumber = selects[2].options[selects[2].selectedIndex].value;
			standardChildren = selects[2].getAttribute('standardPersons');
			
			childrenAges = new Array();
			if (childrenNumber > 0) {
				for (k=0; k<childrenNumber;k++) {
					childrenAges.push(selects[k+4].options[selects[k+4].selectedIndex].value);
				}
			}
			
			for (r=0; r<adultsNumber;r++) {
				if (adultsNumber == standardAdults) isStandard = 1;
				else if(adultsNumber > standardAdults && r+1 <= standardAdults) isStandard = 1;
				else if(adultsNumber > standardAdults && r+1 > standardAdults) isStandard = 3;
				else isStandard = 2;
				index = boardTypeID+'_'+roomTypeID+'_1_'+isStandard;
				index_standard = boardTypeID+'_'+roomTypeID+'_1_1';
				
				if (hotel_prices[index]) index = index;
				else if(isStandard != 1 && hotel_prices[index_standard]) index = index_standard;
				else {
					//alert('adults price fail at location:'+i+' at room:'+j+' at adult number:'+r+' width requested index='+index);
					error_container.innerHTML = error_message;
					return -1;
				}

				for (l=0; l<duration;l++) {
					currentDate = addDate(departureDate,l);
					is_in_dates = false;
					for (z=0; z<hotel_prices[index].length; z++) {
						//alert('currentDate='+currentDate+' startDate='+hotel_prices[index][z].startDate+' endDate='+hotel_prices[index][z].endDate);
						//alert('timestampCurrDate='+timeStamp(currentDate)+' timestampStart='+timeStamp(hotel_prices[index][z].startDate)+' timestampEnd='+timeStamp(hotel_prices[index][z].endDate))
						//alert(timeStamp(currentDate) >= timeStamp(hotel_prices[index][z].startDate) && timeStamp(currentDate) <= timeStamp(hotel_prices[index][z].endDate));
						if (timeStamp(currentDate) >= timeStamp(hotel_prices[index][z].startDate) && timeStamp(currentDate) <= timeStamp(hotel_prices[index][z].endDate)) {
							price += parseFloat(hotel_prices[index][z].price);
							is_in_dates = true;
							break;
						}
					}
					if (!is_in_dates) {
						//alert('adults date price fail at location:'+i+' at room:'+j+' at adult number:'+r+' width requested index='+index);
						error_container.innerHTML = error_message;
						return -1;
					}
				}
		
			}
			
			var	index_standard = boardTypeID+'_'+roomTypeID+'_2_1';
			var calcType = 3;
			
			for (l=0; l<duration; l++) {
				currentDate = addDate(departureDate,l);
				if (hotel_prices[index_standard]) {
					for (z=0; z<hotel_prices[index_standard].length;z++) {
						
						if (timeStamp(currentDate) < timeStamp(hotel_prices[index_standard][z].startDate) || 
							timeStamp(currentDate) > timeStamp(hotel_prices[index_standard][z].endDate)) 
							continue;
						
						calcType = hotel_prices[index_standard][z].calcType;
						break;
					} // for each period [check if day is in]
				}
					
				switch (calcType) {
					case 1 : 
						childrenAges.sort(function (a, b) {return a-b;});
					break;
					case 2 : 
						childrenAges.sort(function (a, b) {return b-a;});
					break;
				}
				
			// initializing arrays with each child age index
			// and order by child index
				var childrenByIndex = new Array();
				var childIndex = new Array();
				var childOrder = new Array();
				for (r=0; r<childrenNumber;r++) {
					var child_age = childrenAges[r];
					for (z=0; z<hotel_prices[index_standard].length;z++) {
						if (child_age >= hotel_prices[index_standard][z].minAge && child_age <= hotel_prices[index_standard][z].maxAge) {
							childIndex[r] = '('+hotel_prices[index_standard][z].minAge+'-'+hotel_prices[index_standard][z].maxAge+')';
							if (childrenByIndex[childIndex[r]])
								childrenByIndex[childIndex[r]]++;
							else 
								childrenByIndex[childIndex[r]]=1;
								
							childOrder[r] = childrenByIndex[childIndex[r]];
							break;
						}
					}
				}
				
				for (r=0; r<childrenNumber;r++) {
					var cNum = (calcType == 3) ? childrenByIndex[childIndex[r]] : childrenNumber;
					var cOrd = (calcType == 3) ? childOrder[r] : r+1;
					
					if (cNum == standardChildren) isStandard = 1;
					else if(cNum > standardChildren && cOrd <= standardChildren) isStandard = 1;
					else if(cNum > standardChildren && cOrd > standardChildren) isStandard = 3;
					else isStandard = 2;
					
					index = boardTypeID+'_'+roomTypeID+'_2_'+isStandard;
					
					if (hotel_prices[index]) index = index;
					else if(isStandard != 1 && hotel_prices[index_standard]) index = index_standard;
					else {
						//alert('adults price fail at location:'+i+' at room:'+j+' at adult number:'+r+' width requested index='+index);
						error_container.innerHTML = error_message;
						return -1;
					}
					
					child_age = childrenAges[r];
					is_in_dates = false;
					for (y=0; y<hotel_prices[index].length;y++) {
						if (timeStamp(currentDate) < timeStamp(hotel_prices[index][y].startDate) || 
							timeStamp(currentDate) > timeStamp(hotel_prices[index][y].endDate)) {
							continue;
						}	
						if (child_age >= hotel_prices[index][y].minAge && child_age <= hotel_prices[index][y].maxAge ) {
							price += parseFloat(hotel_prices[index][y].price);
							is_in_dates = true;
							break;
						}
					}
					if (!is_in_dates) {
						//alert('child age/date price fail at location:'+i+' at room:'+j+' at child number:'+r+' width requested index='+index);
						error_container.innerHTML = error_message;
						return -1;
					}
					
				} // for each child
			} // for each day
		}
	}
	return price;
}

function updateHotelPrice(e) {
	var hotel_price,error_container;
	var i,price,priceStr,style
	
	hotel_price = document.getElementById('hotel_price');
	error_container = document.getElementById('hotel_errors');
	if (!hotel_price || !error_container) {
		setTimeout(function() {updateHotelPrice(e)}, 500);
		return;
	}
	
	error_container.innerHTML = '';
	if (!checkHotel(e)) {
		hotel_price.innerHTML = 'N/A';
		for (i=0; i<hotel_errors.length;i++) {
			error_container.innerHTML += hotelErrorCodes[hotel_errors[i]];
		}
	} else {
		price = calculateHotelPrice(e);
		if (price > 0) {
			priceStr = '';
			if (price > -1) {
				for (i=0; i<allCurrencies.length;i++) {
					style = (i > 0) ? "font-size:10px; line-height:10px; font-weight:normal;" : "";
					priceStr += "<span style="+style+">"+Math.ceil(price/allCurrencies[i].rate)+' '+allCurrencies[i].currency;
					if (i < allCurrencies.length-1) priceStr += ' / ';
					priceStr +=" </span>";
				}
			}
			hotel_price.innerHTML = ''+priceStr+'';
			setAttribute(hotel_price, 'rawPrice', price);
		} else {
			hotel_price.innerHTML = 'N/A';
			setAttribute(hotel_price, 'rawPrice', '');
		}
	}
}

/*Extras*/
function updateExtrasPrice(e) {
	var base_price_element,parent_table,selects,inputs,tbody,thead,tour_price;
	var base_price,price,i,selectedIndex
	
	base_price_element = document.getElementById('base_price');
	tour_price = document.getElementById('tour_price');
	if (!base_price_element)	return;
	parent_table = getAncestorByName(e, 'TABLE');
	thead = getChild(parent_table,'thead'); // tour extras container
	tbody = getChild(parent_table,'tbody');
	base_price = parseFloat(base_price_element.value);
	price = 0;
	
	if (thead) {
		selects = thead.getElementsByTagName('select');
		inputs = thead.getElementsByTagName('input');
		for (i=0; i<selects.length;i++) {
			extras_number = parseInt(selects[i].options[selects[i].selectedIndex].value,10); // extras number
			if (tour_extras[selects[i].getAttribute('index')]) {
				price += parseFloat(tour_extras[selects[i].getAttribute('index')])*extras_number;
			}
			else {
				//alert('can not find tour extra price for index '+selects[i].getAttribute('index'));
				return;
			}
		}
		
		for (i=0; i<inputs.length;i++) {
			extras_number = parseInt(inputs[i].value,10); // extras number
			if (tour_extras[inputs[i].getAttribute('index')]) price += parseFloat(tour_extras[inputs[i].getAttribute('index')])*extras_number;
			else {
				//alert('can not find tour extra price for index '+inputs[i].getAttribute('index'));
				return;
			}
		}
	}
	
	if (tbody) {
		selects = tbody.getElementsByTagName('select');
		for (i=0; i<selects.length;i++) {
			extras_number = parseInt(selects[i].options[selects[i].selectedIndex].value,10); // extras number
			if (tour_hotel_extras[selects[i].getAttribute('index')]) price += parseFloat(tour_hotel_extras[selects[i].getAttribute('index')])*extras_number;
			else {
				//alert('can not find tour hotel extra price for index '+selects[i].getAttribute('index'));
				return;
			}
		}
	}
	tour_price.innerHTML = ''+getPriceString(price+base_price)+'';
	setAttribute(tour_price, 'rawPrice', price+base_price);
}

function updateExtrasSubTotal(e,price_array) {
	var i,price,extras_number
	var parent_tr,tds
	price = 0;
	extras_number = parseInt(e.options[e.selectedIndex].value,10);
	
	if (price_array[e.getAttribute('index')]) price = parseFloat(extras_number*price_array[e.getAttribute('index')]);
	else return;
	
	parent_tr = getAncestorByName(e, 'TR');
	if (parent_tr) {
		tds = parent_tr.getElementsByTagName('td');
		if (tds[tds.length-1]) tds[tds.length-1].innerHTML = getPriceString(price);
	}
}

function getPriceString(price) {
	var priceStr = '';
	for (i=0; i<allCurrencies.length;i++) {
		style = (i > 0) ? "font-size:10px; line-height:10px; font-weight:normal;" : "";
		priceStr += "<span style="+style+">"+Math.ceil(price/allCurrencies[i].rate)+' '+allCurrencies[i].currency;
		if (i < allCurrencies.length-1) priceStr += ' / ';
		priceStr +=" </span>";
	}
	return priceStr;
}

/*checkout*/
function changePayment(e) {
	if (e.options[e.selectedIndex].value == 'office') {
		hideLayer('bank_info');
		showLayer('offices');
	} else if (e.options[e.selectedIndex].value == 'bank') {
		hideLayer('offices');
		showLayer('bank_info');
	} else {
		hideLayer('offices');
		hideLayer('bank_info');
	}
}
