/**
 * Coded by www.chatdor.org
 * Except rgbhex()
 */

var reserveactive = false;

function rgbhex(rgbval){
var s = rgbval.match(/rgb\s*\x28((?:25[0-5])|(?:2[0-4]\d)|(?:[01]?\d?\d))\s*,\s*((?:25[0-5])|(?:2[0-4]\d)|(?:[01]?\d?\d))\s*,\s*((?:25[0-5])|(?:2[0-4]\d)|(?:[01]?\d?\d))\s*\x29/);
if(s){ s=s.splice(1); }
if(s && s.length==3){
	//alert(s);
var d="";
for(i in s){
	if (typeof s[i] == "function") continue;
	var e=parseInt(s[i],10).toString(16);
	//alert(s[i]+"**"+e);
if(e.length != 2){e = "0"+e}
e == "0" ? d+="00":d+=e;
}
return '#'+d;
}
else{
return rgbval;
}
}

function reserveit(cell, reserveDate, isWeekendDay) {
    reserveactive = true;
    var clrdejareserve = "#4181e3";
    var clrweekend = "#fbba18";
    var clrareserver = "#009900";
    var bgColor = cell.style.backgroundColor;
    //alert((typeof bgColor)+"$$"+bgColor);
    if ((typeof bgColor != "undefined") && (bgColor=="" || bgColor==clrweekend)) {
        cell.style.backgroundColor = "#009900"; //clrareserver;
        cell.className = "";
        createReservation(cell, reserveDate);
    } else {
        var bgColorHex = rgbhex(bgColor);
        //alert(bgColorHex);
            //to be added ... or to be removed ...
            // but we cancel the action, just change color back & remove input
        if (bgColorHex == clrareserver || bgColorHex == "#990000") {
            //objparent.parentNode.removeChild(objparent);
            //alert(cell.firstChild.tagName);

            if (cell.hasChildNodes()) // && cell.firstChild.tagName == "INPUT")
                for (var i=0; i<cell.childNodes.length; i++) {
                    var elem = cell.childNodes[i]
                    if (typeof elem == "undefined" || elem.tagName != "INPUT") continue;
                    if (elem.name == "to_reserv[]") {
                        cell.style.backgroundColor = '';
                        cell.className = "toreserve";	//was empty before
                        if (isWeekendDay == "1")
                            cell.style.backgroundColor = clrweekend;
                    }

                    cell.removeChild(cell.childNodes[i]);
                }
            //reserved atm, do nothing
        } else if (bgColorHex == clrdejareserve) {

            // create a weekend reservation
        } else if (bgColorHex == clrweekend) {
            cell.style.backgroundColor = clrareserver;
            cell.className = "";
            createReservation(cell, reserveDate);
        } //else
            //alert(bgColor+'-'+bgColorHex);
    }
    
    var diverror = document.getElementById("msgerreur");
    diverror.style.display = "none";
}

function createReservation(cellreserv, rDate) {
    var elem = document.createElement("input");
    var attr = document.createAttribute("type");
    attr.value = "hidden";
    elem.setAttributeNode(attr);
    attr = document.createAttribute("name");
    attr.value = "to_reserv[]";
    elem.setAttributeNode(attr);
    elem.value = rDate;
    cellreserv.appendChild(elem);
}

function checktoreserveit(cell, reserveDate, isWeekendDay) {
    if (reserveactive)
        reserveit(cell, reserveDate, isWeekendDay);
}

function cancelit() {
    reserveactive = false;
}

    //Valide dates de reservation pour une seule periode active
function validereservedates(lang) {
    var isvalide = false;
    var datearrivee="";
    var datedepart="";
    var co=0;

    var elems = document.frmreservation.elements;
    for (i=0; i<elems.length; i++) {
        var elem = elems[i];
            //skip ...
        if (elem.name != "to_reserv[]") continue;

        if (co==0)
            datearrivee = elem.value;
        datedepart = elem.value;
        co++;
    }

    if (datearrivee == "" && datedepart == "") {
    	var diverror = document.getElementById("msgerreur");
    	if (lang == "en")
    		diverror.innerHTML = "Please select your booking dates<br />by clicking the calendar above.";
    	else
    		diverror.innerHTML = "Veuillez saisir vos dates de réservation<br />en cliquant dans le calendrier ci-haut.";
        diverror.style.display = "block";
		return isvalide;
    }
    
    var datedepartreel = getReservDate(datedepart);
    var datearriveereel = getReservDate(datearrivee);
    //alert(datearriveereel.getTime()+" - "+datedepartreel.getTime());
    var nbjours = (datedepartreel.getTime()-datearriveereel.getTime())/1000/60/60/24+1;
    if (co == nbjours) isvalide=true;

    //alert(isvalide + "**datearrivee:"+datearrivee+" datedepart:"+datedepart+" nbjours:"+nbjours);

    //alert(Date.parse(datearrivee));
    if (isvalide) {
        document.frmreservation.datearrivee.value = datearrivee;
        document.frmreservation.datedepart.value = datedepart;
    } else {
    	var diverror = document.getElementById("msgerreur");
    	if (lang == "en")
    		diverror.innerHTML = "Select a valid booking period.";
    	else
    		diverror.innerHTML = "Veuillez sélectionner une période de réservation valide.";
        diverror.style.display = "block";
    }

    return isvalide;
}

function getReservDate(datereserv) {
    datereservArr = datereserv.split('-');
    var datecheck = new Date();
    datecheck.setDate(datereservArr[2]);
    datecheck.setMonth(datereservArr[1]);
    datecheck.setFullYear(datereservArr[0]);
    datecheck.setHours(0);
    datecheck.setMinutes(0);
    datecheck.setSeconds(0);
    datecheck.setMilliseconds(0);
    return datecheck;
}

function getMonthOnly(current) {
	var monthlen = (current.length==5)?1:2;
	//alert("get next for: "+current+" (monlen="+monthlen+")");
	var month = current.substring(4,4+monthlen);
	return month;
}
	
function getPrev(current) {
		//alert(current+" - "+current.indexOf("cal" == -1));
	if (current == null || current == "") return;
	//alert("get next for: "+current+"...");
	var year = current.substring(0,4);
	//var monthlen = (current.length==5)?1:2;
	//alert("get next for: "+current+" (monlen="+monthlen+")");
	var month = getMonthOnly(current);//current.substring(4,4+monthlen);
	month = parseInt(month)-1;
	if (month < 1) {
			month=12;
			year = parseInt(year)-1;
	}
	//alert("so next is: "+year+month);
	return year+""+month;
}

function getNext(current) {
		//alert(current+" - "+current.indexOf("cal" == -1));
	if (current == null || current == "") return;
	//alert("get next for: "+current+"...");
	var year = current.substring(0,4);
	//var monthlen = (current.length==5)?1:2;
	//alert("get next for: "+current+" (monlen="+monthlen+")");
	var month = getMonthOnly(current);//current.substring(4,4+monthlen);
	month = parseInt(month)+1;
	if (month > 12) {
			month=1;
			year = parseInt(year)+1;
	}
	//alert("so next is: "+year+month);
	return year+""+month;
}

function monthOutOfBounds(current) {
	var yearInit = initmonth.substring(0,4);
	var monthInit = getMonthOnly(initmonth);
	var yearCur = current.substring(0,4);
	var monthCur = getMonthOnly(current);
	
	//Check min
	if (parseInt(yearCur)<=parseInt(yearInit) &&
			parseInt(monthCur)<parseInt(monthInit)) {
		//alert("so minmonth is: "+current+" - "+initmonth);
		return true;
	}
	//alert("so minmonth is: "+current+" - "+initmonth);
	//Check max
	var maxmonth = parseInt(monthInit)+10;
	var yearsToAdd = parseInt(maxmonth/12);
	var monthsToAdd = parseInt(maxmonth%12);
	//if (month > 12) {
		monthInit = monthsToAdd;
		yearInit = parseInt(yearInit)+yearsToAdd;
	//alert("so maxmonth is: "+current+" - "+yearInit+""+monthInit);
	if (parseInt(yearCur)>=parseInt(yearInit) &&
			parseInt(monthCur)>parseInt(monthInit)) {
		//if (parseInt(current) > parseInt(year+""+month)) {
		//alert("so maxmonth is: "+current+" - "+year+""+month);
		return true;
		}
	return false;
}

function overdate(cell) {
	//alert(cell.tagName);
	if ($(cell).hasClass('toreserve'))
		$(cell).removeClass('toreserve')
	else
		$(cell).addClass('toreserve');
}
