
function returnObjById( id )
{
    if (document.getElementById)
        var returnVar = document.getElementById(id);
    else if (document.all)
        var returnVar = document.all[id];
    else if (document.layers)
        var returnVar = document.layers[id];
    return returnVar;
}

// Init global array containers
window.gPeriodContElems   = new Array();
window.gRoomTypeContElems = new Array();
window.gBoardContElems    = new Array();
window.gSpecialPriceArrowsImagContElems = new Array();

function defined(o) 
{
	return typeof(o)!="undefined";
}

function isArray(o) 
{
	// If these conditions aren't met, it certainly isn't an Array
	if (o==null || typeof(o)!="object" || typeof(o.length)!="number") {
		return false;
	}
	// Check to see if the object is an instance of the window's Array object
	if (defined(Array) && defined(o.constructor) && o.constructor==Array) {
		return true;
	}
	// It might be an array defined from another window object - check to see if it has an Array's methods
	if (typeof(o.join)=="function" && typeof(o.sort)=="function" && typeof(o.reverse)=="function") {
		return true;
	}
	// As a last resort, let's see if index [0] is defined
	return (o.length==0 || defined(o[0]));
};



/**
 * Dobavqne na element v konteinera. Konterinera v koito shte se
 * dobavi elementa zavisi ot parametyra ContSelector.
 * Elementite na konteinera sa id-tata na dadena grupa html elementi
 *
 * @author Ivan Stoqnov
 * @param mixed ElemValue
 * @param string ContSelector - selektor(identifikator) na samiq konteiner
 */
function appendElementInContainer(ElemValue, ContSelector)
{
	switch(ContSelector)
	{
		case 'PERIOD' :
			if( !isArray(window.gPeriodContElems) ){ window.gPeriodContElems = new Array(); }
			window.gPeriodContElems.push(ElemValue);
			return true;
		case 'ROOM_TYPE' :
			if( !isArray(window.gRoomTypeContElems) ){ window.gRoomTypeContElems = new Array(); }
			window.gRoomTypeContElems.push(ElemValue);
			return true;
		case 'BOARD' :
			if( !isArray(window.gBoardContElems) ){ window.gBoardContElems = new Array(); }
			window.gBoardContElems.push(ElemValue);
			return true;
		case 'SPECIAL_PRICE_ARROW' :
			if( !isArray(window.gSpecialPriceArrowsImagContElems) ){ window.gSpecialPriceArrowsImagContElems = new Array(); }
			window.gSpecialPriceArrowsImagContElems.push(ElemValue);
			return true;
			
		default : return false;
	}
}

/**
 * Vzima elementite ot daden konteiner opredelen s negoviq selector.
 * Elementite na konteinera sa id-tata na dadena grupa html elementi
 *
 * @author Ivan Stoqnov <iv44@yahoo.com>
 * @param string ContSelector - selector(identifikator) na konteinera
 * @return string[]
 */
function getContainerElems(ContSelector)
{
	switch(ContSelector)
	{
		case 'PERIOD' :
			return window.gPeriodContElems;
		case 'ROOM_TYPE' :
			return window.gRoomTypeContElems;
		case 'BOARD' :
			return window.gBoardContElems;
		case  'SPECIAL_PRICE_ARROW' :
			return gSpecialPriceArrowsImagContElems;
			
		default : return null;
	}
}

/* ---------------------------------------------- Filter ---------------------------------------------- */

	/**
	 * Premahva selekciqta na vsichki checkbox elementi ot dadeniq konteiner.
	 *
	 * @author Ivan Stoqnov <iv44@yahoo.com>
	 * @param string cbxElemSelector
	 */
	function ftrUncheckContItems( ContSelector )
	{
		var cbxListElems = getContainerElems(ContSelector);
		if( !isArray(cbxListElems) ) {
			return false;
		}
		
		for (key in cbxListElems){
			ftrUncheckElem(cbxListElems[key]);
		}
		
		return true;
	}
	
	/**
	 * Premahva selekciqta na chekbox element
	 *
	 * @author Ivan Stoqnov <iv44@yahoo.com>
	 * @param string elemID
	 */
	function ftrUncheckElem(elemID)
	{
		returnObjById( elemID ).checked = false;
		return true;
	}

	/**
	 * Izprashta sydyrjanieto na formata s dadenoto ID
	 *
	 * @author Ivan Stoqnov <iv44@yahoo.com>
	 * @param string formID
	 */
	function submitForm(formID)
	{
		returnObjById( formID ).submit();
		return true;
	}
	
	/**
	 * Funkciqta se izpolzva pri ckick na chekbox-a za izbor na
	 * vsichki periodi, tipove stai ili bordove. Funkciqta pozvolqva 
	 * da se izprashta vormata samo pri polojeni, che se izbira. Ne se dava vyzmojnost 
	 * da se izvyrshi deistviet z deselectirane ot tazi funkciq.
	 * 
	 * @author Ivan Stoqnov <iv44@yahoo.com>
	 * @param object elem 
	 * @param string ContSelector
	 * @param string formID
	 */
	function checkUncheckAllElem(elem, ContSelector, formID)
	{
		if( false == elem.checked ){
			elem.checked = true;
		} else {
			ftrUncheckContItems( ContSelector );
			submitForm(formID);
		}
		return true;
	}

/* ---------------------------------------------- Tabs ---------------------------------------------- */
                                              
	/**
	 * Pokazva kontenta na daden tab po zadadenoto mu tabContentID, kakto i promenq stila
	 * na samiq buton kato aktiven
	 *
	 * @author Ivan Stoqnov <iv44@yahoo.com>
	 * @param string buttonID     - identifikator na tab butona
	 * @param string tabContentID - identifikator na kontenta za syotvetniq tab
	 */
	function displayTab(buttonID, tabContentID) 
	{
		var elem = returnObjById(tabContentID);
		elem.style.display = "";
		var button = returnObjById(buttonID);
		button.className = 'selected_tab';
		
		return true;
	}
	
	/**
	 * Skriva kontenta na daden tab po zadadenoto mu tabContentID, kakto i promenq stila
	 * na samiq tab buton kato nekativen
	 *
	 * @author Ivan Stoqnov <iv44@yahoo.com>
	 * @param string buttonID     - identifikator na tab butona
	 * @param string tabContentID - identifikator na kontenta za syotvetniq tab
	 */
	function hideTab(buttonID, tabContentID) 
	{
		var elem = returnObjById(tabContentID);
		elem.style.display = "none";
		var button = returnObjById(buttonID);
		button.className = 'normal_tab';
		
		return true;
	}


/* ---------------------------------------- Special price arrows ---------------------------------------- */

	/**
	 * Skriva ( visibility = "hidden" ) vsichki elementi koito
	 * slujat za idikaciq na izbranite specialni ceni po periodi
	 * t.e skriva vsichki img elementi s ID-ta ot konteinera sys
	 * selector "SPECIAL_PRICE_ARROW"
	 *
	 * @author Ivan Stoqnov <iv44@yahoo.com>
	 */
	function hideSpecialPriceArrows()
	{
		var ElemsList = getContainerElems('SPECIAL_PRICE_ARROW');
		if( !isArray(ElemsList) ) {
			return false;
		}
		
		for (key in ElemsList){
			returnObjById( ElemsList[key] ).style.visibility = "hidden";
		}
		
		return true;
	}
	
	/**
	 * Funkciqta pokazva pokazva elementite s id-ta koito se vlizamt ot 
	 * vhodniq masiv ElemsIDsList. 
	 * Izpolzva se za vizualizirane na snimki sys strelki v daden red za cena
	 *
	 * @author Ivan Stoqnov <iv44@yahoo.com>
	 * @param string[] ElemsIDsList
	 */
	function showSpecialPriceArrows(ElemsIDsList)
	{
		for (key in ElemsIDsList) {
			returnObjById( ElemsIDsList[key] ).style.visibility = "visible";
		}
		
		return true;
	}

