// Title: Tigra Calendar
// URL: http://www.softcomplex.com/products/tigra_calendar/
// Version: 3.2 (European date format)
// Date: 10/14/2002 (mm/dd/yyyy)
// Feedback: feedback@softcomplex.com (specify product title in the subject)
// Note: Permission given to use this script in ANY kind of applications if
//    header lines are left unchanged.
// Note: Script consists of two files: calendar?.js and calendar.html
// About us: Our company provides offshore IT consulting services.
//    Contact us at sales@softcomplex.com if you have any programming task you
//    want to be handled by professionals. Our typical hourly rate is $20.

// if two digit year input dates after this year considered 20 century.
var NUM_CENTYEAR = 30;
// is time input control required by default
var BUL_TIMECOMPONENT = false;
// are year scrolling buttons required by default
var BUL_YEARSCROLL = true;

var calendars = [];
var RE_NUM = /^\-?\d+$/;
var init=0;

function calendar1(obj_target) {

        // assing methods
        this.gen_date = cal_gen_date1;
        this.gen_time = cal_gen_time1;
        this.gen_tsmp = cal_gen_tsmp1;
        this.prs_date = cal_prs_date1;
        this.prs_time = cal_prs_time1;
        this.prs_tsmp = cal_prs_tsmp1;
        this.popup    = cal_popup1;
        this.setdate    = cal_setdate;

        // validate input parameters
        if (!obj_target)
                return cal_error("Error calling the calendar: no target control specified");
        if (obj_target.value == null)
                return cal_error("Error calling the calendar: parameter specified is not valid tardet control");
        this.target = obj_target;
        this.time_comp = BUL_TIMECOMPONENT;
        this.year_scroll = BUL_YEARSCROLL;

        // register in global collections
        this.id = calendars.length;
        calendars[this.id] = this;
}

function cal_popup1 (str_datetime) {
        this.dt_current = this.prs_tsmp(str_datetime ? str_datetime : this.target.value);
        if (!this.dt_current) return;

        var obj_calwindow = window.open(
                'http://www.spahotelstart.com/calendar.php?datetime=' + this.dt_current.valueOf()+ '&id=' + this.id,
                'Calendar', 'width=200,height='+(this.time_comp ? 215 : 190)+
                ',status=no,resizable=no,top=200,left=200,dependent=yes,alwaysRaised=yes'
        );
        obj_calwindow.opener = window;
        obj_calwindow.focus();
}

// timestamp generating function
function cal_gen_tsmp1 (dt_datetime) {
        return(this.gen_date(dt_datetime) + ' ' + this.gen_time(dt_datetime));
}

// date generating function
function cal_gen_date1 (dt_datetime) {
        return (
                (dt_datetime.getDate() < 10 ? '0' : '') + dt_datetime.getDate() + "-"
                + (dt_datetime.getMonth() < 9 ? '0' : '') + (dt_datetime.getMonth() + 1) + "-"
                + dt_datetime.getFullYear()
        );
}
// time generating function
function cal_gen_time1 (dt_datetime) {
        return (
                (dt_datetime.getHours() < 10 ? '0' : '') + dt_datetime.getHours() + ":"
                + (dt_datetime.getMinutes() < 10 ? '0' : '') + (dt_datetime.getMinutes()) + ":"
                + (dt_datetime.getSeconds() < 10 ? '0' : '') + (dt_datetime.getSeconds())
        );
}

// timestamp parsing function
function cal_prs_tsmp1 (str_datetime) {
        // if no parameter specified return current timestamp
        if (!str_datetime)
                return (new Date());

        // if positive integer treat as milliseconds from epoch
        if (RE_NUM.exec(str_datetime))
                return new Date(str_datetime);

        // else treat as date in string format
        var arr_datetime = str_datetime.split(' ');
        return this.prs_time(arr_datetime[1], this.prs_date(arr_datetime[0]));
}

// date parsing function
function cal_prs_date1 (str_date) {

        var arr_date = str_date.split('-');

        if (arr_date.length != 3) return cal_error ("Invalid date format: '" + str_date + "'.\nFormat accepted is dd-mm-yyyy.");
        if (!arr_date[0]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo day of month value can be found.");
        if (!RE_NUM.exec(arr_date[0])) return cal_error ("Invalid day of month value: '" + arr_date[0] + "'.\nAllowed values are unsigned integers.");
        if (!arr_date[1]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo month value can be found.");
        if (!RE_NUM.exec(arr_date[1])) return cal_error ("Invalid month value: '" + arr_date[1] + "'.\nAllowed values are unsigned integers.");
        if (!arr_date[2]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo year value can be found.");
        if (!RE_NUM.exec(arr_date[2])) return cal_error ("Invalid year value: '" + arr_date[2] + "'.\nAllowed values are unsigned integers.");

        var dt_date = new Date();
        dt_date.setDate(1);

        if (arr_date[1] < 1 || arr_date[1] > 12) return cal_error ("Invalid month value: '" + arr_date[1] + "'.\nAllowed range is 01-12.");
        dt_date.setMonth(arr_date[1]-1);

        if (arr_date[2] < 100) arr_date[2] = Number(arr_date[2]) + (arr_date[2] < NUM_CENTYEAR ? 2000 : 1900);
        dt_date.setFullYear(arr_date[2]);

        var dt_numdays = new Date(arr_date[2], arr_date[1], 0);
        dt_date.setDate(arr_date[0]);
        if (dt_date.getMonth() != (arr_date[1]-1)) return cal_error ("Invalid day of month value: '" + arr_date[0] + "'.\nAllowed range is 01-"+dt_numdays.getDate()+".");

        return (dt_date)
}

// time parsing function
function cal_prs_time1 (str_time, dt_date) {

        if (!dt_date) return null;
        var arr_time = String(str_time ? str_time : '').split(':');

        if (!arr_time[0]) dt_date.setHours(0);
        else if (RE_NUM.exec(arr_time[0]))
                if (arr_time[0] < 24) dt_date.setHours(arr_time[0]);
                else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed range is 00-23.");
        else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed values are unsigned integers.");

        if (!arr_time[1]) dt_date.setMinutes(0);
        else if (RE_NUM.exec(arr_time[1]))
                if (arr_time[1] < 60) dt_date.setMinutes(arr_time[1]);
                else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed range is 00-59.");
        else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed values are unsigned integers.");

        if (!arr_time[2]) dt_date.setSeconds(0);
        else if (RE_NUM.exec(arr_time[2]))
                if (arr_time[2] < 60) dt_date.setSeconds(arr_time[2]);
                else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed range is 00-59.");
        else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed values are unsigned integers.");

        dt_date.setMilliseconds(0);
        return dt_date;
}

function cal_error (str_message) {
        alert (str_message);
        return null;
}

function cal_setdate(dt_datetime) {
    //var dt_actual=new Date(newDate.getFullYear(),newDate.getMonth(),newDate.getDate());
    var dt_actual=new Date(dt_datetime.getFullYear(),dt_datetime.getMonth(),dt_datetime.getDate());

    eval('form=document.booking.'+this.name+'_month');
    for (i=0;i<12;i++)
        form.options[i]=null;
        selectindex = 0;
        for (i=0;i<12;i++){
//           document.writeln(dt_actual.getMonth() + " " + dt_actual.getDate() + "     " + ARR_MONTHS_DAYS[dt_actual.getMonth()+1] +"<br>");
           form.options[i]=new Option(ARR_MONTHS_SHORT[dt_actual.getMonth()]+' '+dt_actual.getFullYear(),dt_actual.getFullYear()+''+(dt_actual.getMonth()+1));

           if (dt_actual.getMonth() == dt_datetime.getMonth() && dt_actual.getFullYear() == dt_datetime.getFullYear()) {
             selectindex=i;
           }
           dt_actual.setTime(dt_actual.getTime()+(86400000*(ARR_MONTHS_DAYS[dt_actual.getMonth()+1])));

     }
     form.options[selectindex].selected=true;

        eval('form=document.booking.'+this.name+'_day');

        /*Napokat tartalmazó legördülőmenü kitöltése*/
 
        for (i=0;i<31;i++) {
           form.options[i]=null;
        }

        i=0;
        day=1;

        dt_actual=new Date();

        if (dt_actual.getMonth()==dt_datetime.getMonth())
           day=dt_actual.getDate();

        var dt_actual=new Date(dt_datetime.getFullYear(),dt_datetime.getMonth(),day);



	  //alert((i+day));
        while (dt_actual.getMonth() == dt_datetime.getMonth() && i<31) {
           form.options[i]=new Option((i+day),(i+day));
           if (dt_actual.getDate() == dt_datetime.getDate()) {
             selectindex=i;
           }
           dt_actual.setTime(dt_actual.getTime()+86400000);
           //alert(dt_actual.getMonth()+':'+dt_actual.getDate()+'::'+dt_datetime.getMonth());
           i++;
        }
        form.options[selectindex].selected=true;

        eval('form=document.booking.'+this.name+'_dayname');
        form.value=ARR_WEEKDAYS[dt_datetime.getDay()];

        eval('form=document.booking.'+this.name+'_date');
        form.value=cal_gen_date1(dt_datetime);

        if (this.init!=1) {
          dateChanger(dt_datetime,1,this.name, dt_datetime);
          this.init=0;
   }
}

function dateChanger(dt_datetime,initialize,fname) {
   nextDate=new Date();
   this.init=initialize;
   //alert( ( olddatetime.getTime() - dt_datetime.getTime() ) );

   if (fname=='dep') { 
     this.name='arr';
     //ha a távozási dátum módosul, akkor az érkezési dátumot csak akkor állítjuk, ha
     //az új távozási dátum kisebb, mint az eredeti érkezés dátum
     arrDate=cal_prs_date1(document.booking.arr_date.value);

     if (arrDate.getTime()>=dt_datetime.getTime()) {
       nextDate.setTime(dt_datetime.getTime()-86400000);
       cal_setdate(nextDate);
     }
   } else {

     this.name='dep';
     //ha az új érkezési dátum nagyobb, mint a távozási dátum, akkor a távozási dátum
     //az új érkezési dátum + 1 nap
     depDate=cal_prs_date1(document.booking.dep_date.value);
     if (depDate.getTime() <= dt_datetime.getTime()) {
       nextDate.setTime(dt_datetime.getTime()+86400000);
	//alert(dt_datetime.getDay() + ':' + nextDate.getDay());
       cal_setdate(nextDate);
	changeDay('dep');
     } else {
	if ( (depDate.getYear()-dt_datetime.getYear())*12 + (depDate.getMonth() - dt_datetime.getMonth()) > 0) { 
	  //alert(dt_datetime.getDay());
         nextDate.setTime(dt_datetime.getTime()+(86400000));
         cal_setdate(nextDate);

	  //this.name='arr';
         //nextDate.setTime(dt_datetime.getTime());
         //cal_setdate(nextDate);
	}
     }
   }
}

function changeDate(pre) {
   eval('form=document.booking.'+pre+'_month');
   now=new Date();

//   alert("teszt");
   // get value of the selected option
   yearmonth = form.options[form.selectedIndex].value;

   //a nap kiválasztott értékének lekérdezése
   eval('form=document.booking.'+pre+'_day');
   selday = form.options[form.selectedIndex].value;

   //a nap legördülőmenü újragenerálása az adott hónapnak megfelelően
   dt_datetime=new Date(yearmonth.substring(0,4),parseInt(yearmonth.substring(4,6))-1,1);
   //dt_datetime_old=new Date(yearmonth.substring(0,4),parseInt(yearmonth.substring(4,6))-1,1);

   for (i=0;i<form.length;i++) {
         form.options[i]=null;
   }

   i=0;
   day=1;
   if (dt_datetime.getMonth()==now.getMonth()) {
           day=selday;
   }
   dt_actual=new Date(parseInt(yearmonth.substring(0,4)),parseInt(yearmonth.substring(4,6))-1,1);
   //alert(ARR_MONTHS_DAYS[dt_datetime.getMonth()]);
   
   while (dt_actual.getMonth() == dt_datetime.getMonth() && i<31 && i < ARR_MONTHS_DAYS[dt_datetime.getMonth()] ) {
	    //alert(dt_actual.getDate() + '::'+ (i+1));
           form.options[i]=new Option((i+1),(i+1));
           month_t=dt_actual.getDate();
           dt_actual.setTime(dt_actual.getTime()+86400000);
           i++;
   }


   /*Ha nem az aktuális hónapot listázzuk, akkor minden nap megjelenik,
   így az indexelés a napok számával arányos*/
   if (selday>form.length && dt_datetime.getMonth()!=now.getMonth()) {
      selday=form.length;
   } else if (selday>form.length && dt_datetime.getMonth()==now.getMonth()) {
   /*Ha az aktuális hónapot listázzuk, akkor nem az összes napot listázzuk ki,
   csak amelyekre még foglalhat, ekkor az indexelés nem egyezik a napok számával*/
      //selday=(parseInt(selday)+parseInt(form.length))-month_t;
      selday=form.length;
   }

   form.options[selday-1].selected=true;

   eval('form=document.booking.'+pre+'_date');
   newDate=new Date(yearmonth.substring(0,4),parseInt(yearmonth.substring(4,6))-1,selday);
   form.value=cal_gen_date1(newDate);

   eval('form=document.booking.'+pre+'_dayname');
   form.value=ARR_WEEKDAYS[newDate.getDay()];

   this.name=pre;
//   dateChanger(newDate,1,pre);
   dateChanger(newDate);


}

function changeDay(pre) {
   eval('form=document.booking.'+pre+'_month');

   // get value of the selected option
   yearmonth = form.options[form.selectedIndex].value;

   //a nap kiválasztott értékének lekérdezése
   eval('form=document.booking.'+pre+'_day');
   day = form.options[form.selectedIndex].value;

   //alert(day);

   eval('form=document.booking.'+pre+'_date');
   newDate=new Date(yearmonth.substring(0,4),parseInt(yearmonth.substring(4,6))-1,day);
   form.value=cal_gen_date1(newDate);

   eval('form=document.booking.'+pre+'_dayname');
   form.value=ARR_WEEKDAYS[newDate.getDay()];

   this.name=pre;
   dateChanger(newDate, 1, pre);
}

function ChangeRoomNumber() {
   document.booking.person_num.value = 1*(1*(document.booking.num_single.options[document.booking.num_single.selectedIndex].value) +
    2*(document.booking.num_double.options[document.booking.num_double.selectedIndex].value) +
    3*(document.booking.num_triple.options[document.booking.num_triple.selectedIndex].value));


}


