var HotelSystemsApiIntegrator = new Object;
HotelSystemsApiIntegrator._initialized = false;

HotelSystemsApiIntegrator.show = function(hotel,offer) {
	$('booking_offer').hide();
	$('booking').show();
	
	if(!this._initialized) {
		var config = new Object;
		var res = new Object;
		res.id_offers = offer;
		config.id_hotels = hotel;
		config.div = $('booking');
		config.proxy = '/public/proxy/proxy.php';
		config.reservation = res;
		HotelSystemsApi.init(config);
		this._initialized = true;
	}
}

HotelSystemsApiIntegrator.hide = function() {
	$('booking_offer').show();
	$('booking').hide();
}

var HotelSystemsApi = new Object;

HotelSystemsApi.bookingCache = false;
HotelSystemsApi._params = false;


HotelSystemsApi.init = function(params) {
	
	var e = false;
	
	params.path = 'http://api.v162.hotelsystems.pl/v2/';
			
	//set default values
	if(!params.reservation) { params.reservation = new Object; }
	if (!params.skin) { 	params.skin = 'default'; }
	if (!params.adapter) { 	params.adapter = 'default'; }	
	if (!params.preloaderHtml) { params.preloaderHtml = this.preloaderHtml; }
	if (!params.footerHtml) { params.footerHtml = this.footerHtml; }
	
	//validate
	if(!params.id_hotels) { var e = 'Nie podano hotelu!'; }
	if(!params.proxy) { var e = 'Nie podano adresu PHP proxy!'; }
	if(!params.div) { var e = 'Nie podano obiektu docelowego!'; }
	
	//if (!params.reservation.date_from) { params.reservation.date_from = '2011-12-16'; }
	if (!params.reservation.days) { params.reservation.days = '2'; }
	if (!params.reservation.id_hotels) { params.reservation.id_hotels = params.id_hotels; }
	if (!params.reservation.id_partners) { params.reservation.id_partners = 1; }
	if (params.reservation.id_offers) {		
		params.reservation['rooms[0][id_offers]'] = params.reservation.id_offers;
		params.reservation['rooms[0][is_offer]'] = true;
		params.reservation.id_offers = false;
	}
	
	this._params = params;
	
	if (e) {
		alert(e);
	} else {
		this.build(this._params.div);
	}	
	
}

HotelSystemsApi.build = function(div) {
			
	var initObj = $H(this._params.reservation);
	var initParams = new Object;
	initObj.each(function(pair) {
		var nk = 'reservations__'+pair.key;
		initParams[nk] = pair.value;
	});
	
	var params = $H(initParams).toQueryString();	
	
	var resp = function(req) {
		var json = req.responseText.evalJSON();
		div.innerHTML = json.html;
		HotelSystemsApi.ovr(0);
		HotelSystemsApi.setup(0);
		HotelSystemsApi.debug(json);
	}
		
	HotelSystemsApi.call('bookinghtml',resp,params);
}

HotelSystemsApi.call = function(action,resp,params,t) {
	
	HotelSystemsApi.ovr(1);
	
	var form = $('HSBooking-Form');
	
	if (!params) {
		if (form) {
			var params = this.buildQuery(t);			
			HotelSystemsApi.ovr(1);
		}
		else {
			var params = '';
		}
		params += '&reservations__id_hotels=' + this._params.id_hotels + '&key=' + HotelSystemsApi.key;
		params += '&reservations__id_partners=1';
		
	}
	
	var abs = this._params.path;
		
	var url = abs+action;
	var proxyurl = this._params.proxy + '?proxy_url='+url;
	
	if (!resp) {		
		var resp = function(req){
			alert(req.responseText);
		}
	}
	
	var pars = params;
	var args = {method:'post',parameters: pars, onComplete: resp};
	var myReq = new Ajax.Request(proxyurl,args);
	
}

HotelSystemsApi.debug = function(json) {
	if(json.debug) {
		console.log(json.debug);
	}
}

HotelSystemsApi.tab = function(id) {
	
	var f = $('HSBooking-TabId');	
	
	if((!id)&&(id != 0)) {
		return f.value*1;
	} else {
		f.value = id;
	}
	
}

HotelSystemsApi.switchTab = function(id,update) {
	
	if ((this.tab() == id) && (!update)) {
	
	}
	else {
	
		var v = this.validate(id);
		
		if (v.length == 0) {
		
			HotelSystemsApi.hideErrors();
			
			var prevTab = HotelSystemsApi.tab();
			
			HotelSystemsApi.tab(id);
			HotelSystemsApi.switchTabCss('HSBooking-Tab', id);
			
			var resp = function(req){				
				var json = req.responseText.evalJSON();
				$('HSBooking-TabContent').innerHTML = json.html;
				$('HSBooking-Footer').innerHTML = json.footer;
				HotelSystemsApi.ovr(0);
				HotelSystemsApi.setup(id);
				HotelSystemsApi.debug(json);
			}
			HotelSystemsApi.call('bookinghtml', resp, false, prevTab);
			
		}
		else {
		
			this.showErrors(v);
			
		}
		
	}
	
}

HotelSystemsApi.update = function() {
	var id = HotelSystemsApi.tab();
	
	this.ovr(1);
	this.hideErrors();
	
	if (id == 10) {
		var resp = function(req) {
			var json = req.responseText.evalJSON();
			$('HSBooking-Rooms').innerHTML = json.html;
			if (json.footer) {
				$('HSBooking-Footer').innerHTML = json.footer;
			} else {
				$('HSBooking-Footer').innerHTML = '';
			}
			HotelSystemsApi.ovr(0);
			HotelSystemsApi.setupVariants();
			HotelSystemsApi.debug(json);
		}
		HotelSystemsApi.call('bookinghtml',resp);
	}
	else {
		HotelSystemsApi.switchTab(id,true);
	}
}

HotelSystemsApi.buildQuery = function(t) {
	var form = $('HSBooking-Form');
	
	if(form) {
		var current = Form.serialize('HSBooking-Form',true);		
	}
	
	if (this.bookingCache) {
		var b = this.bookingCache;
	} else {
		var b = new Object;
	}
	
	b['HSBooking-Show'] = false;	
	if(t == 1) { b['reservations__rooms[0][id_board][]'] = false; }
	
	var current = $H(current);
	current.each(function(pair){		
		b[pair.key] = pair.value;
	});
		
	this.bookingCache = b;	
	var query = $H(this.bookingCache).toQueryString();
	
	return query; //console.log(query);
	
}

HotelSystemsApi.ovr = function(s) {
	if($('HSBooking-Overlay')) {
		if (s) {
			var h = ($('HSBooking').getHeight() - 40) + 'px';
			
			var off = $('HSBooking-Overlay').cumulativeOffset();
			var pre = $$('.HSBooking .HSBooking-OverlayPre')[0];
			var pre = $(pre);
			var sc = document.viewport.getScrollOffsets();
			
			var o = sc.top-off.top;
			if(o < 0) { o = 0; }
			pre.style.top = (o + 200) + 'px';
			//console.log(sc.top+' '+off.top);
			
			$('HSBooking-Overlay').style.height = h;
			$$('.HSBooking-OverlayBg')[0].style.height = h;
			$('HSBooking-Overlay').show();
		} else {
			$('HSBooking-Overlay').hide();
		}
	}
}

HotelSystemsApi.setup = function(id) {
	
	$('HSBooking-Prev').onclick = this.prev;
	$('HSBooking-Next').onclick = this.next;
	
	if(id==0) {
		$('HSBooking-Prev').hide();
	} else {
		$('HSBooking-Prev').show();
	}
	
	if(id != 0 ) {
		$('HSBooking-Buttons').show();
	}
			
	switch(id) {
		case 0:
			$('HSBooking-Buttons').hide();		
			HotelSystemsApi.setupCalendar();	
			//HotelSystemsApi.setupVariants();
		break;
		
		case 1:
			var tid = $('reservations__options_tab').value;
			if(tid) {
				this.switchOptionCat(tid);
			}
		break;	
		
		case 2:
			HotelSystemsApi.toggleSumup();
			$('HSBooking-Next').onclick = this.book;
		break;
	}
	
}

HotelSystemsApi.setupCalendar = function() {
	var inputId = 'HSBooking-FormDateFrom';
			var dateStatusP = function(dt){
				now = new Date();
				if (dt >= now) {
					return false;
				}
				else {
					return true;
				}
			}
								
			var onClose = function(calendar) {
				calendar.hide();
			}
			
			var onSelect = function(calendar,date) {
				if (calendar.dateClicked) {
					HotelSystemsApi.setFormValue('date_from',date);
					$(inputId).value = date;					
					calendar.hide();
					HotelSystemsApi.update();					
				}
			}
							
			Calendar.setup(
			   {
			      inputField  : inputId,         // ID of the input field
			      ifFormat    : "%Y-%m-%d",    // the date format
			      button      : 'HSBooking-CalendarButton', // ID of the button
				  dateStatusFunc : dateStatusP	,
				  onSelect : onSelect			      
			   }
	 );	
}

HotelSystemsApi.fixDate = function(d) {
	HotelSystemsApi.setFormValue('date_from',d);
	$('HSBooking-FormDateFrom').value = d;
	HotelSystemsApi.update();
	return false;
}

HotelSystemsApi.linkOffer = function(url) {
	document.location.href = url;
}

HotelSystemsApi.setFormValue = function(id,val) {	
	var fid = 'reservations__'+id;
	var field = $(fid);	
	field.value = val;
}

HotelSystemsApi.getFormValue = function(id) {
	var fid = 'reservations__'+id;
	var field = $(fid);
	return field.value;
}

HotelSystemsApi.setupVariants = function() {
	$$('.HSBooking-Room').each(function(e){
		var fn = function() {			
			var p = $(this).up();			
			HotelSystemsApi.selectRoom(p);
		}
		var ovr = $(e).select('.HSBooking-RoomOvr')[0];
		ovr.onclick = fn
		var more = $(e).select('.HSBooking-RoomFull')[0];
		more.style.display = 'none';
		var btn = $(e).select('.HSBooking-RoomReadMore')[0];
		btn.more = more;
		btn.onclick = function() { $(this.more).toggle(); }
	});
}

HotelSystemsApi.selectRoom = function(ref,v) {
	/*var ref = $(ref);
	var variantInfo = ref.select('.HSBooking-RoomVariantInfo');
	var variantInfo = variantInfo[0].innerHTML;
	var variantInfo = variantInfo.split(',');*/
	this.setFormValue('id_rooms_types',ref);
	if(v > 0) { 
		this.setFormValue('id_offers_variants',v);		
	} else {
		this.setFormValue('id_offers_variants',0);
	}
	this.switchTab(1);
}

HotelSystemsApi.zoom = function(img,id) {
	var path = img + '&w=335&h=200';
	$('HSBooking-RoomGallery'+id).src = path;
}

HotelSystemsApi.optionPlus = function(id) {	
	var v = $('OptionCount-' + id).value*1;
	
	var div = $$('.HSBooking-Option' + id)[0];
	$(div).addClassName('HSBooking-OptionLock');
	
	$('OptionCount-' + id).value = v+1;
	HotelSystemsApi.update();
}
HotelSystemsApi.optionMinus = function(id){
	var v = $('OptionCount-' + id).value * 1;
	
	var div = $$('.HSBooking-Option' + id)[0];
	$(div).addClassName('HSBooking-OptionLock');
	
	if (v > 0) {
		$('OptionCount-' + id).value = v - 1;
		HotelSystemsApi.update();
	}
}

HotelSystemsApi.switchTabCss = function(c,id) {
	$$('.'+c).each(function(e){
		$(e).removeClassName('HSAct');
	});
	var t = $$('.'+c+''+id)[0];
	if (t) {
		t.addClassName('HSAct');
	}
	
	if (c == 'HSBooking-Tab') {
		$$('.HSBooking-Tabs')[0].removeClassName('HSBooking-Tabs0');
		$$('.HSBooking-Tabs')[0].removeClassName('HSBooking-Tabs1');
		$$('.HSBooking-Tabs')[0].removeClassName('HSBooking-Tabs2');
		$$('.HSBooking-Tabs')[0].removeClassName('HSBooking-Tabs3');
		$$('.HSBooking-Tabs')[0].addClassName('HSBooking-Tabs' + id);
	}
}

HotelSystemsApi.extendCss = function(c,id) {
	
	$$('.'+c).each(function(e){
		$(e).style.height = '';
		$(e).removeClassName('HSFull');		
	});
	
	if (id) {
		var t = $$('.' + c + '' + id)[0];
		if (t) {
			t.addClassName('HSFull');
			if (c == 'HSBooking-Option') {
				var h = $$('.' + c + '' + id + ' .HSBooking-OptionFull')[0];
				var hi = $$('.' + c + '' + id + ' .HSBooking-OptionInfo')[0];
				var h = $(h).getHeight();
				var hi = $(hi).getHeight();
				$(t).style.height = (h+hi+30) + 'px';
			}
		}
	}
}

HotelSystemsApi.toggleSumup = function() {
	var nh = $('HSBooking-SumupContent').getHeight();
	var e = $($$('.HSBooking-DateInfo')[0]);
	if (e.hasClassName('HSFull')) {
		e.style.height = '';
		e.removeClassName('HSFull');
	}
	else {
		e.style.height = (nh + 40) + 'px';
		e.addClassName('HSFull');
	}
}

HotelSystemsApi.switchOptionCat = function(id) {
	$$('.HSBooking-OptionsCat').each(function(e){
		$(e).hide();
	});
	$('HSBooking-OptionsCat'+id).show();
	HotelSystemsApi.switchTabCss('HSBooking-OptionsTab',id);
	$('reservations__options_tab').value=id;
}

HotelSystemsApi.gotoOptionsTab = function(id) {
	var t = this.tab();
	if (id) {
		$('reservations__options_tab').value = id;
		if(t == 1) {
			this.switchOptionCat(id);
		}
	}	
	if (t != 1) {
		HotelSystemsApi.switchTab(1);
	}
}

HotelSystemsApi.boardSwitch = function(id) {
	var div = $$('.HSBooking-OptionB'+id)[0];
	$(div).addClassName('HSBooking-OptionLock');
	var chk = $('HSBoard'+id);
	if(chk.checked) {
		chk.checked = false;		
	} else {
		chk.checked = true;
	}
	HotelSystemsApi.update();
}

HotelSystemsApi.optionCheckbox = function(id) {
	var v = $('OptionCount-' + id).value*1;
	if(v > 0) {
		var nv = 0;
	} else {
		var nv = 1;
	}
	$('OptionCount-' + id).value = nv;
	HotelSystemsApi.update();
}

HotelSystemsApi.next = function() {
	var t = HotelSystemsApi.tab();	
	HotelSystemsApi.switchTab(t+1);
	return false;
}

HotelSystemsApi.prev = function() {
	var t = HotelSystemsApi.tab();
	HotelSystemsApi.switchTab(t-1);
	return false;
}

HotelSystemsApi.validate = function(id) {
	var errors = new Array;
	if(id > 0) {
		if(!this.getFormValue('id_rooms_types')) { 
			var e = {id:1,msg:'Proszę wybrać typ pokoju.'};
			errors.push(e);
			e = false;
		}
	}
	
	if(id > 2) {
		var error = false;
		var fields = $$('.HSBooking .required');
		fields.each(function(f){			
			if(f.value == '') {
				error = {id:2,msg:'Proszę wypełnić wszystkie pola oznaczone gwiazdką (*)'};
			}
		});
		if (fields.length == 0) {
			error = {
				id: 3,
				msg: 'Proszę wypełnić formularz.'
			};
		}
		else {
			if (!$('HSBooking-TermsAccept').checked) {
				error = {
					id: 4,
					msg: 'Proszę zaakceptować regulamin rezerwacji.'
				};
			}
		}
		if(error) { errors.push(error); }
	}
	return errors;
}

HotelSystemsApi.book = function() {
	
	var v = HotelSystemsApi.validate(3);
	
	if(v.length > 0) {
		if (v[0].id == 3) {
			HotelSystemsApi.switchTab(2);
		}
		else {
			HotelSystemsApi.showErrors(v);
		}
	} else {
		HotelSystemsApi.switchTabCss('HSBooking-Tab',3);
		$$('.HSBooking-Tab').each(function(e){
			e.onclick = function() { return false; }
		});		
		HotelSystemsApi.submit();
	}
	
	return false;
	
}

HotelSystemsApi.loadCard = function() {
	
	var nr = $('HSBooking-CardNr').value;
	var email = $('HSBooking-CardEmail').value;
	
	var pars = 'karty_spa__nr_karty='+nr+'&karty_spa__email='+email;
	
	var resp = function(req) {
		//Booking.setLoading(false);
		var t = req.responseText.evalJSON();		
		HotelSystemsApi.ovr(0);
		if(t.rabat) {
			$('reservations__rabat_kwota').value = t.rabat;
			$('reservations__id_card').value = t.id;						
			alert('Kwota rezerwacji została obniżona o '+t.rabat+' zł');
			HotelSystemsApi.update();
		} else {
			alert('Wprowadzone dane są nieprawidłowe');
		}
	}
	
	//Booking.setLoading(true,'Trwa sprawdzanie Karty SPA. Proszę czekać...');
	HotelSystemsApi.call('checkcard',resp,pars);
	return false;
	
}

HotelSystemsApi.switchCard = function(ref) {
	$$('.karta_option').each(function(e){
		e.removeClassName('act');
	});
	ref.addClassName('act');
	if (ref.id == 'karta_option1') {
		$$('.karta_form')[0].hide();
	} else {
		$$('.karta_form')[0].show();
	}
}

HotelSystemsApi.wstepna = function() {
	$('rezBtnAllpay').style.display = 'none';
	$('rezBtnWstepna').style.display = 'none';
	$('wstepna_info1').style.display = 'none';
	$('rez_pay_box').style.display = 'none';
	$('wstepna_info2').style.display = 'block';
}

HotelSystemsApi.submit = function() {
	var resp = function(req) {
		var json = req.responseText.evalJSON();
		//alert(json);
		$('HSBooking').innerHTML = json.html;
		HotelSystemsApi.ovr(0);
	}
	HotelSystemsApi.call('book',resp);
	return false;
}

HotelSystemsApi.hideErrors = function() {
	$('HSBooking-Validation').hide();
}

HotelSystemsApi.showErrors = function(errors) {
	
	var v = $('HSBooking-Validation');
	var html = '';
	errors.each(function(e){
		html += '<div class="HSBooking-Error">'+e.msg+'</div>';
	});
	v.innerHTML = html;
	v.show();
	
}

