/*-----------------------------
 Javascript functions and event handlers
 Site: xoprivate.com
 $Revision: 1.12 $
 $Date: 2006/01/09 08:37:26 $
 -----------------------------*/

if(document.getElementById && document.getElementsByTagName && Array.prototype.push) {
  document.write('<link rel="stylesheet" type="text/css" href="/css/js.css" media="screen" />');
}

/* LIBRARIES */

// Cross-browser event handling for IE5+, NS6 and Mozilla 
// By Scott Andrew 
function addEvent(elm, evType, fn, useCapture) {
  if (elm.addEventListener) { 
    elm.addEventListener(evType, fn, useCapture); 
    return true; 
  } else if (elm.attachEvent) { 
    var r = elm.attachEvent('on' + evType, fn); 
    return r; 
  } else {
    elm['on' + evType] = fn;
  }
}

// Applying classes via Javascript
// http://www.onlinetools.org/articles/unobtrusivejavascript/cssjsseparation.html
function cssjs(a,o,c1,c2) {
  switch (a) {
    case 'swap':
      o.className=!cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
    break;
    case 'add':
      if(!cssjs('check',o,c1)){o.className+=o.className?' '+c1:c1;}
    break;
    case 'remove':
      var rep=o.className.match(' '+c1)?' '+c1:c1;
      o.className=o.className.replace(rep,'');
    break;
    case 'check':
      return new RegExp('\\b'+c1+'\\b').test(o.className)
    break;
  }
}

/* Tracing function for jsTrace() - http://www.easy-designs.net/code/jsTrace/ */
function trace( msg ){
  if( typeof( jsTrace ) != 'undefined' ){
    jsTrace.send( msg );
  }
}

/* Cookies */
function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  } else {
   var expires = "";
  }
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') {
      c = c.substring(1,c.length);
    }
    if (c.indexOf(nameEQ) == 0) {
      return c.substring(nameEQ.length,c.length);
    }
  }
  return null;
}

function eraseCookie(name) {
  createCookie(name,"",-1);
}


/* PRELOADER */
var loaded     = 0; // Number of loaded images
var images_src = new Array('preloader.gif', 'layout/home-banners-bg.png', 'private-island.jpg', 'layout/content-bg.jpg', 'layout/logo.png', 'layout/collection.png', 'layout/logo-print.png', 'layout/content-bg.jpg', 'layout/wrapper-bg.gif', 'layout/sec-nav-bg.jpg', 'layout/footer-bg.jpg', 'homepage-banners/1-elite-car.jpg', 'homepage-banners/2-evason-hideaway.jpg', 'homepage-banners/3-elephant-safari.jpg', 'homepage-banners/4-sea-change.jpg', 'homepage-banners/5-goche-ganas.jpg', 'homepage-banners/6-soneva-gili.jpg', 'layout/add_hotels1.gif', 'layout/add_operators1.gif', 'layout/add_adventures1.gif' ); 
var images     = new Array();

// Get BODY element
function getBody() {
  if(document.getElementsByTagName('body')[0]) {
    return document.getElementsByTagName('body')[0];
  } else {
    return false; 
  }
}

// Display Preloader
function displayPreloader() {
  var body = getBody();
  
  // Check cookie
  var c = readCookie('loaded');

  if (c == 1 || window.opera) {
    return;
  }
  
  if(body) {
    cssjs('add', body, 'preloader');
    document.write('<div id="preloader">&nbsp;</div>');
    var preloader = document.getElementById("preloader");
    addEvent(preloader, 'click', displayPage, false);
  }
}

// Hide Preloader and Display Page 
function displayPage() {
 var body = getBody();
 if(body) {
   cssjs('remove', body, 'preloader');
 }
}

// Create preloaded images and add onload handler to them
if(!window.opera) {
  for(var i=0;i<images_src.length;i++) {
    images[i]      = new Image();
    images[i].src  = '/img/' + images_src[i];
    images[i].onload = function() {
      loaded++;
      // trace(readCookie('loaded'));
      // trace(loaded);
      if(areLoaded()) {
        displayPage();
      }
    }
    images[i].onerror = images[i].onload;
  }
}

// Check if all images are loaded
function areLoaded() {
  if(loaded == images_src.length) {
    // Set cookie
    createCookie('loaded',1,30)
    return true;
  } else {
    return false;
  }
}

/* AUTO SUBMIT */
function jumpTo(URL_List, banned, single_banned){
	  
   if(URL_List.selectedIndex >= banned && URL_List.selectedIndex!=single_banned && URL_List.selectedIndex!=(single_banned-1)){
	   var URL = URL_List.options[URL_List.selectedIndex].value;
   	   document.location.href = URL;
   }
}

function SubmitForm(URL_List, banned, single_banned){
	  
   if(URL_List.selectedIndex >= banned && URL_List.selectedIndex!=single_banned && URL_List.selectedIndex!=(single_banned-1)){		   
   		document.forms['form_name'].method="post";
	   	document.forms['form_name'].submit();
   }
}

function ChangeAction(URL_List,form_name){
   	   	document.forms['form_name'].action = URL_List.options[URL_List.selectedIndex].value; // do action formulare se nahraje URL dokumentu
}


/* BANNERS MORPHING */

var pocet_cyklu = 0;

function StartMorph(pocetObrazku){
		// Zacne morphovat, zadavame: kolik celkem obrazku, prvni obrazek s druhym a pocatecni alpha
		Morphuj(pocetObrazku,0,1,100);
}

// pocet_obrazku 	: pocet obrazku
// prvni 			: prvni morphovany obrazek
// druhy 			: druhy morphovany obrazek
// alpha			: hodnota alpha
function Morphuj(pocetObrazku, prvni, druhy, alpha){

		var cas; // Udava za jak dlouho dobu se prepne na dalsi morphovani

		// Vsem zbylym obrazkum nastavime alpha na 0

		for(i = 0; i < pocetObrazku; i++){
			if(i!=prvni && i!=druhy) {
    ZmenAlpha( document.getElementById('banner_pict' + i), 0);
   }
		}

		ZmenAlpha(document.getElementById('banner_pict' + prvni), alpha);
  ZmenAlpha(document.getElementById('banner_pict' + druhy), (100 - alpha));
		
		alpha -= 5;// Snizime pruhlednost
		
		// Pokud je alpha zaporna, jdeme na dalsi obrazek
		if(alpha < 0) {
			alpha = 100;
			prvni++; druhy++;
   
			// Zkontrolujeme zda nejsme na konci fronty obrazku, pokud ano hodime se na zacatek
			if(prvni>=pocetObrazku) {
    prvni = 0;
   }

			if(druhy>=pocetObrazku) {
    druhy = 0;
    pocet_cyklu++;
   }

   obrazek = document.getElementById('banner_pict' + prvni);
   if (obrazek.src.indexOf('image01.jpg') == -1) {
     var stop_morphing = false;
   } else {
     var stop_morphing = true;
   }
   
			cas = 2000; // Pri prechodu na jiny obrazek nechame puvodni svit urcitou dobu

 	} else {
   cas = 30;
  }

  if(pocet_cyklu < 2) {
  		setTimeout("Morphuj(" + pocetObrazku + "," + prvni + "," + druhy + " ," + alpha + ");", cas);
  } else if (!stop_morphing) {
 	  setTimeout("Morphuj(" + pocetObrazku + "," + prvni + "," + druhy + " ," + alpha + ");", cas);
  }
}

function ZmenAlpha(obrazek, hodnota) {
 if(obrazek.filters) {
  obrazek.filters.item("DXImageTransform.Microsoft.Alpha").opacity = hodnota;
 }	else {
		obrazek.style.MozOpacity = hodnota/100;
	}
}


/* PRINT */
function initPrint() {
  
  if(!document.getElementById || !document.getElementById('print')) {
    return;
  }
  
  var print = document.getElementById('print');
  print.onclick = printPage;

}

function printPage() {
 if (confirm('Page will be formatted for print and printed')) {
  window.print();
  return false;
 }
}

/* TOGGLE LINKS */
/* Finds child UL of LI, which contains toggle link  */
function findChildUL(t) {

  while (t.nodeName.toLowerCase() != 'li') {
    var t = t.parentNode;
  }

  for(var i=0;i<t.childNodes.length;i++) {
    if(t.childNodes[i].nodeName.toLowerCase() == 'ul') {
      var t = t.childNodes[i];
      break;
    }
  }
  return t;
}

/* Returns all toogle links as array */
function getLinks() {
 
  var links = [];
  
  // Do not continute if there are no product links
  if(!document.getElementById("categories")) {
    return false;
  }
  
  var l = document.getElementById("categories");
  var a = l.getElementsByTagName("a");

  for(var i=0;i<a.length;i++) {
    if(cssjs('check', a[i], 'toggle')) {
       links.push(a[i]);
    }
  }

  return links;
}


/* Toggle links */
function toggleLink(l) {  

  var ul = findChildUL(l);

  var isDisplayed = cssjs('check', ul, 'display');
  
  function display() {
      hideAll();
      cssjs('add', ul, 'display');
  }
  
  function hide() {
      hideAll();
      cssjs('remove', ul, 'display');
  }
  
  if(isDisplayed) {
      setTimeout(hide, 50);
  } else {
      setTimeout(display, 50);
  }
  
}

/* Hide all links */
function hideAll() {
  var links = getLinks();
  for(var i=0;i<links.length;i++) {
    var ul = findChildUL(links[i]);
    cssjs('remove', ul, 'display');
  }
}

/* Add event handler to links */
function initLinks () {
  if(!document.getElementById || !document.getElementsByTagName || !Array.prototype.push) {
    return;
  }

  var links = getLinks();

  if(!links) {
    return;
  }

  for(var i=0;i<links.length;i++) {
    addEvent(links[i], 'click', activateLink, false);
  }

}

/* Activate link */
function activateLink(ev) {
  var e = window.event ? window.event : ev;
  var t = e.target ? e.target : e.srcElement;
  toggleLink(t);
}

/* Toggle current LI links */
function toggleCurrent() {

  if(!document.getElementById || !document.getElementsByTagName || !Array.prototype.push) {
    return;
  }

  if(!document.getElementById("categories")) {
    return false;
  }
  
  var path = location.href;
  var path_parts = path.split("#");

  var l = document.getElementById("categories");
  var a = l.getElementsByTagName("a");
  
  var n = 0;
  var t;

  for(var i=0;i<a.length;i++) {
    
    if(cssjs('check', a[i], 'toggle')) {
      n++;
      t = a[i];
    }
    
    if(a[i].getAttribute('id') == path_parts[1] && path_parts[1] != undefined) {
      var toggle_link = findToggleLink(a[i]);
      toggleLink(toggle_link);
      break; 
    }
    
  }
  // Toggle link if there is only one 
  if (n == 1) {
      var toggle_link = findToggleLink(t);
      toggleLink(toggle_link);
  }
      
}

/* Return toggle link   */
function findToggleLink(el) {
  while(!cssjs('check', el.parentNode.firstChild, 'toggle')) {
   var el = el.parentNode;
  }
  return el.parentNode.firstChild;

}

/* ZOOM IN AND OUT BOOK */
function zoomOut(page) {
  window.opener.location.href = '/view-the-book/pages/'+page+'/';
  window.opener.focus(); 
  window.close(); 
  return false;
}

function zoomIn(page) {
  new_win = window.open('/view-the-book/page/' + page + '/','win','left=20, top=20, width=1100, height=860, toolbar=0, location=0, directories=0, status=0, menubar=0, resizable=1, scrollbars=1');
  new_win.focus();
} 

/* Open Link to New Window */
function newWin(page) {
  new_win = window.open(page);
  new_win.focus();
} 

/* Empty subscription field  */
function emptySubs() {

  if(!document.getElementById) {
    return;
  }

  if(!document.getElementById("subs-field")) {
    return false;
  }
  
  var subs = document.getElementById("subs-field");
  
  subs.onfocus = function() {
     if(subs.value == 'Enter your email address') {
       subs.value = '';
     }
  }
}

/* Check Top right select */
function checkSelect() {

  if(!document.getElementById) {
    return;
  }

  if(!document.getElementById("top-right") || !document.getElementById("regions")) {
    return false;
  }
  
  var top_right = document.getElementById("top-right");
  
  if(!top_right.getElementsByTagName('form')) {
    return false;
  }
  
  var form   = top_right.getElementsByTagName('form');

  form[0].onsubmit = function() {
    var select   = document.getElementById("regions");  
    var selected = select.options[select.selectedIndex].value;

    if(selected == '/hotels/' || selected == '/operators/' || selected == '/adventures/') {
      return false;
    }
  }  
}

/* EVENT HANDLERS */
addEvent(window, 'load', displayPage, false);
addEvent(window, 'load', initPrint, false);
addEvent(window, 'load', initLinks, false);
addEvent(window, 'load', toggleCurrent, false);
addEvent(window, 'load', emptySubs, false);
addEvent(window, 'load', checkSelect, false);