

  Array.prototype.in_array = function(m) {
  	for(var i = 0; i < this.length; i++) {
  		if(this[i] == m) {
  			return true;
  		}
  	}
  	return false;
  }



  var sUserAgent  = navigator.userAgent.toLowerCase();
  var bIsIE       = ((sUserAgent.indexOf('msie') != -1) && (sUserAgent.indexOf('opera') == -1));

  function openSlideShow(sFolder) {

    var sProperties = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=auto,resizable=no';
    var iWidth      = 520;
    var iHeight     = 570;
    var iLeft       = (screen.availWidth - iWidth) / 2;
    var iTop        = (screen.availHeight - iHeight) / 2;
    var sProperties = 'height=' + iHeight + ',width=' + iWidth + ',top=' + iTop + ',left=' + iLeft + ',' + sProperties;
    var sUrl        = 'index.php?section=common&module=slideshow&folder=' + sFolder;
    var oWin        = window.open(sUrl, 'slideshow', sProperties);
    oWin.focus();

  }

  function isEmpty(oText) {

    s = oText.value;
    if (s.length==0) return true;
    for (var i=0; i<s.length; i++) {
      bIsSpace          = (s.charAt(i) == ' ');
      bIsNewline        = (s.charAt(i).charCodeAt(0) == 10);
      bIsCarriageReturn = (s.charAt(i).charCodeAt(0) == 13);
      if ((!bIsSpace) && (!bIsNewline) && (!bIsCarriageReturn)) return false;
    }
    oText.value = '';
    return true;

  }

  function isEmail(oText) {

  	s = oText.value;
  	var email=/^[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*@[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*\.([A-Za-z]){2,4}$/i;
  	return(email.test(s));

  }


  function isInteger(oText) {

  	s = oText.value;
  	var integer=/(^-?\d\d*$)/;
  	return(integer.test(s));

  }


  function getEmail(s1, s2, s3, sLabel) {

    var sEmail = s1 + '@' + s2 + '.' + s3;
    var sLabel = (arguments.length > 3) ? sLabel : sEmail;
    document.write('<a href="mailto:' + sEmail + '">' + sLabel + '</a>');

  }


  // =============================================
  // Adds a person block from the application form
  // =============================================

  function addPerson() {

    // Clone the invisible 'person_0' div
    var oDivPersons = document.getElementById('persons');
    var oDivPersonNew = document.getElementById('person_0').cloneNode(true);
    var a = oDivPersons.getElementsByTagName('div');
    var nNewIndex = a.length;
    oDivPersonNew.id = 'person_' + nNewIndex;

    // Set element names and id's for the input fields in this person block
    var a = oDivPersonNew.getElementsByTagName('input');
    for (var n=0; n<a.length; n++) {
      // BUG IN IE: when cloning radio buttons, the clones belong to the same radio-group as the original ones, even if you change the 'name'-attribute!!!
      // This can only (?) be fixed using 'outerHTML'
      if (a[n].getAttribute('type') == 'radio' && bIsIE) {
        var sId     = 'person[' + nNewIndex + '][' + a[n].id + ']';
        var sName   = 'person[' + nNewIndex + '][' + a[n].name + ']';
        var sValue  = a[n].value ;
        a[n].outerHTML = '<input type="radio" name="' + sName + '" id="' + sId + '" value="' + sValue + '" />';
      } else {
        if (a[n].id) a[n].id = 'person[' + nNewIndex + '][' + a[n].id + ']';
        a[n].name = 'person[' + nNewIndex + '][' + a[n].name + ']';
      }
    }

    // Set element names and id's for the textareas in this person block
    var a = oDivPersonNew.getElementsByTagName('textarea');
    for (var n=0; n<a.length; n++) {
      if (a[n].id) a[n].id = 'person[' + nNewIndex + '][' + a[n].id + ']';
      a[n].name = 'person[' + nNewIndex + '][' + a[n].name + ']';
    }

    // Set 'for'-attribute for the labels in this person block
    var a = oDivPersonNew.getElementsByTagName('label');
    for (var n=0; n<a.length; n++) {
      //alert(a[n].attributes['for'].value);
      //alert(a[n].htmlFor);
      //a[n].setAttribute('for', 'person[' + nNewIndex + '][' + a[n].getAttribute('for') + ']'); // Doesn't work in IE !!!
      a[n].htmlFor = 'person[' + nNewIndex + '][' + a[n].htmlFor + ']';
    }

    // Set head of this person block
    var aH2 = oDivPersonNew.getElementsByTagName('h2');
    var oH2 = aH2[0];
    oH2.innerHTML = oH2.innerHTML + String(nNewIndex);

    // Make new person div visible
    oDivPersons.appendChild(oDivPersonNew);
    oDivPersonNew.style.display = '';

    // Update 'Add person' and 'Remove person' buttons
    updateButtons();


  }


  // ================================================
  // Removes a person block from the application form
  // ================================================

  function removePerson() {

    var oDivPersons = document.getElementById('persons');
    var a = oDivPersons.getElementsByTagName('div');
    if(a.length > 1) oDivPersons.removeChild(oDivPersons.lastChild);

    updateButtons();

  }


  // ==========================================
  // Enables/disables add/remove person buttons
  // ==========================================

  function updateButtons() {

    var oDivPersons = document.getElementById('persons');
    var oButtonRemove = document.getElementById('button_remove');
    var a = oDivPersons.getElementsByTagName('div');

    oButtonRemove.disabled = (a.length < 3);

  }


  // ====================================================================
  // Enables/disables additional packages and type of stomach examination
  // ====================================================================
/*
  function updateOptions(oRadioButton) {

    //alert(oRadioButton.value);
    var oRadioButton1 = document.getElementById('additionalpackage_f4');
    var oRadioButton2 = document.getElementById('additionalpackage_f5');
    var oRadioButton3 = document.getElementById('stomachexam_endoscopy');
    var oRadioButton4 = document.getElementById('stomachexam_bariummealstudy');

    var sValue = oRadioButton.value;
    if(sValue == 'M/F1' || sValue == 'M/F2' || sValue == 'M/F3') {
      oRadioButton1.disabled = false;
      oRadioButton2.disabled = false;
    } else {
      oRadioButton1.disabled = true;
      oRadioButton2.disabled = true;
    }
    if(sValue == 'M/F2' || sValue == 'M/F3') {
      oRadioButton3.disabled = false;
      oRadioButton4.disabled = false;
    } else {
      oRadioButton3.disabled = true;
      oRadioButton4.disabled = true;
    }

  }
*/


  // ======================================================================================
  // Returns a string representation in the format 'dd-mm-yyyy' of the supplied date object
  // ======================================================================================

  function getFormattedDate (oDate) {

    var iYear  = oDate.getFullYear();
    var iMonth = oDate.getMonth() + 1;
    var iDay   = oDate.getDate();

    var sYear   = String(iYear);
    var sMonth  = (iMonth < 10) ? ('0' + iMonth) : String(iMonth);
    var sDay    = (iDay < 10) ? ('0' + iDay) : String(iDay);

    return (sDay + '-' + sMonth + '-' + sYear);

  }


  // ===============================
  // When should a date be disabled?
  // ===============================

  function dateStatusHandler(oDateToCheck, nYearToCheck, nMonthToCheck, nDayToCheck) {

    //var sClassNameDisallowed = 'disabled';
    var oDateToday = new Date();

    // Today should not be marked as a special day, because then the Today-button will not work (BUG)!!!
    var bToday = (nYearToCheck == oDateToday.getFullYear() && nMonthToCheck == oDateToday.getMonth() && nDayToCheck == oDateToday.getDate());
    if(bToday) return false;

    // Date in the past?
    var bPast = oDateToCheck < oDateToday;
    if(bPast) return true;

    // Valid checkup date?
    var bValidCheckupDate = isValidCheckupDate(oDateToCheck);
    if(bValidCheckupDate) return false;

    // Sunday?
    //var bSunday = (oDateToCheck.getDay() == 0);
    //if(bSunday) return true;

    // Less than two weeks from now?
    //var bLessThanTwoWeeksFromNow = (Math.abs(oDateToCheck.getTime() - oDateToday.getTime()) / DAY) < 14;
    //if(bLessThanTwoWeeksFromNow) return true;

    // In all other cases, the date is not allowed
    return true;

  }


  function isValidCheckupDate(oDate) {

    sDate = getDateString(oDate);
    //alert(sDate);

    var aValidCheckupDates = new Array();

    aValidCheckupDates.push('2008-07-02');
    aValidCheckupDates.push('2008-07-03');
    aValidCheckupDates.push('2008-07-05');
    aValidCheckupDates.push('2008-07-30');
    aValidCheckupDates.push('2008-07-31');

    aValidCheckupDates.push('2008-08-02');
    aValidCheckupDates.push('2008-08-06');
    aValidCheckupDates.push('2008-08-07');
    aValidCheckupDates.push('2008-08-09');
    aValidCheckupDates.push('2008-08-13');
    aValidCheckupDates.push('2008-08-14');
    aValidCheckupDates.push('2008-08-21');
    aValidCheckupDates.push('2008-08-23');
    aValidCheckupDates.push('2008-08-27');
    aValidCheckupDates.push('2008-08-30');

    aValidCheckupDates.push('2008-09-03');
    aValidCheckupDates.push('2008-09-10');
    aValidCheckupDates.push('2008-09-13');
    aValidCheckupDates.push('2008-09-17');
    aValidCheckupDates.push('2008-09-18');
    aValidCheckupDates.push('2008-09-20');
    aValidCheckupDates.push('2008-09-24');
    aValidCheckupDates.push('2008-09-25');

    aValidCheckupDates.push('2008-10-01');
    aValidCheckupDates.push('2008-10-02');
    aValidCheckupDates.push('2008-10-04');
    aValidCheckupDates.push('2008-10-08');
    aValidCheckupDates.push('2008-10-09');
    aValidCheckupDates.push('2008-10-11');
    aValidCheckupDates.push('2008-10-15');
    aValidCheckupDates.push('2008-10-18');
    aValidCheckupDates.push('2008-10-22');
    aValidCheckupDates.push('2008-10-25');
    aValidCheckupDates.push('2008-10-29');
    aValidCheckupDates.push('2008-10-30');

    aValidCheckupDates.push('2008-11-05');
    aValidCheckupDates.push('2008-11-06');
    aValidCheckupDates.push('2008-11-08');
    aValidCheckupDates.push('2008-11-12');
    aValidCheckupDates.push('2008-11-13');
    aValidCheckupDates.push('2008-11-15');
    aValidCheckupDates.push('2008-11-19');
    aValidCheckupDates.push('2008-11-20');
    aValidCheckupDates.push('2008-11-22');
    aValidCheckupDates.push('2008-11-26');
    aValidCheckupDates.push('2008-11-27');

    aValidCheckupDates.push('2008-12-03');
    aValidCheckupDates.push('2008-12-04');
    aValidCheckupDates.push('2008-12-06');
    aValidCheckupDates.push('2008-12-10');
    aValidCheckupDates.push('2008-12-11');
    aValidCheckupDates.push('2008-12-13');
    aValidCheckupDates.push('2008-12-17');
    aValidCheckupDates.push('2008-12-18');
    aValidCheckupDates.push('2008-12-20');



    aValidCheckupDates.push('2009-01-08');
    aValidCheckupDates.push('2009-01-10');
    aValidCheckupDates.push('2009-01-14');
    aValidCheckupDates.push('2009-01-15');
    aValidCheckupDates.push('2009-01-17');
    aValidCheckupDates.push('2009-01-21');
    aValidCheckupDates.push('2009-01-22');
    aValidCheckupDates.push('2009-01-28');
    aValidCheckupDates.push('2009-01-31');

    aValidCheckupDates.push('2009-02-04');
    aValidCheckupDates.push('2009-02-07');
    aValidCheckupDates.push('2009-02-12');
    aValidCheckupDates.push('2009-02-14');
    aValidCheckupDates.push('2009-02-18');
    aValidCheckupDates.push('2009-02-26');
    aValidCheckupDates.push('2009-02-28');

    aValidCheckupDates.push('2009-03-04');
    aValidCheckupDates.push('2009-03-07');
    aValidCheckupDates.push('2009-03-11');
    aValidCheckupDates.push('2009-03-12');
    aValidCheckupDates.push('2009-03-18');
    aValidCheckupDates.push('2009-03-21');
    aValidCheckupDates.push('2009-03-25');
    aValidCheckupDates.push('2009-03-26');
    aValidCheckupDates.push('2009-03-28');

    aValidCheckupDates.push('2009-04-02');
    aValidCheckupDates.push('2009-04-04');
    aValidCheckupDates.push('2009-04-08');
    aValidCheckupDates.push('2009-04-16');
    aValidCheckupDates.push('2009-04-18');
    aValidCheckupDates.push('2009-04-22');
    aValidCheckupDates.push('2009-04-25');

    aValidCheckupDates.push('2009-05-14');
    aValidCheckupDates.push('2009-05-16');
    aValidCheckupDates.push('2009-05-20');
    aValidCheckupDates.push('2009-05-23');
    aValidCheckupDates.push('2009-05-27');

    aValidCheckupDates.push('2009-06-04');
    aValidCheckupDates.push('2009-06-10');
    aValidCheckupDates.push('2009-06-13');
    aValidCheckupDates.push('2009-06-18');
    aValidCheckupDates.push('2009-06-20');
    aValidCheckupDates.push('2009-06-24');
    aValidCheckupDates.push('2009-06-27');

    aValidCheckupDates.push('2009-07-01');
    aValidCheckupDates.push('2009-07-04');
    aValidCheckupDates.push('2009-07-09');
    aValidCheckupDates.push('2009-07-16');
    aValidCheckupDates.push('2009-07-18');
    aValidCheckupDates.push('2009-07-22');
    aValidCheckupDates.push('2009-07-23');
    aValidCheckupDates.push('2009-07-29');

    aValidCheckupDates.push('2009-08-01');
    aValidCheckupDates.push('2009-08-05');
    aValidCheckupDates.push('2009-08-06');
    aValidCheckupDates.push('2009-08-08');

    aValidCheckupDates.push('2009-09-02');
    aValidCheckupDates.push('2009-09-03');
    aValidCheckupDates.push('2009-09-05');
    aValidCheckupDates.push('2009-09-09');
    aValidCheckupDates.push('2009-09-10');
    aValidCheckupDates.push('2009-09-12');
    aValidCheckupDates.push('2009-09-16');
    aValidCheckupDates.push('2009-09-17');
    aValidCheckupDates.push('2009-09-19');
    aValidCheckupDates.push('2009-09-23');
    aValidCheckupDates.push('2009-09-24');
    aValidCheckupDates.push('2009-09-30');

    aValidCheckupDates.push('2009-10-01');
    aValidCheckupDates.push('2009-10-03');
    aValidCheckupDates.push('2009-10-07');
    aValidCheckupDates.push('2009-10-08');
    aValidCheckupDates.push('2009-10-10');
    aValidCheckupDates.push('2009-10-14');
    aValidCheckupDates.push('2009-10-15');
    aValidCheckupDates.push('2009-10-17');
    aValidCheckupDates.push('2009-10-21');
    aValidCheckupDates.push('2009-10-22');
    aValidCheckupDates.push('2009-10-28');
    aValidCheckupDates.push('2009-10-29');
    aValidCheckupDates.push('2009-10-31');

    aValidCheckupDates.push('2009-11-04');
    aValidCheckupDates.push('2009-11-05');
    aValidCheckupDates.push('2009-11-07');
    aValidCheckupDates.push('2009-11-12');
    aValidCheckupDates.push('2009-11-14');
    aValidCheckupDates.push('2009-11-18');
    aValidCheckupDates.push('2009-11-19');
    aValidCheckupDates.push('2009-11-21');
    aValidCheckupDates.push('2009-11-25');
    aValidCheckupDates.push('2009-11-26');

    aValidCheckupDates.push('2009-12-02');
    aValidCheckupDates.push('2009-12-03');
    aValidCheckupDates.push('2009-12-05');
    aValidCheckupDates.push('2009-12-09');
    aValidCheckupDates.push('2009-12-10');
    aValidCheckupDates.push('2009-12-12');
    aValidCheckupDates.push('2009-12-16');
    aValidCheckupDates.push('2009-12-17');
    aValidCheckupDates.push('2009-12-19');
  
    aValidCheckupDates.push('2010-01-07');
    aValidCheckupDates.push('2010-01-13');
    aValidCheckupDates.push('2010-01-16');
    aValidCheckupDates.push('2010-01-20');
    aValidCheckupDates.push('2010-01-21');
    aValidCheckupDates.push('2010-01-27');
    aValidCheckupDates.push('2010-01-30');

    aValidCheckupDates.push('2010-02-03');
    aValidCheckupDates.push('2010-02-04');
    aValidCheckupDates.push('2010-02-13');
    aValidCheckupDates.push('2010-02-17');
    aValidCheckupDates.push('2010-02-18');
    aValidCheckupDates.push('2010-02-25');
    aValidCheckupDates.push('2010-02-27');
 
    aValidCheckupDates.push('2010-03-03');
    aValidCheckupDates.push('2010-03-04');
    aValidCheckupDates.push('2010-03-06');
    aValidCheckupDates.push('2010-03-11');
    aValidCheckupDates.push('2010-03-13');
    aValidCheckupDates.push('2010-03-17');
    aValidCheckupDates.push('2010-03-18');
    aValidCheckupDates.push('2010-03-25');
    aValidCheckupDates.push('2010-03-27');
    aValidCheckupDates.push('2010-03-31');

    aValidCheckupDates.push('2010-04-08');
    aValidCheckupDates.push('2010-04-10');
    aValidCheckupDates.push('2010-04-14');
    aValidCheckupDates.push('2010-04-17');
    aValidCheckupDates.push('2010-04-22');
    aValidCheckupDates.push('2010-04-24');
    aValidCheckupDates.push('2010-04-28');

    aValidCheckupDates.push('2010-05-19');
    aValidCheckupDates.push('2010-05-20');
    aValidCheckupDates.push('2010-05-27');

    aValidCheckupDates.push('2010-06-02');
    aValidCheckupDates.push('2010-06-05');
    aValidCheckupDates.push('2010-06-10');
    aValidCheckupDates.push('2010-06-12');
    aValidCheckupDates.push('2010-06-17');
    aValidCheckupDates.push('2010-06-23');
    aValidCheckupDates.push('2010-06-26');

    aValidCheckupDates.push('2010-07-01');
    aValidCheckupDates.push('2010-07-07');
    aValidCheckupDates.push('2010-07-15');
    aValidCheckupDates.push('2010-07-17');
    aValidCheckupDates.push('2010-07-22');
    aValidCheckupDates.push('2010-07-24');
    aValidCheckupDates.push('2010-07-28');

    aValidCheckupDates.push('2010-08-04');
    aValidCheckupDates.push('2010-08-07');
    aValidCheckupDates.push('2010-08-10');
    aValidCheckupDates.push('2010-08-11');
    aValidCheckupDates.push('2010-08-12');
    aValidCheckupDates.push('2010-08-14');
    
    aValidCheckupDates.push('2010-09-08');
    aValidCheckupDates.push('2010-09-09');
    aValidCheckupDates.push('2010-09-11');
    aValidCheckupDates.push('2010-09-15');
    aValidCheckupDates.push('2010-09-16');
    aValidCheckupDates.push('2010-09-18');
    aValidCheckupDates.push('2010-09-22');
    aValidCheckupDates.push('2010-09-23');
    aValidCheckupDates.push('2010-09-25');
    aValidCheckupDates.push('2010-09-29');

    aValidCheckupDates.push('2010-10-06');
    aValidCheckupDates.push('2010-10-07');
    aValidCheckupDates.push('2010-10-09');
    aValidCheckupDates.push('2010-10-13');
    aValidCheckupDates.push('2010-10-14');
    aValidCheckupDates.push('2010-10-16');
    aValidCheckupDates.push('2010-10-20');
    aValidCheckupDates.push('2010-10-21');
    aValidCheckupDates.push('2010-10-23');
    aValidCheckupDates.push('2010-10-27');

    aValidCheckupDates.push('2010-11-03');
    aValidCheckupDates.push('2010-11-04');
    aValidCheckupDates.push('2010-11-06');
    aValidCheckupDates.push('2010-11-10');
    aValidCheckupDates.push('2010-11-13');
    aValidCheckupDates.push('2010-11-17');
    aValidCheckupDates.push('2010-11-18');
    aValidCheckupDates.push('2010-11-20');
    aValidCheckupDates.push('2010-11-24');

    aValidCheckupDates.push('2010-12-01');
    aValidCheckupDates.push('2010-12-02');
    aValidCheckupDates.push('2010-12-04');
    aValidCheckupDates.push('2010-12-08');
    aValidCheckupDates.push('2010-12-09');
    aValidCheckupDates.push('2010-12-11');
    aValidCheckupDates.push('2010-12-15');
    aValidCheckupDates.push('2010-12-18');




    if(aValidCheckupDates.in_array(sDate)) {
      return true;
    } else {
      return false;
    }

  }


  function getDateString (oDate) {

    var iYear  = oDate.getFullYear();
    var iMonth = oDate.getMonth() + 1;
    var iDay   = oDate.getDate();

    var sYear   = String(iYear);
    var sMonth  = (iMonth < 10) ? ('0' + iMonth) : String(iMonth);
    var sDay    = (iDay < 10) ? ('0' + iDay) : String(iDay);

    return (sYear + '-' + sMonth + '-' + sDay);

  }



  function swapImage (oImage, sNewSrc) {

    oImage.src = sNewSrc;

  }