function debug(message) {
  if (false) {
    alert(message);
  }
}

function myRound(val, precision) {
  debug('Val: ' + val);
  debug('Prec: ' + precision);
  val = Number(val);
  precision = Number(precision);

  // Multiply by 10 to the power of precision and add 0.5 for rounding up
  // Take the nearest integer smaller than this value
  val = Math.floor( val * Math.pow( 10, precision ) + 0.5 );

  // Divide it by 10**precision to get the rounded value
  debug('Return: ' + Number(val / Math.pow( 10, precision )));
  return Number(val / Math.pow( 10, precision ));
}


function open_window(whichPage, width, height) {
  var spazioToolbar = 50;
  if (width == null) width = 660;
  if (height == null) height = 386;
  searchWin = window.open(whichPage, '', "scrollbars=yes,resizable=no,width=" + eval(Number(width) + spazioToolbar) + ",height=" + eval(Number(height) + spazioToolbar) + ",status=no,location=no,toolbar=no");
}

function open_image(url, picTitle) {
  if (picTitle == null) picTitle = 'Image';
  var picName = new Image();
  picName.src = url;
  var picURL = url;
  var imgWindow = window.open(picURL,'newWin','toolbar=no,width='+picName.width+',height='+picName.height);
  imgWindow.document.write('<html><head><title>'+picTitle+'<\/title><\/head><body background="'+picURL+'"><\/body><\/html>');
  imgWindow.resizeBy(picName.width-imgWindow.document.body.clientWidth, picName.height-imgWindow.document.body.clientHeight);
  imgWindow.focus();
}

var requestor = null;
var message = null;

  function createGenericRequestor(requestor) {
    requestor = null;
    try {
      requestor = new XMLHttpRequest();
    } catch (error) {
      try {
        requestor = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (error) {
        alert('Cannot create AJAX object! Abort.');
        return null;
      }
    }
    return requestor;
  }

function createRequestor() {
  requestor = null;
  try {
    requestor = new XMLHttpRequest();
  } catch (error) {
    try {
      requestor = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (error) {
      alert('Cannot create AJAX object! Abort.');
      return false;
    }
  }

  requestor.onreadystatechange = stateHandler;

  return true;
}

function subscribe(email) {
  if (email == null) {
    alert('Inserire un indirizzo email!');
    return false;
  }
  createRequestor();
  message = 'L\'indirizzo email "' + email + '" e\' stato inserito con successo.';
  requestor.open("GET", "/servlet/Newsletter?cmd=insert&email=" + email + '&rand=' + Math.random());
  requestor.send(null);
  return;
}

function unsubscribe(email) {
  if (email == null) {
    alert('Inserire un indirizzo email!');
    return false;
  }
  createRequestor();
  message = 'L\'indirizzo email "' + email + '" e\' stato cancellato con successo.';
  requestor.open("GET", "/servlet/Newsletter?cmd=delete&email=" + email + '&rand=' + Math.random());
  requestor.send(null);
  return;
}

function stateHandler() {
  if (requestor.readyState == 4) {
    if (requestor.status == 200) {
      success();
    } else {
      failure();
    }
  }

  return true;
}

function success() {
  var type = requestor.responseXML.getElementsByTagName("TYPE")[0].childNodes[0].nodeValue;
  if (type == 'OK') {
    document.newsletterForm.mail.value = '';
  } else {
    message = requestor.responseXML.getElementsByTagName("MESSAGE")[0].childNodes[0].nodeValue;
  }
  alert(message);
}

function failure() {
  alert('Error!');
}

var destRequestor = null;


var toForm = null;
function createRequestorForDestination() {
  destRequestor = null;
  try {
    destRequestor = new XMLHttpRequest();
  } catch (error) {
    try {
      destRequestor = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (error) {
      alert('Cannot create AJAX object! Abort.');
      return false;
    }
  }
    destRequestor.onreadystatechange = changeDestinationRequestor;

  return true;
}

function successLoadDests(){
  var content = destRequestor.responseXML.getElementsByTagName("NOCONTENT")[0];
  if (content != null) {
    failure();
    return;
  }
  var howMany = destRequestor.responseXML.getElementsByTagName("TO").length;
  var name = "";
  var id = "";
  for (i = 0; i < howMany; i++) {
    name = destRequestor.responseXML.getElementsByTagName("TO")[i].getElementsByTagName("NAME")[0].childNodes[0].nodeValue;
    id = destRequestor.responseXML.getElementsByTagName("TO")[i].getElementsByTagName("ID")[0].childNodes[0].nodeValue
    toForm.options[i] = new Option(name, id);
  }
}

function changeDestinationRequestor() {
  if (destRequestor.readyState == 4) {
    if (destRequestor.status == 200) {
      successLoadDests();
    } else {
      failure();
    }
  }

  return true;
}

function loadDestination(index, oForm) {
  if (index == null || index == '') {
    return false;
  }
  toForm = oForm;
  for (i = 0; i < oForm.length; i++) {
    oForm.options[i] = null;
  }
  createRequestorForDestination();
  destRequestor.open("GET", "/servlet/ajax?cmd=getTo&from=" + index + '&rand=' + Math.random());
  destRequestor.send(null);
  return;
}

function checkSearchBoxData() {
  var form = document.searchboxform;
  // Capisco se il viaggio e' andata o andata / ritorno
  var andataRitorno = (form.type[0].checked);

  // Controllo che sia stata scelta una partenza
  var from = form.from.options[form.from.selectedIndex].value;
  if (from.length == 0) {
    alert('Selezionare una citta\' di partenza.');
    return false;
  }

  // Controllo che sia stata scelta una destinazione
  var to = form.to.options[form.to.selectedIndex].value;
  if (to.length == 0) {
    alert('Selezionare una citta\' di destinazione.');
    return false;
  }

  // Controllo che siano inserite le date
  var dateFrom = form.dateFrom.value;
  if (dateFrom.length == 0)  {
    alert('Inserire la data di partenza!');
    return false;
  }

  var dateTo = form.dateTo.value;
  if (dateTo.length == 0 && andataRitorno)  {
    alert('Inserire la data di ritorno!');
    return false;
  }

  var dateFromDD = new Date();
  var splitted = new Array();
  splitted = dateFrom.split('/', 3);
  dateFromDD.setFullYear(splitted[2], (Number(splitted[1]) - 1), splitted[0]);

  var dateToDD = new Date();
  splitted = dateTo.split('/', 3);
  dateToDD.setFullYear(splitted[2], (Number(splitted[1]) - 1), splitted[0]);

  if (dateToDD < dateFromDD && andataRitorno) {
    alert('La data di ritorno non puo\' essere precedente alla data di partenza.');
    return false;
  }

  var adu = Number(form.adu.options[form.adu.selectedIndex].value);
  var chd = Number(form.chd.options[form.chd.selectedIndex].value);
  var inf = Number(form.inf.options[form.inf.selectedIndex].value);

  if (adu <= 0) {
    alert('Selezionare almeno un adulto.');
    return false;
  }

  if (inf > adu) {
    alert('Il numero dei neonati non puo\' superare il numero degli adulti!');
    return false;
  }

  if (adu + chd > 24) {
    alert('Il numero massimo di viaggiatori prenotabili e\' 24. Modificare i criteri di ricerca.');
    return false;
  }

  form.submit();
}



function checkGroupSearchBoxData() {
  var form = document.searchform;
  // Capisco se il viaggio e' andata o andata / ritorno
  var andataRitorno = (form.type[0].checked);

  // Controllo che sia stata scelta una partenza
  var from = form.from.options[form.from.selectedIndex].value;
  if (from.length == 0) {
    alert('Selezionare una citta\' di partenza.');
    return false;
  }

  // Controllo che sia stata scelta una destinazione
  var to = form.to.options[form.to.selectedIndex].value;
  if (to.length == 0) {
    alert('Selezionare una citta\' di destinazione.');
    return false;
  }

  // Controllo che siano inserite le date
  var dateFrom = form.dateFrom.value;
  if (dateFrom.length == 0)  {
    alert('Inserire la data di partenza!');
    return false;
  }

  var dateTo = form.dateTo.value;
  if (dateTo.length == 0 && andataRitorno)  {
    alert('Inserire la data di ritorno!');
    return false;
  }

  var dateFromDD = new Date();
  var splitted = new Array();
  splitted = dateFrom.split('/', 3);
  dateFromDD.setFullYear(splitted[2], (Number(splitted[1]) - 1), splitted[0]);

  var dateToDD = new Date();
  splitted = dateTo.split('/', 3);
  dateToDD.setFullYear(splitted[2], (Number(splitted[1]) - 1), splitted[0]);

  if (dateToDD < dateFromDD && andataRitorno) {
    alert('La data di ritorno non puo\' essere precedente alla data di partenza.');
    return false;
  }

 

  form.submit();
}
