///<reference path="/scripts/jquery-1.6.2-vsdoc.js" />
var pageTracker;

$(document).ready(init);

if (top.location != self.location) {
    top.location = self.location.href
}

function init() {
    if (typeof (mapLocation) != "undefined")
        initMaps();

    RegisterGoogleAnalytics();
    initToggleHeaderImages();
    initWeatherWidgets();
    initReviewWidgets();
    initHotelImageToggle();
    initDatePickers();

    addValidation();

    $(".date").datepicker({
        changeMonth: true,
        changeYear: true,
        showOn: "both",
        buttonImage: "/gfx/calendarIcon.png",
        buttonImageOnly: true,
        minDate: 0
    });
}

function initWeatherWidgets() {
    if (document.getElementById("wrapper-FDdn") != null) {
        addScriptToHeader('http://www.vackertvader.se/weather/widget_request/2513240?bgcolor=ffffff&border=c4c3c3&days=2&key=-FDdn&maxtemp=yes&size=160v3x&textcolor=363636&wind=no');
    }
    if ($("#c_22527a8c1d7168d6b4a086ad4bb034a6").length > 0) {
        addScriptToHeader('http://www.klart.se/widget/widget_loader/22527a8c1d7168d6b4a086ad4bb034a6');
    }
    if ($("#c_5fb227a6dd2936e9f5b4e663a7e05722").length > 0) {
        addScriptToHeader('http://www.klart.se/widget/widget_loader/5fb227a6dd2936e9f5b4e663a7e05722');
    }
    if ($("#c_c22d3eb3213b9225e689599c7a476322").length > 0) {
        addScriptToHeader('http://www.klart.se/widget/widget_loader/c22d3eb3213b9225e689599c7a476322');
    }
    if ($("#c_50c8169eb70401ca3ae41f5052e4cd0c").length > 0) {
        addScriptToHeader('http://www.klart.se/widget/widget_loader/50c8169eb70401ca3ae41f5052e4cd0c');
    }
    if ($("#c_9919453030cc11f8d403645687671fb6").length > 0) {
        addScriptToHeader('http://www.klart.se/widget/widget_loader/9919453030cc11f8d403645687671fb6');
    }
    if ($("#c_401b8b3602c29fb7475dd5d1ed2be8c9").length > 0) {
        addScriptToHeader('http://www.klart.se/widget/widget_loader/401b8b3602c29fb7475dd5d1ed2be8c9');
    }
    if ($("#c_39a77faa913ecf67516eb926841a3d5a").length > 0) {
        addScriptToHeader('http://www.klart.se/widget/widget_loader/39a77faa913ecf67516eb926841a3d5a');
    }
    if ($("#c_49257996d703a6016b5f76bb36982dcd").length > 0) {
        addScriptToHeader('http://www.klart.se/widget/widget_loader/49257996d703a6016b5f76bb36982dcd');
    }
}

function initReviewWidgets() {
    //svenska badge hotellet rekommenderat
    if ($("#TA_rated801").length > 0) {
        addScriptToHeader('www.jscache.com/wejs?wtype=rated&uniq=801&locationId=499979&lang=sv', $("#TA_rated801"));
    }

    //engelska badge recommended  
    if ($("#TTA_rated854").length > 0) {
        addScriptToHeader('http://www.jscache.com/wejs?wtype=rated&amp;uniq=854&amp;locationId=499979&amp;lang=en_UK', $("#TTA_rated854"));
    }

    //svenska omdömen utmärkt 
    if ($("#TA_excellent379").length > 0) {
        addScriptToHeader('http://www.jscache.com/wejs?wtype=excellent&amp;uniq=379&amp;locationId=499979&amp;lang=sv');
    }

    //engelska omdömen utmärkt 
    if ($("#TA_excellent785").length > 0) {
        addScriptToHeader('http://www.jscache.com/wejs?wtype=excellent&amp;uniq=785&amp;locationId=499979&amp;lang=en_US');
    }

    //engelska reviews 
    if ($("#TA_selfserveprop454").length > 0) {
        addScriptToHeader('http://www.jscache.com/wejs?wtype=selfserveprop&amp;uniq=454&amp;locationId=499979&amp;lang=en_US&amp;rating=true&amp;nreviews=5&amp;writereviewlink=true&amp;popIdx=true&amp;iswide=false&amp;linkt=2');
    }

    //svenska reviews
    if ($("#TA_selfserveprop739").length > 0) {
        addScriptToHeader('http://www.jscache.com/wejs?wtype=selfserveprop&amp;uniq=739&amp;locationId=499979&amp;lang=sv&amp;rating=true&amp;nreviews=5&amp;writereviewlink=true&amp;popIdx=true&amp;iswide=false&amp;linkt=1');
    }

    //engelska write review 
    if ($("#TA_cdswritereviewlg678").length > 0) {
        addScriptToHeader('http://www.jscache.com/wejs?wtype=cdswritereviewlg&amp;uniq=678&amp;locationId=499979&amp;lang=en_US');
    }

    //svenska skriv omdöme 
    if ($("#TA_cdswritereviewlg176").length > 0) {
        addScriptToHeader('http://www.jscache.com/wejs?wtype=cdswritereviewlg&amp;uniq=176&amp;locationId=499979&amp;lang=sv');
    }
}

function addScriptToHeader(scriptUrl, referenceElement) {
    var newScript = document.createElement('script');
    newScript.type = 'text/javascript';
    newScript.src = scriptUrl;

    if (referenceElement != null) {
        referenceElement.after(newScript);
    }
    else {
        var headID = document.getElementsByTagName("head")[0];
        headID.appendChild(newScript);
    }
}

function openGalleryImage(img) {
    var p = img.src;
    var lp = p.replace("thumbnails", "images");

}

function initMaps() {
    var mapCanvas = document.getElementById("map_canvas");
    map = new GMap2(mapCanvas);

    if (typeof (mapType) == "undefined") mapType = G_HYBRID_MAP;
    if (typeof (zoomLevel) == "undefined") zoomLevel = 14;

    map.setCenter(mapLocation, zoomLevel, mapType);
    map.setUIToDefault();

    if (markers != "") {
        var marks = markers.split(';');
        for (var i = 0; i < marks.length; i++) {
            var info = marks[i].split(',');
            var point = new GLatLng(info[0], info[1]);

            map.addOverlay(createMarker(point, info[2]));
        }
    }

    if (typeof (markerArray) != "undefined") {
        for (var i = 0; i < markerArray.length; i++) {
            map.addOverlay(createMarker(markerArray[i].mapPointMarker, markerArray[i].info));
        }
    }
}

function createMarker(point, html) {
    var marker = new GMarker(point);
    GEvent.addListener(marker, "click", function () {
        marker.openInfoWindowHtml(html);
    });
    return marker;
}

var MapMarker = function (lat, lon, title, text) {
    this.mapPointMarker = new GLatLng(lat, lon);
    this.info = "<h2>" + title + "</h2>" + text;
}

function RegisterGoogleAnalytics() {
    pageTracker = _gat._getTracker('UA-1240728-1');
    pageTracker._initData();
    pageTracker._trackPageview();

    if (typeof LogSale == 'function') {
        LogSale();
    }
}

function initToggleHeaderImages() {
    var src = getImageUrl();
    InsertImage(src);
    setTimeout("fadeInImage()", 5000);
}

function preloadImage() {
    var src = getImageUrl();
    InsertImage(src);
    setTimeout("fadeInImage()", 5000);
}

function InsertImage(src) {
    $("<img src=\"" + src + "\" class=\"topbackground\" />").insertBefore(".topbackground");
}

function getImageUrl() {
    var randomnumber = Math.floor(Math.random() * 17) + 1;
    if (randomnumber < 10) randomnumber = "0" + randomnumber;
    return "http://www.hostalsanmiguel.com/images/webtop/topfoto_" + randomnumber + ".jpg";
}

function fadeInImage() {
    $(".topbackground:nth-child(2)").fadeOut(900, function () {
        $(".topbackground:nth-child(2)").remove();
        preloadImage();
    });
}

function initHotelImageToggle() {
    $(".relbox .imgsmall").mouseenter(function () {
        var img = $(this).attr("src");
        $(".relbox .imglarge").attr("src", img);
    });
}

function initDatePickers() {
    $.datepicker.setDefaults($.datepicker.regional["sv"]);
    $(".searchavail *[id$='startDate']").datepicker({
        changeMonth: true,
        changeYear: true,
        showOn: "both",
        buttonImage: "/gfx/calendarIcon.png",
        buttonImageOnly: true,
        minDate: 0,
        onSelect: function (dateText, inst) { handleChangeStartDate(); }
    });
    $(".searchavail *[id$='endDate']").datepicker({
        changeMonth: true,
        changeYear: true,
        showOn: "both",
        buttonImage: "/gfx/calendarIcon.png",
        buttonImageOnly: true,
        minDate: 1,
        onSelect: function (dateText, inst) { handleChangeEndDate(); }
    });
    $(".searchavail *[id$='startDate']").blur(handleChangeStartDate);
    $(".searchavail *[id$='endDate']").blur(handleChangeEndDate);

    $(".resultcontent").each(function () {
        var primHeight = $(this).find(".primarycontent").height();
        var relHeight = $(this).find(".relatedcontent").height();

        var diff = relHeight - primHeight;
        if (diff >= 100) diff = 100;
        else if (diff < 0) diff = 0;

        if (diff > 0) {
            $(this).height(relHeight - diff);
        }
    });
}

function handleChangeStartDate() {
    var dateIn = $("*[id$='startDate']").datepicker('getDate');
    var dateOut = $("*[id$='endDate']").datepicker('getDate');
    if (dateIn >= dateOut) {
        var nextDate = dateIn.getDate() + 7;
        dateOut = dateIn;
        dateOut.setDate(nextDate);
        $("input[id$='endDate']").val($.datepicker.formatDate('yy-mm-dd', dateOut));
    }
}

function handleChangeEndDate() {
    var dateIn = $("*[id$='startDate']").datepicker('getDate');
    var dateOut = $("*[id$='endDate']").datepicker('getDate');
    if (dateIn >= dateOut) {
        var nextDate = dateOut.getDate() - 7;
        dateIn = dateOut;
        dateIn.setDate(nextDate);
        $("input[id$='startDate']").val($.datepicker.formatDate('yy-mm-dd', dateIn));
    }
}

function addValidation() {
    $(".bokningssammanfattning input[id$='tbFirstName']").blur(validateRequiredField);
    $(".bokningssammanfattning input[id$='tbLastName']").blur(validateRequiredField);
    $(".bokningssammanfattning input[id$='tbPhone']").blur(validateRequiredNumberField);
    $(".bokningssammanfattning input[id$='tbMail']").blur(validateRequiredEmailField);
    $(".bokningssammanfattning input[id$='tbMail2']").blur(validateRequiredEmail2Field);
    $(".bokningssammanfattning input[id$='tbDiscountCode']").blur(validateDiscountCodeField);
    $(".bokningssammanfattning *[id$='acceptPolicy']").change(validateAcceptPolicy);
    $(".bokningssammanfattning input[id$='Next']").click(validateAllFields);
}

function validateRequiredField() {
    var value = $(this).val();
    var regex = /^[\wåáéíóöäëiöúàèììù -]{2,30}$/i; ///^[a-zåäö ]{3,30}$/ig;
    setValid(value != '' && regex.test(value), $(this));
}

function validateRequiredNumberField() {
    var value = $(this).val();
    var regex = /^\+?[0-9- ]{5,30}$/g;
    setValid(regex.test(value), $(this));
}

function validateRequiredEmailField() {
    var value = $(this).val();
    var regex = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/gi;
    setValid(regex.test(value), $(this));
}

function validateRequiredEmail2Field() {
    var value = $(this).val();
    var compareValue = $(".bokningssammanfattning *[id$='tbMail']").val();
    setValid(value != '' && value == compareValue, $(this));
}

function validateDiscountCodeField() {
    var isChecked = $(".bokningssammanfattning *[id$='CheckboxDiscount']").attr('checked');
    if (!isChecked) {
        $(this).removeClass("invalid");
        $(this).removeClass("valid");
        return;
    }

    var elm = $(this);
    var value = elm.val();

    $.ajax({
        url: "/Services/DiscountCode.ashx",
        type: 'POST',
        data: { 'code': value },
        success: function (data, status, jqxhr) {
            setValid(data == 'True', elm);
        },
        error: function (data, status, jqxhr) {
            //alert("error " + status);
        }
    });
}

function validateAcceptPolicy() {
    var cb = $(".bokningssammanfattning *[id$='acceptPolicy']");
    var isChecked = cb.attr('checked');
    var lb = cb.parent();  // cb.next("label");
    if (isChecked) {
        lb.removeClass("invalid");
        lb.addClass("valid");
    }
    else {
        lb.addClass("invalid");
        lb.removeClass("valid");
    }
}

function setValid(isValid, elm) {
    if (isValid) {
        elm.addClass("valid").removeClass("invalid");
    }
    else {
        elm.addClass("invalid").removeClass("valid");
    }
}

function validateAllFields() {
    var elm = $(this);
    validateAcceptPolicy();
    elm.closest('table').find('input[type="text"]').blur();
    if (elm.closest('table').find('.invalid').length > 0) {
        return false;
    }
    return true;
}

