var isIE = navigator.appVersion.indexOf("MSIE") != -1;
var isFF = /Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent);
var isSafari = navigator.appVersion.indexOf("WebKit") != -1;
var isIE6 = (document.documentElement && typeof document.documentElement.style.maxHeight!="undefined") ? false : true;
var isIE7 = (document.documentElement && typeof document.documentElement.style.maxHeight!="undefined") ? true : false;
var isMac = navigator.userAgent.indexOf("Macintosh") != -1;
var isWin = navigator.userAgent.indexOf("Windows") != -1;

function toRoundedMoney(currency, amount) {
  if ( currency === 'USD' ) {
    return '$' + amount.toFixed(0);
  } else if ( currency === 'GBP' ) {
    return '&pound;' + amount.toFixed(0);
  } else if ( currency === 'EUR' ) {
    return '' + amount.toFixed(0) + '&euro;';
  } else {
    return currency + " " + amount.toFixed(0);
  }
}
/* Generic hide/show function as onClick handler */
function toggleNiceOnClick(link_id, args) {
  var link = $(link_id);
  var toggleDiv = $(args['toggleDiv']);
  if ( toggleDiv && link ) {
    if ( toggleDiv.visible() ) {
      link.innerHTML = args['linkText'].first();
      link.addClassName(args['linkClass'].first());
      link.removeClassName(args['linkClass'].last());
      link.title = (args['linkTitle'].first());
      toggleDiv.hide();
    } else {
      link.innerHTML = args['linkText'].last();
      link.addClassName(args['linkClass'].last());
      link.removeClassName(args['linkClass'].first());
      link.title = (args['linkTitle'].last());
      toggleDiv.show();
    }
  }
}

/* Generic hide/show function as event listener*/
function toggleNice(event) {
  
  var link = event.element();
  if ( this.linkId ) {
    link = $(this.linkId);
  }
  var toggleDiv = $(this.toggleDiv);
  
  if ( toggleDiv.visible() ) {
    link.innerHTML = this.linkText.first();
    link.addClassName(this.linkClass.first());
    link.removeClassName(this.linkClass.last());
    link.title = (this.linkTitle.first());
    toggleDiv.hide();
  } else {
    link.innerHTML = this.linkText.last();
    link.addClassName(this.linkClass.last());
    link.removeClassName(this.linkClass.first());
    link.title = (this.linkTitle.last());
    toggleDiv.show();
  }

  Event.stop(event);

}

function hideElements(scopeElement) {
  if (!scopeElement) {
    scopeElement = document.body;
  }
  $(scopeElement).select("div.show").each(function(element) {
    Element.removeClassName(element, 'show');
    Element.addClassName(element, 'hide');
  });
}

function toggleError(fieldid) {
  var labels=document.getElementsByTagName("label"),i;
  for( i=0; i<labels.length;i++ ){
    if(labels[i].htmlFor==fieldid){
      labels[i].className="error";
    }
  }
}

function showElements(showElement, scopeElement) {
  if (!scopeElement) {
    scopeElement = document;
  }
  hideElements(scopeElement);
  Element.removeClassName(showElement, 'hide');
  Element.addClassName(showElement, 'show');
}

function updateTabs(onTab, scopeId, selected_class_name) {
  if ( !selected_class_name ) {
    selected_class_name = 'current_tab'
  }
  $(scopeId).select('li').each(function(tab) {
    tab.removeClassName(selected_class_name);
  }); 
  $(onTab).addClassName(selected_class_name);
}

/* GENERIC HELPER METHODS */

function add_option(selector, text, value) {
  var objOption = document.createElement("option");
  objOption.text = text;
  objOption.value = value;
  if (document.all && !window.opera) {
    selector.add(objOption);
  }  else {
    selector.add(objOption, null);
  }
}

function findPosX(obj) {
  var curleft = 0;
  if (obj.offsetParent) {
    while (obj.offsetParent) {
      curleft += obj.offsetLeft
      obj = obj.offsetParent;
    }
  } else if (obj.x) {
    curleft += obj.x;
  }
  return curleft;
}

function findPosY(obj) {
  var curtop = 0;
  if (obj.offsetParent) {
    while (obj.offsetParent) {
      curtop += obj.offsetTop
      obj = obj.offsetParent;
    }
  } else if (obj.y) {
    curtop += obj.y;
  }
  return curtop;
}


/* DOM Helpers */

function removeChildNodes(ele) {
  if ( ele ) {
    while (ele.childNodes.length >= 1 ) {
      ele.removeChild( ele.firstChild );   
    }
  }
}

function isAllWhitespace(node)
{
  // Use ECMA-262 Edition 3 String and RegExp features
  return !(/[^\t\n\r ]/.test(node.data));
}

function isIgnorable(node)
{
  return ( node.nodeType == 8) || // A comment node
         ( (node.nodeType == 3) && isAllWhitespace(node) ); // a text node, all ws
}

function lastChild(node)
{
  var child = node.lastChild;
  while (child) {
    if (!isIgnorable(child)) return child;
    child = child.previousSibling;
  }
  return null;
}

// Shortcut to keep code size smaller
function ce(elementName) {
  return document.createElement(elementName);
}


Lightbox.prototype.setMap = function(options) {
  var map = ce('iframe');
  map.setAttribute('frameborder', '0');
  map.setAttribute('scrolling', 'no');
  var mapUrl = 'http://' + options['host'];
  mapUrl += '/maps/';
  mapUrl += options['skin'];
  mapUrl += '/googlemap.html?lat=';
  mapUrl += options['latitude'];
  mapUrl += "&long=";
  mapUrl += options['longitude'];
  
  if (options['zoom']) {
    mapUrl += "&zoom=";
    mapUrl += options['zoom'];
  }
  
  if (options['rails_env']) {
    mapUrl += "&rails_env=";
    mapUrl += options['rails_env']
  }
  map.setAttribute('src', mapUrl);
  $(options['container']).appendChild(map);
}

Lightbox.prototype.show = function(event) {
  // Calculate lightbox offset
  if (isInIFrame) {
    var frameOffset = 0;
    try {
      // Get the parent scroll offset & remove the iframe offset
      var scrollTop = parent.document.documentElement.scrollTop ? parent.document.documentElement.scrollTop : parent.document.body.scrollTop;
      frameOffset = parent.document.getElementById(window.frameElement.id).offsetTop;
    } catch (err) {}
    frameScroll = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
    scrollTop = scrollTop - frameOffset + frameScroll + 25;
    // Make sure we are not above the iframe
    if (scrollTop < 5) {scrollTop = 5};    
  } else {
    var scrollTop = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
    scrollTop += 50;
  }
  $('lightbox').style.zIndex = 1002;
  $('lightbox').style.top = scrollTop + 'px';
  if (isIE) { // only necessary in IE
    var selectNodes = document.getElementsByTagName("select");
    for (var i=0; i < selectNodes.length; i++) {
      selectNodes[i].style.visibility = 'hidden';
    }
  }
  if ($('lb_overlay')) {
    Element.show('lb_overlay');
  }
  Effect.Appear('lightbox', {duration: 0.5}); 
  if ( event ) {
    Event.stop(event); 
  }
}

Lightbox.prototype.hide = function(event) {
  if (isIE) { // only necessary in IE
    var selectNodes = document.getElementsByTagName("select");
    for (var i=0; i < selectNodes.length; i++) {
      selectNodes[i].style.visibility = 'visible';
    }
  }  
  removeChildNodes($('lightbox'));
  Effect.Fade('lightbox', {duration: 0.2}); 
  if ($('lb_overlay')) {
    Element.hide('lb_overlay');
  }
  if ( event ) {
    Event.stop(event); 
  }
}

Lightbox.prototype.setContent = function(content) {
  $('lightbox_content').innerHTML = content;
}

function validateTermsConditionsRead(widget_id) {
  return ( $(widget_id) && $(widget_id).checked );
}

function checkDoubleClick(formId) {
  if (window.formId) {
    return false;
  } else {
    window.formId = true;
    return true;
  }
}

function parseDate(dateString, formatString) {
	// Parse dateString into a date based on formatString
	var dateSplit = dateString.split('/');
	var formatSplit = formatString.split('/');
	var day = 0;
	var month = 0;
	var year = 0;
	
	for(var i=0; i<=3; i++) {
    switch (formatSplit[i]) {
      case '%d':
        day = dateSplit[i];
        break;
      case '%m':
        month = (parseInt(dateSplit[i]) - 1).toString();
        break;
      case '%Y':
        year = dateSplit[i];
        break;
    }
	}
	return new Date(year, month, day);
}

function formatDate(date, formatString){
	return formatString.replace('%d', date.getDate().toString()).replace('%m', (date.getMonth() + 1).toString()).replace('%Y', date.getFullYear().toString());
}

function validateCarDateRange(start, end, length, dateFormat, message) {
	var dayLength = 86400000;
	
	var startDate = parseDate($(start).getValue(), dateFormat);
	var endDate = parseDate($(end).getValue(), dateFormat);
	var days = (endDate-startDate)/dayLength;
	
	if(days > length) {
		alert(message);
		var newEndDate = new Date(startDate.getTime() + (dayLength * 30));
		$(end).setValue(formatDate(newEndDate, dateFormat));
		return false;
	}
	return true;
}

// Disable other room quantity selectors when one is changed
// For Orbitz hotels
function quantityDisable(selector_id) {
  var selector = $(selector_id);
  selectClass = selector.readAttribute("class");
  if (parseInt(selector.getValue()) > 0 ) {
    $$("select." + selectClass).each(function(element) { if (selector.id != element.id) {element.disable()} });
  } else {
    $$("select." + selectClass).each(function(element) {element.enable();});
  }
}

// Change sales model on hidden form and submit.
function changeSalesModel(modelType) {
  $('hidden_hotel_search_form')['hotel_search_sales_model'].value = modelType;
  $('hidden_hotel_search_form').submit();
}

// ***********Interstital Code****************
var isLoading=false;
var redirURL = '';

function doPage() {
  if (!isLoading) { 
    isLoading = true; 
    if (isIE) {
      $('spinner').style.display = '';
    }
      window.location.href = redirURL; 
    if (isIE) {
      $('spinner').src = $('spinner').src;  
    }      
  }
}
function setupRedirect(url){
  redirURL = url;
  Event.observe(window, 'load', function(event) { doPage(); });
}
// ********End Interstital Code**********

//Find a hotel in a json array
function findHotel(hotels, id) {
  for (var i = 0; i < hotels.length; i ++) {
    if (hotels[i].id == id.toString()) {return hotels[i];}
  }
}

// Pre-loads our results, then redirects
function preLoader(preLoadUrl, redirectUrl) {
  new Ajax.Request(preLoadUrl, { 
    method: 'get', 
    onSuccess: function(transport){ window.location.href = redirectUrl; },
    onFailure: function(transport){ window.location.href = redirectUrl; }
  });
}