﻿var layers = {
    createInfoLayer: function (settings){
        settings = $.extend({
			top: 	0, 		
			left:   0,
			name:   "",
			action: "",
			dfType: ""
		}, settings);
		
		var layer = $("#mypages-layer");
		//set values
        $(layer).find("span.df-name").text(settings.name);
        $(layer).find("span.df-type").text(settings.dfType);
        $(layer).find("span.df-action").text(settings.action);
        //positioning
        $(layer).css({left: (settings.left - $(layer).width()),top: settings.top});
        $(layer).fadeIn(500,function (){
            //Show the layer
        });
    },
    createFeedbackLayer: function (settings){
        settings = $.extend({
            top: 	0, 		
			left:   0,
            name: "",
            description: ""
        },settings);
        var layer = $("#feedback-layer");
		//set values
        $(layer).find("h2").text(settings.name);
        $(layer).find("p").text(settings.description);
        //positioning
        $(layer).css({left: (settings.left),top: settings.top});
        $(layer).fadeIn(500,function (){
            //Show the layer
        });
    },
    createBookSeminarLayer: function (settings){
        settings = $.extend({
            top: 	0, 		
			left:   0,
            name: ""
        },settings);
        
        var layer = $("#bookSeminar-layer");
        formsHandler.resetRequired(layer);
        $(layer).find("#error-feedback").hide();
		//set values
             
        //positioning
        $(layer).css({left: (settings.left - $(layer).width()),top: settings.top});
        $(layer).fadeIn(500,function (){
            //Show the layer
        });
    },
    createBookMeetingLayer: function (settings){
        settings = $.extend({
            top: 	    0, 		
			left:       0,
			actionLink: "",
            name:       ""
        },settings);
        var layer = $("#bookMeeting-layer");
        formsHandler.resetRequired(layer);
        $(layer).find("#error-feedback").hide();
        //set values
        $(layer).find("span.contact-name").text(settings.name);
        $(layer).find("dl.layer-form dd a.book-meeting").attr("href",settings.actionLink);
        //positioning
        $(layer).css({left: (settings.left - $(layer).width()),top: settings.top});
        $(layer).fadeIn(500,function (){
            //Show the layer
        });
    },
    hideBookMeetingLayer : function (){
        var layer = $("#bookMeeting-layer");
        $(layer).fadeOut(500,function (){
            //alert("layer");
        });
    },
    hideBookSeminarLayer : function (){
        var layer = $("#bookSeminar-layer");
        $(layer).fadeOut(500,function (){
            //alert("layer");
        });
    },
    hideInfoLayer : function (){
        var layer = $("#mypages-layer");
        $(layer).fadeOut(500,function (){
            //alert("layer");
        });
    },
    hideFeedbackLayer : function (){
        var layer = $("#feedback-layer");
        $(layer).fadeOut(500,function (){
            //alert("layer");
        });
    }
};
var events = {
    init: function() {

        /*
        $("table.fnHightlight tr td:first-child").each(function(){
        $(this).addClass("first");
        });
        */
        $("table.fnHighlight tr").each(function() {
            $(this).hover(function() {
                $(this).addClass("highlight");
            },
                function() {
                    $(this).removeClass("highlight");
                }
            );
        });
        // Click handler that checks for args that should be executed
        $(".fnClick").each(function() {
            $(this).click(function(e) {
                e.preventDefault(); //cancel current event
                e.stopPropagation(); //stop bubbling
                if ($(this).hasClass("argSaveCompany")) {
                    $.getJSON($(this).attr("href") + "&format=json", function(data) {
                        layers.createInfoLayer({
					        top:    e.pageY,
					        left:   e.pageX,
					        name:   data.Item.Name,
					        action:   data.Item.ActionDescription,
					        dfType: data.Item.DFType
				        });
                    });
                }
                else if ($(this).hasClass("argDeleteCompany")) {
                    var elm = $(this);
                    $.getJSON($(this).attr("href") + "&format=json", function(data) {
                        $(elm).parents("tr").remove();
                    });
                }
                else if ($(this).hasClass("argSaveProduct")) {
                    $.getJSON($(this).attr("href") + "&format=json", function(data) {
                        layers.createInfoLayer({
					        top:    e.pageY,
					        left:   e.pageX,
					        name:   data.Item.Name,
					        action:   data.Item.ActionDescription,
					        dfType: data.Item.DFType
				        });
                    });
                }
                else if ($(this).hasClass("argDeleteProduct")) {
                    var elm = $(this);
                    $.getJSON($(this).attr("href") + "&format=json", function(data) {
                        $(elm).parents("tr").remove();
                    });
                }
                else if ($(this).hasClass("argSaveContact")) {
                    $.getJSON($(this).attr("href") + "&format=json", function(data) {
                        layers.createInfoLayer({
					        top:    e.pageY,
					        left:   e.pageX,
					        name:   data.Item.Name,
					        action:   data.Item.ActionDescription,
					        dfType: data.Item.DFType
				        });
                    });
                }
                else if ($(this).hasClass("argDeleteContact")) {
                    var elm = $(this);
                    $.getJSON($(this).attr("href") + "&format=json", function(data) {
                        $(elm).parents("tr").remove();
                    });
                }
                else if ($(this).hasClass("argSaveSeminar")) {
                    $.getJSON($(this).attr("href") + "&format=json", function(data) {
                        layers.createInfoLayer({
					        top:    e.pageY,
					        left:   e.pageX,
					        name:   data.Item.Name,
					        action:   data.Item.ActionDescription,
					        dfType: data.Item.DFType
				        });
                    });
                }
                else if ($(this).hasClass("argDeleteSeminar")) {
                    var elm = $(this);
                    $.getJSON($(this).attr("href") + "&format=json", function(data) {
                        $(elm).parents("tr").remove();
                    });
                }
                else if ($(this).hasClass("argShowSeminarBooking")) {
                    layers.createBookSeminarLayer({
			            top:    e.pageY,
			            left:   e.pageX,
			            name:   "test",
			            action:   "action",
			            dfType: "type"
		            });
                }
                else if ($(this).hasClass("argSaveSeminarBooking")) {
                    
                    /*if($("#txtSbFname").val() == "" || $("#txtSbLname").val() == "" || $("#txtSbEmail").val() == ""){
                        //Todo- markup fields
                        alert("Alla obligatoriska fält är inte ifyllda.");
                        return false;
                    }*/
                                      
                    //Create the post parameters
                    var seminarBooking = {
                        txtSbFname:            $("#txtSbFname").val(),
                        txtSbLname:            $("#txtSbLname").val(),
                        txtSbCompany:          $("#txtSbCompany").val(),
                        txtSbAddress:          $("#txtSbAddress").val(),
                        txtSbPostalCode:       $("#txtSbPostalCode").val(),
                        txtSbCity:             $("#txtSbCity").val(),
                        txtSbCountry:          $("#txtSbCountry").val(),
                        txtSbPosition:         $("#txtSbPosition").val(),
                        txtSbPhone:            $("#txtSbPhone").val(),
                        txtSbMobile:           $("#txtSbMobile").val(),
                        txtSbEmail:            $("#txtSbEmail").val(),
                        txtSbInvoiceAddress:   $("#txtSbInvoiceAddress").val(),
                        txtSbPostalAddress:    $("#txtSbPostalAddress").val(),
                        txtSbMessage:          $("#txtSbMessage").val()
                    }
                    $.post($(this).attr("href") + "&format=json",seminarBooking, function(data){
                        var layer = $("#bookSeminar-layer");
                        formsHandler.resetRequired(layer);
                        //Check for errors
                        if(data.Errors.length == 0){
                            //Create the info layer and show the feedback
                            layers.createFeedbackLayer({
					            top:    $(layer).css("top"),
					            left:   $(layer).css("left"),
					            name:   data.Item.Name,
					            description:   data.Item.ActionDescription
					        });
                            //Hide the bookinglayer
                            layers.hideBookSeminarLayer();
                            
                            //automatic hide infolayer after 5 sec
                            setTimeout(function (){
                                layers.hideFeedbackLayer();
                            },5000);
                        }else{
                            formsHandler.markRequired(data);
                        }
                    }, "json");
                }
                else if ($(this).hasClass("argDeleteSeminarBooking")) {
                    var elm = $(this);
                    $.getJSON($(this).attr("href") + "&format=json", function(data) {
                        $(elm).parents("tr").remove();
                    });
                }
                else if ($(this).hasClass("argShowMeetingBooking")) {
                    layers.createBookMeetingLayer({
			            top:    e.pageY,
			            left:   e.pageX,
			            name:   $(this).parents("tr").find("td").eq(0).text(),
			            actionLink: $(this).attr("href"),
			            action:   "action",
			            dfType: "type"
		            });
		        }
                else if ($(this).hasClass("argSaveMeetingBooking")) {
                    //Create the post parameters
                    var meetingBooking = {
                        txtBmFname:            $("#txtBmFname").val(),
                        txtBmLname:            $("#txtBmLname").val(),
                        txtBmCompany:          $("#txtBmCompany").val(),
                        txtBmPosition:         $("#txtBmPosition").val(),
                        txtBmPhone:            $("#txtBmPhone").val(),
                        txtBmEmail:            $("#txtBmEmail").val(),
                        txtBmTimeHour:         $("#txtBmTimeHour").val(),
                        txtBmTimeMin:          $("#txtBmTimeMin").val(),
                        txtBmDateYear:         $("#txtBmDateYear").val(),
                        txtBmDateMonth:        $("#txtBmDateMonth").val(),
                        txtBmDateDay:          $("#txtBmDateDay").val(),
                        txtBmMessage:          $("#txtBmDescription").val()
                    }
                    $.post($(this).attr("href") + "&format=json",meetingBooking, function(data){
                        var layer = $("#bookMeeting-layer");
                        formsHandler.resetRequired(layer);
                        //Check for errors
                       if(data.Errors.length == 0){
                            //Create the info layer and show the feedback
                            layers.createFeedbackLayer({
					            top:    $(layer).css("top"),
					            left:   $(layer).css("left"),
					            name:   data.Item.Name,
					            description:   data.Item.ActionDescription
					        });
                            //Hide the bookinglayer
                            layers.hideBookMeetingLayer();
                            
                            //automatic hide infolayer after 5 sec
                            setTimeout(function (){
                                layers.hideFeedbackLayer();
                            },5000);
                        }else{
                            formsHandler.markRequired(data);
                        }
                    }, "json");
                }
                else if ($(this).hasClass("argSaveActivity")) {
                    $.getJSON($(this).attr("href") + "&format=json", function(data) {
                        layers.createInfoLayer({
					        top:    e.pageY,
					        left:   e.pageX,
					        name:   data.Item.Name,
					        action:   data.Item.ActionDescription,
					        dfType: data.Item.DFType
				        });
                    });
                }
                else if ($(this).hasClass("argDeleteActivity")) {
                    var elm = $(this);
                    $.getJSON($(this).attr("href") + "&format=json", function(data) {
                        $(elm).parents("tr").remove();
                    });
                }
                else if ($(this).hasClass("argCloseLayer") && $(this).hasClass("argBookSeminar")) {
                    layers.hideBookSeminarLayer();
                }
                else if ($(this).hasClass("argCloseLayer") && $(this).hasClass("argBookMeeting")) {
                    layers.hideBookMeetingLayer();
                }
                else if ($(this).hasClass("argFeedback")) {
                    layers.hideFeedbackLayer();
                }
                else if ($(this).hasClass("argCloseLayer")) {
                    layers.hideInfoLayer();
                }
                else if ($(this).hasClass("argTellAFriend")) {
                    alert("TELL A FRIEND: " + $(this).attr("title"));
                }
                else if ($(this).hasClass("argShowMap")) {
                    var win=window.open($(this).attr("href"), 'mappen', 'width=1035, height=745, resizable=yes, scrollbars=yes, top=0, left=0');
                    win.focus();
                }
                else if ($(this).hasClass("argPrint")) {
                    window.print();
                }
                else {
                    alert("Not implemented: \nclasses: " + $(this).attr("class"));
                }
            });
        });
        $("table.fnSwitchInformation tr").each(function() {
            $(this).click(function(e) {
                e.preventDefault();
                var clickElm = $(this);
                // remove selected class for all others
                clickElm.siblings("tr").removeClass("selected");
                // select current
                clickElm.addClass("selected");
                var updateElm = $("#dynamicData");
                if ($(updateElm).hasClass("argProduct")) {
                    $("#dynamicData").fadeOut(500, function() {
                        updateElm.find("h2").text(clickElm.find("td:first a").text());
                        updateElm.find("p.description").html(clickElm.find("td:first p").html());
                        updateElm.find("p.productfiles").html(clickElm.find("p.productfiles-list").html());
                        updateElm.find("img.product").attr("src", clickElm.find("img.product").attr("src"));
                        updateElm.find("img.product").attr("alt", clickElm.find("img.product").attr("alt"));
                        if (clickElm.find("img.product-large").attr("src").length > 0) {
                            updateElm.find("a.LargeImage").attr("href", clickElm.find("img.product-large").attr("src"));
                            updateElm.find("a.LargeImage").attr("title", clickElm.find("img.product-large").attr("alt"));
                            updateElm.find("p.caption").show();
                        }
                        else {
                            updateElm.find("p.caption").hide();
                        }
                        updateElm.fadeIn(500);
                    });
                }
                else if ($(updateElm).hasClass("argSpeaker")) {
                    //alert("update speaker information ");
                    updateElm.fadeOut(500, function() {
                        updateElm.find("h2 span.speaker-name").text(clickElm.find("td:first").text());
                        updateElm.find("h2 span.speaker-role").text(clickElm.find("td span.speaker-role").text());
                        updateElm.find("img.photo").attr("src", clickElm.find("img.photo").attr("src"));
                        updateElm.find("p.description").text(clickElm.find("td p").text());
                        updateElm.find("span.speaker-company").text(clickElm.find("td span.speaker-company").text());
                        updateElm.find("span.speaker-locality").text(clickElm.find("td span.speaker-locality").text());
                        updateElm.find("a.speaker-email").text(clickElm.find("td span.speaker-email").text());
                        updateElm.find("a.speaker-email").attr("href","mailto:"+clickElm.find("td span.speaker-email").text());
                        updateElm.fadeIn(500);
                    });
                }
            });
        });
        /* set height of floating columns to max height of the ones that exists */
        /* since this has to be done for each row this function is moved to codebehind */
        var maxHeight = 0;
        $("ul.floating-columns li.categoryOLD").each(function() {
            if ($(this).innerHeight() > maxHeight) {
                maxHeight = $(this).innerHeight();
            }
        });
        $("ul.floating-columns li.categoryOLD").each(function() {
            $(this).css("height", maxHeight + "px");
        });
    }
};
var menu = {
    initExhibitMenu: function() {
        if ($("a.fnSwitchPage").length > 0) {
            var aName = "#page-1";
            //get hash link from querystring
            if (location.href.indexOf("#") != -1) {
                aName = location.href.substr(location.href.indexOf("#"));
            }
            var active = $("ul li a.fnSwitchPage[href='" + aName + "']");
            if (active.length < 1) {
                active = $("ul li a.fnSwitchPage[href='#page-1']");
            }
            $("a.fnSwitchPage").each(function() {
                var linkNav = $(this);
                if (linkNav.attr("href") != $(active).attr("href")) {
                    $(linkNav.attr("href")).hide();
                }
                else {
                    $(active).parent("li").addClass("active");
                }
                linkNav.click(function(e) {
                    e.preventDefault();
                    if ($(this).attr("href") !== $(active).attr("href")) {
                        //find li menu element and set active class
                        $("li a[href='" + $(this).attr("href") + "']").parent("li").addClass("active");
                        $(active.attr("href")).fadeOut(500, function() {
                            $(linkNav.attr("href")).fadeIn(500);
                        });
                        //remove active class from the other menu items
                        $("li a[href!='" + $(this).attr("href") + "']").parent("li").removeClass("active");
                        active = $(this);
                    }
                });
            });
        }
    }
};

var columnsAdjuster = {
    init: function() {
        var tmp;
        var max = 0;

        //loop all seminar categories
        //var columnHeight = [];
        $("div.seminarCategory ul.seminarCategory").each(function(index) {
            var columnHeight = [];
            var columnWidth = 0;
            var itemsDay = 0;
            $(this).children("li").each(function() {
                $(this).find("ul li").each(function(ind) {
                    if (typeof (columnHeight[ind]) == "undefined") {
                        columnHeight[ind] = $(this).height();
                    }
                    else if (columnHeight[ind] < $(this).height()) {
                        columnHeight[ind] = $(this).height();
                    }
                    columnWidth = $(this).width();
                });
            });
            //find out max items for category summary
            $("div.seminarCategory ul.seminarCategory").eq(index).children("li").each(function() {
                if ($(this).find("ul li").length > itemsDay) { itemsDay = $(this).find("ul li").length; }
            });
            //add empty li:s
            $("div.seminarCategory ul.seminarCategory").eq(index).find("li ul").each(function() {
                var c = $(this).children("li").length;
                if (c < itemsDay) {
                    for (var i = c; i < itemsDay; i++) {
                        $(this).append("<li>&#160;</li>");
                    }
                }
            });
            //set hight of the current seminar category
            $("div.seminarCategory ul.seminarCategory").eq(index).children("li").each(function(index) {
                $(this).find("ul li").each(function(ind) {
                    $(this).height(columnHeight[ind]);
                    $(this).width(columnWidth);
                });
            });
        });
    }
};

// Add events to form functions
var formsHandler = {
    init: function() {
        $("#searchTextPush").keypress(function(e) {
            if (e.keyCode == 13) {
                e.preventDefault();
                e.stopPropagation();
                utils.doSearch();
                return false;
            }
        });
        $("a#btnSearch").click(function(e) {
            e.preventDefault();
            utils.doSearch();
        });
    },
    markRequired: function(data) {
        var elmFeedback = $("#error-feedback");
        var ul = $(elmFeedback).find("ul");
        $(ul).find("li").replaceWith("");
        $(elmFeedback).show();
        //JSON Data containing Error element id and Error description
        $.each(data.Errors, function(i, item) {
            $("#" + item.ErrorElementId).addClass("required-missing");
            if (i === 0) {
                $("#" + item.ErrorElementId).focus();
            }
            $(ul).append("<li><label for=" + item.ErrorElementId + ">" + item.ErrorDescription + "</label></li>");
        });
    },
    resetRequired: function(wrapperElm) {
        $(wrapperElm).find(".required-missing").each(function(i) {
            $(this).removeClass("required-missing");
        });
    },

    ComputeSum: function(ctrlCount, ctrlNumberOf, maxLen, ctrlWarning, ctrlArea, ctrlTotalSum) {
        var count = document.getElementById(ctrlCount);
        var update = document.getElementById(ctrlNumberOf);
        var warning = document.getElementById(ctrlWarning);
        var area = document.getElementById(ctrlArea);
        var totalsum = document.getElementById(ctrlTotalSum);

        if ((count != null) && (update != null) && (warning != null) && (area != null)) {


            /*
            alert("count1:" + parseInt(count.value));
            alert("count2:" + isNaN(count.value));
            alert("update1:" + parseInt(update.value));
            alert("update2:" + isNaN(update.value));
            alert("max:" + maxLen);
            */
            var countInt = 0;
            if (count.value.length > 0 && !isNaN(count.value)) {
                //              alert("sätter countInt");
                countInt = parseInt(count.value);
            }

            var updateInt = 0;
            if (update.value.length > 0 && !isNaN(update.value)) {
                //                alert("sätter updateInt");
                updateInt = parseInt(update.value);
            }

            //            alert("countInt:" + countInt);
            //          alert("updateInt:" + updateInt);

            var yta = countInt * updateInt;
            //            alert("yta:" + yta);

            var pris = yta * maxLen;
            //            alert("pris:" + pris);

            warning.value = pris;
            area.value = yta;

            formsHandler.ComputeTotalSum("$tbSum", totalsum);
        }
    },

    ComputeExtendedSum: function(ctrlCount, ctrlNumberOf, arrMinMaxPrice, ctrlWarning, ctrlSquarePrice, ctrlSum) {
        var count = document.getElementById(ctrlCount);
        var update = document.getElementById(ctrlNumberOf);
        var warning = document.getElementById(ctrlWarning);
        var squareprice = document.getElementById(ctrlSquarePrice);
        var sum = document.getElementById(ctrlSum);

        if ((count != null) && (update != null) && (warning != null) && (squareprice != null) && (sum != null)) {


            /*
            alert("count1:" + parseInt(count.value));
            alert("count2:" + isNaN(count.value));
            alert("update1:" + parseInt(update.value));
            alert("update2:" + isNaN(update.value));
            alert("max:" + maxLen);
            */
            var countInt = 0;
            if (count.value.length > 0 && !isNaN(count.value)) {
                //              alert("sätter countInt");
                countInt = parseInt(count.value);
            }

            var updateInt = 0;
            if (update.value.length > 0 && !isNaN(update.value)) {
                //                alert("sätter updateInt");
                updateInt = parseInt(update.value);
            }

            //            alert("countInt:" + countInt);
            //          alert("updateInt:" + updateInt);

            var yta = countInt * updateInt;
            //     alert("yta:" + yta + ":   arrMinMaxPrice:" + arrMinMaxPrice);

            var rows = arrMinMaxPrice.split("§");
            var pricePerSquare = 0;
            for (i = 0; i < rows.length; i++) {
                var surfacePrice = rows[i].split("$");
                var surface = surfacePrice[0].split("£");
                var min = surface[0];
                var max = surface[1];
                var price = surfacePrice[1];
                //         alert("min:" + min + ":   max:" + max + ":   price:" + price);
                if (yta >= min && yta <= max) {
                    pricePerSquare = price;
                    break;
                }
            }

            var pris = yta * pricePerSquare;

            //            alert("pricePerSquare:" + pricePerSquare + ":   pris:" + pris + ":   yta:" + yta + ":   sum:" + pris);
            warning.value = yta;
            squareprice.value = pricePerSquare;
            sum.value = pris;
        }
    },

    ComputeTotalSum: function(ctrlName, ctrlTotalSum) {
        var totalSum = 0;
        for (i = 0; i < document.forms[0].elements.length; i++) {
            elm = document.forms[0].elements[i];
            if (elm.type == 'text') {
                var test = elm.name;
                if (test.indexOf(ctrlName) != -1) {
                    totalSum += parseInt(elm.value);
                }
            }
        }
        ctrlTotalSum.value = totalSum;
    }
};

var utils = {
    // do a search
    doSearch: function() {
        var searchTextPush = document.getElementById('searchTextPush');
        var frmSearch = document.getElementById('frmSearch');
        frmSearch.searchText.value = searchTextPush.value;
        frmSearch.submit();
    }
};

var calendar = {
	init: function() {
		$('#choosedCalendarEvent dl').hide();
		$('#choosedCalendarEvent dl:first').show();
		$('#latestCalendarEventsList li:first').addClass('calendarEventActive');
		$('#latestCalendarEventsList a').click(function(e) {
			e.preventDefault();
			$(this).parents('li:eq(0)').addClass('calendarEventActive').siblings().removeClass('calendarEventActive');
			$('#' + $(this).attr('class')).show().siblings().hide();
		});
	}
};

/*
* Execute when document is ready
*/
$(document).ready(function() {
    formsHandler.init();
    columnsAdjuster.init();
    events.init();
    menu.initExhibitMenu();
    calendar.init();
    $(".scrollable").scrollable();
});
