function MM_findObj(n, d)
{ //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_preloadImages()
{ //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore()
{ //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_swapImage()
{ //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function popUp(URL)
{
day = new Date();
id = day.getTime();
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=1,width=710,height=700');");
}

function popUpMentions(URL)
{
day = new Date();
id = day.getTime();
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=380,height=375,left = 100,top = 100');");
}

function soumettre(form)
{
    if(form.id.value != "none")
        form.submit();
}

function soumettre2(form)
{
    if(form.idHotel.value != "none")
        form.submit();
}

function numcheck(item)
{
    if(item.value.match(/[^0-9]/) && item.value != "")
    {
        item.value = item.value.substring(0,(item.value.length-1));
        alert('Attention : vous ne devez entrer que des valeurs numérique dans ce champ !');
    }
    
    /*if(Number(document.getElementById('nbChambres').value) > 0)
        document.getElementById('soireetape').style.display = "block";
    else
        document.getElementById('soireetape').style.display = "none";*/
}

function numcheck2(item)
{
    if(item.value == "")
    {
        item.value = "0";
        if(item.name == "nbAdultes")
            item.value = "1";
    }
    
    /*if(Number(document.getElementById('nbChambres').value) > 0)
        document.getElementById('soireetape').style.display = "block";
    else
        document.getElementById('soireetape').style.display = "none";*/
}

function nbLits()
{
    if(document.getElementById("nbChambres").value != "")
        var nbLitChambre = parseInt(document.getElementById("nbChambres").value);
    else
        var nbLitChambre = 0;
    if(document.getElementById("nbSuites").value != "")
        var nbLitSuite = parseInt(document.getElementById("nbSuites").value);
    else
        var nbLitSuite = 0;
    
    if(nbLitChambre != 0 || nbLitSuite != 0)
    {
        var contenudiv = '<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr>';
    
        if(nbLitChambre != 0)
        {
            contenudiv += '<td colspan="2" width="50%" valign="top">Vous avez choisi ' + nbLitChambre;
            if(nbLitChambre > 1)
                contenudiv += ' chambres simples :<br />';
            else
                contenudiv += ' chambre simple :<br />';
            for(var i = 1 ; i <= nbLitChambre ; i++)
            {
                contenudiv += 'n°' + i + ' <select name="litC' + i + '" class="resaborder"><option value="gl1p">1 personne 1 grand lit (selon dispo)</option><option value="gl2p">2 personnes 1 grand lit</option><option value="pl1p">1 personne 2 petits lits</option><option value="pl2p">2 personnes 2 petits lits</option><option value="gl1ple">1 personne 1 grand lit + lit enfant</option><option value="gl2ple">2 personnes 1 grand lit + lit enfant</option><option value="pl1ple">1 personne 2 petits lits + lit enfant</option><option value="pl2ple">2 personnes 2 petits lits + lit enfant</option><option value="pmr1p">1 pers &agrave; mobilit&eacute; r&eacute;duite 1 grand lit</option><option value="pmr2p">2 pers &agrave; mobilit&eacute; r&eacute;duite 1 grand lit</option></select><br />';
            }
            contenudiv += '</td>';
        }
        else
            contenudiv += '<td colspan="2">&nbsp;</td>';
    
        if(nbLitSuite != 0)
        {
            contenudiv += '<td colspan="2" width="50%" valign="top">Vous avez choisi ' + nbLitSuite;
            if(nbLitSuite > 1)
                contenudiv += ' chambres familiales :<br />';
            else
                contenudiv += ' chambre familiale :<br />';
            for(var i = 1 ; i <= nbLitSuite ; i++)
            {
                contenudiv += 'n°' + i + ' <select name="litS' + i + '" class="resaborder"><option value="1gl1pl">1 grand lit + 1 petit lit</option><option value="1gl2pl">1 grand lit + 2 petits lits</option><option value="1gl3pl">1 grand lit + 3 petits lits</option><option value="1gl1plle">1 grand lit + 3 petits lits + lit enfant</option></select><br />';
            }
            contenudiv += '</td>';
        }
        else
            contenudiv += '<td colspan="2">&nbsp;</td>';
        
        contenudiv += '</tr></table>';
        
        document.getElementById('typelit').innerHTML = contenudiv;
    }
    else
        document.getElementById('typelit').innerHTML = "";
}

function nbLits_pasdesuite()
{
    if(document.getElementById("nbChambres").value != "")
        var nbLitChambre = parseInt(document.getElementById("nbChambres").value);
    else
        var nbLitChambre = 0;
    
    if(nbLitChambre != 0)
    {
        var contenudiv = '<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr>';
    
        if(nbLitChambre != 0)
        {
            contenudiv += '<td colspan="2" width="50%" valign="top">Vous avez choisi ' + nbLitChambre;
            if(nbLitChambre > 1)
                contenudiv += ' chambres :<br />';
            else
                contenudiv += ' chambre :<br />';
            for(var i = 1 ; i <= nbLitChambre ; i++)
            {
                contenudiv += 'n°' + i + ' <select name="litC' + i + '" class="resaborder"><option value="gl1p">1 personne 1 grand lit (selon dispo)</option><option value="gl2p">2 personnes 1 grand lit</option><option value="pl1p">1 personne 2 petits lits</option><option value="pl2p">2 personnes 2 petits lits</option><option value="gl1ple">1 personne 1 grand lit + lit enfant</option><option value="gl2ple">2 personnes 1 grand lit + lit enfant</option><option value="pl1ple">1 personne 2 petits lits + lit enfant</option><option value="pl2ple">2 personnes 2 petits lits + lit enfant</option><option value="pmr1p">1 pers &agrave; mobilit&eacute; r&eacute;duite 1 grand lit</option><option value="pmr2p">2 pers &agrave; mobilit&eacute; r&eacute;duite 1 grand lit</option></select><br />';
            }
            contenudiv += '</td>';
        }
        else
            contenudiv += '<td colspan="2">&nbsp;</td>';
    
        contenudiv += '<td colspan="2">&nbsp;</td></tr></table>';
        
        document.getElementById('typelit').innerHTML = contenudiv;
    }
    else
        document.getElementById('typelit').innerHTML = "";
}

function check_resa1()
{
    // erreurs de resa pour le jour J après 16h
    var errorJ = "";
    var dateAuj = new Date();
    // on récupère la valeur du jour du mois en cours
    var jourAuj = dateAuj.getDate();
    var moisAuj = dateAuj.getMonth();
    var anneeAuj = dateAuj.getFullYear();
    // on récupère l'heure actuelle
    var heureAuj = dateAuj.getHours();
    // et on compare avec la valeur du jour choisi dans le calendrier de résa
    var temp = document.getElementById('dateArrivee').value;
    var dateChoisie = temp.split("-");
    var jourChoisi = dateChoisie[0];
    var moisChoisi = dateChoisie[1];
    var anneeChoisie = dateChoisie[2];
    
    if(Number(jourAuj) == Number(jourChoisi) && Number(moisChoisi) == Number(moisAuj) && Number(anneeChoisie) == Number(anneeAuj) && Number(heureAuj) >= 16)
        errorJ = "Nous sommes désolés, mais vous ne pouvez réserver après 16h pour le jour même.";
    else
    {
        if(Number(anneeChoisie) < Number(anneeAuj))
            errorJ = "Vous ne pouvez faire une réservation pour une date antérieure à aujourd'hui.";
        else if(Number(anneeChoisie) == Number(anneeAuj))
        {
            if(Number(moisChoisi) < Number(moisAuj))
                errorJ = "Vous ne pouvez faire une réservation pour une date antérieure à aujourd'hui.";
            else if(Number(moisChoisi) == Number(moisAuj))
            {
                if(Number(jourChoisi) < Number(jourAuj))
                    errorJ = "Vous ne pouvez faire une réservation pour une date antérieure à aujourd'hui.";
            }
        }
    }
    
    if(errorJ != "")
    {
        alert(errorJ);
        return false;
    }
    else if(document.getElementById('nbChambres').value == '0' && document.getElementById('nbSuites').value == '0')
    {
        alert('Vous devez sélectionner au moins 1 chambre simple ou 1 chambre familiale.');
        return false;
    }
    else
    {
        document.resa.submit();
        return true;
    }
}

function check_resa1_pasdesuite()
{
    // erreurs de resa pour le jour J après 16h
    var errorJ = "";
    var dateAuj = new Date();
    // on récupère la valeur du jour du mois en cours
    var jourAuj = dateAuj.getDate();
    var moisAuj = dateAuj.getMonth();
    var anneeAuj = dateAuj.getFullYear();
    // on récupère l'heure actuelle
    var heureAuj = dateAuj.getHours();
    // et on compare avec la valeur du jour choisi dans le calendrier de résa
    var temp = document.getElementById('dateArrivee').value;
    var dateChoisie = temp.split("-");
    var jourChoisi = dateChoisie[0];
    var moisChoisi = dateChoisie[1];
    var anneeChoisie = dateChoisie[2];
    
    if(Number(jourAuj) == Number(jourChoisi) && Number(moisChoisi) == Number(moisAuj) && Number(anneeChoisie) == Number(anneeAuj) && Number(heureAuj) >= 16)
        errorJ = "Nous sommes désolés, mais vous ne pouvez réserver après 16h pour le jour même.";
    else
    {
        if(Number(anneeChoisie) < Number(anneeAuj))
            errorJ = "Vous ne pouvez faire une réservation pour une date antérieure à aujourd'hui.";
        else if(Number(anneeChoisie) == Number(anneeAuj))
        {
            if(Number(moisChoisi) < Number(moisAuj))
                errorJ = "Vous ne pouvez faire une réservation pour une date antérieure à aujourd'hui.";
            else if(Number(moisChoisi) == Number(moisAuj))
            {
                if(Number(jourChoisi) < Number(jourAuj))
                    errorJ = "Vous ne pouvez faire une réservation pour une date antérieure à aujourd'hui.";
            }
        }
    }
    
    if(errorJ != "")
    {
        alert(errorJ);
        return false;
    }
    else if(document.getElementById('nbChambres').value == '0')
    {
        alert('Vous devez sélectionner au moins 1 chambre.');
        return false;
    }
    else
    {
        document.resa2.submit();
        return true;
    }
}

function verifFormResa()
{
    // erreurs auberge ou date
    var errors = "";
    if(document.resa.idHotel.value == "none")
        errors += '- Vous devez préciser dans quelle auberge vous désirez séjourner\n\n';
    if(!document.resa.dateArriveeG.value.match(/[0-9]{2}\-[0-9]{2}\-[0-9]{4}/))
        errors += '- Vous devez entrer une date de la forme jj-mm-aaaa (ex : <?php echo date("d-m-Y",(time()+86400)); ?>)\n Pour ce faire, vous pouvez utiliser le calendrier situé à droite du champ de saisie';
    
    // erreurs de resa pour le jour J après 16h
    var errorJ = "";
    var dateAuj = new Date();
    // on récupère la valeur du jour du mois en cours
    var jourAuj = dateAuj.getDate();
    var moisAuj = dateAuj.getMonth() + 1;
    var anneeAuj = dateAuj.getFullYear();
    // on récupère l'heure actuelle
    var heureAuj = dateAuj.getHours();
    // et on compare avec la valeur du jour choisi dans le calendrier de résa
    var temp = document.getElementById('dateArriveeG').value;
    var dateChoisie = temp.split("-");
    var jourChoisi = dateChoisie[0];
    var moisChoisi = dateChoisie[1];
    var anneeChoisie = dateChoisie[2];
    
    //alert("anneeChoisie = " + Number(anneeChoisie) + "\nanneeAuj = " + Number(anneeAuj) + "\nmoisChoisi = " + Number(moisChoisi) + "\nmoisAuj = " + Number(moisAuj) + "\njourChoisi = " + Number(jourChoisi) + "\njourAuj = " + Number(jourAuj));
    
    if(Number(jourAuj) == Number(jourChoisi) && Number(moisChoisi) == Number(moisAuj) && Number(anneeChoisie) == Number(anneeAuj) && Number(heureAuj) >= 16)
        errorJ = "Nous sommes désolés, mais vous ne pouvez réserver après 16h pour le jour même.";
    else
    {
        if(Number(anneeChoisie) < Number(anneeAuj))
            errorJ = "Vous ne pouvez faire une réservation pour une date antérieure à aujourd'hui.";
        else if(Number(anneeChoisie) == Number(anneeAuj))
        {
            if(Number(moisChoisi) < Number(moisAuj))
                errorJ = "Vous ne pouvez faire une réservation pour une date antérieure à aujourd'hui.";
            else if(Number(moisChoisi) == Number(moisAuj))
            {
                if(Number(jourChoisi) < Number(jourAuj))
                    errorJ = "Vous ne pouvez faire une réservation pour une date antérieure à aujourd'hui.";
            }
        }
    }
    
    if(errors != "" || errorJ != "")
    {
        if(errors != "")
            alert(errors);
        if(errorJ != "")
            alert(errorJ);
    }
    else
        document.resa.submit();
}

function resa_reservit()
{
	var hotel  = document.resa.idHotel.value;
	var myDate = document.resa.dateArriveeG.value;
	
	if(document.resa.idHotel.value == "none")
        alert('- Vous devez préciser dans quelle auberge vous désirez séjourner');
    else if(!document.resa.dateArriveeG.value.match(/[0-9]{2}\-[0-9]{2}\-[0-9]{4}/))
        alert('- Vous devez entrer une date de la forme jj-mm-aaaa (ex : <?php echo date("d-m-Y",(time()+86400)); ?>)\n Pour ce faire, vous pouvez utiliser le calendrier situé à droite du champ de saisie');
	else if(document.getElementById('nbadt').value == "")
		alert('- Vous devez indiquer le nombre d\'adulte');
	else if(document.getElementById('nbchd').value == "")
		alert('- Vous devez indiquer le nombre d\'enfant');
		
	
	
	else
	{
		tab_idh = new Array();
		tab_idh[8]  = "135702";
		tab_idh[9]  = "135623";
		tab_idh[10] = "135877";
		tab_idh[21] = "132713";
		tab_idh[22] = "135701";
		tab_idh[23] = "138184";
		tab_idh[34] = "138185";
		tab_idh[35] = "138182";
		tab_idh[36] = "";//Villefontaine (38)
		tab_idh[38] = "138188";
		tab_idh[41] = "138187";//Niort (79)
		tab_idh[42] = "138186";
		
		document.getElementById('ages_des_enfants').innerHTML = "";
		var nb_enfant = document.getElementById('nbchd').value;
		for(i = 0; i < nb_enfant; i++)
			document.getElementById('ages_des_enfants').innerHTML += "<input type=\"hidden\" name=\"ages"+(i + 1)+"\" value=\"12\"/>";
		
		document.getElementById('fyear').value = myDate.substr(6,4);
		document.getElementById('fmonth').value = myDate.substr(3,2);
		document.getElementById('fday').value = myDate.substr(0,2);
		document.getElementById('hotelid').value = tab_idh[hotel];
	    if(document.resa.idHotel.value == 50){
		document.getElementById('formReservIT').action = "http://reservation.everhotel.com/reservit/reserhotel.php?action=list-avail&numroom=1&nbadt=2&fday=28&fmonth=04&fyear=2010&nbnights=3&hotelid=146387";
		}
		document.getElementById('formReservIT').submit();
		location.reload(true)
	}
}

function verifFormResa2()
{
    var errors = "";
    if(document.resa2.idHotel.value == "none")
        errors += '- Vous devez préciser dans quelle auberge vous désirez séjourner\n\n';
    if(!document.resa2.dateArriveeG.value.match(/[0-9]{2}\-[0-9]{2}\-[0-9]{4}/))
        errors += '- Vous devez entrer une date de la forme jj-mm-aaaa (ex : <?php echo date("d-m-Y",(time()+86400)); ?>)\n Pour ce faire, vous pouvez utiliser le calendrier situé à droite du champ de saisie';
    
    // erreurs de resa pour le jour J après 16h
    var errorJ = "";
    var dateAuj = new Date();
    // on récupère la valeur du jour du mois en cours
    var jourAuj = dateAuj.getDate();
    var moisAuj = dateAuj.getMonth();
    var anneeAuj = dateAuj.getFullYear();
    // on récupère l'heure actuelle
    var heureAuj = dateAuj.getHours();
    // et on compare avec la valeur du jour choisi dans le calendrier de résa
    var temp = document.getElementById('dateArriveeG').value;
    var dateChoisie = temp.split("-");
    var jourChoisi = dateChoisie[0];
    var moisChoisi = dateChoisie[1];
    var anneeChoisie = dateChoisie[2];
    
    if(Number(jourAuj) == Number(jourChoisi) && Number(moisChoisi) == Number(moisAuj) && Number(anneeChoisie) == Number(anneeAuj) && Number(heureAuj) >= 16)
        errorJ = "Nous sommes désolés, mais vous ne pouvez réserver après 16h pour le jour même.";
    else
    {
        if(Number(anneeChoisie) < Number(anneeAuj))
            errorJ = "Vous ne pouvez faire une réservation pour une date antérieure à aujourd'hui.";
        else if(Number(anneeChoisie) == Number(anneeAuj))
        {
            if(Number(moisChoisi) < Number(moisAuj))
                errorJ = "Vous ne pouvez faire une réservation pour une date antérieure à aujourd'hui.";
            else if(Number(moisChoisi) == Number(moisAuj))
            {
                if(Number(jourChoisi) < Number(jourAuj))
                    errorJ = "Vous ne pouvez faire une réservation pour une date antérieure à aujourd'hui.";
            }
        }
    }
    
    if(errors != "" || errorJ != "")
    {
        if(errors != "")
            alert(errors);
        if(errorJ != "")
            alert(errorJ);
    }
    else
        document.resa2.submit();
}

function check_resa(object)
{
    if(object.CGV.checked)
    {
        if(confirm('Vérifiez bien vos informations avant de confirmer votre réservation.\nVérifier surtout que votre adresse e-mail est correct pour recevoir votre récapitulatif de réservation.\nEtes-vous sûr(e) de vouloir confirmer ?'))
            return true;
        else
            return false;
    }
    else
    {
        alert('Vous devez avoir lu et accepté nos Conditions Générales de Vente avant de confirmer votre réservation.');
        return false;
    }
        
}

/*function nb_nuits(plusmoins)
{
    if(plusmoins == 'plus')
    {
        document.getElementById('nbNuits').value = Number(document.getElementById('nbNuits').value) + 1;
    }
    else
    {
        if(Number(document.getElementById('nbNuits').value) > 0)
            document.getElementById('nbNuits').value = Number(document.getElementById('nbNuits').value) - 1;
    }
}*/

function nb_petidej(plusmoins)
{
    if(plusmoins == 'plus')
    {
        document.getElementById('nbPetidej').value = Number(document.getElementById('nbPetidej').value) + 1;
    }
    else
    {
        if(Number(document.getElementById('nbPetidej').value) > 0)
            document.getElementById('nbPetidej').value = Number(document.getElementById('nbPetidej').value) - 1;
    }
}

function nb_petidej2(plusmoins)
{
    if(plusmoins == 'plus')
    {
        document.getElementById('nbPetidej2').value = Number(document.getElementById('nbPetidej2').value) + 1;
    }
    else
    {
        if(Number(document.getElementById('nbPetidej2').value) > 0)
            document.getElementById('nbPetidej2').value = Number(document.getElementById('nbPetidej2').value) - 1;
    }
}

function nb_chambres(plusmoins)
{
    if(plusmoins == 'plus')
    {
        document.getElementById('nbChambres').value = Number(document.getElementById('nbChambres').value) + 1;
    }
    else
    {
        if(Number(document.getElementById('nbChambres').value) > 0)
            document.getElementById('nbChambres').value = Number(document.getElementById('nbChambres').value) - 1;
    }
    
    if(Number(document.getElementById('nbChambres').value) > 0)
        document.getElementById('soireetape').style.display = "block";
    else
        document.getElementById('soireetape').style.display = "none";
    
    nbLits();
}

function nb_suites(plusmoins)
{
    if(plusmoins == 'plus')
    {
        document.getElementById('nbSuites').value = Number(document.getElementById('nbSuites').value) + 1;
    }
    else
    {
        if(Number(document.getElementById('nbSuites').value) > 0)
            document.getElementById('nbSuites').value = Number(document.getElementById('nbSuites').value) - 1;
    }
    nbLits();
}

function nb_chambres_pasdesuite(plusmoins)
{
    if(plusmoins == 'plus')
    {
        document.getElementById('nbChambres').value = Number(document.getElementById('nbChambres').value) + 1;
    }
    else
    {
        if(Number(document.getElementById('nbChambres').value) > 0)
            document.getElementById('nbChambres').value = Number(document.getElementById('nbChambres').value) - 1;
    }
    
    if(Number(document.getElementById('nbChambres').value) > 0)
        document.getElementById('soireetape').style.display = "block";
    else
        document.getElementById('soireetape').style.display = "none";
    
    nbLits_pasdesuite();
}

function show_photo(hotel,image,w,h)
{
	var hmax = 490;
    
    if(h > hmax)
    {
        h2 = hmax;
        w2 = hmax * w / h;
    }
    else
    {
        h2 = h;
        w2 = w;
    }
	
	var topFF = 400 + document.documentElement.scrollTop;
	
    document.getElementById('src_photo').style.top = topFF+"px";
    document.getElementById('src_photo').style.display = "block";
    document.getElementById('src_photo').src = "../photos/"+hotel+"/"+image;
    document.getElementById('src_photo').border = "1px solid #005498";
    document.getElementById('src_photo').width = w2;
    document.getElementById('src_photo').height = h2;
    var h1 = -(h2 / 2);
    var w1 = -(w2 / 2);
    document.getElementById('src_photo').style.marginTop = h1+"px";
    document.getElementById('src_photo').style.marginLeft = w1+"px";
}

function hide_photo()
{
    document.getElementById('src_photo').src = "";
    document.getElementById('src_photo').style.display = "none";
}

function show_plan(image)
{
    document.getElementById('src_plan').style.display = "block";
    document.getElementById('src_plan').src = "img_carte/"+image;
    document.getElementById('src_plan').border = "1px solid #005498";
}

function hide_plan()
{
    document.getElementById('src_plan').style.display = "none";
    document.getElementById('src_plan').src = "";
    document.getElementById('src_plan').border = "none";
}

function checkJE(objet)
{
    if(objet.checked)
        document.getElementById('spanJE').style.visibility = "visible";
    else
    {
        document.getElementById('spanJE').style.visibility = "hidden";
        document.getElementById('jourEtude').value = "";
    }
}

// Title: Tigra Calendar
// URL: http://www.softcomplex.com/products/tigra_calendar/
// Version: 3.3 (European date format)
// Date: 09/01/2005 (mm/dd/yyyy)
// Note: Permission given to use this script in ANY kind of applications if
//    header lines are left unchanged.

// 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+$/;

function calendar1(obj_target) {

    // assigning 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;

    // 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 target 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) {
    if (str_datetime) {
        this.dt_current = this.prs_tsmp(str_datetime);
    }
    else {
        this.dt_current = this.prs_tsmp(this.target.value);
        this.dt_selected = this.dt_current;
    }
    if (!this.dt_current) return;

    var obj_calwindow = window.open(
        'calendar.html?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;
}