﻿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=800, height=600, 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 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();
                    }
                });
            });
            //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] );
                });
            });
        });
    }
};

// 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");
        });
    }
};

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();
    //googleMaps.init();
	if ($.hasFlashPlayer) {
	    var $flashContainer = $('#flash-container');
	    if($flashContainer.length > 0) {
		    $('#contentHeaderContainer a:first').hide(); // hide the image
		    $flashContainer.flash({
			    swf: $flashContainer.attr('title'),
			    width: 770,
			    height:300
			     });
		}
	}
});