function parseDate (date) {
 if (!date) return false;
 var dateArray = new Array;
 var j;
 if (date.search('/') != -1) dateArray = date.split('/');
 if (date.search('-') != -1) dateArray = date.split('-');
 if (date.search('\\.') != -1) dateArray = date.split('\\.');
 if (monthName && (date.search(' ') != -1)) {
   dateArray = date.split(' ');
   for (j = 0; j < 12; j++) {
     if (dateArray[1]==monthName[j]) {
       dateArray[1] = j+1;
       break;
     }
   }
 }
 if (dateArray.length == 3 && dateArray[2].length == 2) {
   dateArray[2] = String(2000+Number(dateArray[2]));
 }
 return dateArray;
}

function showError(errorId) {
  if (!errorId || !errorsDates || !errorsDates[errorId]) return false;
  var errLayer = document.getElementById('error');
  if (!errLayer) return false;
  
  // we want to write only in 'td' or 'p' tags
  var tagName = errLayer.tagName.toLowerCase();
  if (tagName == 'tr') {
		var children = errLayer.childNodes;
		var foundTd;
		for (var i = 0; i < children.length; i++) {
			if (!children[i].tagName || children[i].tagName.toLowerCase() != 'td') {
				continue;
			}
			foundTd = children[i];
			break;
		}  	
		if (foundTd) {
			foundTd.innerHTML = errorsDates[errorId];
		  errLayer.style.display = '';			
		}
  } else if (tagName == 'p' || tagName == 'td') {
	  errLayer.innerHTML = errorsDates[errorId];
	  errLayer.style.display = '';
  }
}

function hideError() {
  var errLayer = document.getElementById('error');
  if (!errLayer) return false;
  errLayer.style.display = 'none';
}

function initDate(date, type) {
  if (!date) return false;
  var dateArray = parseDate(date);
  if (dateArray.length != 3 || dateArray[2].length != 4) {
    showError('check_'+type+'_wrong_format');
    return false;
  }
  for (var i = 0; i < 2; i++) {
    if (dateArray[i] <= 0 || isNaN(dateArray[i])) {
      showError('check_'+type+'_wrong_format');
      return false;
    }
  }
  if (dateArray[0] > 31) {
    showError('check_'+type+'_wrong_format');
    return false;
  }
  if (dateArray[1] > 12) {
    showError('check_'+type+'_wrong_format');
    return false;
  }
  var dateObj = new Date(dateArray[2], dateArray[1]-1, dateArray[0]);
  if (isNaN(dateObj)) {
    showError('check_'+type+'_not_valid');
    return false;
  }

  var today = new Date();
  today.setHours(0);
  today.setMinutes(0);
  today.setSeconds(0);
  today.setMilliseconds(0);
  if (dateObj < today) {
    showError('check_'+type+'_in_past');
    return false;
  }

  return dateObj;
}

function addNights(form) {
  var checkIn = form.check_in_date.value;
	var dateIn;
  var nights = form.nights.value;
	if (nights == null || isNaN(nights)) {
		return false;
	}
  if (checkIn) {
    dateIn = initDate(checkIn, 'in');
    if (!dateIn) return false;
  }
	if (dateIn && nights) {
      var dateOut = new Date(Number(dateIn) + 1000 * 60 * 60 * 24 * nights);
      var day = dateOut.getDate();
      var month = dateOut.getMonth();
      var year = dateOut.getYear();
      if (String(year).length < 4) year += 1900;
      month += 1;
      if (day < 10) day = '0' + day;
      if (month < 10) month = String('0') + month;
      form.check_out_date.value = day+'/'+month+'/'+String(year).substr(2,3);
	}
	
  hideError();
}

function countNights(form, field) {
  var checkIn = form.check_in_date.value;
  var checkOut = form.check_out_date.value;
  var dateIn;
  var dateOut;

  if (checkIn) {
    dateIn = initDate(checkIn, 'in');
    if (!dateIn) return false;
  }

  if (checkOut) {
    dateOut = initDate(checkOut, 'out');
    if (!dateOut) return false;
  }

  if (dateIn && dateOut) {
    var nights = Math.round((dateOut - dateIn) / 1000 / 60 / 60 / 24);
    if (nights < 1) {
			// additional 2 hours added to fix what appears to be a day time zone problem,
			// when moving to a certain date an hour is lost and 23 hours are added
			// instead of 24, we add 2 additional hours just to be sure
      dateOut = new Date(Number(dateIn) + (1000 * 60 * 60 * 24) + (1000 * 60 * 60 * 2));
      var day = dateOut.getDate();
      var month = dateOut.getMonth();
      var year = dateOut.getYear();
      if (String(year).length < 4) year += 1900;
      month += 1;
      if (day < 10) day = '0' + day;
      if (month < 10) month = String('0') + month;
      form.check_out_date.value = day+'/'+month+'/'+String(year).substr(2,3);
      nights = 1;
    }
    if (field) field.value = nights;
  } else {
    if (field) field.value = 0;
  }

  hideError();
}

// show layer
function sl(id) {
  var obj = document.getElementById(id);
  if (!obj.style) return false;
  obj.style.display = '';
  return false;
}

// hide layer
function hl(id) {
  var obj = document.getElementById(id);
  if (!obj.style) return false;
  obj.style.display = 'none';
  return false;
}

function toggleRooms(max_rooms, max_childs) {
  var form = document.forms.avail;
  var room = form.rooms.value;
  if (!room) return false;
	if (room == 1) {
    hl('room_1_title');
	}
	else {
    sl('room_1_title');
		// show table rows for given room number and below
	  for (r = 2; r <= room; r++) {
	    sl('room_'+r);
	    var child = eval('form.child_'+r+'.value');
	    if (child > 0) {
	      sl('room_'+r+'_child');
	    }
	    if (eval(document.getElementById('room_'+r+'_adults'))) {
	      sl('room_'+r+'_adults');
	    }
	    if (eval(document.getElementById('room_'+r+'_children'))) {
	      sl('room_'+r+'_children');
	    }
	  }
	}
	if (max_rooms > room) {
		// hide table rows and child selects for given room number + 1 and greater
	  for (r = max_rooms; r > room; r--) {
	    hl('room_'+r);
	    hl('room_'+r+'_child');
	    if (eval(document.getElementById('room_'+r+'_adults'))) {
	      hl('room_'+r+'_adults');
	    }
	    if (eval(document.getElementById('room_'+r+'_children'))) {
	      hl('room_'+r+'_children');
	    }
	  }
	}  	
  toggleChild(max_rooms, max_childs);
}                    

function toggleChild(max_rooms,max_childs) {
//  if (!room || !child) return false;
  var form = document.forms.avail;
  for (room = 1; room <= form.rooms.value; room++) {
    var child = eval('form.child_'+room+'.value');
    if (child == 0) {
      hl('room_'+room+'_child');
    }
    else {
	    sl('room_'+room+'_child');
			for (ch = 1; ch <= child; ch++) {
	      sl('r_'+room+'_c_'+ch);
			}
   	}
		if (max_childs > child) {
			for (ch = max_childs; ch > child; ch--) {
	      hl('r_'+room+'_c_'+ch);
			}
		}
  }
  toggleChildForm(max_rooms);
}

function toggleChildForm(max_rooms) {
	if (!max_rooms) return;

  var main_flag = 1;
  for (room = 1; room <= max_rooms; room++) {
  	var r = document.getElementById('room_'+room+'_child');
		var flag = 0;
		if (room == 1) {
			if (r.style.display == 'none') flag = 1;
		}
		else if (!r || r.style.display == 'none') {
			flag = 1;
		}
		main_flag = main_flag && flag;
  }
  if (main_flag) {
    hl('child_numbers');
  } else {
    sl('child_numbers');
  }
}
