/*******************************************************************************
	EasyWEB	5

	@Copyright 	Synerway Sp. z o. o. http://www.synerway.pl/
			All rights reserved

	@Author		Antoni Jakubiak <a.jakubiak@synerway.pl>

	@Description	Liczba pokoi i liczba osob
*******************************************************************************/



/**
 * Obiekt zarzadzajacy selektami liczba pokoi i liczba osob.
 * Liczba osob zawsze musi byc wieksza lub rowna liczbie pokoi
 * Liczba osob nie moze byc za duza w jednym pokoju
 */
function NumOfAdultsNumOfRooms( iIdNumOfAdultsSelect, iIdNumOfRoomsSelect, iMaxAdultsPerRoom ) {
	/**
	 * Selektor z wyborem liczby ludzi
	 */
	this._numOfAdultsSelect = document.getElementById( iIdNumOfAdultsSelect );
	/**
	 * Selektor w wyborem liczby pokoi
	 */
	this._numOfRoomsSelect  = document.getElementById( iIdNumOfRoomsSelect );
	/**
	 * Maksymalna liczba osob, ktora mozemy upchnac w jednym pokoju.
	 * Zakladamy, ze selekty sa odpowiednio zbudowane
	 */
	this._maxAdultsPerRoom = iMaxAdultsPerRoom;
	/**
	 * Ja byc ja i nie lubiec misia
	 */
	var oThis = this;
	/**
	 * eventy
	 */
	this._numOfAdultsSelect.onchange = function() { oThis._onUpdateNumOfAdults(); };
	this._numOfRoomsSelect.onchange  = function() { oThis._onUpdateNumOfRooms(); };
}
/**
 * Funkcja uruchamiana gdy zmieni sie liczba pokoi
 */
NumOfAdultsNumOfRooms.prototype._onUpdateNumOfRooms = function() {
	var nr = parseInt(this._getNumOfRooms());
	var na = parseInt(this._getNumOfAdults());
	if ( nr > na ) {
		this._setNumOfAdults( nr );
	} else if ( nr * this._maxAdultsPerRoom < na ) {
		this._setNumOfAdults( nr * this._maxAdultsPerRoom );
	}
}

/**
 * Funkcja uruchamiana gdy zmieni sie liczba osob
 */
NumOfAdultsNumOfRooms.prototype._onUpdateNumOfAdults = function() {
	var nr = parseInt(this._getNumOfRooms());
	var na = parseInt(this._getNumOfAdults());
	if ( na < nr ) {
		this._setNumOfRooms( na );
	} else if ( na > nr * this._maxAdultsPerRoom ) {
		this._setNumOfRooms( Math.ceil( 1.0 * na / this._maxAdultsPerRoom ) );
	}
}




/**
 * Zwraca aktualna liczbe pokoi
 */
NumOfAdultsNumOfRooms.prototype._getNumOfRooms = function () {
	return this._getSelectedValue( this._numOfRoomsSelect );
}
/**
 * Ustala aktualna liczbe osob
 */
NumOfAdultsNumOfRooms.prototype._setNumOfRooms = function( numOfRooms ) {
	return this._setSelectByValue( this._numOfRoomsSelect, numOfRooms )
}
/**
 * Zwraca aktualna liczbe osob
 */
NumOfAdultsNumOfRooms.prototype._getNumOfAdults = function () {
	return this._getSelectedValue( this._numOfAdultsSelect );
}
/**
 * Ustala aktualna liczbe osob
 */
NumOfAdultsNumOfRooms.prototype._setNumOfAdults = function( numOfAdults ) {
	return this._setSelectByValue( this._numOfAdultsSelect, numOfAdults )
}
/**
 * Ustalenie obiektu selekct dla wartosci
 */
NumOfAdultsNumOfRooms.prototype._setSelectByValue = function ( selectElement , value ) {
	// czy to cos ma opcjie
	if( !selectElement.options ) {
		return;
	}
	for( var i=0; i<selectElement.options.length; i++ ) {
		if( selectElement.options[i].value != value ) {
			continue;
		}
		selectElement.selectedIndex = i;
		return;
	}
}
/**
 * Zwraca wybrana wartosc dla selecta
 */
NumOfAdultsNumOfRooms.prototype._getSelectedValue = function ( selectElement ) {
	if ( ! selectElement ) return;
	return selectElement.options[ selectElement.selectedIndex ].value;
}

