/**
 * Toggle (show/close) expand box
 * with values of review.
 *
 * @param {Int} rid Review unique id.
 */
function toggleHotelReview(rid)
{
  if (isNaN((rid = parseInt(rid)))) return false;

  var boxid = 'review' + rid + '_values';
  var expanderid = 'review' + rid + '_expander';
  var boxstyle = YAHOO.util.Dom.getStyle(boxid, 'display');

  switch(boxstyle) {
    case 'none':
      YAHOO.util.Dom.setStyle(boxid, 'display', 'block');
      YAHOO.util.Dom.addClass(expanderid, 'expandOn');
    break;

    case 'block':
      YAHOO.util.Dom.setStyle(boxid, 'display', 'none');
      YAHOO.util.Dom.removeClass(expanderid, 'expandOn');
    break;
  }

  return true;
}

function checkForm(form)
{
	/*
	var regDate = /([0-9]{2})\/([0-9]{2})\/([0-9]{4})/;
	var checkIn = form.elements['hotel[check_in]'].value;
	var checkOut = form.elements['hotel[check_out]'].value;
	form.elements['hotel[check_in]'].value = checkIn.replace(regDate, "$2/$1/$3");
	form.elements['hotel[check_out]'].value = checkOut.replace(regDate, "$2/$1/$3");
	*/
  return true;
}

function checkHotel(hotelCode, hotelChain)
{
	var cDate1 = new Date();
  cDate1.setDate(cDate1.getDate() + 14);
	var month1 = cDate1.getMonth() + 1;
	if(month1 < 10) month1 = '0' + month1;
  var day1   = cDate1.getDate();
  if(day1 < 10) day1 = '0' + day1;
  var year1  = cDate1.getFullYear();
  
  var cDate2 = new Date();
  cDate2.setDate(cDate2.getDate() + 15);
  var month2 = cDate2.getMonth() + 1;
  if(month2 < 10) month2 = '0' + month2;
  var day2   = cDate2.getDate();
  if(day2 < 10) day2 = '0' + day2;
  var year2  = cDate2.getFullYear();

	document.getElementById('avail_check_in').value  = month1 + '/' + day1 + '/' + year1;
	document.getElementById('avail_check_out').value = month2 + '/' + day2 + '/' + year2;
	document.getElementById('avail_rooms').value = 1;
	document.getElementById('avail_adults_0').value = 2;
	document.getElementById('avail_hotel_code').value = hotelCode;
	document.getElementById('avail_chain_code').value = hotelChain;
	document.getElementById('avail').submit();
}

function selectMap(url, id)
{
	if(id == 'm' && !YAHOO.util.Dom.hasClass(id, 'moscowAct'))
	{
		linkM = YAHOO.util.Dom.get('ml');
		linkM.innerHTML = 'Moscow hotels';
		linkP = YAHOO.util.Dom.get('pl');
    linkP.innerHTML = 'St. Petersburg';
    imgMap = YAHOO.util.Dom.get('map_img');
    imgMap.src = '/images/moscow.map.jpg';
    
		YAHOO.util.Dom.replaceClass('m', 'moscow', 'moscowAct');
		YAHOO.util.Dom.replaceClass('p', 'piter piterAct', 'piter');
	}
	else if(id == 'p' && !YAHOO.util.Dom.hasClass(id, 'piterAct'))
	{
		linkM = YAHOO.util.Dom.get('ml');
    linkM.innerHTML = 'Moscow';
    linkP = YAHOO.util.Dom.get('pl');
    linkP.innerHTML = 'St. Petersburg hotels';
    imgMap = YAHOO.util.Dom.get('map_img');
    imgMap.src = '/images/st.petersburg.map.jpg';
    
		YAHOO.util.Dom.replaceClass('m', 'moscowAct', 'moscow');
    YAHOO.util.Dom.replaceClass('p', 'piter', 'piter piterAct');
	}
	
  linkSbm = YAHOO.util.Dom.get('sbm');
  linkSbm.href = url;
}

function changeGuests(elementName, item, className) 
{
	if(elementName == 'hotel')
	{
		cont = 'p';
		contEelements  = 'guests';
	}
	else if(elementName == 'avail')
	{
		item = item - 1;
		cont  = 'div';
		contEelements  = 'list_adults';
	}
  var guests = new YAHOO.util.Element(contEelements);
  var childs = guests.get('childNodes');
  var nodes = Array ();
  var regID = new RegExp('^guest[0-9]');
  var y = 0;
    
  for(i = 0; i< childs.length; i++)
  {
    if(typeof childs[i] != 'undefined' && 
        (typeof childs[i].id != 'undefined' && regID.exec(childs[i].id)))
    {
    	nodes[y++] = childs[i];
    }
  }

  for(i = 0; i < item; i++)
  {
  	if(!nodes[i])
  	{
  		if(elementName == 'avail')
  		{
  			y = i + 1;
  		}
  		else
  		{
  			y = i;
  		}
  		
  		nodes[i] = document.createElement(cont);
  		nodes[i].id = 'guest'+ y;
  		
  		if(typeof className != 'undefined')
  		{
  		  nodes[i].className = className;
  		}

      tmp = document.getElementById('adults').innerHTML;
  		if(elementName == 'hotel')
  		{
	  		tmp = tmp.replace(/hotel\[adults\]\[0\]/,'hotel[adults]['+ y +']');
	  		tmp = tmp.replace(/hotel_adults_0/,'hotel_adults_'+ y);
  		}
  		else if(elementName == 'avail')
  		{
  			tmp = tmp.replace(/avail\[adults\]\[0\]/,'avail[adults]['+ y +']');
        tmp = tmp.replace(/avail_adults_0/,'avail_adults_'+ y);
  		}
  		
  		nodes[i].innerHTML =  tmp;
  		guests.appendChild(nodes[i]);
  	}
  }
  
  for(y = i; y < nodes.length; y++)
  {
  	guests.removeChild(nodes[y]);
  }
}

function displayCal(id)
{
	YAHOO.util.Dom.setStyle(id, 'display', 'block');
	return false;
}

function displayTravelInfo(id)
{
	var aid = 'a' + id;
	var id = 't' + id;

	var display = YAHOO.util.Dom.getStyle(id, 'display'); 
	var linkTxt = document.getElementById(aid);  

  if(display == 'none')
  {
  	linkTxt.innerHTML = 'Close traveler info';
    YAHOO.util.Dom.setStyle(id, 'display', 'block');
  }
  else
  {
  	linkTxt.innerHTML = 'Add traveler info';
    YAHOO.util.Dom.setStyle(id, 'display', 'none');
  }
}

function displayTravelInfo2(id)
{
	var display = YAHOO.util.Dom.getStyle('t' + id, 'display'); 

  if(display == 'none')
  {
    YAHOO.util.Dom.setStyle('t' + id, 'display', 'block');
    YAHOO.util.Dom.replaceClass('l' + id, 'show', 'show showOn');
  }
  else
  {
    YAHOO.util.Dom.setStyle('t' + id, 'display', 'none');
    YAHOO.util.Dom.replaceClass('l' + id, 'show showOn', 'show');
  }
}

  
function initCal(elementName, checkInDate, checkOutDate) 
{
	var checkInID = 'check-in-', checkOutID = 'check-out-';
	
  YAHOO.namespace('checkIn');
  YAHOO.namespace('checkOut');
  
  YAHOO.checkIn.cont = new YAHOO.widget.Overlay(checkInID + 'cont', {context:[checkInID + 'but','tl','bl', ['beforeShow', 'windowResize']], visible: false, width:'200px' });  
  YAHOO.checkOut.cont = new YAHOO.widget.Overlay(checkOutID + 'cont', {context:[checkOutID + 'but','tl','bl', ['beforeShow', 'windowResize']], visible: false, width:'200px' });

  YAHOO.checkIn.cal = new YAHOO.widget.Calendar('in', checkInID + 'cal', {mindate: checkInDate});
  YAHOO.checkOut.cal = new YAHOO.widget.Calendar('out', checkOutID + 'cal', {mindate: checkOutDate});  
  
  YAHOO.util.Event.on(document, "click", function(e) 
  {
      var el = YAHOO.util.Event.getTarget(e);
      var btnIn  = YAHOO.util.Dom.get(checkInID + 'but');
      var btnOut = YAHOO.util.Dom.get(checkOutID + 'but');
      var dialogIn  = YAHOO.checkIn.cont.element;
      var dialogOut = YAHOO.checkOut.cont.element;
      if (el != dialogIn && !YAHOO.util.Dom.isAncestor(dialogIn, el) && el != btnIn && !YAHOO.util.Dom.isAncestor(btnIn, el))
      {
          YAHOO.checkIn.cal.hide();
          YAHOO.checkIn.cont.hide();
      }
      if (el != dialogOut && !YAHOO.util.Dom.isAncestor(dialogOut, el) && el != btnOut && !YAHOO.util.Dom.isAncestor(btnOut, el))
      {
          YAHOO.checkOut.cal.hide();
          YAHOO.checkOut.cont.hide();
      }
  });
  
  function handleDate(type,args,obj) 
	{  
	  var dates = args[0];  
	  var date = dates[0];  
	  var year = date[0], month = date[1], day = date[2];
	    
	  if(day < 10)
	  {
	    day = '0' + day;
	  }
	  
	  if(month < 10)
	  {
	    month = '0' + month;
	  }
	  
	  var txtDate = document.getElementById(elementName + '_check_' + obj.id);  
	  txtDate.value = month + "/" + day + "/" + year; 
	  
	  if(obj.id == 'in')
	  {
	  	YAHOO.checkIn.cal.hide();
      YAHOO.checkIn.cont.hide();
	  }
	  else if(obj.id == 'out')
	  {
	  	YAHOO.checkOut.cal.hide();
      YAHOO.checkOut.cont.hide();
	  }
	} 

  YAHOO.checkIn.cal.selectEvent.subscribe(handleDate, YAHOO.checkIn.cal, true); 
  YAHOO.checkOut.cal.selectEvent.subscribe(handleDate, YAHOO.checkOut.cal, true); 
  
  YAHOO.util.Event.addListener(checkInID + 'but', 'click', YAHOO.checkIn.cont.show, YAHOO.checkIn.cont, true);
  YAHOO.util.Event.addListener(checkOutID + 'but', 'click', YAHOO.checkOut.cont.show, YAHOO.checkOut.cont, true);  
  

  YAHOO.checkIn.cal.render();
  YAHOO.checkOut.cal.render();
  
  YAHOO.checkIn.cont.render();
  YAHOO.checkOut.cont.render(); 
}

var callbackCancel = {success:handleCancelSuccess, failure:handleFailure};


function handleFailure(o)
{
  alert('Request is faulty');
}

var handleFormCancel = function()
{
  this.cancel();
};

function handleCancelSuccess(o)
{
  if(!YAHOO.lang.JSON.isValid(o.responseText))
  {
    alert('Invalid format of JSON');
    return;
  }
  
  var result = YAHOO.lang.JSON.parse(o.responseText)
  if(typeof result.room != 'undefined')
  {
    var orderStatus = document.getElementById('orderStatus' + result.room);

    if(result.status  == 'canceled')
    {
      orderStatus.innerHTML = '<span style="color:green;font-weight:bold">'+ result.status +'</span>';
    }
    else
    {
    	orderStatus.innerHTML = '<span style="color:red;font-weight:bold">'+ result.status +'</span>';
    }
  }
  else
  {
    alert('Load data is faulty');
  }
}

function roomCancel(url, roomID)
{
	 var agree = confirm("Are you sure you wish to continue?");
   if (!agree) return false;

   document.getElementById('orderStatus' + roomID).innerHTML = '<span style="color:green;font-weight:bold">processing...</span>';
   
   var signature = new Date();
   YAHOO.util.Connect.asyncRequest('GET', url + '?' + signature.getTime(), callbackCancel);
}

function changeTab(tab)
{
  var tabs = [];
  var carousel;

  // Recieve menu nodes.
  var nodes = YAHOO.util.Selector.query('ul.placeInfo li');
  for(var i = 1; i <= nodes.length; i++) tabs.push(i);

	for(i = 0; i < tabs.length; i++)
	{
		if(tabs[i] != tab && YAHOO.util.Dom.get('tab' + tabs[i]))
		{
			YAHOO.util.Dom.setStyle('t' + tabs[i], 'display', 'none');
			YAHOO.util.Dom.replaceClass('tab' + tabs[i], 'active', ' ');
		}
		else if(tabs[i] == tab && YAHOO.util.Dom.get('tab' + tabs[i]))
		{
			YAHOO.util.Dom.setStyle('t' + tabs[i], 'display', 'block');
			YAHOO.util.Dom.replaceClass('tab' + tabs[i], ' ', 'active');
			if(tabs[i] == 4)
      {
      	if(YAHOO.util.Dom.get("images") && !YAHOO.util.Dom.get("yui-gen0"))
      	{
	      	carousel = new YAHOO.widget.Carousel("images", {isCircular: true, numVisible: 1})
	        carousel.render(); 
	        carousel.show();
      	}
      }
      else if(tabs[i] == 2)
      {
      	if(YAHOO.util.Dom.get("map") && !YAHOO.util.Dom.get("hmtctl"))
        {
        	YAHOO.util.Event.onDOMReady(function (ev) { 
      	   initializeGM();
        	});
        }
      }
    }
	}
}

function initSlider(label, args, obj) 
{
   var Dom  = YAHOO.util.Dom,
   ffilter  = Dom.get(obj.formID),
   from     = Dom.get(obj.fromID),
   to       = Dom.get(obj.toID),
   slider;

   if(obj.itemFrom && parseInt(obj.itemFrom) > 0)
   {
     obj.initVals[0] = obj.itemFrom * obj.scaleFactor / obj.scaleConvert;
   }

   if(obj.itemTo && parseInt(obj.itemTo) > 0)
   {
     obj.initVals[1] = obj.itemTo * obj.scaleFactor / obj.scaleConvert;
   }
   
   slider = new YAHOO.widget.Slider.getHorizDualSlider('slider' + obj.itemName, 'min' + obj.itemName, 'max' + obj.itemName, obj.range, obj.tickSize, obj.initVals);

   slider.minRange = obj.minThumbDistance;
   slider.minVal = obj.initVals[0];
   slider.maxVal = obj.initVals[1];
   
   var convert = function(val) {
      return Math.round((val / obj.scaleFactor) * obj.scaleConvert);  
   };
   
   var update = function() { 
     from.innerHTML = obj.itemSymbol + convert(slider.minVal);
     to.innerHTML   = obj.itemSymbol + convert(slider.maxVal);
     if(ffilter)
     {
	     ffilter['filter[' + obj.itemName + '_from]'].value = convert(slider.minVal);
	     ffilter['filter[' + obj.itemName + '_to]'].value = convert(slider.maxVal);
     }
   };
   
   if(!ffilter)
   {
	   var end = function() {
	      reloadMap();
	   }
	   slider.subscribe("slideEnd", end);
   }

   slider.subscribe("change", update);
   slider.subscribe("ready", update);
   
 }
   
function autocompleteWidget(elementID,containerID,dataSource) {
  var options={forceSelection:false,useShadow:true,animSpeed:0,queryDelay:0,queryMatchSubset:true,queryMatchContains:false,maxResultsDisplayed:20,minQueryLength:2,typeAhead:false,allowBrowserAutocomplete:false,generateRequest:function(query){return '?q='+query;},doBeforeExpandContainer:function(oTextbox,oContainer,sQuery,aResults){var pos=YAHOO.util.Dom.getXY(oTextbox);pos[1]+=YAHOO.util.Dom.get(oTextbox).offsetHeight+2;YAHOO.util.Dom.setXY(oContainer,pos);return true;}};
  return new YAHOO.widget.AutoComplete(elementID,containerID,dataSource,options);
};