var Quickreservation = new Class({
	initialize: function(cont,language,settings,elements) {
		this.cont             		= cont;
		this.language				= language;
				
		this.hotelId				= settings.hotel_id;
		this.dataSource				= settings.data_source;
		this.category				= settings.category;
		this.offerPackage			= settings.offer_package;
		this.room					= settings.room;

		this.hotelSelector    		= (typeof elements.hotel_selector !== 'undefined') ? elements.hotel_selector : false;
		this.dataSourceSelector		= (typeof elements.data_source_selector !== 'undefined') ? elements.data_source_selector : false;
		this.categoryContainer 		= (typeof elements.category_container !== 'undefined') ? elements.category_container : false;
		this.categorySelector 		= (typeof elements.category_selector !== 'undefined') ? elements.category_selector : false;
		this.offerPackageContainer 	= (typeof elements.offer_package_container !== 'undefined') ? elements.offer_package_container : false;
		this.offerPackageSelector	= (typeof elements.offer_package_selector !== 'undefined') ? elements.offer_package_selector : false;
		this.roomContainer 			= (typeof elements.room_container !== 'undefined') ? elements.room_container : false;
		this.roomSelector			= (typeof elements.room_selector !== 'undefined') ? elements.room_selector : false;
		this.reservationSelector	= (typeof elements.reservation_selector !== 'undefined') ? elements.reservation_selector : false;
		
		
		if(this.reservationSelector) {
			var self = this;
			this.reservationSelector.addEvent('click',function() {
				$new('page')(self.cont)('setDefault')({
					'reservation': this.checked
				}).exec();
				$new('page')(self.cont)('reload')().exec();
			});
		}



		if(this.hotelSelector) {
			var self = this;
			this.hotelSelector.addEvent('change',function() {
				var hotel = self._createListFromArray(self._getSelectedIndices(this));
				$new('page')(self.cont)('setDefault')({
														'hotelId': hotel
													}).exec();
				self.hotelId = hotel;
				self._checkSelections('hotel');
			});
		}
		
		if(this.dataSourceSelector) {
			var self = this;
			this.dataSourceSelector.addEvent('change',function() {
				$new('page')(self.cont)('setDefault')({
														'dataSource': this.value
													}).exec();
				$new('page')(self.cont)('setDefault')({
														'category': ''
													}).exec();
				$new('page')(self.cont)('setDefault')({
														'offerPackage': ''
													}).exec();
				$new('page')(self.cont)('setDefault')({
														'room': ''
													}).exec();
				self.dataSource   = this.value;
				self.category     = false;
				self.offerPackage = false;
				self.room         = false;
				self._checkSelections('dataSource');
			});
		}
		
		if(this.categorySelector) {
			var self = this;
			this.categorySelector.addEvent('change',function(){
				var category = self._createListFromArray(self._getSelectedIndices(this));
				$new('page')(self.cont)('setDefault')({
														'category': category
													}).exec();
				$new('page')(self.cont)('setDefault')({
														'offerPackage': ''
													}).exec();
				$new('page')(self.cont)('setDefault')({
														'room': ''
													}).exec();
				self.category     = category;
				self.offerPackage = false;
				self.room		  = false;
				self._checkSelections('category');
			})
		}
		
		if(this.offerPackageSelector) {
			var self = this;
			this.offerPackageSelector.addEvent('change',function(){
				var offerPackage = self._createListFromArray(self._getSelectedIndices(this));
				
				$new('page')(self.cont)('setDefault')({
														'offerPackage': offerPackage
													}).exec();
				self.offerPackage = offerPackage;
			});
		}
		
		if(this.roomSelector) {
			var self = this;
			this.roomSelector.addEvent('change',function(){
				var room = self._createListFromArray(self._getSelectedIndices(this));
				$new('page')(self.cont)('setDefault')({
														'room': room
													}).exec();
				self.room = room;
			});
		}
	},
	
	_checkSelections: function(trigger) {
		this._loadRoom();
		this.roomContainer.style.display = 'inline';
	},
	
	_loadIndividualOfferCategory: function() {
		var self = this;
		
		self.categorySelector.empty();
		
		$fn('PtOfferCategory::get')(self.hotelId,self.language).run(function(response) {
			response.each(function(item,index) {
				new Element('option',{
					'value': item.id,
					'html': item.name
				}).inject(self.categorySelector);
			});
		});
	},
	
	_loadIndividualOffer: function() {
		var self = this;
		
		self.offerPackageSelector.empty();
		
		$fn('PtOffer::get')(self.hotelId,self.offerPackage,self.category,self.language).run(function(response) {
			response.each(function(item,index) {
				new Element('option',{
					'value': item.id,
					'html': item.title
				}).inject(self.offerPackageSelector);
			});
			
			if(response.length >= 10) {
				self.offerPackageSelector.size = 10;
			} else {
				self.offerPackageSelector.size = response.length;
			}
		});
		
	},
	
	_loadPackageCategory: function() {
		var self = this;
		
		self.categorySelector.empty();
		
		$fn('PtPackageCategory::get')(0,self.hotelId,self.language).run(function(response) {
			response.each(function(item,index) {
				new Element('option',{
					'value': item.id,
					'html': item.name
				}).inject(self.categorySelector);
			});
			
			if(response.length >= 10) {
				self.categorySelector.size = 10;
			} else {
				self.categorySelector.size = response.length;
			}
		});
	},
	
	_loadPackage: function() {
		var self = this;
		
		self.offerPackageSelector.empty();
		
		$fn('PtPackage::get')(self.hotelId,self.category,self.language).run(function(response){
			response.each(function(item,index) {
				new Element('option',{
					'value': item.id,
					'html': item.title
				}).inject(self.offerPackageSelector);
			});
			
			if(response.length >= 10) {
				self.offerPackageSelector.size = 10;
			} else {
				self.offerPackageSelector.size = response.length;
			}
		});
	},
	
	_loadRoom: function() {
		var self = this;
		self.roomSelector.empty();
		
		$fn('Room::get')(false,self.hotelId,self.language).run(function(response) {
			response.each(function(item,index) {
				new Element('option',{
					'value': item.id,
					'html': item.name
				}).inject(self.roomSelector);
			});
			
			if(response.length >= 10) {
				self.roomSelector.size = 10;
			} else {
				self.roomSelector.size = response.length;
			}
		}); 
	},
	
	_createListFromArray: function(ar) {
		var returnCode = '';
		var length     = ar.length;
		
		for(var i=0;i<length;i++) {
			returnCode += ar[i];
			if(i < length-1) {
				returnCode += ',';
			}
		}
		
		return returnCode;
	},
	
	_getSelectedIndices: function(node) {
		var selectedIndices = [];
		
		for(var i=0;i<node.options.length;i++) {
			if(node.options[i].selected) {
				selectedIndices.push(node.options[i].value);
			}
		}
		return selectedIndices;
	}
});
