//configs &common jscript code:
function isN(v) {
	return (!isNaN(v));
}

function isEmpty( o ) {
    for ( var p in o ) { 
        if ( o.hasOwnProperty( p ) ) { return false; }
    }
    return true;
}

function isU(v) {
	return (typeof(v) === 'undefined');
}

function nz(v, r) {
	if (typeof(r) === 'undefined') {
		r = '';
	}
	if (v === null || v === undefined) {
		return (r);
	}
	else {
		return (v);
	}
}

if (!String.prototype.ucFirst) {
	String.prototype.ucFirst = function () {
		return this.charAt(0).toUpperCase() + this.slice(1);
	};
}

/**
 * extend objects with indexOf method if not exist (IE)
 */
if (!Array.indexOf) {
	Array.prototype.indexOf = function (obj, start) {
		for (var i = (start || 0); i < this.length; i++) {
			if (this[i] === obj) {
				return i;
			}
		}
	};
}

/**
 * extend jquery to add sumValues
 */
$.fn.sumValues = function () {
	var sum = 0;
	this.each(function () {
		var val = 0;
		if ($(this).is(':input')) {
			val = $(this).val();
		}
		else {
			val = $(this).text();
		}
		sum += parseFloat(('0' + val).replace(/[^0-9-\.]/g, ''), 10);
	});
	return sum;
};

/**
 * extend jquery to add mapping 2 arrays into one object
 */
$.fn.arrayMap = function (arNames, arValues) {
	var oReturn = {};
	var i;
	var iMax = Math.min(arNames.length, arValues.length);
	for (i = 0; i < iMax; i++) {
		oReturn[arNames[i]] = arValues[i];
	}
	return (oReturn);
};

/**
 * extend jquery to add get vars from url
 */
$.fn.getUrlVars = function (sUrl) {
	if (typeof(sUrl) === 'undefined') {
		sUrl = window.location.href;
	}
	var vars = [], hash;
	var hashes = sUrl.slice(sUrl.indexOf('?') + 1).split('&');
	for (var i = 0; i < hashes.length; i++) {
		hash = hashes[i].split('=');
		vars.push(hash[0]);
		vars[hash[0]] = hash[1];
	}
	return vars;
};

//definitions:

/**
 * <b>mfe</b> - Mirabilandia Front End javascript object
 */
var mfe = {
	alert: function (sAlertId) {
		alert(rawData.alerts[sAlertId] ? rawData.alerts[sAlertId] : sAlertId);
	},
	basket: {
		data: {},
		discountCode:{sconto:0,type:2,value:0},
		init: function () {
			this.data = {
				hotel: {
					id: null,
					name: null,
					stars: null,
					rooms: []
				},
				offer: {
					id: null,
					index: 0,
					arrDate: [],
					depDate: [],
					boardingPattern: null,
					not: null,
					maskPark: 0,
					avail: true,
					stars: null
				},
				price: {
					total: 0,
					variation: 0,
					reservation: 0,
					vacanzaFlessibile: 0
				},
				request: {
					id: null
				},
				rooms: [],
				tickets: [],
				ticketsAll: [],
				LmTicketChanged:[]
			};
		},
		set: function (oPropertyData) {
			var self = this;
			var iRoomNr, arChildren, iNrOfTickets, iNrOfTicketsPerRoom, oOffer;

//offer:
			oOffer =  $.fn.arrayMap(rawData.offers.fields, rawData.offers.data[rawData.offers.current]);
//	| id:
			this.data.offer.index = rawData.offers.current;
			this.data.offer.id = oOffer.index;
			this.data.offer.boardingPattern = parseInt(oOffer.boardPattern, 10);
			this.data.offer.stars = oOffer.stars;

//	| arrival date:
			this.data.offer.arrDate.dt = $('#arrCalendar').datepicker('getDate');
			if (this.data.offer.arrDate.dt === null) {
				return;
			}
			this.data.offer.arrDate.str = $.datepicker.formatDate('yy-mm-dd', this.data.offer.arrDate.dt);
			this.data.offer.arrDate.ts = parseInt($.datepicker.formatDate('@', this.data.offer.arrDate.dt), 10);

//	| end date:
			this.data.offer.depDate.non = parseInt($('#selNotti').val(), 10);
			this.data.offer.depDate.ts = this.data.offer.arrDate.ts + 86400000 * this.data.offer.depDate.non + 43200000;
			this.data.offer.depDate.dt = $.datepicker.parseDate('@', this.data.offer.depDate.ts);
			this.data.offer.depDate.str = $.datepicker.formatDate('yy-mm-dd', this.data.offer.depDate.dt);
			/*if(this.data.offer.depDate.non >0 && ($.datepicker.formatDate('yymmdd', this.data.offer.depDate.dt) == $.datepicker.formatDate('yymmdd', this.data.offer.arrDate.dt)))
			{
				this.data.offer.depDate.ts = parseInt(this.data.offer.depDate.dt.getTime())+86400000+10800000;
				this.data.offer.depDate.dt = $.datepicker.parseDate('@', this.data.offer.depDate.ts);
				this.data.offer.depDate.str = $.datepicker.formatDate('yy-mm-dd', this.data.offer.depDate.dt);
			}*/
//rooms:
			this.data.rooms = [];
			iNrOfTickets = 0;
			$('div#rooms fieldset.room').each(function () {
				iRoomNr = this.id.substr(5);
				if (isN($('#selRoomType_' + iRoomNr).val()) && isN($('#selRoomType_' + iRoomNr).val())) {
					arChildren = [];
					$(this).find('select.selChild').each(function () {
						if (isN($(this).val())) {
							arChildren.push($(this).val());
						}
					});

					iNrOfTicketsPerRoom = parseInt($('input[name=rdTickets' + iRoomNr + ']:radio:checked').val(), 10) * parseInt($('select#selTicketsNr_' + iRoomNr).val(), 10);
					self.data.rooms.push({
						'adt': self.data.offer.arrDate.str,
						'non': self.data.offer.depDate.non,
						'noa': rawData.lookUp('adultsNr', 'roomType', [{column: 'index'}, '=', parseInt($('select#selRoomType_' + iRoomNr).val(), 10)]),
						'typ': rawData.lookUp('pattern', 'roomType', [{column: 'index'}, '=', parseInt($('select#selRoomType_' + iRoomNr).val(), 10)]),
						'brd': rawData.lookUp('pattern', 'boardType', [{column: 'index'}, '=', parseInt($('select#selBoardType_' + iRoomNr).val(), 10)]),
						'ch': arChildren,
						'not': iNrOfTicketsPerRoom
					});
					iNrOfTickets += iNrOfTicketsPerRoom;
				}
			});
			this.data.rooms = self.data.rooms;
			this.data.offer.not = iNrOfTickets;

//price:
			this.data.price.variation = mfe.format.euro2nr(nz($('input#txtVariation').val(), 0));
		}
	},
	form: {
		message: {
			close: function (oMessageElement) {
				$(oMessageElement).parent().hide();
			},
			onBlur: function (oMessageElement) {
				$(oMessageElement).remove('a.closeLink');
			},
			onFocus: function (oMessageElement) {
//attach delete icon
				if ($(oMessageElement).find('a.closeLink').length === 0) {
					$(oMessageElement).append('<a href="javascript:;" class="closeLink" onclick="javasecript:mfe.form.message.close(this)">chiudi</a>');
				}
			}
		},
		select: {
/**
* method add(inject) <code>option</code> elements to a <code>select</code> element
*
*
* @param jqSelect - the jQuery selector for <code>select</code> element;
*
* @param oData - object which contain the data;
*	oData.data = the array which contain the data;
*	oData.[index] <i>integer</i>
*		- the nr of column which contain the value attribute of option element;
*		- if not defined, is consireded as 0 = the 1st column from array;
*	oData.[value] <i>integer</i>
*		- the nr of column which contain the text of option element;
*		- if not defined, is considered as 1 = the 2nd column of data array;
*	oData.[comparison] <i>integer</i>
*		- used only if oPattern is specified;
*		- the nr of column which is used to limit the result;
*		- if not defined, is considered as oData.value + 1;
* @param [oPattern] - object used to limit the data;
* 	oPattern.type <i>string</i>
* 		- possible values:
* 			'add'		- perform and comparison;
* 			'interval'	- perform a comparison in specific interval;
*	oPattern.mask
*	oPatterm.min
*	oPattern.max
* @return null
*/
			appendAllOptions: function (jqSelect, oData, oPattern) {
//checks:
				if (typeof(jqSelect) === "undefined" || typeof(oData) === "undefined") {
					return;
				}
				var i;
				var bCheckPattern = true;
				var iDataIndex = 0;
				if (!isNaN(oData.index)) {
					iDataIndex = oData.index;
				}
				var iDataValue = 1;
				if (!isNaN(oData.value)) {
					iDataValue = oData.value;
				}
				var iDataComparison = iDataValue + 1;
				if (!isNaN(oData.comparison)) {
					iDataComparison = oData.comparison;
				}
				var iCount = oData.data.length;
				if (typeof(oPattern) === "undefined") {
					bCheckPattern = false;
				}

//the action:
				if (bCheckPattern) {
					switch (oPattern.type) {
					case 'and':
						for (i = 0; i < iCount; i++) {
							if ((oData.data[i][oData.comparison] & oPattern.mask) === oData.data[i][oData.comparison]) {
								fw.form.select.appendOption(
									jqSelect,
									oData.data[i][iDataIndex],
									oData.data[i][iDataValue]);
							}
						}
						break;

					case 'interval':
						for (i = 0; i < iCount; i++) {
							if (oData.data[i][oData.comparison] >= oPattern.min && oData.data[i][oData.comparison] <= oPattern.max) {
								fw.form.select.appendOption(
									jqSelect,
									oData.data[i][iDataIndex],
									oData.data[i][iDataValue]);
							}
						}
						break;

					case 'eq':
						for (i = 0; i < iCount; i++) {
							if (oData.data[i][oData.comparison] === oPattern.mask) {
								fw.form.select.appendOption(
									jqSelect,
									oData.data[i][iDataIndex],
									oData.data[i][iDataValue]);
							}
						}
					}
				}
				else {
					for (i = 0; i < iCount; i++) {
						fw.form.select.appendOption(
							jqSelect,
							oData.data[i][iDataIndex],
							oData.data[i][iDataValue]);
					}
				}
			}
		}
	},
	room: {
		add: function () {
			var iNrOfRoomsInDom = $('fieldset.room').length;
			var iNewRoomNr = iNrOfRoomsInDom + 1;
			var sContent;
//create fieldset:
			$('div#rooms').append('<fieldset class="room" id="room_' + iNewRoomNr + '"><legend>' + rawData.labels.room + ' ' + iNewRoomNr + '</legend></fieldset>');
//create labels:
			sContent = '<p>';
			sContent += '<label class="col_1" for="selRoomType_' + iNewRoomNr + '">' + rawData.labels.adults + '</label>';
			sContent += '<label class="col_2" for="selChildrenNr_' + iNewRoomNr + '">' + rawData.labels.children + '</label>';
			sContent += '<label class="col_3" for="selBoardType_' + iNewRoomNr + '">' + rawData.labels.boarding + '</label>';
			sContent += '</p>';
			$('fieldset#room_' + iNewRoomNr).append(sContent);

//create select (combos):
			sContent = '<p>';
			sContent += '<select class="col_1 selRoomType" tabindex="' + (iNewRoomNr * 3 + 1) + '" id="selRoomType_' + iNewRoomNr + '" name="selRoomType_' + iNewRoomNr + '" onchange="mfe.room.onChangeRoomType(' + iNewRoomNr + ')"></select>';
			sContent += '<select class="col_2 selChildrenNr" tabindex="' + (iNewRoomNr * 3 + 2) + '" id="selChildrenNr_' + iNewRoomNr + '" name="selChildrenNr_' + iNewRoomNr + '" onchange="mfe.room.onChangeNrOfChildren(' + iNewRoomNr + ')"></select>';
			sContent += '<select class="col_3 selBoardType" tabindex="' + (iNewRoomNr * 3 + 3) + '" id="selBoardType_' + iNewRoomNr + '" name="selBoardType_' + iNewRoomNr + '" onchange="mfe.room.onChangeBoardType(' + iNewRoomNr + ')"></select>';
			sContent += '</p>';
			$('fieldset#room_' + iNewRoomNr).append(sContent);

//append options to combos:
			mfe.form.select.appendAllOptions(
				$('#selRoomType_' + iNewRoomNr),
				{data: rawData.roomType.data, value: 4, comparison: 3},
				{
					type: 'interval',
					min: rawData.get('offers', mfe.basket.data.offer.index, 'minAdults'),
					max: rawData.get('offers', mfe.basket.data.offer.index, 'maxAdults')
				});
			$('#selRoomType_' + iNewRoomNr).val(2);

			var iMinChild = rawData.get('offers', mfe.basket.data.offer.index, 'minBambini');
			if (!iMinChild) {
				iMinChild = 0; //default nr min of children is 0;
			}
			var iMaxChild = rawData.get('offers', mfe.basket.data.offer.index, 'maxBambini');
			if (!iMaxChild) {
				iMaxChild = 3; //default nr max of children is 3;
			}
			for (i = iMinChild; i <= iMaxChild; i++) {
				fw.form.select.appendOption($('select#selChildrenNr_' + iNewRoomNr), i, i);
			}

			mfe.form.select.appendAllOptions(
				$('#selBoardType_' + iNewRoomNr),
				{data: rawData.boardType.data, value: 2, comparison: 1},
				{
					type: 'and',
					mask: rawData.get('offers', mfe.basket.data.offer.index, 'boardPattern')
				});
//append children container:
			$('fieldset#room_' + iNewRoomNr).append('<ul class="children"></ul>');
//append tickets:
			sContent = '<div class="tickets">';
			sContent += '<span>' + rawData.labels.doYouHaveTicket + '</span>';
			sContent += '<input type="radio" name="rdTickets' + iNewRoomNr + '" id="rdTicketsY' + iNewRoomNr + '" value="1" onclick="mfe.room.onClickRadioTickets(' + iNewRoomNr + ', 1)"/><label for="rdTicketsY' + iNewRoomNr + '">' + rawData.labels.yes + '</label>';
			sContent += '<input type="radio" name="rdTickets' + iNewRoomNr + '" id="rdTicketsN' + iNewRoomNr + '" value="0" onclick="mfe.room.onClickRadioTickets(' + iNewRoomNr + ', 0)" checked="checked" /><label for="rdTicketsN' + iNewRoomNr + '">' + rawData.labels.no + '</label>';
			sContent += '<div class="divTicketsNr" style="display:none">';
			sContent += '<label for="selTicketsNr_' + iNewRoomNr + '">' + rawData.labels.howManyTickets + '</label>';
			sContent += '<select name="selTicketsNr_' + iNewRoomNr + '" id="selTicketsNr_' + iNewRoomNr + '" onchange="mfe.room.onChangeSelTicketsNr(' + iNewRoomNr + ')" >';
			sContent += '<option value="0">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option>';
			sContent += '</select></div></div>';
			$('fieldset#room_' + iNewRoomNr).append(sContent);
//append price:
			$('fieldset#room_' + iNewRoomNr).append('<div class="price"><span class="label">' + rawData.labels.roomPrice + '&nbsp;&euro;</span><span class="rawValueVisible">-</span><span class="valueVisible">-</span><span class="rawValue">-</span><span class="value">-</span></div>');
		},
		checkMaxNrOfPersPerRoom: function (iRoomId) {
			var jqSelAdultsNr;
			var iOverPers = this.getPersNr(iRoomId) - parseInt(rawData.get('offers', mfe.basket.data.offer.index, 'maxAdults'), 10);
			if (iOverPers > 0) {
				jqSelAdultsNr = $('select#selRoomType_' + iRoomId);
				jqSelAdultsNr.val(jqSelAdultsNr.val() - iOverPers);
				if ($('select#selRoomType_' + iRoomId).val() === '3') {
					$('select#selRoomType_' + iRoomId).val(2);
				}
				mfe.alert('MaxNrOfPersonsPerRoomExceeded');
			}
		},
		checkNrOfChildsInCradle: function (iRoomId) {
//check for total nr of childs in culla (maximum is 1(one))
			var iNrChildsInCradle = 0;
			$('fieldset#room_' + iRoomId + ' ul.children li select.selChild').each(function () {
				var chTypeId = $(this).val();
				if (rawData.lookUp('cradle', 'childType', [{column: 'index'}, '=', parseInt($(this).val(), 10)]) === 1) {
					iNrChildsInCradle++;
				}
				if (iNrChildsInCradle > 1) {
					$(this).val(0);
					mfe.alert('MaxNrOfChildsInCradle');
					iNrChildsInCradle = 1;
				}
			});
		},
		getNrOfTickets: function (iRoomId) {
			return (parseInt($('input[name=rdTickets' + iRoomId + ']:radio:checked').val(), 10) * parseInt($('select#selTicketsNr_' + iRoomId).val(), 10));
		},
		checkNrOfTickets: function (iRoomId) {
			if (this.getNrOfTickets(iRoomId) > this.getTicketsNr(iRoomId)) {
				mfe.alert('MoreTicketsThanPersons');
				$('select#selTicketsNr_' + iRoomId).val(this.getTicketsNr(iRoomId));
			}
		},
		child:
		{
			add: function (iRoomId) {
				var iChildrenId = 1 + $('fieldset#room_' + iRoomId + ' ul.children li').length;
				var sContent = '<li>';
				sContent += '<label for="selChild_' + iRoomId + '_' + iChildrenId + '">' + rawData.labels.childAge + ' ' + iChildrenId + ':</label>';
				sContent += '<select class="col_1 selChild" id="selChild_' + iRoomId + '_' + iChildrenId + '" name="selChild_' + iRoomId + '_' + iChildrenId + '" onchange="mfe.room.onChangeChildType(' + iRoomId + ')"><option class="defaultOption">Selezionare:</option></select>';
				sContent += '</li>';
				$('fieldset#room_' + iRoomId + ' ul.children').append(sContent);
				mfe.form.select.appendAllOptions(
					$('#selChild_' + iRoomId + '_' + iChildrenId),
					{data: rawData.childType.data, value: 2, comparison: 1},
					{type: 'eq', mask: parseInt(rawData.get('offers', mfe.basket.data.offer.index, 'index'), 10)});
			},
			removeLast: function (iRoomId) {
				$('fieldset#room_' + iRoomId + ' ul.children li:last').remove();
			}
		},
		getTicketsNr: function (iRoomId) {
			var iRoomType = $('#selRoomType_' + iRoomId).val();
			if (isNaN(iRoomType)) {
				return 0;
			}
			else {
				iRoomType = parseInt(iRoomType, 10);
			}
			var iAdultsNr = rawData.lookUp('adultsNr', 'roomType', [{column: 'index'}, '=', iRoomType]);
			if (isNaN(iAdultsNr)) {
				iAdultsNr = 0;
			}
			else {
				iAdultsNr = parseInt(iAdultsNr, 10);
			}

			var iTicketsNr = iAdultsNr; //for sure there is one ticket per adult;

			$('fieldset#room_' + iRoomId + ' ul.children li select.selChild').each(function () {
				if (isN($(this).val()) && rawData.lookUp('ticket', 'childType', [{column: 'index'}, '=', parseInt($(this).val(), 10)]) === 1) {
					iTicketsNr++;
				}
			});
			return (iTicketsNr);
		},
		getPersNr: function (iRoomId) {
			var iRoomType = $('#selRoomType_' + iRoomId).val();
			if (isNaN(iRoomType)) {
				return 0;
			}
			else {
				iRoomType = parseInt(iRoomType, 10);
			}
			var iAdultsNr = rawData.lookUp('adultsNr', 'roomType', [{column: 'index'}, '=', iRoomType]);
			if (isNaN(iAdultsNr)) {
				iAdultsNr = 0;
			}
			else {
				iAdultsNr = parseInt(iAdultsNr, 10);
			}

			$('fieldset#room_' + iRoomId + ' ul.children li select.selChild').each(function () {
				if (isN($(this).val()) && rawData.lookUp('cradle', 'childType', [{column: 'index'}, '=', parseInt($(this).val(), 10)]) !== 1) {
					iAdultsNr++;
				}
			});
			return (iAdultsNr);
		},
		onChangeNrOfChildren: function (iRoomId) {
			var i;
			var iNrOfChildrenInDom = $('fieldset#room_' + iRoomId + ' select.selChild').length;
			var iNrOfChildrenSel = parseInt($('#selChildrenNr_' + iRoomId).val(), 10);

			if (iNrOfChildrenInDom === iNrOfChildrenSel) {
				console.info("how you arrive here?");
			}
			if (iNrOfChildrenInDom < iNrOfChildrenSel) {
				for (i = iNrOfChildrenInDom; i < iNrOfChildrenSel; i++) {
					this.child.add(iRoomId);
				}
			}
			else {
				for (i = iNrOfChildrenSel; i < iNrOfChildrenInDom; i++) {
					this.child.removeLast(iRoomId);
					mfe.getPrice(iRoomId);
				}
			}
		},
		onClickRadioTickets: function (iRoomId) {
			var i;
			var iStatus = parseInt($('input[name=rdTickets' + iRoomId + ']:checked').val(), 10);
			if (iStatus === 1) {
				if (this.getPersNr(iRoomId) > 0) {
					$('fieldset#room_' + iRoomId + ' div.divTicketsNr').show(0);
				}
				else {
					mfe.alert('MinOnePersonForSelectTicket');
					$('input#rdTicketsN' + iRoomId).attr('checked', true);
				}
			}
			else {
				$('fieldset#room_' + iRoomId + ' div.divTicketsNr').hide(200);
				if ($('select#selTicketsNr_' + iRoomId).val() !== '0') {
					mfe.getPrice(iRoomId);
					$('select#selTicketsNr_' + iRoomId).val(0);
				}
			}
		},
		onChangeChildType: function (iRoomId) {
			this.checkNrOfChildsInCradle(iRoomId);
			this.checkMaxNrOfPersPerRoom(iRoomId);
			this.checkNrOfTickets(iRoomId);
			mfe.getPrice(iRoomId);
		},
		onChangeRoomType: function (iRoomId) {
			this.checkMaxNrOfPersPerRoom(iRoomId);
			this.checkNrOfTickets(iRoomId);
			mfe.getPrice(iRoomId);
		},
		onChangeBoardType: function (iRoomId) {
			mfe.getPrice(iRoomId);
		},
		onChangeSelTicketsNr: function (iRoomId) {
			this.checkNrOfTickets(iRoomId);
			mfe.getPrice(iRoomId);
//			console.info('get price onChangeSelTicketsNr? - yes');
		},
		removeLast: function () {
			$('div#rooms fieldset:last').remove();
		}
	},
	onChangeSelCountry: function () {
		if ($('#selCountry').val() === '45') {
			$('#selRegion').removeAttr('disabled').addClass('fw-validation-compiled');
		}
		else {
			$('#selRegion').val('-').attr('disabled', 'disabled').removeClass('fw-validation-compiled');
		}
	},
	onChangeNrOfRooms: function () {
		var i;
		var iNrOfRoomsInDom = $('fieldset.room').length;
		var iNrOfRoomsSel = parseInt($('#selRoomsNr').val(), 10);
		if (iNrOfRoomsInDom === iNrOfRoomsSel) {
			console.info("how you arrive here?");
		}
		if (iNrOfRoomsInDom < iNrOfRoomsSel) {
			for (i = iNrOfRoomsInDom; i < iNrOfRoomsSel; i++) {
				this.room.add();
			}
		}
		else {
			for (i = iNrOfRoomsSel; i < iNrOfRoomsInDom; i++) {
				this.room.removeLast();
			}
		}
		this.getPrice();
		this.onclickVacanzaFlessibile();
	},
	onChangeNrOfNights: function () {
		this.checkNrOfNightsInterval();
		this.setDepartureDate();
		this.getPrice();
	},
	checkNrOfNightsInterval: function (bShowAlertMessage) {
//not only do the checks, but also is fixing the value for combo control and display an alert message as default option.
		if (typeof(bShowAlertMessage) === 'undefined') {
			bShowAlertMessage = true;
		}
		var i, iMinNights, iMaxNights = 0, iSelectedNrOfNights = parseInt($('#selNotti').val(), 10);

//get calendar pattern for arrival day:
		var iCurrentDay = parseInt($.datepicker.formatDate('d', $('#arrCalendar').datepicker('getDate')), 10);
		var iCurrentMonth = parseInt($.datepicker.formatDate('m', $('#arrCalendar').datepicker('getDate')), 10);
		var iCurrentYear = parseInt($.datepicker.formatDate('yy', $('#arrCalendar').datepicker('getDate')), 10);
		var iMax = rawData.calendarPattern.data.length;
		arMonthCalendarPattern = [];
		for (i = 0; i < iMax; i++) {
			if (parseInt(rawData.calendarPattern.data[i][0], 10) === parseInt(mfe.basket.data.offer.id, 10) && parseInt(rawData.calendarPattern.data[i][1], 10) === iCurrentYear && parseInt(rawData.calendarPattern.data[i][2], 10) === iCurrentMonth) {
				arMonthCalendarPattern = rawData.calendarPattern.data[i][3];
				break;
			}
		}
		if (arMonthCalendarPattern.length > 0) {
			iMinNights = mfe.lookupForDayCalendarPattern(arMonthCalendarPattern, iCurrentDay);
			if (iMinNights !== false) {
				iMinNights = iMinNights.minNigths;
			}
			else {
				iMinNights = 0;
			}
		}

//do the checks (ignore them if min and max not defined, zero as default)
		if (iMinNights > 0 && iMinNights > iSelectedNrOfNights) {
			if (bShowAlertMessage) {
				this.alert(rawData.alerts.minNightsP1 + ' ' + iMinNights + ' ' + rawData.alerts.minNightsP2);
			}
			$('#selNotti').val(iMinNights);
		}
		if (iMaxNights > 0 && iMaxNights < iSelectedNrOfNights) {
			if (bShowAlertMessage) {
				this.alert(rawData.alerts.maxNightsP1 + ' ' + iMaxNights + ' ' + rawData.alerts.maxNightsP2);
			}
			$('#selNotti').val(iMinNights);
		}
	},
	onChangeVariation: function () {
		this.setVariation();
	},
	setVariation: function () {

		if (nz($('input#txtVariation').val(), 0) !== 0) {
			fTotal = mfe.format.euro2nr($('input#txtRawTotal').val()) + mfe.format.euro2nr($('input#txtVariation').val()) - mfe.format.euro2nr($('input#txtDiscount').val()) - mfe.basket.discountCode.value + mfe.basket.data.price.vacanzaFlessibile + mfe.format.euro2nr($('input#txtscontoLmTkChange').val())+mfe.format.euro2nr($('input#hidParkTotal').val()) ;
			if(fTotal<0)
			{
				fTotal = 0;
			}
			if (isN(fTotal)) {
				$('input#txtTotal').val(mfe.format.nr2euro(fTotal, false));
			}
		}

	},
	getPrice: function (iRoomTrigger) {
		mfe.basket.set();
		$('div#formMessage').text('');
//reset actual values:
		mfe.outputPrices('', true);

		if (isNaN($('select#selNotti').val())) {
			return 0;
		}

		if ($('div#fieldSubmit1').css('display') === 'none') {
			return 0;
		}

		if ($('div#arrCalendar').val() === '') {
			return 0;
		}
		if (typeof(iRoomTrigger) === 'undefined') {
//not trigger from a specific room section -> nothing to initialize
		}
		else {
//check the controls from triggered room:
			if (isNaN($('select#selRoomType_' + iRoomTrigger).val())) {
				return 0;
			}
			if (isNaN($('select#selChildrenNr_' + iRoomTrigger).val())) {
				return 0;
			}
			if (isNaN($('select#selBoardType_' + iRoomTrigger).val())) {
				return 0;
			}
		}

		var iMax = 0;
		var oPrices = {};
		var dArrDate = $.datepicker.parseDate('dd/mm/yy', $('div#arrCalendar').val());
		var oChilds = [];
		var iRoomNr = 0;
		var bIsTicket = false;

		if (mfe.basket.data.rooms.length === 0) {
//no room selected!;
			return 0;
		}

//call server to get the price object:
		$.ajax({
			async: false,
			data: {
				get: 'price',
				req: {
					off: mfe.basket.data.offer.id,
					r: mfe.basket.data.rooms,
					opm: mfe.basket.data.offer.maskPark,
					discCode: mfe.basket.discountCode,
					vacanzaFlessibile: mfe.basket.data.price.vacanzaFlessibile
				}
			},
			dataType: 'json',
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				mfe.outputPrices('-', true);
//				console.info(errorThrown);
			},
			success: function (data, textStatus, errorThrown) {
				if (data.blnSuccess === true) {
					mfe.outputPrices(data.arrParams.prices, false);
					mfe.setVariation();
				} else
				{
					mfe.outputPrices('-', true);
					console.info(textStatus);
				}
			},
			type: 'POST',
			url: '/frontEnd/frontend.ajax.php'
		});
	},
	outputPrices: function (oPrices, bReset) {
		var LmTkChanged = 0;
		var LmTkChangesLabel;
		if (bReset) {
			$('input#hidParkTotal').val(0);
			$('input#txtRawTotal').val(oPrices);
			$('input#txtDiscount').val(oPrices);
			$('input#txtTotal').val(oPrices);
			$('#totals .totalDiscount .value').html(oPrices);
			$('#totals .totalNet .value').html(oPrices);

			$('div#rooms fieldset.room div.price span.value').text(oPrices);
			$('div#rooms fieldset.room div.price span.value').removeClass('strikethrough');
			$('div#rooms fieldset.room div.price span.value').hide();
			$('div#rooms fieldset.room div.price span.rawValue').hide();
			$('div#rooms fieldset.room div.price span.valueVisible').text(oPrices);
			$('div#rooms fieldset.room div.price span.valueVisible').removeClass('strikethrough');
			$('div#rooms fieldset.room div.price span.rawValueVisible').hide();
			$('div#totals .rawTotal').hide();
			$('div#totals .rawTotalVisible').hide();
			$('div#totals .discount').hide();
			$('div#totals .scontoCodice').hide();
			$('div#totals .scontoLmTkChange').hide();
		}
		else {
			var i = 0, priceParkRoom,
				bIsDiscount = false,
				bIsTicket = false;
			$('div#rooms fieldset.room').each(function () {
//browse rooms
				priceParkRoom = 0;
				bIsDiscountPerRoom = false;
				iRoomNr = this.id.substr(5);
				if (parseInt($('input[name=rdTickets' + iRoomNr + ']:checked').val(), 10) === 1 && (parseInt($('#selTicketsNr_' + iRoomNr).val(), 10) > 0)) {
//show discount in case of people already buy the tickets;
					bIsDiscountPerRoom = true;
//					oPrices._discount += oPrices.r[i]._rawTotal - oPrices.r[i]._total;
				}
				if(oPrices.r[i]._parkTotal != undefined)
					{
					priceParkRoom = oPrices.r[i]._parkTotal;
					}
				if (parseInt($('#selChildrenNr_' + iRoomNr).val(), 10) > 0 && oPrices.r[i]._starling > 0) {
//show discount in case of Kids discounts;
					//bIsDiscountPerRoom = true;
					//$('fieldset#room_' + iRoomNr + ' div.price span.value').text(mfe.format.nr2euro(oPrices.r[i]._rawTotal + oPrices.r[i]._starling, false));
//					oPrices.r[i]._rawTotal += oPrices.r[i]._starling;
//					oPrices._rawTotal += oPrices.r[i]._starling;
					oPrices._discount += oPrices.r[i]._starling;
//					oPrices._rawTotal += oPrices.r[i]._rawTotal - oPrices.r[i]._total;
				}
				if (oPrices.r[i].LmTkChanged != undefined) {
					bIsDiscountPerRoom = true;
					LmTkChanged += oPrices.r[i].LmTkChanged.sum;
					LmTkChangesLabel = oPrices.r[i].LmTkChanged.title;
					$('fieldset#room_' + iRoomNr + ' div.price span.valueVisible').text(mfe.format.nr2euro(oPrices.r[i]._total+oPrices.r[i].LmTkChanged.sum+priceParkRoom, false));
					$('fieldset#room_' + iRoomNr + ' div.price span.rawValueVisible').text(mfe.format.nr2euro(oPrices.r[i]._rawTotal-oPrices._discount+priceParkRoom, false));
				}
				else
					{
					$('fieldset#room_' + iRoomNr + ' div.price span.valueVisible').text(mfe.format.nr2euro(oPrices.r[i]._total+priceParkRoom, false));
					$('fieldset#room_' + iRoomNr + ' div.price span.rawValueVisible').text(mfe.format.nr2euro(oPrices.r[i]._rawTotal+priceParkRoom, false));
					}
				$('fieldset#room_' + iRoomNr + ' div.price span.value').text(mfe.format.nr2euro(oPrices.r[i]._total+priceParkRoom, false));
				$('fieldset#room_' + iRoomNr + ' div.price span.rawValue').text(mfe.format.nr2euro(oPrices.r[i]._rawTotal+priceParkRoom, false));
				if (bIsDiscountPerRoom) {
					$('fieldset#room_' + iRoomNr + ' div.price span.rawValueVisible').show();
					$('fieldset#room_' + iRoomNr + ' div.price span.rawValueVisible').addClass('strikethrough');
					bIsDiscount = true;
				}
				else {
					$('fieldset#room_' + iRoomNr + ' div.price span.rawValueVisible').hide();
					$('fieldset#room_' + iRoomNr + ' div.price span.rawValueVisible').removeClass('strikethrough');
				}
				//console.log(oPrices.r[i].LmTkChanged);
				
				i++;
			});
			//console.log(LmTkChanged);
			$('input#hidParkTotal').val(oPrices._totPark);
			$('input#txtRawTotal').val(mfe.format.nr2euro(oPrices._rawTotal, false));
			$('input#txtRawTotalVisible').val(mfe.format.nr2euro(oPrices._rawTotal-oPrices._discount, false));
			$('input#txtDiscount').val(mfe.format.nr2euro(oPrices._discount, false));
			$('input#txtTotal').val(mfe.format.nr2euro(oPrices._total, false));
			if (!isU(oPrices._agency)) {
				
				$('#totals .totalDiscount .value').html(mfe.format.nr2euro(oPrices._agency.commVal, false));
				$('#totals .totalNet .value').html(mfe.format.nr2euro(oPrices._agency.netPrice, false));
			}
			if (LmTkChanged != 0) {
				
				$('#totals .scontoLmTkChange label').html(LmTkChangesLabel+"&nbsp;&euro;");
				$('#totals .scontoLmTkChange #txtscontoLmTkChange').val(mfe.format.nr2euro(LmTkChanged,false));
				$('div#totals .scontoLmTkChange').show();
			}
			else {
				$('#totals .scontoLmTkChange label').html("");
				$('div#totals .scontoLmTkChange #txtscontoLmTkChange').val("");
				$('div#totals .scontoLmTkChange').hide();
			}
			if (bIsDiscount && oPrices._discount > 0) {
				$('div#totals .rawTotalVisible').show();
				//$('div#totals .discount').show();
			}
			else {
				$('div#totals .rawTotalVisible').hide();
				//$('div#totals .discount').hide();
			}
			if(oPrices._scontoCodice>0)
			{	
				$('div#totals #txtscontoCodiceCode').html($("#txtDiscountCode").val());
				$('div#totals #txtscontoCodice').val(oPrices._scontoCodice);
				$('div#totals .scontoCodice').show();
			}
			else {
				$('div#totals #txtscontoCodice').html("");
				$('div#totals .scontoCodice').hide();
			}
			
		}
	},
	outputAllChildType: function () {
		$('select.selChild option').remove();
		$('select.selChild').append('<option class="defaultOption">' + rawData.labels.select + '</option>');
		mfe.form.select.appendAllOptions(
			$('select.selChild'),
			{data: rawData.childType.data, value: 2, comparison: 1},
			{type: 'eq', mask: parseInt(mfe.basket.data.offer.id, 10)});
	},
	format: {
		nr2euro: function (fNumber, bEuroSign) {
			if (isNaN(fNumber) || fNumber === null) {
				fNumber = '-';
			}
			else {
				fNumber = ('' + parseFloat(fNumber).toFixed(2)).replace('.', ',');
				if (bEuroSign !== false) {
					fNumber = '&euro;&nbsp;' + fNumber;
				}
			}
			return (fNumber);
		},
		euro2nr: function (sNumber) {
			sNumber = ('' + sNumber).replace(',', '.');
			if (sNumber.substr(12) === '&euro;&nbsp;') {
				sNumber = sNumber.substr(12, sNumber.length);
			}
			var fNumber = parseFloat(sNumber);
			if (isN(fNumber)) {
				return fNumber;
			}
			else {
				return 0;
			}
		}
	},
	onClickContinuaWithoutAvail: function () {
		scroll(0, 0);

		$('div#formMessage').text('');
		$('div#frmOffSearch h4 span.from').hide();
		$('div#frmOffSearch h4 span.price').hide();
		$('div#frmOffSearch h4 span.description').text(rawData.labels.supportFormTitle);

//hide forms:
		$('#mainImg').hide();
		$('#offer').hide();
		$('#arrowFreeChTxt').hide();
		$('#offThumbnailsList').hide();
		$('#proposal').show();
		$('#offDescription').hide();
		$('div#listOff .navigator').hide();
		$('div#listOffContent a').hide();
		$('div#listOff .about').show();
		$('div#listOffContent h4').text(rawData.labels.usefullInfo);

		this.basket.data.offer.avail = false;
		this.onClickGoToPage3();
		$('#invoice .offer').hide(0);
		if($('div.paymentMethod div.content p.contact').length>0)
			{
				$('div.paymentMethod div.content p.contact').show();
			}
		if($('div.paymentMethod div.content p.bb').length>0)
		{
			$('div.paymentMethod div.content p.bb').hide();
		}
		$('div.paymentMethod div.content p.cc').hide();
	},
	outputOfferte: function () {
		var i, j, iMax,
			bIsExpired,
			sBoarding, sOfferCell,
			iCountPatterns, iNrPages, iCurrentPage,
			iCountOffers = rawData.offers.data.length, //Math.min(8, rawData.offers.data.length);
			iOffPerPage = 10;

//build the container:
		iCountPatterns = rawData.boardType.data.length;
//		iNrPages = parseInt(iCountOffers / iOffPerPage, 10) + 1;
//		iCurrentPage = $('div#listOff div.navigator a').index($('div#listOff div.navigator a.selected'));
//		if (iCurrentPage === -1) {
//			iCurrentPage = 0; //just 1st time it happen
//		}
//		iMax = Math.min((iCurrentPage + 1) * iOffPerPage, iCountOffers);
		iMax = Math.min(parseInt(init.extra.offersPerPage, 10), iCountOffers);
//		for (i = iCurrentPage * iOffPerPage; i < iMax; i++) {
		for (i = 0; i < iMax; i++) {
//
			oOffer = $.fn.arrayMap(rawData.offers.fields, rawData.offers.data[i]);
			oAccess = parseInt(oOffer.access, 10);
			bIsExpired = (parseInt($.datepicker.formatDate('yymmdd', new Date()), 10) > parseInt(oOffer.valability, 10));
			//console.log(bIsExpired);
//security check
			//console.log(isLogin+" "+hassAccess+" "+oAccess);
			if(bIsExpired || (isLogin==0 && hassAccess ==1 && oAccess==3 && !bIsExpired) || (isLogin==1 && hassAccess==0 && oAccess==3 && !bIsExpired) || (isLogin==1 && hassAccess==1))
				{
					if (((oAccess & 1) === 1) || ((oAccess & 2) === 2 && (init.offer.sl & 2) === 2)) {
						sPrice = mfe.format.nr2euro(rawData.get('offers', i, 'startPrice'));
		//anchor:
						sOfferCell = '<a href="javascript:;" onclick="mfe.selectOffer(this, ' + i + ')"';
						sOfferCell += ' class="';
						//if (bIsExpired || (rawData.seasonClosed && ((isLogin==1 && hassAccess==0)))) { //this is for season closed
						
						if (bIsExpired) {
							sOfferCell += 'expired' + rawData.lang.ucFirst();
						}
						else {
							sOfferCell += 'normal';
						}
						if (i === this.basket.data.offer.index) {
							sOfferCell += ' selected';
						}
						sOfferCell += '">';
		
		//thumbnail:
						sOfferCell += '<img src="/uploads/images/pacc/';
						if (oOffer.image_0 === null) {
							sOfferCell += 'thNoImage.jpg';
						}
						else {
							sOfferCell += oOffer.index + '/' + oOffer.image_0;
						}
						sOfferCell += '" class="thumbnail" />';
		//title:
						sOfferCell += '<span class="title">' + nz(oOffer.title) + '</span>';
		//description:
						sOfferCell += '<span class="description">' + nz(oOffer.descriptionLi, '') + '</span>';
		//debug version:
		//				sOfferCell += '<span class="description">' + rawData.get('offers', i, 'index') + '. ' + rawData.get('offers', i, 'description') + 'Prezzi incredibili, posti limitati. Lore minismo docet. Vivi 2 favolosi giorni a MIrabilandia! urge vivis.</span>';
						//if (!bIsExpired && (rawData.seasonClosed && ((isLogin==1 && hassAccess==0)))) {
						//if(!rawData.seasonClosed || hassAccess==1) //this is for season closed
						//	{
								if (!bIsExpired) {
				//bootom bar:
									sOfferCell += '<span class="bottom">';
				//	| hotel/village/appartment:
									sOfferCell += '<span class="hotel">' + rawData.hostType.data[oOffer.hostType][1] + '</span>';
				//	| stars:
									sOfferCell += '<span class="stars star_' + oOffer.stars + '" ></span>';
				//	| boarding:
									sOfferCell += '<span class="board">';
									iBoardPattern = parseInt(oOffer.boardPattern, 10);
									for (j = 0; j < iCountPatterns; j++) {
										if (iBoardPattern & rawData.boardType.data[j][1]) {
											sOfferCell += '&nbsp;' + rawData.boardType.data[j][3];
										}
									}
									sOfferCell += '&nbsp;</span>';
				//	| info:
									sOfferCell += '<span class="info">' + rawData.labels.offerCellInfo + '</span></span>';
								}
						//	}
		//price:		
						sOfferCell += '<span class="price">' + sPrice + '</span>';
		//close cell:
						sOfferCell += '</a>';
						$('div#listOffContent').append(sOfferCell);
					}
			
				}
		}
		if (iMax < iCountOffers) {
			$('div#listOff div.navigator').show();
		}
		else {
			$('div#listOff div.navigator').hide();
		}
//add navigator:
//		if ($('div#listOff div.navigator ul').length === 0) {
//			$('div#listOff div.navigator').append('<ul></ul>');
//			for (i = 0; i < iNrPages; i++) {
//				if (i === iCurrentPage) {
//					sOfferClass = 'class="selected" ';
//				}
//				else {
//					sOfferClass = '';
//				}
//				$('div#listOff div.navigator ul').append('<li><a href="javascript:;" ' + sOfferClass + 'onclick="mfe.offerChangePage(this)"></a></li>');
//			}
//		}
//		if (iNrPages < 2) {
//			$('div#listOff div.navigator').hide();
//		}
	},
	offerChangePage: function (oTriggerElement) {
		$('div#listOff div.navigator a').removeClass('selected');
		$(oTriggerElement).addClass('selected');
		$('div#listOffContent>a').remove();
		this.outputOfferte();
	},
	outputOfferProperties: function () {
//used for debugging:
		var i;
		var iDataLength = rawData.offers.fields.length;
		$('div#frmOffSearch fieldset.debug ul').remove();
		$('div#frmOffSearch fieldset.debug').append('<ul></ul>');
		for (i = 0; i < iDataLength; i++) {
			$('div#frmOffSearch fieldset.debug ul').append('<li>' + rawData.offers.fields[i] + ': ' + rawData.offers.data[this.basket.data.offer.index][i] + '</li>');
		}
	},
	onSelectParks: function (oTrigger, sMask, iMinDays) {
		
		
		sMask = parseInt(sMask, 10);
		if (oTrigger.checked) {
			if ((this.basket.data.offer.maskPark & sMask) === 0) {
				this.basket.data.offer.maskPark += sMask;
			}
/* - not need the check for min nr of nights per park:
			if (parseInt($('#selNotti').val(), 10) + 1 < iMinDays) {
				this.alert(rawData.alerts.minNightsP1 + ' ' + (iMinDays - 1) + ' ' + rawData.alerts.minNightsP2);
				$('#selNotti').val(iMinDays - 1);
			}
*/
		}
		else {
			if ((this.basket.data.offer.maskPark & sMask) === sMask) {
				this.basket.data.offer.maskPark -= sMask;
			}
		}
//hardcoded logic for some parks:
//special fix for Mira & Beach:
		if ((this.basket.data.offer.maskPark & 64) === 64) {
			if ((this.basket.data.offer.maskPark & 1) === 1) {
				this.basket.data.offer.maskPark -= 1;
			}
		}
//special fix for Oltremare + Aquafun
		if ((this.basket.data.offer.maskPark & 24) === 24) {
			this.basket.data.offer.maskPark -= 24;
			if ((this.basket.data.offer.maskPark & 32) === 0) {
				this.basket.data.offer.maskPark += 32;
			}
		}
//special fix for Aquafun + Oltremare & Aquafun (release the combined ticket for Oltremare&Aquafun if both are selected):
		if ((this.basket.data.offer.maskPark & 40) === 40) {
			this.basket.data.offer.maskPark -= 8;
		}
//special fix for Oltremare + Oltremare & Aquafun (release the combined ticket for Oltremare&Aquafun if both are selected):
		if ((this.basket.data.offer.maskPark & 48) === 48) {
			this.basket.data.offer.maskPark -= 16;
		}
		
		this.getPrice();
		if ((this.basket.data.offer.maskPark & 64) === 64) {
			$('#rooms .tickets').each(function (i, o) {
				var iRoomIndex = $(o).parent().attr('id').substr(5, 1);
				$('#rdTicketsN' + iRoomIndex).attr('checked', true);
				$('#selTicketsNr_' + iRoomIndex).val('0');
				mfe.room.onClickRadioTickets(iRoomIndex);
				$(o).hide(0);
			});
		}
		else {
			$('#rooms .tickets').show(0);
		}
//		console.info({'checkbox:': oTrigger, 'mask:': sMask, 'checked:': oTrigger.checked, 'basket:': mfe.basket.data.offer.maskPark});
	},
	onToggleDiscountVisibility: function () {
		if (isU(mfe.form.isDiscountVisible)) {
			mfe.form.isDiscountVisible = true;
		}
		if (mfe.form.isDiscountVisible) {
			mfe.form.isDiscountVisible = false;
		}
		else {
			mfe.form.isDiscountVisible = true;
		}
		mfe.applyDiscountVisibility();
	},
	applyDiscountVisibility: function () {
		if (isU(mfe.form.isDiscountVisible)) {
			mfe.form.isDiscountVisible = true;
		}
		if (mfe.form.isDiscountVisible) {
			$('#totals .totalDiscount').show(0);
			$('#totals .totalNet').show(0);
			$('.totalsAgency').show(0);
			$('#invoice .totalDiscount').show(0);
			$('#invoice .totalNet').show(0);
		}
		else {
			$('#totals .totalDiscount').hide(0);
			$('#totals .totalNet').hide(0);
			$('.totalsAgency').hide(0);
			$('#invoice .totalDiscount').hide(0);
			$('#invoice .totalNet').hide(0);
		}
	},
	showParksSelection: function (sMask) {
		this.basket.data.offer.maskPark = 0; //reset mask on building the checkbox list
		if (sMask) {
			var i;
			var arParks = rawData.lookUpTable('parks', [{'column': 'mask'}, '&', sMask]);
			var iMax = arParks.length;
			var sParks = '';
			for (i = 0; i < iMax; i++) {
				sParks += '<li>';
				sParks += '<input type="checkbox" name="chkPark_' + i + '" id="chkPark_' + i + '" class="chkPark_'+ arParks[i][0]+'_'+ arParks[i][2]+'"';
				if (arParks[i][0] === 1) {
					sParks += 'checked="checked" disabled="disabled"';
					this.basket.data.offer.maskPark += arParks[i][0];
				}
				sParks += ' onchange="mfe.onSelectParks(this, ' + arParks[i][0] + ', ' + arParks[i][2] + ');"/>';
				sParks += '<label for="chkPark_' + i + '" >';
				sParks += rawData.labels.parkLabelP1 + ' ';
				if (arParks[i][2] > 0) {
					sParks += arParks[i][2] + ' ' + rawData.labels.parkLabelP2 + ' ';
				}
				sParks += rawData.labels.parkLabelP3 + ' ' + arParks[i][1] + ' ';
				sParks += '</label>';
				if (arParks[i][3]) {
					sParks += '<a href="/frontEnd/index.php?s=' + arParks[i][3] + '" class="fancybox">' + rawData.labels.parkLabelMore + '</a>';
				}
				sParks += '</li>';
			}
			$('#otherParks ul').remove('li').html(sParks);
			$('#otherParks').show();
			$('.fancybox').fancybox();
		}
		else {
			$('#otherParks').hide();
		}

	},
	selectOffer: function (oTriggerElement, iOfferIndex) {
		$('div#formMessage').text('');
//selected the offer:
		$('div#listOffContent a').removeClass('selected');
		$(oTriggerElement).addClass('selected');

		rawData.offers.current = iOfferIndex;
		var oCurrentOffer = $.fn.arrayMap(rawData.offers.fields, rawData.offers.data[iOfferIndex]);
		var bIsExpired = (parseInt($.datepicker.formatDate('yymmdd', new Date()), 10) > parseInt(oCurrentOffer.valability, 10));
		mfe.basket.data.offer.index = iOfferIndex;
		mfe.basket.data.offer.id = oCurrentOffer.index;

//change Gli Hotel Tab
		$('#gliHotel p.tabText').html(oCurrentOffer.gliHotel);

//change title
		$('div#frmOffSearch h4.title span.value').html(oCurrentOffer.title);
		$('div#tariff h5').text(oCurrentOffer.title);
		$('div#frmOffSearch h4.title span.description').text(nz(oCurrentOffer.subtitle));

//change background
		var sBackgroundImage = oCurrentOffer.image_bg;
		if (sBackgroundImage === null) {
			sBackgroundImage = '/frontEnd/images/mirabilandia.jpg';
		}
		else {
			sBackgroundImage = '/uploads/images/pacc/' + oCurrentOffer.index + '/' + sBackgroundImage;
		}
		if ($('div#mainImg img').length === 0) {
			$('div#mainImg').append('<img src="' + sBackgroundImage + '" alt="mainImg" />');
		}
		else {
			$('div#mainImg img').attr('src', sBackgroundImage);
		}
		
		oAcces = parseInt(oCurrentOffer.access,10);
		//alert(isLogin+" "+hassAccess+" "+bIsExpired+" "+oAcces);
//check if it is expired
		if (bIsExpired || (isLogin==0 && hassAccess ==1 && oAcces!=3 && !bIsExpired) || (isLogin==1 && hassAccess==0 && oAcces==1 && !bIsExpired)) {
			$('#offer, #arrowFreeChTxt, #offDescription, #frmOffSearch h4.title .from, #frmOffSearch h4.title .price ').hide();
			$('#offNotAvailable').show();
			if (init.offer.sl === 2) {
				$('#offer, #arrowFreeChTxt, #offDescription, #frmOffSearch h4.title .from, #frmOffSearch h4.title .price ').show();
			}
			else {
				return;
			}
		}
		else {
			$('#offNotAvailable').hide();
			$('#offer, #arrowFreeChTxt, #offDescription, #frmOffSearch h4.title .from, #frmOffSearch h4.title .price ').show();
		}

//change starting price
		$('div#frmOffSearch h4.title span.price').html(mfe.format.nr2euro(oCurrentOffer.startPrice));
//		this.outputOfferProperties(); //this is just for debug;
		this.showParksSelection(oCurrentOffer.maskParks);

//limit the arrival date calendar control to offer specific interval:
		var dtMinDate, dtMaxDate, dtToday = new Date();
		var dtCurrentArrivalDate = $('#arrCalendar').datepicker("getDate");
//	minDate
		if (oCurrentOffer.minDate === null) {
			dtMinDate = dtToday;
		}
		else {
			dtMinDate = $.datepicker.parseDate('yy-mm-dd', oCurrentOffer.minDate);
			if (!dtCurrentArrivalDate || dtCurrentArrivalDate < dtMinDate) {
				$("#arrCalendar").datepicker("option", "minDate", dtMinDate);
				mfe.setArrivalDate(dtMinDate);
			}
		}
		if (dtMinDate < dtToday) {
			dtMinDate = dtToday;
		}
		$("#arrCalendar").datepicker("option", "minDate", dtMinDate);
		// alert($("#arrCalendar").datepicker("option", "minDate"));
//	maxDate
		if (oCurrentOffer.maxDate === null) {
			dtMaxDate = dtToday;
		}
		else {
			dtMaxDate = $.datepicker.parseDate('yy-mm-dd', oCurrentOffer.maxDate);
		}
		if (dtMaxDate < dtToday) {
			dtMaxDate = dtToday;
		}
		$("#arrCalendar").datepicker("option", "maxDate", dtMaxDate);
	    this.calendarPattern();
	  //  alert($("#arrCalendar").datepicker("option", "maxDate"));
		$('div#offDescription div.content').html(nz(oCurrentOffer.description));
		this.setNrOfNights();
		this.checkNrOfNightsInterval(false);



//apply room type for each room:
		$('div#rooms select.selRoomType').children().remove().end();
		mfe.form.select.appendAllOptions(
			$('div#rooms select.selRoomType'),
			{data: rawData.roomType.data, value: 4, comparison: 3},
			{
				type: 'interval',
				min: oCurrentOffer.minAdults,
				max: oCurrentOffer.maxAdults
			});
		$('select.selRoomType').val(2);

//apply the nr of children:
//	save the selected values:
		var aInitialChildrenNr = [];
		$('select.selChildrenNr').each(function () {
			aInitialChildrenNr.push($(this).val());
		});
		$('div#rooms select.selChildrenNr').children().remove().end();
		var iMinChild = oCurrentOffer.minBambini;
		if (!iMinChild) {
			iMinChild = 0; //default nr min of children is 0;
		}
		var iMaxChild = oCurrentOffer.maxBambini;
		if (!iMaxChild) {
			iMaxChild = 3; //default nr max of children is 3;
		}
		for (i = iMinChild; i <= iMaxChild; i++) {
			fw.form.select.appendOption($('div#rooms select.selChildrenNr'), i, i);
		}
//set the original values:
		i = 0;
		$('select.selChildrenNr').each(function () {
			$(this).val(aInitialChildrenNr[i]);
			i++;
		});

//change the child type:
		this.outputAllChildType();

//apply boarding pattern on each select:
		$('div#rooms select.selBoardType').children().remove().end();
		mfe.form.select.appendAllOptions(
			$('div#rooms select.selBoardType'),
			{data: rawData.boardType.data, value: 2, comparison: 1},
			{
				type: 'and',
				mask: oCurrentOffer.boardPattern
			});
		//console.log($('div#rooms select.selBoardType').val());
//get tariff list (slices):
		mfe.outputTariff(rawData.lookUpTable('tariff', [{'column': 'offer'}, '=', parseInt(oCurrentOffer.index, 10)]));

//get price:
		this.getPrice();
	},
	outputDailyMessage: function (sYear, sMonth, sDay) {
		var iDay = parseInt(sDay, 10);
		$('#form_0>.message').remove();

		if (isU(rawData.calendarMessages.data['y' + sYear])) {
			return false;
		}

		if (isU(rawData.calendarMessages.data['y' + sYear]['m' + sMonth])) {
			return false;
		}

		$('#form_0').append('<div class="message"></div>');
		iMax = rawData.calendarMessages.data['y' + sYear]['m' + sMonth].length;
		for (i = 0; i < iMax; i++) {
			if (iDay >= rawData.calendarMessages.data['y' + sYear]['m' + sMonth][i][0] && iDay <= rawData.calendarMessages.data['y' + sYear]['m' + sMonth][i][1]) {
				$('#form_0>.message').append('<p>' + rawData.calendarMessages.data['y' + sYear]['m' + sMonth][i][2]);
			}
		}
	},
	outputTariff: function (oTariff) {
		var cOffer = 1;
		var cDescription = 2;
		var cColor = 3;
		var cPrice1n = 4;
		var cPrice2n = 5;
		var cMinNights = 6;

		$('div#tariff ul').remove();
		$('div#tariff').append('<ul></ul>');
		var i, sLi;
		var iMax = oTariff.length;
		for (i = 0; i < iMax; i++) {
			sLi = '<li>';
			sLi += '<span style="background-color:#' + oTariff[i][cColor] + '" class="icon">&nbsp;</span>';
			sLi += '<span class="label">' + oTariff[i][cDescription] + '</span>';
//			if (oTariff[i][cMinNights] > 1) {
//				sLi += '<span class="minPrice1n">-</span>';
//			}
//			else {
			sLi += '<span class="minPrice1n">da ' + mfe.format.nr2euro(oTariff[i][cPrice1n]) + '</span>';
//			}

			sLi += '<span class="minPrice2n">da ' + mfe.format.nr2euro(oTariff[i][cPrice2n]) + '</span>';
			sLi += '</li>';
			$('div#tariff ul').append(sLi);
		}
	},
	setNrOfNights: function () {
		var iActualValue = $('select#selNotti').val();
		var iMinNights = parseInt(rawData.get('offers', this.basket.data.offer.index, 'minDays'), 10);
		if (!iMinNights) {
			iMinNights = 1;
		}
		var iMaxNights = parseInt(rawData.get('offers', this.basket.data.offer.index, 'maxDays'), 10);
		if (!iMaxNights) {
			iMaxNights = 14;
		}
		$('select#selNotti').children().remove().end();
		for (i = iMinNights; i <= iMaxNights; i++) {
			fw.form.select.appendOption($('select#selNotti'), i, i);
		}
		$('select#selNotti').val(iActualValue);

		this.setDepartureDate();
	},
	setArrivalDate: function (dtNewDate) {
		if (typeof(dtNewDate) === 'undefined') {
			$('#arrCalendar').datepicker('setDate', '');
			return;
		}
//test if the new date is in the specified interval:
		var dtMinDate = $('#arrCalendar').datepicker('option', 'minDate');
		var dtMaxDate = $('#arrCalendar').datepicker('option', 'maxDate');
		if (dtNewDate < dtMinDate && dtNewDate > dtMaxDate) {
			return;
		}
		var sNewDay = $.datepicker.formatDate('d', dtNewDate);
		var sSelectedDay = $.datepicker.formatDate('d', $('#arrCalendar').datepicker('getDate'));
		var sNewMonth = $.datepicker.formatDate('m', dtNewDate);
		var sSelectedMonth = $.datepicker.formatDate('m', $('#arrCalendar').datepicker('getDate'));
		var sNewYear = $.datepicker.formatDate('yy', dtNewDate);
		var sSelectedYear = $.datepicker.formatDate('yy', $('#arrCalendar').datepicker('getDate'));
		if (sNewMonth === sSelectedMonth && sNewYear === sSelectedYear) {
//check if the day is enable to be set:
			$('#arrCalendar table.ui-datepicker-calendar tr>td.ui-state-disabled>span').each(function (index) {
				if ($(this).text() === sNewDay) {
					$('#arrCalendar').datepicker('setDate', dtNewDate);
					return;
				}
			});
		}
		else {
//cannot select a date for a different month/year so this will reset the datepicker:
			$('#arrCalendar').datepicker('setDate', '');
		}
	},
	setDepartureDate: function () {
//get arrival date:
		var dToDate = $.datepicker.parseDate('dd/mm/yy', $('div#arrCalendar').val());
		if (dToDate === null) {
			$('input#depDate').val('');
			return;
		}
//add nr of nights:
		dToDate.setDate(dToDate.getDate() + parseInt($('select#selNotti').val(), 10));
//format departure date:
		var sToDate = $.datepicker.formatDate('d M yy', dToDate);
//set departure date:
		$('input#depDate').val(sToDate);
//		this.getPrice();
//		console.info('get price on setDepartureDate? -no!');
	},
	onClickTopMenuItem: function (oLinkElement) {
		$('div#topMenu a').removeClass('selected');
		$(oLinkElement).addClass('selected');
	},
	onClickBackToPage1: function () {
		_gaq.push(['_trackPageview', '/frontEnd/search.phtml']);
		scroll(0, 0);
		//mfe.showParksSelection(mfe.basket.data.offer.maskPark);
		mfe.basket.init();
		mfe.basket.set();
		mfe.onclickVacanzaFlessibile();
		mfe.basket.data.price.reservation = 0;
		var chkClass;
		var maskMindays = [];
		$.each($("#otherParks input[type='checkbox']:checked"), function (iIndex){
			//$(this).removeAttr("checked");
			chkClass = $(this).attr("class");
			maskMindays = chkClass.split("_");
			mfe.onSelectParks(this,maskMindays[1],maskMindays[2]);
			//console.log(maskMindays);
		});
		if ($("div#miraInfo #miraPaga").hasClass('miraModPagamento')) {
			$("div#miraInfo #miraPaga").removeClass('miraModPagamento');
		}
		if (rawData.offers.data.length > 10) {
			$('#listOff .navigator').hide();
		}
		$('div#listOffContent a').show();
		$('div#listOff .about').hide();
		$('div#listOffContent h4').text(rawData.labels.listOffContent);

		$('div#frmOffSearch h4 span.from').show();
		$('div#frmOffSearch h4 span.price').show();
		$('div#frmOffSearch h4 span.description').text(nz(rawData.get('offers', this.basket.data.offer.index, 'subtitle'), '-'));
		$('div#frmOffSearch h4 span.proposal').hide();

		if ($('div#select_location').is(":visible")) {
			$('div#select_location').hide();
		}
		if (!$('div#stretchWrapper').is(":visible")) {
			$('div#stretchWrapper').show();
		}

		$('#mainImg').show();
		$('#offer').show();
		$('#arrowFreeChTxt').show();
		$('#btnGoPage3').show();
		$('#offThumbnailsList').show();
		$('#proposal').hide();
		$('#offDescription').show();
		$('div#invoice').hide();
		mfe.applyDiscountVisibility();
	},
	onClickShowProposal: function (iProposalIndex) {
		if (iProposalIndex === 1) {
			$('div#proposal1').show();
			$('div#proposal2').hide();
			$('#proposalvalue').val(0);
			this.basket.data.hotel.id = rawData.get('hotels', 0, 'index');
			this.basket.data.hotel.name = rawData.get('hotels', 0, 'name');
			this.basket.data.hotel.location = rawData.get('hotels', 0, 'location');
			this.basket.data.hotel.stars = rawData.get('hotels', 0, 'stars');
		}
		else {
			$('div#proposal1').hide();
			$('div#proposal2').show();
			$('#proposalvalue').val(1);
			this.basket.data.hotel.id = rawData.get('hotels', 1, 'index');
			this.basket.data.hotel.name = rawData.get('hotels', 1, 'name');
			this.basket.data.hotel.location = rawData.get('hotels', 1, 'location');
			this.basket.data.hotel.stars = rawData.get('hotels', 1, 'stars');
		}
	},
	onClickGoToPage2: function () {
		_gaq.push(['_trackPageview', '/frontEnd/hotel.html']); 
		$('#btnGoPage3').hide(0);
		var i, j, iMax, jMax, arHotelsData, iHotelsDataLength;
		var self = this;
//checks(validations):
		if (!$('#arrCalendar').datepicker('getDate')) {
			fw.ajax.ShowMessage('divTestDialog', rawData.alerts.Attention, rawData.alerts.SelectArrivalDate, 'E');
			return;
		}

//check if all the kids have age selected:
		i = true;
		$('#rooms .selChild').each(function () {
			if (isNaN($(this).val())) {
				i = false;
			}
		});
		if (!i) {
			$('#btnGoPage3').show(0);
			fw.ajax.ShowMessage('divTestDialog', rawData.alerts.Attention, 'Selezionare l\'et&agrave; corretta dei bambini!', 'E');
			return;
		}

//check at least one park is set where it need:
		var oSelectedOffer = rawData.lookUpRowObject('offers', [{column: 'index'}, '=', '' + mfe.basket.data.offer.id]);
		if (oSelectedOffer.maskMandatoryParks !== null && $('#otherParks input:checked:enabled').length === 0) {
			fw.ajax.ShowMessage('divTestDialog', rawData.alerts.Attention, rawData.alerts.SelectAPark, 'E');
			$('#btnGoPage3').show(0);
			return;
		}

		$('div#formMessage').text('');
		this.basket.set();

		$.ajax({
			type: 'POST',
			url: '/frontEnd/frontend.ajax.php',
			async: false,
			data: {
				get: 'hotels',
				arr: $.datepicker.formatDate('yymmdd', self.basket.data.offer.arrDate.dt),
				dep: $.datepicker.formatDate('yymmdd', self.basket.data.offer.depDate.dt),
				arrDate: mfe.basket.data.offer.arrDate.str,
				depDate: mfe.basket.data.offer.depDate.str,
				off: self.basket.data.offer.id,
				locationId: $('#hLocationId').val(),
				location: $('#txtLocation').val(),
				hotel: $('#txtHotel').val(),
				hotelId: $('#hHotelId').val(),
				avail: mfe.basket.data,
				discCode: mfe.basket.discountCode
			},
			dataType: 'json',
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				$('div#formMessage').text(XMLHttpRequest);
				return;
			},
			success: function (data, textStatus, errorThrown) {
				if (data.blnSuccess === true) {
					iMax = data.arrParams.hotelsDetails.length;
					if (iMax === 0) {
						$('div#formMessage').html(data.strMessage);
					}
					else {
//save hotels on rawData:
						arHotel = data.arrParams.hotels;
						rawData.hotels.data = [];
						for (j = 0; j < arHotel.length; j++) {
							for (i = 0; i < iMax; i++) {
								if (arHotel[j] === data.arrParams.hotelsDetails[i].id) {
									arHotelsData = [];
									for (k in data.arrParams.hotelsDetails[i]) {
										if (data.arrParams.hotelsDetails[i].hasOwnProperty(k)) {
											arHotelsData.push(data.arrParams.hotelsDetails[i][k]);
										}
									}
									rawData.hotels.data.push(arHotelsData);
								}
							}
						}

						mfe.basket.data.offer.avail = true; //tell that we have availability
						mfe.basket.data.tickets = data.arrParams.avail.roomTickets;
						mfe.basket.data.ticketsAll = data.arrParams.avail.tickets;
						//console.log(mfe.basket.data.tickets);
//put offer details in useful info box:
						vantagi = '<div id="vantagBox">';
						vantagi +='<div class="boxTitle"><span>Vantaggi</span></div>';
						vantagi +='<div class="bodybox"><p><img src="/frontEnd/images/vantaggi01.jpg" alt="Il Tour Operator del Divertimento" align="left" /><strong>Il Tour Operator del Divertimento</strong><br />Siamo l\'unico Tour Operator Ufficiale di Mirabilandia.</p>';
						vantagi +='<p><img src="/frontEnd/images/vantaggi02.jpg" alt="Massima scelta di Hotel" align="left" /><strong>Massima scelta di Hotel</strong><br />Centinaia di soluzioni alberghiere scelte e controllate direttamente da noi.</p>';
						vantagi +='<p><img src="/frontEnd/images/vantaggi03.jpg" alt="Trasparenza e Convenienza" align="left" /><strong>Trasparenza e Convenienza</strong><br />Nessun costo nascosto e il Miglior rapporto qualità/prezzo.</p>';
						vantagi +='<p><img src="/frontEnd/images/vantaggi04.jpg" alt="Grande Esperienza" align="left" /> <strong>Grande Esperienza</strong><br />Oltre 500.000 clienti ci hanno già scelto per visitare Mirabilandia.</p>';	
						vantagi +='</div></div>'
						$('#listOffContent div.about').html(vantagi+data.arrParams.offer.usefulInfo);
						scroll(0, 0);
					}
//					mfe.basket.data.request.id = data.arrParams.request.id;
				}
				else {
					if(data.arrParams.parkAvail != undefined && data.arrParams.parkAvail == 0)
						{
							alert ("At least one park is closed in this period!");
							mfe.basket.data.offer.avail = false;
							$('#btnGoPage3').show('slow');
						}
					else
						{
							mfe.basket.data.offer.avail = false;
							$('#listOffContent div.about').html(data.arrParams.offer.usefulInfo);
							sHtmlContinue = '<p>' + rawData.alerts.NoHotelsAvailP1 + '</p>';
							sHtmlContinue += '<p>' + rawData.alerts.NoHotelsAvailP2 + ' <a href="javascript:;" onclick="mfe.onClickContinuaWithoutAvail();">' + rawData.alerts.NoHotelsAvailP3 + '</p>';
							$('div#formMessage').html(sHtmlContinue);
							$('div#formMessage').show();
							$('#btnGoPage3').show('slow');
						}
					return false;
				}
			}
		});
		if (!mfe.basket.data.offer.avail) {
			return false;
		}

		var sImagesPath = '';
		var sImageSrc = null;
		var sAnchorHtml = '';

//populate proposte:
		if (rawData.hotels.data.length > 0) {
			this.basket.data.hotel.id = rawData.get('hotels', 0, 'index');
			this.basket.data.hotel.name = rawData.get('hotels', 0, 'name');
			this.basket.data.hotel.location = rawData.get('hotels', 0, 'location');
			this.basket.data.hotel.stars = rawData.get('hotels', 0, 'stars');
			sImagesPath = '/uploads/images/hotel/' + rawData.get('hotels', 0, 'index') + '/';
			$('div#proposal1 div.hotelName').text(rawData.get('hotels', 0, 'name') + '-' + rawData.get('hotels', 0, 'index'));
			$('div#proposal1 div.hotelStars').addClass('stars star_' + rawData.get('hotels', 0, 'stars'));
			$('div#proposal1 div.hotelLocation').text(rawData.get('hotels', 0, 'location'));
			$('div#proposal1 div.hotelDetails').html(rawData.get('hotels', 0, 'description'));
			$('div#proposal1 div.gallery>a').remove();
			for (i = 1; i < 7; i++) {
				sImageSrc = rawData.get('hotels', 0, 'image' + i);
				if (sImageSrc !== null) {
					sAnchorHtml += '<a href="' + sImagesPath + sImageSrc + '" ';
					sAnchorHtml += 'class="img' + i + ' fancybox" ';
					sAnchorHtml += 'rel="hotel_' + rawData.get('hotels', 0, 'index') + '">';
					sAnchorHtml += '<img src="' + sImagesPath + 'resized/' + sImageSrc + '" alt="hotel image ' + i + '"/>';
					sAnchorHtml += '<span></span>';
					sAnchorHtml += '</a>';
				}
			}
			$('div#proposal1 div.gallery').append(sAnchorHtml);
			$('div#proposal1 div.gallery>a').fancybox();
//services for hotel
			$('div#proposal1 div.hotelService ul').remove();
			$('div#proposal1 div.hotelService').append('<ul></ul>');
			aTemp = rawData.get('hotels', 0, 'servicesHotel');
			iMax = aTemp.length;
			for (i = 0; i < iMax; i++) {
				$('div#proposal1 div.hotelService ul').append('<li>' + aTemp[i] + '</li>');
			}
//services for room
			$('div#proposal1 div.hotelRoomService ul').remove();
			$('div#proposal1 div.hotelRoomService').append('<ul></ul>');
			aTemp = rawData.get('hotels', 0, 'servicesRoom');
			iMax = aTemp.length;
			for (i = 0; i < iMax; i++) {
				$('div#proposal1 div.hotelRoomService ul').append('<li>' + aTemp[i] + '</li>');
			}
		}
		sAnchorHtml = '';
		if (rawData.hotels.data.length > 1) {
			sImagesPath = '/uploads/images/hotel/' + rawData.get('hotels', 1, 'index') + '/';
			$('div#proposal2 div.hotelName').text(rawData.get('hotels', 1, 'name') + '-' + rawData.get('hotels', 1, 'index'));
			$('div#proposal2 div.hotelStars').addClass('stars star_' + rawData.get('hotels', 1, 'stars'));
			$('div#proposal2 div.hotelLocation').text(rawData.get('hotels', 1, 'location'));
			$('div#proposal2 div.hotelDetails').html(rawData.get('hotels', 1, 'description'));
			$('div#proposal2 div.gallery>a').remove();
			for (i = 1; i < 5; i++) {
				sImageSrc = rawData.get('hotels', 1, 'image' + i);
				if (sImageSrc !== null) {
					sAnchorHtml += '<a href="' + sImagesPath + sImageSrc + '" ';
					sAnchorHtml += 'class="img' + i + ' fancybox" ';
					sAnchorHtml += 'rel="hotel_' + rawData.get('hotels', 1, 'index') + '">';
					sAnchorHtml += '<img src="' + sImagesPath + 'resized/' + sImageSrc + '" alt="hotel image ' + i + '"/>';
					sAnchorHtml += '<span></span>';
					sAnchorHtml += '</a>';
				}
			}
			$('div#proposal2 div.gallery').append(sAnchorHtml);
			$('div#proposal2 div.gallery>a').fancybox();
//services for hotel
			$('div#proposal2 div.hotelService ul').remove();
			$('div#proposal2 div.hotelService').append('<ul></ul>');
			aTemp = rawData.get('hotels', 1, 'servicesHotel');
			iMax = aTemp.length;
			for (i = 0; i < iMax; i++) {
				$('div#proposal2 div.hotelService ul').append('<li>' + aTemp[i] + '</li>');
			}
//services for room
			$('div#proposal2 div.hotelRoomService ul').remove();
			$('div#proposal2 div.hotelRoomService').append('<ul></ul>');
			aTemp = rawData.get('hotels', 1, 'servicesRoom');
			iMax = aTemp.length;
			for (i = 0; i < iMax; i++) {
				$('div#proposal2 div.hotelRoomService ul').append('<li>' + aTemp[i] + '</li>');
			}
			$('div#frmOffSearch h4 span.proposal').show();
		}
		
		
		this.basket.set();
		this.proposal.outputPriceWidget();

//change title on offer list:
		$('div#listOff .navigator').hide();
		$('div#listOffContent a').hide();
		$('div#listOff .about').show();
		$('div#listOffContent h4').text(rawData.labels.usefullInfo);
//on working form:
//		$('div#frmOffSearch h4 span.value').text('Scheda Hotel');
		$('div#frmOffSearch h4 span.from').hide();
		$('div#frmOffSearch h4 span.price').hide();
		$('div#frmOffSearch h4 span.description').text(rawData.labels.proposal);

//hide forms:
		$('#mainImg').hide();
		$('#offer').hide();
		$('#arrowFreeChTxt').hide();
		$('#offThumbnailsList').hide();
		$('#proposal').show();
		$('#offDescription').hide();

		mfe.applyDiscountVisibility();
		mfe.onClickShowProposal(1);
	},
	onClickGoToPage3: function () {
		_gaq.push(['_trackPageview', '/frontEnd/clientDetail.html']);
		scroll(0, 0);
		var i, iMax, sHtmlRooms = '';
		var self = this;
		var numberofadults;
//build the invoice preview
		if ($("div#miraInfo #miraPaga").hasClass('miraModPagamento')) {
			$("div#miraInfo #miraPaga").removeClass('miraModPagamento');
		}
		if ($('div#stretchWrapper div#proposal').is(":visible")) {
			$('div#proposal').hide();
		}
		if ($('div#select_location').is(":visible")) {
			$('div#select_location').hide();
		}
		$('#frmOffSearch .proposal').hide();
		$('div#invoice .content>.name').text(this.basket.data.hotel.name);
		$('div#invoice .content>.location').text(this.basket.data.hotel.location);
		$('div#invoice .content>.stars').addClass('star_' + this.basket.data.hotel.stars);
		$('div#invoice .content>.period').html(rawData.labels.from + ' ' + $.datepicker.formatDate("DD dd-mm", mfe.basket.data.offer.arrDate.dt) + ' ' + rawData.labels.to + ' ' + $.datepicker.formatDate("DD dd-mm", mfe.basket.data.offer.depDate.dt));

/*
		//fTotal = this.format.euro2nr(this.basket.data.price.total) + this.format.euro2nr(this.basket.data.price.reservation);
		fTotal = this.format.euro2nr(this.basket.data.price.total) + (this.format.euro2nr(this.basket.data.price.total) * this.format.euro2nr(this.basket.data.price.reservation) / 100);
		//$('div#invoice .total>.value').html(this.format.nr2euro(this.basket.data.price.total));
		reservation = this.format.euro2nr(this.basket.data.price.total)*this.format.euro2nr(this.basket.data.price.reservation)/100;
*/
		$('div#invoice .total>.value').html(this.format.nr2euro(this.basket.data.price.total));
		$('div#invoice .totalDiscount>.value').html(this.format.nr2euro(this.basket.data.price.totalDiscount));
		$('div#invoice .totalNet>.value').html(this.format.nr2euro(this.basket.data.price.totalNet));
		iMax = this.basket.data.hotel.rooms.length;
		//arrChildTickets = [];
		var LmticketchangeTotal = 0;
		var LmticketchangeLabel;
		for (i = 0; i < iMax; i++) {
			sHtmlRooms += '<div class="row header">';
			sHtmlRooms += '<div class="title">Stanza ' + (i + 1) + ': ' + this.basket.data.hotel.rooms[i].typeReal[2] + '</div>';
			sHtmlRooms += '<div class="brd">Tratt.</div>';
			sHtmlRooms += '<div class="price">Prezzo</div>';
			sHtmlRooms += '</div>';
			sHtmlRooms += '<div class="row">';
			sHtmlRooms += '<div class="title">';
			sHtmlRooms += this.basket.data.rooms[i].noa;
			
			if (this.basket.data.rooms[i].noa > 1) {
				sHtmlRooms += ' Adulti';
			}
			else {
				sHtmlRooms += ' Adulto';
			}
			switch (this.basket.data.rooms[i].ch.length)
			{
			case 0:
				//no children do nothing;
				break;
			case 1:
				sHtmlRooms += ' e 1 Bambino';
				break;
			case 2:
			case 3:
				sHtmlRooms += ' e ' + this.basket.data.rooms[i].ch.length + ' Bambini';
				break;
			}
			sHtmlRooms += '</div>';
//			sHtmlRooms += '<div class="title">' + this.basket.data.hotel.rooms[i].type[2] + '</div>';
			sHtmlRooms += '<div class="brd">' + this.basket.data.hotel.rooms[i].boarding[3] + '</div>';
			sHtmlRooms += '<div class="price">' + this.format.nr2euro(this.basket.data.hotel.rooms[i].price.net) + '</div>';
			sHtmlRooms += '</div>';
			var ticketNeed = parseInt(this.basket.data.rooms[i].noa,10) - parseInt(this.basket.data.rooms[i].not,10);
			//if (this.basket.data.hotel.rooms[i].tickets.need > 0) {
			//console.log()
			$.each(mfe.basket.data.tickets[i+1],function(tkIndex){
				if(mfe.basket.data.tickets[i+1][tkIndex].num>0)
				{
					rowTickets = rawData.lookUpRowObject('tickets', [{'column': 'big_code'}, '=', tkIndex]);
					sHtmlRooms += '<div class="row ticket">' + mfe.basket.data.tickets[i+1][tkIndex].num + ' ' + rowTickets.big_nome + '</div>';
					//$('#priceDetails tr.ticketsNeed td.tickets').append('<p><span class="value">' + mfe.basket.data.ticketsAll[tkIndex].num + '</span><span class="label">' + rowTickets.big_nome + '</span></p>');
				}
			});
			
					if(!isEmpty(mfe.basket.data.rooms[i].LmTkChanged))
					{
						LmticketchangeTotal += mfe.basket.data.rooms[i].LmTkChanged.sum;
						LmticketchangeLabel = mfe.basket.data.rooms[i].LmTkChanged.title;
						
					}
					
			if (parseInt(this.basket.data.rooms[i].not,10) > 0) {
				
				sHtmlRooms += '<div class="row ticket">' + this.basket.data.rooms[i].not + ' ' + rawData.labels.ticketsHave + '</div>';
			}
			
		
			var unitPriceVF = 0;
			if($('#chkVacanzaFles').is(":checked"))
				{
					unitPriceVF = parseInt($('#chkVacanzaFles').val(),10);
				}
			
			if (this.basket.data.price.reservation > 0) {
				sHtmlRooms += '<div class="row rowRezervation">';
				sHtmlRooms += '<div class="title">' + rawData.labels.reservationFee + '</div>';
				sHtmlRooms += '<div class="brd brdRezervation"></div>';
				sHtmlRooms += '<div class="rezervation">' + this.format.nr2euro((this.basket.data.hotel.rooms[i].price.net - mfe.basket.discountCode.sconto + (numberofadults * unitPriceVF))* this.basket.data.price.reservation / 100) + '</div>';
				sHtmlRooms += '</div>';
			}
						
		}
		//discount code
		if(mfe.basket.discountCode.sconto >0)
		{	
			//sHtmlRooms += '<div class="row ticket">' + mfe.format.nr2euro(mfe.basket.discountCode.sconto) + ' Codice sconto ' + $("#txtDiscountCode").val() + '</div>';
			sHtmlRooms += '<div class="row rowLmCodiceScontoStep3">';
			sHtmlRooms += '<div class="title">'+ ' Codice sconto ' + $("#txtDiscountCode").val() +'</div>';
			sHtmlRooms += '<div class="brd brdCodiceSconto">&nbsp;</div>';
			sHtmlRooms += '<div class="CodiceScontoStep3">' + mfe.format.nr2euro(mfe.basket.discountCode.sconto*-1) + '</div>';
			sHtmlRooms += '</div>';
		}
		if(LmticketchangeTotal != 0)
		{
			//sHtmlRooms += '<div class="row ticket">' + mfe.format.nr2euro(LmticketchangeTotal) +" "+ LmticketchangeLabel + '</div>';
			sHtmlRooms += '<div class="row rowLmChangeTicketsStep3">';
			sHtmlRooms += '<div class="title">Sconto bambino omaggio</div>';
			sHtmlRooms += '<div class="brd brdLmChangeTickets">&nbsp;</div>';
			sHtmlRooms += '<div class="LmChangeTicketsStep3">' + mfe.format.nr2euro(LmticketchangeTotal) + '</div>';
			sHtmlRooms += '</div>';
			/*$('div#invoice .LmTkChangedTotal>.label').html("Sconto bambino omaggio");
			$('div#invoice .LmTkChangedTotal>.value').html(mfe.format.nr2euro(LmticketchangeTotal));
			$('div#invoice .LmTkChangedTotal').show();*/
		}
		if (this.basket.data.price.vacanzaFlessibile > 0) {
			sHtmlRooms += '<div class="row rowVacanzaFlesibile">';
			sHtmlRooms += '<div class="title">Supplemento vacanza flessibile </div>';
			sHtmlRooms += '<div class="brd brdVacanzaFlessibile">&nbsp;</div>';
			sHtmlRooms += '<div class="vacFlessibile">' + mfe.format.nr2euro(this.basket.data.price.vacanzaFlessibile) + '</div>';
			sHtmlRooms += '</div>';
			//sHtmlRooms += '<div class="row ticket">' + mfe.format.nr2euro(this.basket.data.price.vacanzaFlessibile) + ' Vacanza flessibile </div>';
		}
		$('div#invoice .content>.body').children().remove();
		$('div#invoice .content>.body').append(sHtmlRooms);
		
		if (!$('div#stretchWrapper').is(":visible")) {
			$('div#stretchWrapper').show();
		}
		$('div#invoice').show();
		/*if(mfe.basket.data.price.total <= 0)
		{
			$('#btnPayBB').parent().hide();
			$('#btnPayCC').parent().hide();
			$('#btnPayRQ').parent().hide();
			$('#btnPayNP').parent().show();
		}
		else
			{*/
				//$('#btnPayNP').parent().hide();
				if (mfe.basket.data.offer.arrDate.ts - $.datepicker.formatDate('@', new Date()) < 172800000 && !userInt) {
					$('#btnPayBB').parent().hide();
				}
				else {
					if($('#btnPayBB').length > 0)
						{
							$('#btnPayBB').parent().show();
						}
				}
			//}
	},
	proposal: {//scarry widget
		outputPriceWidget: function () {
			var oMfe = mfe;

			var arRooms = mfe.basket.data.rooms;
			var arRoomType, arRoomRealType;
			var oPrices = {};

//setup the start-end day:
			$('div#priceDetails div.date').text(rawData.labels.from + ' ' + $.datepicker.formatDate("dd-mm", oMfe.basket.data.offer.arrDate.dt) + ' ' + rawData.labels.to + ' ' + $.datepicker.formatDate("dd-mm", oMfe.basket.data.offer.depDate.dt));
//delete the table content:
			$('div#priceDetails tr.room').remove();

			var iDaysBeforeStart = 4 - Math.ceil(oMfe.basket.data.offer.depDate.non / 2);
			var sStartDate = $.datepicker.formatDate('yy-mm-dd',  $.datepicker.parseDate('@', oMfe.basket.data.offer.arrDate.ts - 86400000 * iDaysBeforeStart));

			iMax = arRooms.length;
			for (i = 0; i < iMax; i++) {
				arRooms[i].adt = sStartDate;
				arRooms[i].scw = 1;
				arRooms[i].scwn = arRooms[i].non;
				arRooms[i].non = 7;
				
			}
			mfe.basket.set();

//call server to get the price object:
			$.ajax({
				async: false,
				data: {
					get: 'price',
					req: {
						off: oMfe.basket.data.offer.id,
						r: arRooms,
						variation: oMfe.basket.data.price.variation,
						reservation: mfe.basket.data.price.reservation,
						vacanzaFlessibile: mfe.basket.data.price.vacanzaFlessibile,
						discCode: mfe.basket.discountCode
					}
				},
				dataType: 'json',
				error: function (XMLHttpRequest, textStatus, errorThrown) {
					console.info(errorThrown);
					return;
				},
				success: function (data, textStatus, errorThrown) {
					if (data.blnSuccess === true) {
						oPrices = data.arrParams.prices;
					}
				},
				type: 'POST',
				url: '/frontEnd/frontend.ajax.php'
			});

			oMfe.basket.data.hotel.rooms = [];
			$('div#rooms fieldset.room').each(function () {
				iRoomNr = this.id.substr(5);
				i = parseInt(iRoomNr, 10) - 1;

//add rooms in basket:
				arRoomType = rawData.lookUpRow('roomType', [{'column' : 'index'}, '=', parseInt($('select#selRoomType_' + iRoomNr).val(), 10)]);
				iNrOfAdultsPerRoom = oMfe.room.getPersNr(iRoomNr);
				if (iNrOfAdultsPerRoom > arRoomType[3]) {
					arRoomRealType = rawData.lookUpRow('roomType', [{'column' : 'adultsNr'}, '=', iNrOfAdultsPerRoom]);
				}
				else {
					arRoomRealType = arRoomType;
				}

				oMfe.basket.data.hotel.rooms[i] = {
					'type' : arRoomType,
					'typeReal': arRoomRealType,
					'boarding': rawData.lookUpRow('boardType', [{'column' : 'index'}, '=', parseInt($('select#selBoardType_' + iRoomNr).val(), 10)]),
					'price': {
						'raw': oMfe.format.euro2nr($('fieldset#room_' + iRoomNr + ' div.price span.rawValue').text()),
						'net': oMfe.format.euro2nr($('fieldset#room_' + iRoomNr + ' div.price span.value').text())
					},
					'tickets': {
						'have': oMfe.room.getNrOfTickets(iRoomNr),
						'need': iNrOfAdultsPerRoom
					}
				};

				fFirstPriceCorrection = parseFloat(mfe.format.euro2nr($('fieldset#room_' + iRoomNr + ' div.price span.value').text()));

				sRow = '<tr class="room">';
				sRow += '<td class="roomNr">' + iRoomNr + '</td>';
				sRow += '<td class="roomType">' + arRoomRealType[2] + '</td>';
				sRow += '<td class="boarding">' + oMfe.basket.data.hotel.rooms[i].boarding[2] + '</td>';

				j = 0;
				for (k in oPrices.r[i].days) {
					if (oPrices.r[i].days.hasOwnProperty(k)) {
						sPriceClass = 'normal';
						if (typeof(oPrices.r[i].days[k]) !== 'undefined') {
							fPrice = parseFloat(oPrices.r[i].days[k]._tot);
						}
						else {
							fPrice = 0;
						}

						if (fPrice === 0) {
							sPriceClass = 'unsel';
						}
						else {
							if (j === (iDaysBeforeStart - 1) || j === iDaysBeforeStart + oMfe.basket.data.offer.depDate.non) {
								sPriceClass = 'add';
							}
							else {
								sPriceClass = 'unsel';
							}

							if (j >= iDaysBeforeStart && j < iDaysBeforeStart + oMfe.basket.data.offer.depDate.non) {
								fFirstPriceCorrection -= fPrice;
							}
						}
						oPrices.r[i].days[k].cls = sPriceClass;
						oPrices.r[i].days[k].fPrice = fPrice;
						oPrices.r[i].days[k].dt = $.datepicker.parseDate('yy-mm-dd', k);
						j++;
					}
				}
				bIsFirstPrice = false;
				j = 0;
				for (k in oPrices.r[i].days) {
					if (oPrices.r[i].days.hasOwnProperty(k)) {
						if (j === iDaysBeforeStart) {
							oPrices.r[i].days[k].fPrice += fFirstPriceCorrection;
							bIsFirstPrice = true;
						}
						if (!bIsFirstPrice && oPrices.r[i].days[k].fPrice !== 0) {
							bIsFirstPrice = true;
							//oPrices.r[i].days[k].fPrice -= fFirstPriceCorrection;
						}
						oPrices.r[i].days[k].sPrice = parseInt(oPrices.r[i].days[k].fPrice, 10);
						if (oPrices.r[i].days[k].sPrice === 0) {
							oPrices.r[i].days[k].sPrice = 'x';
						}

//setup the header:
						if (i === 0) {
							$($('#priceDetails tr.header th.day')[j])
								.text($.datepicker.formatDate('D', oPrices.r[0].days[k].dt))
								.attr('title', k);
						}

						sRow += '<td class="' + oPrices.r[i].days[k].cls + '" title="' + oMfe.format.nr2euro(oPrices.r[i].days[k].fPrice) + '">';
//						$('#priceDetails tr.header th.days').append('<span class="day ' + oPrices.r[i].days[k].cls + '" title="' + k + '">' + $.datepicker.formatDate('D', oPrices.r[i].days[k].dt) + '</span>');
						if (oPrices.r[i].days[k].cls === 'add') {
							sRow += '<a href="javascript:;" onclick="mfe.proposal.toggleDay(this, ' + i + ', ' + $.datepicker.formatDate('@', oPrices.r[i].days[k].dt) + ')">';
							sRow += oPrices.r[i].days[k].sPrice;
							sRow += '</a>';
						}
						else {
							sRow += oPrices.r[i].days[k].sPrice;
						}
						sRow += '</td>';
						j++;
					}
				}

				sRow += '<td class="total">&euro;&nbsp;' + $('fieldset#room_' + iRoomNr + ' div.price span.value').text() + '</td>';
				sRow += '</tr>';
				$('#priceDetails tr.ticketsNeed').before(sRow);
			});
			var iNrOfTicketsHave = 0;
		//	var phobiaTickets = 0;
			var iNrOfTicketsNeed = 0;
			var aTickets = [], aAllTickets = [], aFreeTickets = [];
			var aAdultTickets = rawData.lookUpRow('adultTickets', [{'column': 'offer'}, '=', parseInt(mfe.basket.data.offer.id, 10)]);
			var LmTkChanged = 0;
			var LmTkChangesLabel;
			$.each(mfe.basket.data.rooms, function (iIndex) {
				aTickets = [];
				aFreeTickets = [];
				iNrOfTicketsHave += parseInt(this.not, 10);
				iNrOfTicketsNeed += parseInt(this.noa, 10) - parseInt(this.not, 10);
			
				if(oPrices.r[iIndex]._starling > 0) {
					oPrices._discount += oPrices.r[iIndex]._starling;
				}
				if(oPrices.r[iIndex].LmTkChanged != undefined)
				{
					LmTkChanged += oPrices.r[iIndex].LmTkChanged.sum;
					LmTkChangesLabel = oPrices.r[iIndex].LmTkChanged.title;
					mfe.basket.data.rooms[iIndex]['LmTkChanged'] = oPrices.r[iIndex].LmTkChanged;
					
				}

			});

			$('#priceDetails tr.ticketsHave td span.value').text(iNrOfTicketsHave);
			if (iNrOfTicketsHave > 0) {
				$('#priceDetails tr.ticketsHave').show();
			}
			else {
				$('#priceDetails tr.ticketsHave').hide();
			}
			$('#priceDetails tr.ticketsNeed td span.value').text(iNrOfTicketsNeed);
			if (iNrOfTicketsNeed > 0 || !isEmpty(mfe.basket.data.ticketsAll)) { //can be tickets not needed but offer for free
				$('#priceDetails tr.ticketsNeed td.tickets').empty();
				var iTkMax = mfe.basket.data.ticketsAll.length; 
				$.each(mfe.basket.data.ticketsAll,function(tkIndex){
					if(mfe.basket.data.ticketsAll[tkIndex].num>0)
						{
							rowTickets = rawData.lookUpRowObject('tickets', [{'column': 'big_code'}, '=', tkIndex]);
							$('#priceDetails tr.ticketsNeed td.tickets').append('<p><span class="value">' + mfe.basket.data.ticketsAll[tkIndex].num + '</span><span class="label">' + rowTickets.big_nome + '</span></p>');
						}
				});
				//for (j = 0; j < aTicketsGroup.length; j++) {
				//	$('#priceDetails tr.ticketsNeed td.tickets').append('<p><span class="value">' + aTicketsGroup[j][0] + '</span><span class="label">' + aTicketsGroup[j][1] + '</span></p>');
				//}
				$('#priceDetails tr.ticketsNeed').show();
			}
			else {
				$('#priceDetails tr.ticketsNeed').hide();
			}
			if (mfe.basket.data.price.reservation > 0) {
				$('.hot_prop tr.reservation').show();
				$('.hot_prop #reservation_info').hover(function () {
					$("#reservation_info #reservation_info_text").show();
				}, function () {
					$("#reservation_info #reservation_info_text").hide();
				});
			}
			else {
				$('.hot_prop tr.reservation').hide();
			}
			
			
			/*if(rawData.get('offers', rawData.offers.current, 'phobia')==1)
			{
				$('#priceDetails tr.ticketsNeed td.tickets').append('<p><span class="value">' + phobiaTickets + '</span><span class="label">' + 'Phobia' + '</span></p>');
			}*/
			oMfe.basket.data.price.total = oMfe.format.euro2nr($('#txtTotal').val());
			oMfe.basket.data.price.rawTotal = oMfe.format.euro2nr($('#txtRawTotal').val());
			var scontCodeVal = 0;
			if(oPrices._scontoCodice > 0)
			{	
				
				if(oPrices.discCode.type == 0)
					{
						scontCodeVal = ((oMfe.basket.data.price.rawTotal - oPrices._discount)  * oPrices.discCode.value)/100;
					}
				else
				{
					scontCodeVal = oPrices.discCode.value;
				}
				//alert(scontCodeVal);
				mfe.basket.discountCode.sconto = scontCodeVal;
				$('#priceDetails tr.scontoCodiceHave th.label span').text("Codice sconto "+$("#txtDiscountCode").val());
				$('#priceDetails tr.scontoCodiceHave th.value').html(mfe.format.nr2euro(scontCodeVal*-1));
				$('#priceDetails tr.scontoCodiceHave').show();
			}
			else {
				
				$('#priceDetails tr.scontoCodiceHave').hide();
			}
			
			if(LmTkChanged != 0)
				{
					//LmTkChanged += oPrices.r[iIndex].LmTkChanged.sum;
					//LmTkChangesLabel = oPrices.r[iIndex].LmTkChanged.title;
					//mfe.basket.data.LmTicketChanged = oPrices.LmTkChanged;
					$('#priceDetails tr.LmTkChanged th.label span').text(LmTkChangesLabel);
					$('#priceDetails tr.LmTkChanged th.value').html(mfe.format.nr2euro(LmTkChanged));
					$('#priceDetails tr.LmTkChanged').show();
				}
			else
				{
				$('#priceDetails tr.LmTkChanged').hide();
				}
			
			if(mfe.basket.data.price.vacanzaFlessibile > 0)
			{	
				$('#priceDetails tr.vacanzaFlessibileHave th.value').html(mfe.format.nr2euro(mfe.basket.data.price.vacanzaFlessibile));
				$('#priceDetails tr.vacanzaFlessibileHave').show();
			}
			else {
				
				$('#priceDetails tr.vacanzaFlessibileHave').hide();
			}
			//console.log(LmTkChanged);
			//console.log(oPrices._discount);
			oMfe.basket.data.price.reservation = mfe.format.euro2nr(oMfe.basket.data.price.reservation);
			oMfe.basket.data.price.reservationTotal = (oMfe.basket.data.price.rawTotal - oPrices._discount - mfe.basket.discountCode.sconto + mfe.basket.data.price.vacanzaFlessibile+LmTkChanged) * oMfe.basket.data.price.reservation / 100;
			oMfe.basket.data.price.total += oMfe.basket.data.price.reservationTotal;
			if (oPrices._agency !== undefined && oPrices._agency.commPerc !== undefined) {
				oPrices._agency.commPerc = parseInt(oPrices._agency.commPerc, 10);
				oMfe.basket.data.price.totalDiscount = oMfe.basket.data.price.total * oPrices._agency.commPerc / 100;
				$('#totals .totalDiscount .value').html(oMfe.format.nr2euro(oMfe.basket.data.price.totalDiscount, false));
				oMfe.basket.data.price.totalNet = oMfe.basket.data.price.total - oMfe.basket.data.price.totalDiscount;
				$('#totals .totalNet .value').html(oMfe.format.nr2euro(oMfe.basket.data.price.totalNet, false));
			}
			else {
				oMfe.basket.data.price.totalDiscount = 0;
				oMfe.basket.data.price.totalNet = oMfe.basket.data.price.total;
			}
			if (mfe.basket.data.price.reservation > 0) {
				$('.hot_prop tr.reservation th.value').html(mfe.format.nr2euro(oMfe.basket.data.price.reservationTotal));
				$('.hot_prop tr.total th.value').html(oMfe.format.nr2euro(oMfe.basket.data.price.total));
				}
				else{
					$('#priceDetails tr.total th.value').html(oMfe.format.nr2euro(oMfe.basket.data.price.total));
				}
			$('#priceDetails tr.variation th.value').html(oMfe.format.nr2euro(oMfe.basket.data.price.variation));
			$('#priceDetails tr.totalDiscount th.value').html(oMfe.format.nr2euro(oMfe.basket.data.price.totalDiscount));
			$('#priceDetails tr.totalNet th.value').html(oMfe.format.nr2euro(oMfe.basket.data.price.totalNet));
			
			

		},
		toggleDay: function (oTrigger, iRoomIndex, tsDate) {
			var jqTotal = $(oTrigger).parent().parent().children('.total');
			var fTotal = parseFloat(jqTotal.text());
			var dtArrRoom = $.datepicker.parseDate('yy-mm-dd', mfe.basket.data.rooms[iRoomIndex].adt);
			var tsArrRoom = parseInt($.datepicker.formatDate('@', dtArrRoom), 10);

			if ($(oTrigger).parent().hasClass('add')) {
//change icons to delete:
				$(oTrigger).parent().removeClass('add').addClass('del');

//set the new values in basket:
				mfe.basket.data.rooms[iRoomIndex].non++;
				if (tsDate < tsArrRoom) {
					mfe.basket.data.rooms[iRoomIndex].adt = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate('@', tsDate));
				}
			}
			else {
//change to add:
				$(oTrigger).parent().removeClass('del').addClass('add');

//set the new values in basket:
				mfe.basket.data.rooms[iRoomIndex].non--;
				if (tsDate === tsArrRoom) {
					mfe.basket.data.rooms[iRoomIndex].adt = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate('@', (tsDate + 86400000)));
				}
			}

//get the new price:
			var oPrices;
			$.ajax({
				async: false,
				data: {
					get: 'price',
					req: {
						off: mfe.basket.data.offer.id,
						r: mfe.basket.data.rooms,
						variation: mfe.basket.data.price.variation,
						reservation: mfe.basket.data.price.reservation,
						vacanzaFlessibile: mfe.basket.data.price.vacanzaFlessibile,
						discCode: mfe.basket.discountCode
					}
				},
				dataType: 'json',
				error: function (XMLHttpRequest, textStatus, errorThrown) {
					console.info(errorThrown);
				},
				success: function (data, textStatus, errorThrown) {
					if (data.blnSuccess === true) {
						oPrices = data.arrParams.prices;
					}
				},
				type: 'POST',
				url: '/frontEnd/frontend.ajax.php'
			});
//apply the totals:
//			console.info(oPrices);
			jqTotal.html(mfe.format.nr2euro(oPrices.r[iRoomIndex]._total));
			if(oPrices._scontoCodice > 0)
			{	
				
				//alert(oPrices._scontoCodice);
				mfe.basket.discountCode.sconto = oPrices._scontoCodice;
				$('#priceDetails tr.scontoCodiceHave td span.value').html(mfe.format.nr2euro(oPrices._scontoCodice));
			
			}
			var togReservation = 0;
			togReservation = (mfe.format.euro2nr(oPrices._total) * mfe.format.euro2nr(mfe.basket.data.price.reservation)) / 100;
			$('#priceDetails tr.total th.value').html(mfe.format.nr2euro(oPrices._total));
			$('#priceDetails tr.reservation th.value').html(mfe.format.nr2euro(togReservation.toFixed(2)));
			if (!isU(oPrices._agency)) {
				$('#priceDetails tr.totalDiscount th.value').html(mfe.format.nr2euro(oPrices._agency.commVal));
				$('#priceDetails tr.totalNet th.value').html(mfe.format.nr2euro(oPrices._agency.netPrice));
			}
			mfe.basket.data.hotel.rooms[iRoomIndex].price.net = oPrices.r[iRoomIndex]._total;
			mfe.basket.data.price.total = oPrices._rawTotal;
			if (!isU(oPrices._agency)) {
				mfe.basket.data.price.totalDiscount = oPrices._agency.commVal;
				mfe.basket.data.price.totalNet = oPrices._agency.netPrice;
			}
			iMax = mfe.basket.data.rooms.length;
			minDate = $.datepicker.parseDate('yy-mm-dd', mfe.basket.data.rooms[0].adt);
			depDateTs = parseInt($.datepicker.formatDate('@', minDate), 10) + 86400000 * parseInt(mfe.basket.data.rooms[0].non, 10) + 43200000;

			for (i = 0; i < iMax; i++) {
				compDate = $.datepicker.parseDate('yy-mm-dd', mfe.basket.data.rooms[i].adt);
				if ($.datepicker.formatDate('@', compDate) < $.datepicker.formatDate('@', minDate)) {
					minDate = $.datepicker.formatDate('yy-mm-dd', compDate);
					minDate = $.datepicker.parseDate('yy-mm-dd', minDate);
				}
			}
			for (i = 0; i < iMax; i++) {
				arrDateDt = $.datepicker.parseDate('yy-mm-dd', mfe.basket.data.rooms[i].adt);
				compdepDateTs = parseInt($.datepicker.formatDate('@', arrDateDt), 10) + 86400000 * parseInt(mfe.basket.data.rooms[i].non, 10);
				if (compdepDateTs > depDateTs) {
					depDateTs = compdepDateTs;
				}
			}
			$('div#priceDetails div.date').text(rawData.labels.from + ' ' + $.datepicker.formatDate('dd-mm', minDate) + ' ' + rawData.labels.to + ' ' + $.datepicker.formatDate('dd-mm', $.datepicker.parseDate('@', depDateTs)));
		}
	},
	lookupForDayCalendarPattern: function (aMonthCalendarPattern, iDay) {
		var i, iMax = aMonthCalendarPattern.length;
		for (i = 0; i < iMax; i++) {
			if (aMonthCalendarPattern[i][0] === parseInt(iDay, 10)) {
				return ({
					'day': iDay,
					'color': aMonthCalendarPattern[i][1],
					'minNigths': aMonthCalendarPattern[i][2]
				});
			}
		}
		return (false);
	},
	setCalendarPattern: function (aCalendarPattern) {
//		console.info({'debug': aCalendarPattern});
		var aDayCalendarPattern;
		var bIgnoreCurrentDayCheck = ($('#arrCalendar').datepicker('getDate') === null);
		$('div#arrCalendar td').children().each(function (index) {
			aDayCalendarPattern = mfe.lookupForDayCalendarPattern(aCalendarPattern, $(this).text());
			if (aDayCalendarPattern !== false) {
				if ($(this).parent().hasClass('ui-datepicker-current-day')) {
					$(this).css({'border-bottom-color': '#' + aDayCalendarPattern.color});
				}
				else {
					$(this).css({'background-color': '#' + aDayCalendarPattern.color});
				}
			}
			else {
				if (!bIgnoreCurrentDayCheck && $(this).parent().hasClass('ui-datepicker-current-day')) {
					mfe.setArrivalDate();
					mfe.setDepartureDate();
					mfe.setCalendarPattern(aCalendarPattern);
				}
				$(this).parent()
					.addClass('ui-datepicker-unselectable ui-state-disabled')
					.append('<span class="ui-state-default">' + $(this).text() + '</span>');
				$(this).remove();
			}
		});
	},
	calendarMessages: function () {
		var sSelectedDate = $('#arrCalendar').val(); //'dd/mm/yyyy'
		var sDay = sSelectedDate.substr(0, 2),
			sMonth = sSelectedDate.substr(3, 2),
			sYear = sSelectedDate.substr(6, 4);

		if (isNaN(sYear)) {
//			console.info('visible year not set');
			return;
		}

		if (isNaN(sMonth)) {
//			console.info('visible month not set');
			return;
		}

		if (isU(rawData.calendarMessages.data['y' + sYear])) {
			rawData.calendarMessages.data['y' + sYear] = [];
		}

		if (isU(rawData.calendarMessages.data['y' + sYear]['m' + sMonth])) {
			rawData.calendarMessages.data['y' + sYear]['m' + sMonth] = [];
		}

		var iMax = rawData.calendarMessages.data['y' + sYear]['m' + sMonth].length;
		if (iMax === 0) {
//get values from db
			$.ajax({
				async: false,
				data: {
					get: 'calendarMessages',
					year: sYear,
					month: sMonth
				},
				dataType: 'json',
				error: function (XMLHttpRequest, textStatus, errorThrown) {
//					console.info(errorThrown);
				},
				success: function (data, textStatus, errorThrown) {
					if (data.blnSuccess === true) {
						jMax = data.arrParams.calMessages.length;
						if (jMax === 0) {
//no messages for this month:
							rawData.calendarMessages.data['y' + sYear]['m' + sMonth] = [0, 0, ''];
						}
						else {
							for (j = 0; j < jMax; j++) {
								rawData.calendarMessages.data['y' + sYear]['m' + sMonth][j] = [parseInt(data.arrParams.calMessages[j].start, 10), parseInt(data.arrParams.calMessages[j].end, 10), data.arrParams.calMessages[j].message];
							}
						}
						mfe.outputDailyMessage(sYear, sMonth, sDay);
					}
					else {
						console.info(data.strMessage);
					}
				},
				type: 'POST',
				url: '/frontEnd/frontend.ajax.php'
			});
		}
		else {
//display messages
			this.outputDailyMessage(sYear, sMonth, sDay);
		}
	},
	calendarPattern: function () {
		var iYear = $('#arrCalendar').attr("visyear");
		if (isNaN(iYear)) {
			console.info('visible year not set');
			return;
		}

		var iMonth = $('#arrCalendar').attr("vismonth");
		if (isNaN(iMonth)) {
			console.info('visible month not set');
			return;
		}

		var iOffer = mfe.basket.data.offer.id;
		var aCalendarPattern = false;
		var iMax = rawData.calendarPattern.data.length;
		for (i = 0; i < iMax; i++) {
			if (rawData.calendarPattern.data[i][0] === iOffer && rawData.calendarPattern.data[i][1] === iYear && rawData.calendarPattern.data[i][2] === iMonth) {
				aCalendarPattern = rawData.calendarPattern.data[i];
				mfe.basket.data.offer.calendarPatternId = i;
				break;
			}
		}
		
		if (aCalendarPattern === false) {
			$.ajax({
				async: false,
				data: {
					get: 'tariffPattern',
					year: iYear,
					month: iMonth,
					off: iOffer
				},
				dataType: 'json',
				error: function (XMLHttpRequest, textStatus, errorThrown) {
					console.info(errorThrown);
				},
				success: function (data, textStatus, errorThrown) {
					if (data.blnSuccess === true) {
						rawData.calendarPattern.data.push([iOffer, iYear, iMonth, data.arrParams.tariffPattern]);
						mfe.basket.data.offer.calendarPatternId = iMax;
						mfe.setCalendarPattern(data.arrParams.tariffPattern);
					}
					else {
						console.info(data.strMessage);
					}
				},
				type: 'POST',
				url: '/frontEnd/frontend.ajax.php'
			});
		}
		else {
			this.setCalendarPattern(aCalendarPattern[3]);
		}
	},
	payRic: function (oTrigger, ricId) {
		if ($('#chkPrivacy:checked').val() !== 'on') {
			fw.ajax.ShowMessage('divTestDialog', rawData.alerts.Attention, rawData.alerts.ValidateAgreeDataProcess, 'E');
			return;
		}

//	| newsletter checkbox checked:
		if ($('#chkNewsleter:checked').val() !== 'on') {
			fw.ajax.ShowMessage('divTestDialog', rawData.alerts.Attention, rawData.alerts.ValidateAgreePrivacy, 'E');
			return;
		}
		$('#stretchWrapper').hide();
		$('#frmPayGateway')
			.attr('src', '/frontEnd/payment.phtml?a=pay&r-id=' + ricId)
			.show();
	},
	pay: function (oTrigger, iPayType) {
		scroll(0, 0);
//save the payment type in basket:
		switch (iPayType) {
		case 0:
			mfe.basket.data.offer.paymentMethod = 'CC';
			break;
		case 1:
			mfe.basket.data.offer.paymentMethod = 'BB';
			break;
		case 2:
			mfe.basket.data.offer.paymentMethod = 'RQ';
			break;
		/*case 3:
			mfe.basket.data.offer.paymentMethod = 'NP';
			break;*/
		}

//validation:
		fw.validation.Attach('invoice', true);
//	| 1st basic validation check:
		if (!fw.validation.CheckAll('invoice', true)) {
			fw.ajax.ShowMessage('divTestDialog', rawData.alerts.Attention, fw.validation._errMessages, 'E');
			return;
		}
//	| provincia mandatory if country is italy:
		if ($('#selCountry').val() === '45' && $('#selRegion').val() === '-') {
			fw.ajax.ShowMessage('divTestDialog', rawData.alerts.Attention, rawData.alerts.ValidateFieldProvincia, 'E');
			return;
		}

//	| same email check:
		if ($('#txtEmail').val() !== $('#txtEmailConfirmation').val()) {
			fw.ajax.ShowMessage('divTestDialog', rawData.alerts.Attention, rawData.alerts.ValidateField2ndEmail, 'E');
			return;
		}

//	| privacy checkbox checked:
		if ($('#chkPrivacy:checked').val() !== 'on') {
			fw.ajax.ShowMessage('divTestDialog', rawData.alerts.Attention, rawData.alerts.ValidateAgreeDataProcess, 'E');
			return;
		}

//	| newsletter checkbox checked:
		if ($('#chkNewsleter:checked').val() !== 'on') {
			fw.ajax.ShowMessage('divTestDialog', rawData.alerts.Attention, rawData.alerts.ValidateAgreePrivacy, 'E');
			return;
		}
		

//everything is fine, do the call:
		$.ajax({
			async: false,
			data: {
				get: 'pay',
//customer details:
				lastName: $('#txtLastName').val(),
				firstName: $('#txtFirstName').val(),
				address: $('#txtAddress').val(),
				city: $('#txtCity').val(),
				region: $('#selRegion').val(),
				country: $('#selCountry').val(),
				zip: $('#txtZipCode').val(),
				phone: $('#txtPhone').val(),
				email: $('#txtEmail').val(),
				vatId: $('#txtVatCode').val(),
				note: $('#txtNote').val(),
				isNewsletter: $('#chkNewsleter:checked').length,
				isPrivacy: $('#chkPrivacy:checked').length,
				arrDate: mfe.basket.data.offer.arrDate.str,
				depDate: mfe.basket.data.offer.depDate.str,
				avail: mfe.basket.data,
				discCode: mfe.basket.discountCode,
				maskPark: mfe.basket.data.offer.maskPark,
				vacazaFlessibile: mfe.basket.data.price.vacanzaFlessibile
			},
			dataType: 'json',
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				fw.ajax.ShowMessage('divTestDialog', rawData.alerts.Attention, errorThrown, 'E');
			},
			success: function (data, textStatus, errorThrown) {

				if (!data.blnSuccess) {
					fw.ajax.ShowMessage('divTestDialog', rawData.alerts.Attention, data.strMessage, data.strMsgType);
					return;
				}

				$('#stretchWrapper').hide();
				$('#frmPayGateway')
					.attr('src', '/frontEnd/payment.phtml?a=pay')
					.show();
			},
			type: 'POST',
			url: '/frontEnd/frontend.ajax.php'
		});
	},
	onClickTryToPayAgain: function () {
		$('#stretchWrapper').show('slow');
		$('#frmPayGateway').hide();
	},
	onClickToGoSelectLocation: function () {
		var i, j, p, k, iMax, jMax, arHotelsData, iHotelsDataLength;
		var letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
		var self = mfe;
		var initPrice = mfe.format.euro2nr($('#txtTotal').val());
		var footerReservation;
		var reservationPrice;

		$('div#formMessage').text('');
		this.basket.set();

		if (!$("div#miraInfo #miraPaga").hasClass('miraModPagamento')) {
			$("div#miraInfo #miraPaga").addClass('miraModPagamento');
		}

		$.ajax({
			type: 'POST',
			url: '/frontEnd/frontend.ajax.php',
			async: false,
			data: {
				get: 'getLocations',
				arr: $.datepicker.formatDate('yymmdd', self.basket.data.offer.arrDate.dt),
				dep: $.datepicker.formatDate('yymmdd', self.basket.data.offer.depDate.dt),
				arrDate: mfe.basket.data.offer.arrDate.str,
				depDate: mfe.basket.data.offer.depDate.str,
				off: self.basket.data.offer.id,
				locationId: $('#hLocationId').val(),
				location: $('#txtLocation').val(),
				hotel: $('#txtHotel').val(),
				hotelId: $('#hHotelId').val(),
				avail: mfe.basket.data
			},
			dataType: 'json',
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				$('div#formMessage').text(XMLHttpRequest);
				return;
			},
			success: function (data, textStatus, errorThrown) {
				if (data.blnSuccess === true) {
					iMax = data.arrParams.locationDetails.length;
					if (iMax === 0) {
						$('div#formMessage').html(data.strMessage);
					}
					else
					{
						arLocations = data.arrParams.locationDetails;
						arHotelsDetails 	= data.arrParams.hotelsDetails;
						arHotels = data.arrParams.hotels;
						var t1 = [];
						if ($("#proposalvalue").val() === 1) {
							t1 = arHotels.splice(1, 1);
							arHotels.splice(0, 0, t1[0]);
						}

						var arHot = [];
						var arLoc = [];
						for (j = 0; j < arHotels.length; j++) {
							for (i = 0; i < arHotelsDetails.length; i++) {
								if (arHotelsDetails[i].id === arHotels[j]) {
									arHot.push(arHotelsDetails[i]);
									for (k = 0; k < arLocations.length; k++) {
										if (arHotelsDetails[i].locationArea === arLocations[k].locGroup) {
											p = 0;
											for (arLocIndex = 0; arLocIndex < arLoc.length; arLocIndex++) {
												if (arLoc[arLocIndex].locGroup === arLocations[k].locGroup) {
													p++;
												}
											}
											if (p === 0) {
												arLoc.push(arLocations[k]);
											}
										}
									}
								}
							}
						}
						//alert(arHot);
						var arHot1 = [];
						for (j = 0; j < arLoc.length; j++) {
							p = 0;
							k = 0;
							for (i = 0; i < arHot.length; i++) {
								if (arLoc[j].locGroup === arHot[i].locationArea) {
									if (j === 0 && p < 1) {
										arHot1.push(arHot[i]);
										k++;
									}
									else if (j !== 0 && p < 2) {
										arHot1.push(arHot[i]);
										k++;
									}
									p++;
								}
							}
							arLoc[j].nH = k;
						}
						arLocations = arLoc;
						arHotelsDetails = arHot1;
					}
					$("#hotel_proposal").html("");
					$("#proposal").clone().appendTo("#hotel_proposal");
					$("#hotel_proposal").find("#proposal").addClass("hot_prop");
					$("#hotel_proposal .hot_prop").hide();
					if (!$(".hot_prop").find("#proposal1").is(":visible")) {
						$(".hot_prop").find("#proposal1").show();
					}
					$("#hotel_proposal").find(".location").remove();
					$("#hotel_proposal").find("#proposal2").remove();
					//add reservation in footer of proposal
					footerReservation = '';
					footerReservation += '<tr class="footer reservation">';
					footerReservation += '<th colspan="10" class="label">';
					footerReservation += '<span id="reservation_title">' + rawData.labels.reservationLabel + '</span>';
					footerReservation += '<span id="reservation_info"><span id="reservation_info_text">' + rawData.labels.reservationInfo + '</span>';
					footerReservation += '</span></th>';
					footerReservation += '<th colspan="10" class="value">&euro;&nbsp;0,00</th>';
					footerReservation += '</tr>';
					$(footerReservation).insertBefore("div#hotel_proposal tr.total");

					self.proposal.outputPriceWidget();
					$("#select_location_map").html("");

					for (i = 0; i < iMax; i++) {
						loc = "";
						loc += "<div class='loc_dx' style='top:" + arLocations[i].topPx + "px;left:" + arLocations[i].leftPx + "px'>";
						loc += "<div class='nr_pr_loc'>" + arLocations[i].nH + "</div>";
						loc += "<div class='gwt-HTML'>" + arLocations[i].locGroup + "</div>";
						loc += "</div>";
						$("#select_location_map").append(loc);
					}
					$(".loc_dx:first-child").addClass("loc_dx_sel-selected");
					$(".loc_dx:first-child").addClass("loc_dx-selected");

					$(".loc_dx").hover(function () {
						var index = $(this).index();
						if (index > 0) {
							for (l = 0; l < arHotelsDetails.length; l++) {
								if (arLocations[index].locGroup === arHotelsDetails[l].locationArea) {
										reservationPrice = (initPrice * arHotelsDetails[l].suppl) / 100;
										offPr = parseFloat((initPrice + reservationPrice).toFixed(2));
										l = arHotelsDetails.length;
								}
							}
						}
						else {
							offPr = initPrice;
						}
						$(this).append('<div class="pop_loc">'
							+ '<span class="pop_offerta">' + mfe.format.nr2euro(offPr, true) + '</span>'
							+ '<span class="pop_distanza"><b>' + arLocations[index].km + ' Km</b> da Mirabilandia</span>'
							+ '<span class="pop_locTitle">' + arLocations[index].locTitle + '</span>'
							+ '<span class="pop_locDescr">' + arLocations[index].locDescr + '</span>'
							+ '</div>');
					}, function () {
						$(this).find(".pop_loc").remove();
					});

					$("#select_location_proposals").html("");

					mfe.populateHotelProposal(arHotelsDetails, arLocations, 0);

					$(".loc_dx").click(function () {
						var index = $(this).index();
						if ($(".loc_dx.loc_dx_sel-selected").hasClass("loc_dx-selected")) {
							$(".loc_dx.loc_dx-selected").removeClass("loc_dx_sel-selected");
							$(".loc_dx.loc_dx-selected").addClass("loc_dx_sel");
						}
						$(".loc_dx.loc_dx-selected").removeClass("loc_dx-selected");
						$(".loc_dx").eq(index).addClass("loc_dx-selected");
						if ($(".loc_dx").eq(index).hasClass("loc_dx_sel")) {
							$(".loc_dx").eq(index).removeClass("loc_dx_sel");
							$(".loc_dx").eq(index).addClass("loc_dx_sel-selected");
						}
						$(".proposta_loc").remove();
						mfe.populateHotelProposal(arHotelsDetails, arLocations, index);
					});
				}
				else {
					$('div#formMessage').html(data.strMessage);
				}
			}

		});
		$("#proposal").hide();
		$("#stretchWrapper").hide();
		$("#select_location").show();

	},
	populateProposal: function (arHotelsDetails, hotelIndex) {
		var sImagesPath = '';
		var sImageSrc = null;
		var sAnchorHtml = '';
//populate proposal
		sImagesPath = '/uploads/images/hotel/' + arHotelsDetails[hotelIndex].id + '/';
		$('div#hotel_proposal div.hotelName').text(arHotelsDetails[hotelIndex].name + '-' + arHotelsDetails[hotelIndex].id);
		for (i = 1; i <= 4; i++) {
			if ($('div#hotel_proposal div.hotelStars').hasClass("star_" + i)) {
				$('div#hotel_proposal div.hotelStars').removeClass("star_" + i);
			}
		}
		$('div#hotel_proposal div.hotelStars').addClass('stars star_' + arHotelsDetails[hotelIndex].stars);
		$('div#hotel_proposal div.hotelLocation').text(arHotelsDetails[hotelIndex].location);
		$('div#hotel_proposal div.hotelDetails').html(arHotelsDetails[hotelIndex].description);
		$('div#hotel_proposal div.gallery>a').remove();
		for (k = 1; k < 5; k++) {
			sImageSrc = arHotelsDetails[hotelIndex]["image" + k];
			if (sImageSrc !== null) {
				sAnchorHtml += '<a href="' + sImagesPath + sImageSrc + '" ';
				sAnchorHtml += 'class="img' + k + ' fancybox" ';
				sAnchorHtml += 'rel="hotel_' + arHotelsDetails[hotelIndex].id + '">';
				sAnchorHtml += '<img src="' + sImagesPath + 'resized/' + sImageSrc + '" alt="hotel image ' + k + '"/>';
				sAnchorHtml += '<span></span>';
				sAnchorHtml += '</a>';
			}
		}
		$('div#hotel_proposal div.gallery').append(sAnchorHtml);
		$('div#hotel_proposal div.gallery>a').fancybox();

//services for hotel
		$('div#hotel_proposal div.hotelService ul').remove();
		$('div#hotel_proposal div.hotelService').append('<ul></ul>');
		aTemp = arHotelsDetails[hotelIndex].servicesPaternH;
		iMax = aTemp.length;
		for (i = 0; i < iMax; i++) {
			$('div#hotel_proposal div.hotelService ul').append('<li>' + aTemp[i] + '</li>');
		}
//services for room
		$('div#hotel_proposal div.hotelRoomService ul').remove();
		$('div#hotel_proposal div.hotelRoomService').append('<ul></ul>');
		aTemp = arHotelsDetails[hotelIndex].servicesPaternC;
		iMax = aTemp.length;
		for (i = 0; i < iMax; i++) {
			$('div#hotel_proposal div.hotelRoomService ul').append('<li>' + aTemp[i] + '</li>');
		}
		if (!$("div#hotel_proposal div.hot_prop").is(":visible")) {
			$("div#hotel_proposal div.hot_prop").show();
		}
	},
	populateHotelProposal: function (arHotelsDetails, arLocations, locIndex) {
		var letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
		var initPrice = mfe.format.euro2nr($('#txtTotal').val());
		var p = 0;
		var hotelIndex, locationIndex;
		var reservationPrice;
		$("#select_location_left .menu_title").text(arLocations[locIndex].locName);
		for (l = 0; l < arHotelsDetails.length; l++) {
			if (arLocations[locIndex].locGroup === arHotelsDetails[l].locationArea) {
				hotImagesPath = '/uploads/images/hotel/' + arHotelsDetails[l].id + '/';
				if (locIndex > 0) {
					//reservationPrice = (initPrice * arLocations[locIndex].suppl) / 100;
					reservationPrice = (initPrice * arHotelsDetails[l].suppl) / 100;
					offrtPr = parseFloat((initPrice + reservationPrice).toFixed(2));
				}
				else {
					offrtPr = initPrice;
				}

				hot = "";
				hot += "<div class='proposta_loc'>";
				hot += "<input type='hidden' class='hidHotIndex' value='" + l + "'/>";
				hot += "<input type='hidden' class='hidLocIndex' value='" + locIndex + "'/>";
				hot += "<img src='" + hotImagesPath + arHotelsDetails[l].image0 + "' class='gwt-Image'>";
				hot += "<div class='proposta_h_nome'>" + arHotelsDetails[l].name + " " + arHotelsDetails[l].id + "</div>";
				hot += "<div class='price_tot'>" + rawData.labels.packageTotal + "</div>";
				hot += "<div class='pos'>" + letters[p] + "</div>";
				hot += "<div class='stars star_" + arHotelsDetails[l].stars + "'></div>";
				hot += "<div class='price'>" + offrtPr + "</div>";
				hot += "</div>";
				$("#select_location_proposals").append(hot);
				p++;
			}
		}

		$(".proposta_loc:first-child").addClass("proposta_loc-sel");
		$(".proposta_loc").click(function () {
			var jindex = $(this).index();
			var hotIndex = $(this).find(".hidHotIndex").val();
			var locIndex = $(this).find(".hidLocIndex").val();
			$(".proposta_loc.proposta_loc-sel").removeClass("proposta_loc-sel");
			$(".proposta_loc").eq(jindex).addClass("proposta_loc-sel");
			mfe.basket.data.hotel.id = arHotelsDetails[hotIndex].id;
			mfe.basket.data.hotel.name = arHotelsDetails[hotIndex].name;
			mfe.basket.data.hotel.stars = arHotelsDetails[hotIndex].stars;
			if (locationIndex > 0) {
				mfe.basket.data.price.reservation = arHotelsDetails[hotIndex].suppl;//arLocations[locationIndex].suppl;
			}
			else {
				mfe.basket.data.price.reservation = 0;
			}
			mfe.basket.set();
			mfe.populateProposal(arHotelsDetails, hotIndex);
			mfe.proposal.outputPriceWidget();
		});

		hotelIndex = $(".proposta_loc.proposta_loc-sel").find(".hidHotIndex").val();
		locationIndex = $(".proposta_loc.proposta_loc-sel").find(".hidLocIndex").val();
		mfe.basket.data.hotel.id = arHotelsDetails[hotelIndex].id;
		mfe.basket.data.hotel.name = arHotelsDetails[hotelIndex].name;
		mfe.basket.data.hotel.stars = arHotelsDetails[hotelIndex].stars;
		//alert(hotelIndex);

		mfe.basket.data.hotel.location = arLocations[locationIndex].locName;
		if (locationIndex > 0) {
			mfe.basket.data.price.reservation = arHotelsDetails[hotelIndex].suppl;//arLocations[locationIndex].suppl;
		}
		else {
			mfe.basket.data.price.reservation = 0;
		}
		mfe.basket.set();
		mfe.populateProposal(arHotelsDetails, hotelIndex);
		mfe.proposal.outputPriceWidget();

	},
	useDiscountCode:function(checkCalendar){
		var discountCode = $("#txtDiscountCode").val();
		var sSelectedDate = $('#arrCalendar').val(); //'dd/mm/yyyy'
		var sDay = sSelectedDate.substr(0, 2),
			sMonth = sSelectedDate.substr(3, 2),
			sYear = sSelectedDate.substr(6, 4);
		var arrDate = sYear+"-"+sMonth+"-"+sDay;
		if( discountCode !='')
		{
			$.ajax({url:'/frontEnd/frontend.ajax.php', 
					type:'POST', 
					async:false, 
					data: {get: 'useDiscountCode',
						   discountCode:discountCode,
						   arrDate:arrDate},
					dataType: 'json',
					error: function (XMLHttpRequest, textStatus, errorThrown) {
						$('div#formMessage').text(XMLHttpRequest);
						return;
					},
				success: function (data, textStatus, errorThrown) {
							   if (data.blnSuccess === true) {
						mfe.basket.discountCode = data.arrParams.discountCode;
						mfe.getPrice();
						$('#txtDiscountCode').attr('disabled','disabled');
						$('#btnCodiceSconto').attr('disabled','disabled');
					} else {
						if(data.arrParams.error==true)
						{
							if(!checkCalendar)
							{
								alert("La validità dello sconto è dal "+ data.arrParams.fromDate +" al "+ data.arrParams.toDate+"!")
								$("#txtDiscountCode").val("");
							}
							else
							{
								alert("La validità dello sconto è dal "+ data.arrParams.fromDate +" al "+ data.arrParams.toDate+"!")
								mfe.basket.discountCode.sconto=0;
								mfe.basket.discountCode.type=2;
								mfe.basket.discountCode.value=0;
								var queryDate = mfe.basket.data.offer.arrDate.str;
							    dateParts = queryDate.match(/(\d+)/g);
							    realDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);  
							    $('div#fieldArrivalDate div.datepicker').datepicker('setDate', realDate);
							    mfe.setDepartureDate();
								mfe.calendarMessages();
							    mfe.useDiscountCode(true);
							    setTimeout('mfe.calendarPattern\(\)', 100);
								
								mfe.checkNrOfNightsInterval(true);
								mfe.setNrOfNights();
								mfe.getPrice();
								//$('#txtDiscountCode').removeAttr('disabled');
								//$('#btnCodiceSconto').removeAttr('disabled');
							}
						}
						else
						{
							alert("Codice sconto errato o già utilizzato");
						}
					}
				}
			});
		}
		else
		{
			alert("Codice sconto errato o già utilizzato");
		}
	
	},
	
	onclickVacanzaFlessibile: function(){
		if($('#chkVacanzaFles').is(':checked'))
		{
			var numberofadults = 0;
			var rowChildType;
			$.each(mfe.basket.data.rooms, function (iIndex) {
				rowChildType = [];
				numberofadults += parseInt(this.noa, 10);
				if (this.ch.length > 0) {
					for (j = 0; j < this.ch.length; j++) {
						rowChildType = rawData.lookUpRowObject('childType', [{'column': 'index'}, '=', parseInt(this.ch[j], 10)]);
						if (rowChildType.cradle !== 1) {
							numberofadults++;
						}
					}
				}
			});
			
			mfe.basket.data.price.vacanzaFlessibile = numberofadults * parseInt($('#chkVacanzaFles:checked').val(),10);
			//mfe.basket.data.price.vacanzaFlessibile = parseInt($('#chkVacanzaFles:checked').val(),10);
		}
		else
		{
			mfe.basket.data.price.vacanzaFlessibile = 0;
		}
		mfe.getPrice();	
	}
	
};

//extend rawData:
$.extend(true, rawData, {
	get : function (sTable, iIndex, sField) {
		if (typeof(sTable) === 'undefined') {
			return rawData;
		}
		if (typeof(iIndex) === 'undefined') {
			return rawData[sTable].data;
		}
		if (typeof(sField) === 'undefined') {
			return rawData[sTable].data[iIndex];
		}
		var iColumnNr = rawData[sTable].fields.indexOf(sField);
		if (iColumnNr !== 'undefined') {
			if (rawData[sTable].data[iIndex] === undefined) {
				console.info('rawData warning: missing data for table:[' + sTable + '] !');
			}
			else {
				return rawData[sTable].data[iIndex][iColumnNr];
			}
		}
		else {
			return false;
		}
	},
	search : function (sTable, sFieldSearchFor, sFieldSearchValue) {
		var iColumnSearchFor = rawData[sTable].fields.indexOf(sFieldSearchFor);
		var i;
		var iDataLength = rawData[sTable].data.length;
		for (i = 0; i < iDataLength; i++) {
			if (rawData[sTable].data[i][iColumnSearchFor] === sFieldSearchValue) {
				return (rawData[sTable].data[i]);
			}
		}
		return (false);
	},
	lookUpRow: function (sTable, aWhere) {
		switch (aWhere[1]) {
		case '=':
			fnComparison = function (value1, value2) {
					return (value1 === value2);
				};
			break;
		case '<':
			fnComparison = function (value1, value2) {
					return (value1 < value2);
				};
			break;
		case '>':
			fnComparison = function (value1, value2) {
					return (value1 > value2);
				};
			break;
		}

		if (typeof(aWhere[0].column) !== 'undefined') {
			fnValue1 = function (iIndex) {
				return rawData.get(sTable, iIndex, aWhere[0].column);
			};
		}
		else {
			fnValue1 = function (iIndex) {
				return (aWhere[0]);
			};
		}

		if (typeof(aWhere[2].column) !== 'undefined') {
			fnValue2 = function (iIndex) {
				return rawData.get(sTable, iIndex, aWhere[2].column);
			};
		}
		else {
			fnValue2 = function (iIndex) {
				return (aWhere[2]);
			};
		}

		var i;
		var iDataLength = rawData[sTable].data.length;
		for (i = 0; i < iDataLength; i++) {
			if (fnComparison(fnValue1(i), fnValue2(i))) {
				return (rawData[sTable].data[i]);
			}
		}
		return (false);
	},
	lookUpRowObject: function (sTable, aWhere) {
		var aRow = this.lookUpRow(sTable, aWhere);
		return ($.fn.arrayMap(rawData[sTable].fields, aRow));
	},
	lookUpTable: function (sTable, aWhere) {
		switch (aWhere[1]) {
		case '=':
			fnComparison = function (value1, value2) {
				return (value1 === value2);
			};
			break;
		case '<':
			fnComparison = function (value1, value2) {
				return (value1 < value2);
			};
			break;
		case '>':
			fnComparison = function (value1, value2) {
				return (value1 > value2);
			};
			break;
		case '&':
			fnComparison = function (value1, value2) {
				return ((value1 & value2) > 0);
			};
			break;
		}

		if (typeof(aWhere[0].column) !== 'undefined') {
			fnValue1 = function (iIndex) {
				return rawData.get(sTable, iIndex, aWhere[0].column);
			};
		}
		else {
			fnValue1 = function (iIndex) {
				return (aWhere[0]);
			};
		}

		if (typeof(aWhere[2].column) !== 'undefined') {
			fnValue2 = function (iIndex) {
				return rawData.get(sTable, iIndex, aWhere[2].column);
			};
		}
		else {
			fnValue2 = function (iIndex) {
				return (aWhere[2]);
			};
		}

		var i;
		var iDataLength = rawData[sTable].data.length;
		var aReturn = [];
		for (i = 0; i < iDataLength; i++) {
			if (fnComparison(fnValue1(i), fnValue2(i))) {
				aReturn.push(rawData[sTable].data[i]);
			}
		}
		return (aReturn);
	},
	lookUp: function (sField, sTable, aWhere) {
//aWhere = [{column:'index'}, '=', 3];
		switch (aWhere[1]) {
		case '=':
			fnComparison = function (value1, value2) {
					return (value1 === value2);
				};
			break;
		case '<':
			fnComparison = function (value1, value2) {
					return (value1 < value2);
				};
			break;
		case '>':
			fnComparison = function (value1, value2) {
					return (value1 > value2);
				};
			break;
		case '&':
			fnComparison = function (value1, value2) {
				return ((value1 & value2) > 0);
			};
			break;
		}

		if (typeof(aWhere[0].column) !== 'undefined') {
			fnValue1 = function (iIndex) {
				return rawData.get(sTable, iIndex, aWhere[0].column);
			};
		}
		else {
			fnValue1 = function (iIndex) {
				return (aWhere[0]);
			};
		}

		if (typeof(aWhere[2].column) !== 'undefined') {
			fnValue2 = function (iIndex) {
				return rawData.get(sTable, iIndex, aWhere[2].column);
			};
		}
		else {
			fnValue2 = function (iIndex) {
				return (aWhere[2]);
			};
		}

		var i;
		var iDataLength = rawData[sTable].data.length;
		for (i = 0; i < iDataLength; i++) {
			if (fnComparison(fnValue1(i), fnValue2(i))) {
				return (rawData.get(sTable, i, sField));
			}
		}
		return (false);
	}
});

//after dom load:
$(function () {
	mfe.basket.init();
	//mfe.setNrOfNights();
	if ($('div#topMenu a.selected').length === 0) {
		$('div#topMenu a.offers').addClass('selected');
	}

	$('#divAlert').dialog({
		autoOpen: false,
		modal: true,
		minHeight: 300,
		minWidth: 400,
		title: 'Attenzione',
		buttons: [{
			text: 'Chiudi',
			click: function () {
				$(this).dialog("close");
			}
		}]
	});

	$('#divTestDialog').dialog({
		autoOpen: false,
		modal: true,
		minHeight: 300,
		minWidth: 400,
		title: 'Attenzione',
		buttons: [{
			text: 'Chiudi',
			click: function () {
				$(this).dialog("close");
			}
		}]
	});
	$('#codSconti,#vacanzaFlessibileDialog').dialog({
		autoOpen: false,
		modal: true,
		minHeight: 300,
		minWidth: 600,
		title: 'Codice Sconto',
		buttons: [{
			text: 'Chiudi',
			click: function () {
				$(this).dialog("close");
			}
		}]
	});
	var iMax = rawData.offers.data.length;
	for (i = 0; i < iMax; i++) {
		if (rawData.offers.data[i][0] === init.offer.id) {
			rawData.offers.current = i;
			break;
		}
	}

	if (rawData.offers.data.length < 11) {
		$('#listOff .navigator').hide();
	}

//set prices slice pattern:
	rawData.calendarPattern.data.push(init.tariffPattern);

	$.datepicker.setDefaults({
		dateFormat: 'dd/mm/yy',
		firstDay: 1
	});


	$('div#fieldArrivalDate div.datepicker').datepicker({
		minDate: 0,
		maxDate: '+1y',
		numberOfMonths: 1,
		altField: "input#arrDate",
		altFormat: "d M yy",
		defaultDate: init.offer.date,
		onSelect: function (dateText, inst) {
			mfe.setDepartureDate();
			mfe.calendarMessages();
//give time to jquery to render the days (this is evil):
//TODO : remove setTimeout function from here and use a different event to apply the pattern for calendar. This issue require some research.
			setTimeout('mfe.calendarPattern\(\)', 100);
			
			mfe.checkNrOfNightsInterval(true);
			mfe.setNrOfNights();
			if(mfe.basket.discountCode.type!=2)
			{
				//alert(mfe.basket.data.offer.arrDate.str);
				mfe.useDiscountCode(true);
				/*
				var queryDate = mfe.basket.data.offer.arrDate.str;
			    dateParts = queryDate.match(/(\d+)/g);
			    realDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);  
			    $('div#fieldArrivalDate div.datepicker').datepicker('setDate', realDate);
			    mfe.setDepartureDate();
				mfe.calendarMessages();
			    mfe.useDiscountCode(true);
			    setTimeout('mfe.calendarPattern\(\)', 100);
				
				mfe.checkNrOfNightsInterval(true);
				mfe.setNrOfNights();*/
			}
			mfe.getPrice();
			
		},
		onChangeMonthYear: function onChangeMY(iYear, iMonth, inst) {
			$(this).attr('visyear', iYear);
			$(this).attr('vismonth', iMonth);
//give time to jquery to render the days (this is evil):
//TODO : remove setTimeout function from here and use a different event to apply the pattern for calendar. This issue require some research.
			setTimeout('mfe.calendarPattern\(\)', 100);
		}
	});
	mfe.calendarMessages();
	$(".datepicker").datepicker($.datepicker.regional[rawData.lang2]);
	var dArrival = $('#arrCalendar').datepicker("getDate");
	$('#arrCalendar').attr("visyear", $.datepicker.formatDate('yy', dArrival));
	$('#arrCalendar').attr('vismonth', $.datepicker.formatDate('m', dArrival));


	fw.validation.Attach('frmOffSearch');

//gray for ie versio less than 6:
	if ($.browser.msie && $.browser.version < 7) {
		$('html').css("filter", "progid:DXImageTransform.Microsoft.BasicImage(grayscale=1) ");
	}

//load title for offer:
	$('div#frmOffSearch h4.title span.value').text(rawData.get('offers', rawData.offers.current, 'title'));

	$("div#miraTabs").tabs({
//TODO : load content for tabs with ajax
	});

	$('div#frmOffSearch h4 span.proposal').hide();
//add 1st room:
	mfe.room.add();

//populate the list of offers:
	mfe.outputOfferte();
	mfe.selectOffer($('div#listOffContent>a').get(0), rawData.offers.current);
	$('div#listOffContent>a').removeClass('selected');
	$('div#listOffContent>a').eq(rawData.offers.current).addClass('selected');
	mfe.outputOfferProperties();

	$('input#txtLocation').blur(function () {
		if ($(this).val() === '') {
			$('input#hLocationId').val('');
		}
	});
	$('input#txtLocation').autocomplete({
		source: function (request, response) {
			$.ajax({
				type: 'POST',
				url: '/frontEnd/frontend.ajax.php',
				dataType: 'json',
				data: {
					get: 'location',
					term: request.term
				},
				success: function (data) {
					$('input#hLocationId').val(''); //reset the id
					response(data.arrParams.location);
				}
			});
		},
		select: function (event, ui) {
			$('input#hLocationId').val(ui.item.id);
			$('input#txtHotel').val('');
			$('input#hHotel').val('');
		},
		minLength: 2,
		delay: 0
	});
	$('input#txtHotel').blur(function () {
		if ($(this).val() === '') {
			$('input#hHotelId').val('');
		}
	});
	$('input#txtHotel').autocomplete({
		source: function (request, response) {
			$.ajax({
				type: 'POST',
				url: '/frontEnd/frontend.ajax.php',
				dataType: 'json',
				data: {
					get: 'hotelsName',
					term: request.term,
					location: $('input#hLocationId').val()
				},
				success: function (data) {
					$('input#hHotelId').val(''); //reset the id
					response(data.arrParams.hotelsName); //output the select control
				}
			});
		},
		select: function (event, ui) {
			$('input#hHotelId').val(ui.item.id);
			console.info(ui.item.id);
		},
		minLength: 2,
		delay: 0
	});
	$("#cod_sconti").click(function(){
		$("#codSconti").load("/frontEnd/sections/secCodiceSconto.phtml");
		$("#codSconti").dialog("open");
	});
	$("#vacanzaFlessibileInfo").click(function(){
		$("#vacanzaFlessibileDialog").load("/frontEnd/sections/secVacanzaFlessibile.phtml");
		$( "#vacanzaFlessibileDialog" ).dialog( "option", "title", 'Supplemento Vacanza Flessibile' );
		$( "#vacanzaFlessibileDialog" ).dialog( "option", "minHeight", 400 );
		$("#vacanzaFlessibileDialog").dialog("open");
	});
	/*if(rawData.seasonClosed == true &&  isLogin==0 && hassAccess!=0)
		{
			$('#offer :input').attr('disabled', true);
			$("#arrCalendar td").removeAttr("onclick");
		}
	*/
});
