

document.write("<script type=\"text/javascript\" src=\"js/inet-date.js\"></script>");
document.write("<script type=\"text/javascript\" src=\"js/jquery.selectboxes.js\"></script>");

/****** DOC INIT *******/

$(document).ready(function() {
    JH.initForm();
    initCols();
    initModal();
    initTabs();
});


function initModal() {
    $("input.button").click(function() {
        if (!$("#dialog").hasClass("derror")) {
            $("#dialog").dialog({
			    bgiframe: true,
			    modal: true,
			    width: 200,
			    minHeight: 0
		    });
		}
    });
}

function searchsubmit() {
    $("#searchfrm").submit();
}

function bookingsubmit() {
    $("#bookingfrm").submit();
}

function setstate(state) {
    $("#state").val(""+ state +"");
}

function getstate() {
    return str2int($("#state").val());
}

/****** CALENDAR/SEARCH *******/

var JH = {};

JH.maxVisitors = 10;

JH.DT_MIN_YEAR = (new Date()).getFullYear();
JH.DT_MAX_YEAR = JH.DT_MIN_YEAR + 2;

JH.legalDates = ["2010-09-10", "2010-09-13", "2010-09-14", "2010-09-15", "2010-09-16", "2010-09-17", "2010-09-20", "2010-09-21", "2010-09-22", "2010-09-23", "2010-09-24", "2010-09-27", "2010-09-28", "2010-09-29", "2010-09-30", "2010-10-01", "2010-10-04", "2010-10-05", "2010-10-06", "2010-10-07", "2010-10-08", "2010-10-11", "2010-10-12", "2010-10-13", "2010-10-14", "2010-10-15", "2010-10-18", "2010-10-19", "2010-10-20", "2010-10-21", "2010-10-22"];

JH.date2str = function(dt) {
    var y = dt.getFullYear();
    var m = dt.getMonth() + 1;
    var d = dt.getDate();
    return y + "-" + (m < 10 ? "0" : "") + m + "-" + (d < 10 ? "0" : "") + d;
};

JH.date2istr = function(dt) {
    var y = dt.getFullYear();
    var m = dt.getMonth() + 1;
    var d = dt.getDate();
    return (d < 10 ? "0" : "") + d + "-" + (m < 10 ? "0" : "") + m + "-" + y;
};

JH.str2date = function(s) {
    var rx = /^(\d{4})-(\d{1,2})-(\d{1,2})$/;
    var d = new Date();
    if (s.match(rx)) {
        d.setFullYear(parseInt(s.replace(rx, "$1"), 10), 0, 1);
        d.setMonth(parseInt(s.replace(rx, "$2"), 10) - 1);
        d.setDate(parseInt(s.replace(rx, "$3"), 10));
    }
    else {
        rx = /^(\d{1,2})-(\d{1,2})-(\d{4})$/;
        if (s.match(rx)) {
            d.setFullYear(parseInt(s.replace(rx, "$3"), 10), 0, 1);
            d.setMonth(parseInt(s.replace(rx, "$2"), 10) - 1);
            d.setDate(parseInt(s.replace(rx, "$1"), 10));
        }
        else {
            return JH.str2date(JH.legalDates[0]);
        }
    }
    return d;
};

JH.calendar = null;

JH.hideCalendar = function() {
    if (JH.calendar != null) {
        $("#" + $(JH.calendar).attr("name")).css({
            "top": "0px",
            "left": "-9999px"
        });
        JH.validateDates();
    }
};

JH.positionCalendar = function(obj) {
    if (JH.calendar != null && obj != null) {
        $("#" + $(JH.calendar).attr("name")).css({
            "top": $(obj).offset().top + "px",
            "left": $(obj).offset().left + "px"
        });
    }
};

JH.dtInput = null;

/*JH.validateDates = function() {
    var objArr = $("input.arrival").get(0);
    var objDep = $("input.departure").get(0);
    if ((typeof objArr != "undefined") && (typeof objDep != "undefined")) {
        var dtArr = JH.str2date($(objArr).val());
        var dtDep = JH.str2date($(objDep).val());
        if (dtDep <= dtArr) {
            dtDep = DateAdd("d", 1, dtArr);
        }
        $(objArr).val(JH.date2istr(dtArr));
        $(objDep).val(JH.date2istr(dtDep));
    }
}*/

JH.validateDates = function() {
    var objArr = $("input.arrival").get(0);
    if ((typeof objArr != "undefined")) {
        var dtArr = JH.str2date($(objArr).val()); 
        $(objArr).val(JH.date2istr(dtArr));
    }
}

JH.callbackCalendar = function(objCal) {
    if (objCal != null) {
        if (objCal.dateClicked) {
            if (objCal.isLegalDate(objCal.date)) {
                if (JH.dtInput != null) {
                    $(JH.dtInput).val(JH.date2istr(objCal.date));
                    JH.validateDates();
                }
                JH.hideCalendar();
            }
        }
    }
};

JH.showCalendar = function(obj) {
    if (obj != null && JH.calendar != null) {
        var objIframe = JH.calendar;
        var oIframe = $("#" + $(JH.calendar).attr("name")).get(0);

        JH.dtInput = obj;

        $(obj).blur();

        //Close calendar overlay if uset somewhere else
        JH.hideCalendar();

        var objDoc = (typeof objIframe.document != "undefined" ? objIframe.document : objIframe.contentDocument);
        var objBody = (objDoc != null ? objDoc.body : null);

        if (objBody) {

            if (typeof objIframe.initializeCalendar != "undefined") {
                objIframe.initializeCalendar({
                    flat: "calendarContainer",
                    flatCallback: JH.callbackCalendar,
                    closeCallback: JH.hideCalendar,
                    date: JH.str2date($(obj).val()),
                    weekNumbers: true,
                    showOthers: false,
                    firstDay: 1,
                    legalDates: JH.legalDates,
                    range: [JH.DT_MIN_YEAR, JH.DT_MAX_YEAR]
                });

                $(oIframe).css({
                    "width": objIframe.myWidth + "px",
                    "height": objIframe.myHeight + "px"
                });

                JH.positionCalendar(obj);
            }
        }
    }
};


JH.initCalendar = function() {
    JH.calendar = window.frames["calendarFrame"];

    $("body").click(function() {
        JH.hideCalendar();
    });

    $("input.dt").each(function() {
        var _this = this;

        //Bind clicks on calendar icon to input field:
        var strClass = "";
        if ($(this).hasClass("arrival")) {
            strClass = "arrival";
        }
        else if ($(this).hasClass("departure")) {
            strClass = "departure";
        }

        if (strClass != "") {
            $("img." + strClass).click(function(event) {
                event.stopPropagation();
                $(_this).click();
                return false;
            });
        }

        $(this).focus(function() {
            $(this).click();
        });

        $(this).blur(function(event) {
            var v = $(this).val();
            $(this).val(JH.date2istr(JH.str2date(v)));
        });

        $(this).click(function(event) {
            event.stopPropagation();
            JH.showCalendar(this);
        });
    });


};



JH.initForm = function() {
    var objForm = $("#searchfrm");
    
    if (objForm.length > 0) {
        JH.initCalendar();
        
        //Setup validation for search form:
        var objAdults = objForm.find("select.sel-adults");
        var objChildren = objForm.find("select.sel-children");
        var objNumUnits = objForm.find("select.sel-numunits");

        if (str2int(objNumUnits.val()) != objAdults.length) { // Handle back click
            objNumUnits.val("1");
        }
        
        
        $(objAdults).bind("change", function() {
            var v = parseInt($(this).selectedValues()[0], 10);
            v = (isNaN(v) ? 0 : v);
            if (v == 0) {
                $(this).val("1");
            }
            var siblingSelect = $(this).parents("tr:first").find("select.sel-children");
            var cv = parseInt($(siblingSelect).selectedValues()[0], 10);
            cv = (isNaN(cv) ? 0 : cv);
            if (cv + v > JH.maxVisitors) {
                cv = JH.maxVisitors - v;
                cv = (cv < 0 ? 0 : cv);
            }

            $(siblingSelect).selectOptions("" + cv, true);
        });

        $(objChildren).bind("change", function() {
            var v = parseInt($(this).selectedValues()[0], 10);
            v = (isNaN(v) ? 0 : v);

            var siblingSelect = $(this).parents("tr:first").find("select.sel-adults");
            var ca = parseInt($(siblingSelect).selectedValues()[0], 10);
            ca = (isNaN(ca) ? 0 : ca);
            if (ca == 0) {
                $(siblingSelect).selectOptions(1, true);
                ca = 1;
            }
            if (ca + v > JH.maxVisitors) {
                v = JH.maxVisitors - ca;
            }
            $(this).selectOptions("" + v, true);
        });
    }
}


/******* MISC FUNCTIONS *******/

function str2int(str) {
	var num = parseInt(str);
	if (isNaN(num)) {
		return 0;
	}
	else {
		return num;
	}
}

function str2float(str) {
	var num = parseFloat(str);
	if (isNaN(num)) {
		return 0;
	}
	else {
		return num;
	}
}

function initCols() {

    $("#personalize .col2").click(function() {

        if ($("#refinesearch").is(":hidden")) {

            $("#refinesearch").slideDown("normal");

            $("#personalize .col2 .down").hide();

            $("#personalize .col2 .up").show();

        } else {

            $("#refinesearch").slideUp("normal");

            $("#personalize .col2 .up").hide();

            $("#personalize .col2 .down").show();

        }

    })

    $(".info").each(function(i) {

        var info = $(this);

        info.find(".tool").click(function() {

            info.toggleClass("closed");

            if (info.is(".closed")) {

                $(this).find(".up").hide();

                $(this).find(".down").show();

                info.find(".tables").slideUp("normal");

            } else {

                $(this).find(".down").hide();

                $(this).find(".up").show();

                info.find(".tables").slideDown("normal");

            }

            //info.

        })



        //            $("this").find(".tool").click(function() {

        //            //alert(this.parentNode.parentNode.parentNode.parentNode.parentNode.className);

        //            $("this").find(".up").show();

        //            $("this").find(".down").hide();

        //            })

    })

}


function RestrictInt(field) {

    while(field.value[0]==0 && field.value.length>1)

          field.value=field.value.substring(1,field.value.length);

    while (isNaN(field.value))

          field.value=field.value.substring(0,field.value.length-1);

    if (field.value=='') field.value='0';

}

function LimitValue(field, max) {

    if (field.value>10)

          field.value=max;

    if (field.value<0)

          field.value=0;

 }
 
 function formatCurrency(num) {
    num = num.replace(".", ",");
    int = num.split(",")[0];
    cents = num.split(",")[1];
    for (var i = 0; i < Math.floor((int.length-(1+i))/3); i++) {
        int = int.substring(0,int.length-(4*i+3)) +'.'+ int.substring(int.length-(4*i+3));
    }
    return (int +','+ cents);
}
 


/*** VIEW 0 ***/

function search() {
    
    var objForm = $("#searchfrm");

    var objAdults = objForm.find("select.sel-adults").get(0);
    var objChildren = objForm.find("select.sel-children").get(0);
    var arrTypes = objForm.find("input.cb-type");

    var b = true;

    JH.validateDates();

    var c = 0;
    $.each(arrTypes, function(i, n) {
        c += (n.checked ? 1 : 0);
    });

    b = (c < 1 ? false : b);

    var v = 0;
    var ca = parseInt($(objAdults).selectedValues()[0], 10);
    var cc = parseInt($(objChildren).selectedValues()[0], 10);

    b = (ca < 1 ? false : b);


    //No type selected: highlight step number
    if (!b) {
        $("#dialog").addClass("derror");
        $("div.type-number").addClass("error");
        $("div.type-number").fadeTo("fast", 0).fadeTo("fast", 1).fadeTo("fast", 0).fadeTo("fast", 1, function() {
            if ($.browser.msie) {
                this.style.removeAttribute('filter');
            }
            $(this).removeClass("error");
        });
    }

    if (b) {
        $("#dialog").removeClass("derror");
        mergeTypes();
        setstate(1);
        searchsubmit();
    }

    return false;
}


function mergeTypes() {
    var arrTypes = $("input.cb-type:checked");
    var inpTypes = $("input#types");
    var strTypes = "";
    var i = 1;
    arrTypes.each(function() {
        strTypes += $(this).attr("id").replace("type", "");
        if (i < arrTypes.length) {
            strTypes += ",";
        }
        i++;
    });
    inpTypes.val(strTypes);
}

function updateNumPersons(numUnits) {
    var numUnitsCur = $("tr.numpersons_row").length;
    var diff = numUnits - numUnitsCur;
    if (diff > 0) {
        for (c = (numUnitsCur + 1); c <= numUnits; c++) {        
            var trToClone = $("tr#numpersons1");
            var trClone = trToClone.clone(true);
            trClone.attr("id", "numpersons"+ c);
            var cAdults = trClone.find("select.sel-adults");
            var cChildren = trClone.find("select.sel-children");
            cAdults.attr("name", "adults"+ c);
            cAdults.val(2);
            cChildren.attr("name", "children"+ c);
            cChildren.val(2);
            trToClone.parent().append(trClone);
        }
    }
    else if (diff < 0) {
        for (c = numUnitsCur; c > numUnits; c--) {
            $("tr#numpersons"+ c).remove();
        }
    }
}


/*** VIEW 1 ***/

function selectPackage(href) {
    location.href = href;
}


/*** VIEW 2 ***/


function initStreetLists(unitCount, arrSelPackages) {
	var arrA = $("div.streetAll a.toggleall");

	arrA.bind("click", function() {
		var objA = $(this);
		var objRest = objA.parents("div.streetFooter:first").siblings("div.streetNumsRest:first");
		if (objRest.is(":hidden")) {
			objRest.slideDown("normal", function() {
				objA.find("span.showfirst").show();
				objA.find("span.showall").hide();
			});
		}
		else {
			objRest.slideUp("normal", function() {
				objA.find("span.showfirst").hide();
				objA.find("span.showall").show();
			});
		}
		
		return false;
	});

	returnFalseForSafari(arrA);
	
	arrSelUnits = new Array(unitCount);
	var arrInp;
	
	if (unitCount > 1) {
	    
	    arrInp = $(".streetNum input:checkbox");

	    var numCheckedOnInit = arrInp.filter(":checked").length; 
	    if (numCheckedOnInit > 0) { // Handle back clicks
	        arrInp.removeAttr("checked");
	    }
        
        arrInp.bind("click", function() {
            var inp = $(this);
            var numChecked = arrInp.filter(":checked").length;
            
            if (numChecked <= unitCount) {
                if (inp.is(":checked")) {
                    for (var c = 0; c < unitCount; c++) {
                        if (arrSelUnits[c] == undefined) {
                            arrSelUnits[c] = inp.val();
                            $("#ph_"+ inp.val()).html(arrSelPackages[c]);
                            break;
                        }
                    }    
                }
                else {
                    for (var c = 0; c < unitCount; c++) {
                        if (arrSelUnits[c] == inp.val()) {
                            arrSelUnits[c] = undefined;
                            $("#ph_"+ inp.val()).html("");
                            break;
                        }
                    }   
                    
                }
                //alert(arrSelUnits.toString());
                if (numChecked == unitCount) {
                    arrInp.filter(":not(:checked)").attr("disabled", "disabled");
                }
                else {
                    arrInp.removeAttr("disabled");
                }
            }
            
        });
    }
    else {
        arrInp = $(".streetNum input:radio");
        arrInp.bind("click", function() {
            var inp = $(this);
            arrSelUnits[0] = inp.val();
            //alert(arrSelUnits.toString());
        });
    }
}


function setUnit(unitCount) {
    if ($(".streetNum input.selunit").filter(":checked").length == unitCount) { 
        var href = "Default.aspx?state=3&units="+ arrSelUnits.toString();
        location.href = href;
        $("#dialog").removeClass("derror");
    }
    else {
        alert("Vælg venligst "+ unitCount + " "+ (unitCount > 1 ? "enheder" : "enhed"));   
        $("#dialog").addClass("derror");
    }
}


/*** VIEW 3 ***/

function accessories() {

    setstate(4);
    bookingsubmit();
    
}


/*** VIEW 4 ***/


function activities() {
    var proceed = true;
    var errmsg = "";
    
    $("select.selTime").each(function() {
        var arrParams = $(this).attr("id").split("_");
        var actType = arrParams[0];
        var selDate = arrParams[2];
        var totalPersons = 0;
        
        $("input."+ actType +"_inp_"+ selDate).each(function() {
            totalPersons += str2int($(this).val());
        });
        if (totalPersons > 0) {
            if ($(this).val() == "0") {
                errmsg += "Vælg venligst et tidspunkt for arrangementet d. "+ selDate +"\n";
                proceed = false;
            }
            else {
                 var objSelected = $("select#"+ $(this).attr("id") +" option:selected");
                 var avail = str2int(objSelected.attr("id").split("_")[3]);
                 if (totalPersons > avail) {
                    errmsg += "Antallet af tilmeldinger til arrangementet d. "+ selDate +" overstiger antallet af ledige pladser\n";
                    proceed = false;
                 }
                 var adults = $("input#"+ actType +"_inpAdults_"+ selDate);
                 if (!str2int(adults.val()) > 0) {
                    errmsg += "Der skal tilmeldes mindst 1 voksen til arrangement d. "+ selDate;
                    proceed = false;
                 }
                 
            }
        } 
    });
    
    if (proceed) {
        $("#dialog").removeClass("derror");
    }
    else {
        $("#dialog").addClass("derror");
        alert(errmsg);
        return false;
    }
    
    setstate(5);
    bookingsubmit(); 
}

function updateprice(v, p, o) {
    var num = (parseInt(v) * p);
    document.getElementById(o).innerHTML = "DKK " + formatCurrency(num.toFixed(2));
}

function updateActAvail(objSel) {
    var objSelect = $(objSel);
    var timeStr = objSelect.val();
    var objSelected = $("select#"+ objSelect.attr("id") +" option:selected");
    var arrParams = objSelected.attr("id").split("_");
    var actType = arrParams[0];
    var dateStr = arrParams[2];
    var avail = arrParams[3];
    var spanAvailNum = $("#"+ actType +"_spanAvailNum_"+dateStr);
    var spanAvail = spanAvailNum.parents("span.spanAvail:first"); 
    if (timeStr != "0") {
        spanAvailNum.html(avail);
        spanAvail.css("visibility", "visible");
    }
    else {
        spanAvail.css("visibility", "hidden");
        spanAvailNum.html("00");
    }
    return false;
}

function updateActPrice(obj) {
    var arrParams = $(obj).attr("id").split("_");
    var actType = arrParams[0];
    var dateStr = arrParams[2];
    var babyCount = str2int($("input#"+ actType +"_inpBabies_"+ dateStr).val());
    var childCount = str2int($("input#"+ actType +"_inpChildren_"+ dateStr).val());
    var adultCount = str2int($("input#"+ actType +"_inpAdults_"+ dateStr).val());
    var babyPrice = str2int($("input#"+ actType +"_babyPrice").val());
    var childPrice = str2int($("input#"+ actType +"_childPrice").val());
    var adultPrice = str2int($("input#"+ actType +"_adultPrice").val());
    var sum = (babyCount * babyPrice) + (childCount * childPrice) + (adultCount * adultPrice);
    var spanPrice = $("span#"+ actType +"_spanPrice_"+ dateStr);
    spanPrice.html(formatCurrency(sum.toFixed(2)));
    
    var totalPrice = 0;
    var spanTotalPrice = $("span#"+ actType +"_spanTotalPrice");
    $("span.spanPrice").each(function() {
        var thisPrice = str2float($(this).html().replace(".", "").replace(",", "."));
        totalPrice += thisPrice;
    });
    spanTotalPrice.html(formatCurrency(totalPrice.toFixed(2)));
    
    var inpPageSum = $("input#"+ actType +"_pageSum");
    var oldPageSum = str2float(inpPageSum.val());
    var newPageSum = oldPageSum + totalPrice;
    var spanPageSum = $("span#pageSum");
    spanPageSum.html(formatCurrency(newPageSum.toFixed(2)));
    
    return false;
}

/*** VIEW 5 ***/

function customer() {
    var errmsg = "";

    var _form = document.forms[0];

    if (_form.firstname.value == "") {
        errmsg += "Indtast venligst et fornavn\n";
    }
    if (_form.lastname.value == "") {
        errmsg += "Indtast venligst et efternavn\n";
    }
    if (_form.address.value == "") {
        errmsg += "Indtast venligst en adresse\n";
    }

    if (_form.postcode.value == "") {
        errmsg += "Indtast venligst et postnr.\n";
    }

    if (_form.city.value == "") {
        errmsg += "Indtast venligst en by\n";
    }

    if (_form.countryid.value == "") {
        errmsg += "Indtast venligst et land\n";
    }

    if (_form.tel.value == "" && _form.mob.value == "") {
        errmsg += "Indtast venligst et telefonnummer eller et mobilnummer\n";
    }

    if (_form.email.value == "") {
        errmsg += "Indtast venligst en email-adresse\n";
    }
    else if(! isEmail(_form.email.value)) {
        errmsg += "Indtast venligst en gyldig email-adresse\n";
    }

    if (!_form.conditions.checked) {
        errmsg += "Du skal acceptere handelsbetingelserne";
    }

    if (errmsg.length > 0) {
        $("#dialog").addClass("derror");
        alert(errmsg);
        return false;
    }
    else {
        $("#dialog").removeClass("derror");
    }
    
    setstate(6);
    bookingsubmit();
}

function isEmail(s) {
    var rx = /^[a-z0-9\-_\.]*[a-z0-9\-_]@([a-z0-9\-\.])+\.[a-z]{2,4}$/i;
    return s.match(rx);
}




/*** VIEW 6 ***/






/***** CHOOSE PLACE ******/


function initTabs() {
	var oA = $(".tab a");
	oA.bind("click", function() {
		var objA = $(this);
		var objParent = objA.parent(".tab:first");
		var tId = objA.attr("href").substring(1);

		objParent.addClass("selected");
		objParent.siblings(".tab").removeClass("selected");

		$("div.chooseplacecontent").each(function() {
			$(this).css("display", ($(this).attr("id") == tId ? "block" : "none"));
		});

		return false;
	});

	returnFalseForSafari(oA);
}

function returnFalseForSafari(obj) {
	if ($.browser.safari && ($.browser.version.substr(0, 1) == "3")) {
		$.each(obj, function() {
			this.onclick = function() { return false; }
		});
	}
}