﻿$(function(){
	/*browser detect (customized and minified) */
	var a=navigator.userAgent.toLowerCase();$.browser.chrome=/chrome/.test(navigator.userAgent.toLowerCase());if($.browser.msie){$('body').addClass('ie');$('body').addClass('ie'+$.browser.version.substring(0,1))}if($.browser.chrome){$('body').addClass('chrome');a=a.substring(a.indexOf('chrome/')+7);a=a.substring(0,1);$('body').addClass('chrome'+a);$.browser.safari=false}if($.browser.safari){$('body').addClass('safari');a=a.substring(a.indexOf('version/')+8);a=a.substring(0,1);$('body').addClass('safari'+a)}if($.browser.mozilla){if(navigator.userAgent.toLowerCase().indexOf('firefox')!=-1){$('body').addClass('firefox');a=a.substring(a.indexOf('firefox/')+8);a=a.substring(0,1);$('body').addClass('firefox'+a)}else{$('body').addClass('mozilla')}}if($.browser.opera){$('body').addClass('opera')}	
});

var ShopFlow = {

	CurrentPageId: null,


    init: function() {

        /* Add overlay to checked addons */
        $(".addon .left-column input:checked").each(function() {
            ShopFlow.toogleClass($(this).parents(".addon"), "active");
        });

        /* Hook up click event to addon list */
        $(".addon .left-column input").click(function() {

            ShopFlow.toogleClass($(this).parents(".addon"), "active");
            ShopFlow.handleAddOns();
        });

        /* Bind AddOn Removers If there exists any */
        ShopFlow.bindAddonRemovers();
        
        ShopFlow.bindDataDeviceInputs();
    },


    handleAddOns: function() {
        var pageLinks = "";
        $(".addon .left-column input:checked").each(function() {
            pageLinks += $(this).val() + ",";
        });
        pageLinks = pageLinks.slice(0, -1)
        ShopFlow.MakeRequest(pageLinks);
    },

    ajaxError: function(XMLHttpRequest, textStatus, errorThrown) {

        alert(errorThrown);

    },

    /* [0] = Basket, [1] = AddonBoxChart, [2] = Popup */
    ajaxComplete: function(result) {

        var htmlContainer = result.split("¤¤¤¤");

        $("#right").html(htmlContainer[0]);
        $("#addon-control-container").html(htmlContainer[1]);
        $("#popup-container").html(htmlContainer[2]);

        ShopFlow.bindAddonRemovers();

    },

    bindAddonRemovers: function() {

        $(".removeAddon").click(function() {
            var checkBox = $(".addon .left-column input[value='" + $(this).attr("rel") + "']");
            $(checkBox).attr('checked', false);
            ShopFlow.toogleClass($(checkBox).parents(".addon"), "active");
            ShopFlow.handleAddOns();

        });


    },
    
    bindDataDeviceInputs: function(){
		$(".data-subscription-shopflow input").click(function(){
			var deviceId = $(this).val();
			ShopFlow.ChangeDevice(deviceId);
		});
    },


    MakeRequest: function(pageLinks) {

        $.ajax({
            type: "POST",
            url: "/templates/UtilityPages/AddonPickerAjax.aspx",
            data: "pageLinks=" + pageLinks,
            error: ShopFlow.ajaxError,
            success: ShopFlow.ajaxComplete
        });



    },

    ChangeSubscription: function() {

        var subscription = $(".sub-option:radio:checked").val();
        
        
        $.ajax({
            type: "POST",
            url: "/templates/UtilityPages/AddonPickerAjax.aspx",
            data: "subscriptionLink=" + subscription,
            error: ShopFlow.ajaxError,
            success: ShopFlow.ajaxComplete
        });

        Popcorn.Close();
    
    },

    ChangeDevice: function(deviceId) {
        $.ajax({
            type: "GET",
            url: "/templates/UtilityPages/BasketAjax.aspx",
            data: "deviceId=" + deviceId + "&rnd=" + Math.random() + "&id=" + ShopFlow.CurrentPageId,
            error: ShopFlow.ajaxError,
            success: function(result){
				$("#right").html(result);
            }
        });
    },



    /* Returns true if class where added and false if class where removed */
    toogleClass: function(element, className) {

        if (element.hasClass(className)) {
            element.removeClass(className);
            return false;
        }
        else {
            element.addClass(className);
            return true;
        }


    }

}

var FAQ = {

    Toggle: function(o) {
        var div = $(o).siblings('div:first');
        var visible = $(div).css("display");

        if (visible == "block") {
            $(o).removeClass("faq_active");
            $(o).parent().css("border-bottom", "1px solid #e3e3e3");
            $(div).hide("fast");
        }
        else {
            $(o).addClass("faq_active");
            $(o).parent().css("border-bottom", "1px solid #fff");
            $(div).show("fast");
        }
    }
}


var NewsTicker = {

    newsItem: null,
    newsItemCount: 0,

    text: "",
    itemIndex: 0,
    charIndex: 0,
    link: "",
    content: "",
    marker: null,

    scrollInterval: null,
    mainInterval: null,
    markerInterval: null,
    newsTickerObj: null,

    init: function() {

        NewsTicker.newsItem = $(".scrolling-newsitem");
        NewsTicker.newsItemCount = NewsTicker.newsItem.length;
        NewsTicker.newsTickerObj = $("#newsticker");

        NewsTicker.selectNewsItem();
        NewsTicker.mainInterval = setInterval("NewsTicker.selectNewsItem()", 6000);

    },

    selectNewsItem: function() {

        if (NewsTicker.markerInterval != null) {
            clearInterval(NewsTicker.markerInterval);
        }

        clearInterval(NewsTicker.scrollInterval);


        $(NewsTicker.newsTickerObj).empty();

        NewsTicker.content = $(NewsTicker.newsItem[NewsTicker.itemIndex]).val().split('¤');
        NewsTicker.text = NewsTicker.content[0];
        NewsTicker.charIndex = 0;
        //Reset click and cursor
        $(NewsTicker.newsTickerObj).css("cursor", "default");
        $(NewsTicker.newsTickerObj).attr("href", "javascript:void(0)");


        if (NewsTicker.content.length > 1) {
            NewsTicker.link = NewsTicker.content[1];
            $(NewsTicker.newsTickerObj).css("cursor", "pointer");
            $(NewsTicker.newsTickerObj).attr("href", NewsTicker.link);
        }


        NewsTicker.scrollInterval = setInterval("NewsTicker.scrollText()", 25);
    },

    scrollText: function() {

        if (NewsTicker.text.length > NewsTicker.charIndex) {
            $(NewsTicker.newsTickerObj).append(NewsTicker.text.charAt(NewsTicker.charIndex));
            NewsTicker.charIndex++;
        }
        else {
            if (NewsTicker.itemIndex == NewsTicker.newsItemCount - 1) {
                NewsTicker.itemIndex = 0;
            }
            else {
                NewsTicker.itemIndex++;
            }
            // Add the marker.
            $(NewsTicker.newsTickerObj).append("<span id='marker-span'>_</span>");
            NewsTicker.marker = $("#marker-span");
            NewsTicker.markerInterval = setInterval("NewsTicker.createMarker()", 150);
            clearInterval(NewsTicker.scrollInterval);

        }
    },


    createMarker: function() {

        if ($(NewsTicker.marker).is(":hidden"))
            $(NewsTicker.marker).show();
        else
            $(NewsTicker.marker).hide();
    }


}

var YoutubeModule = {
    ChangeMovieByIndex: function (movieIndex, levelIndex) {
        $('.' + levelIndex + ' #' + movieIndex).click();
        return false;
    },
    ChangeMovie: function (movieId, movieTitle, div, hash) {
        // $("#youtubeMovieTitle").html(movieTitle);
        div.parent().parent().siblings(".sectionHeader").children(".youtubeMovieTitle").html(movieTitle);
        div.siblings().removeClass("active");
        div.addClass("active");
        div.parent().siblings(".iframeYoutubeVideoPlayer").attr("src", "http://www.youtube.com/embed/" + movieId + "?hd=0&rel=0&amp;wmode=transparent");
        YoutubeModule.ChangeHash(hash);
        return false;
    },
    ChangeHash: function (href) {
        var hash = window.location.hash.replace('#', '');
        var values = hash.length > 0 ? hash.split(',') : new Array();

        var newValues = new Array();

        if (values.length > 0) {
            $.each(values, function () {
                if ((href.indexOf('movie') > -1 && this.indexOf('movie') == -1)) {
                    newValues.push(this);
                }
            });
        }

        newValues.push(href);

        window.location.hash = '#' + newValues.join(',');
    }
}

var Balloon = {
    Popup: function (text, top, left, element) {
        if (text != "") {
            if(element == null)
                element = $('body');
           element.append('<div id="balloon"><div class="balloon-content">' + text + '</div><div class="balloon-bottom"></div></div>');
            var btop = top - ($("#balloon").height() - 60);
            var bleft = left - 3;

            $('#balloon').offset({ top: btop, left: bleft });
            //$('#balloon').css({top: btop + 'px', left: bleft + 'px'});
        }
    },
    Destroy: function () {
        $('#balloon').remove();
    }
}

// Tell a friend functionality
var TellAFriend = {
	fields: ["#taf-email", "#taf-friend-email", "#taf-message"],
    defaultValues: new Array(),

    // Initialize by setting focus and blur functions + retrieving default values from html
    init: function() {
        for(var i in TellAFriend.fields){
            var field = $(TellAFriend.fields[i]);
            var defaultValue = field.val();
            TellAFriend.defaultValues[i] = defaultValue;
            
            field.bind("focus", {v:defaultValue}, function(e) {
                $(this).addClass("filled");
                if($(this).val() == e.data.v) {
                    $(this).val("");
                }
            }).bind("blur", {v:defaultValue}, function(e){
                if($(this).val() == "") {
                    $(this).removeClass("filled");
                    $(this).val(e.data.v);
                }
            });
        }
    },
    
    // Hide/show email or sharing module
    Toggle: function(o, contentId){
        var div = $(o).parent();
        div.addClass('active');
        var inactive = $(div).siblings();
        inactive.removeClass('active');
        
        $("#email-friend").hide();
        $("#share").hide();
        TellAFriend.Empty();
        $(contentId).show();
        return false;
    },
    
    // Send email
    Email : function() {
        if(!TellAFriend.Validate()){
            return false;
        }
        
        // Extract values from form
        var email = $("#taf-email").val();
        var friendEmail = $("#taf-friend-email").val();
        var url = $("#taf-url").val();
        var message = $("#taf-message").val();
        var image = $("#taf-image").val();
        var module = $("#taf-module").val();
        var deviceImage = $(".product-content").children(".middle").children("img").attr("src");
        if (deviceImage != null)
        	image = deviceImage;
        
        var data = 'email='+ email + '&friendEmail=' + friendEmail + '&tipUrl=' + url + '&message=' + message + '&image=' + image  + '&module=' + module ;  
       
       // Send request
        $.ajax({
            type: "POST",
            url: "/templates/UtilityPages/TellAFriend.aspx",
            data: data,
            error: TellAFriend.MailError,
            success: TellAFriend.MailSent
        });
        return false;
    },
    
    // Show thank you message
    MailSent: function(result) {
        $("#email-friend").hide();
        $("#taf-result").html(result).show();
        return false;
    },
    
    //TODO: Error handling
    MailError: function() {
        return false;
    },
    
    // Validates mail form
    Validate : function(){
   
        var valid = true;
        
		//don't loop using var x in TellAFriend.fields. It is not safe for IE.
        for(var i = 0, l = TellAFriend.fields.length; i< l; i++){
            var field = $(TellAFriend.fields[i]);
            field.removeClass("required");
            
            if(field.val().length == 0 || field.val() == TellAFriend.defaultValues[i]){
                if(TellAFriend.fields[i] != "#taf-message") {
                    field.addClass("required");
                    valid = false;
                }
                else {
                    field.val("");
                }
            }
            
            // If field is an email field, validate it
            if(TellAFriend.fields[i] == "#taf-email" || TellAFriend.fields[i] == "#taf-friend-email"){
                if(!TellAFriend.ValidateEmail(field)){
                    valid = false;
                }
            }
        }
        return valid;
    },
    
    // Validates email field
    ValidateEmail: function(field)
    {
        apos=field.val().indexOf("@");
        dotpos=field.val().lastIndexOf(".");
        if (apos<1||dotpos-apos<2){
            field.addClass("required");
            return false;
        }
        return true;
    },
    
    // Reset mail form
    Reset: function(){
        $("#email-friend").show();
        TellAFriend.Empty();
        return false;
    },
    Empty: function(){
        $("#taf-result").hide();
        for(var i in TellAFriend.fields){
            $(TellAFriend.fields[i]).val(TellAFriend.defaultValues[i]);
            $(TellAFriend.fields[i]).removeClass("filled");
        }
    }
}

//Shop Event Page
var Event = {
	Init: function () {

	},
	Register: {

		Lightbox: {
			Open: function (registrationform, pagename, eventid, datetime, title, desc, facebooklink) {
				Popcorn.Pop('<div id="ShopEventPageLightbox" class="GenericLightbox">\
											<div class="TB_closeWindow" onclick="Popcorn.Close();"><a>Luk</a> <img alt="Luk" id="TB_closeWindowButton" src="/media/gfx/luk.png"></div>\
											<div id="FormState">\
												<h3>Tilmeldingsformular</h3>\
												<div class="Body">\
													<h4>' + title + ', ' + datetime + '</h4>\
													<p>' + desc + '</p>\
													<p class="Errors" style="display:none"></p>\
													<div class="FormElements">\
														<fieldset><label for="input_name">Navn</label><input type="text" name="name" id="input_name" /></fieldset>\
														<fieldset><label for="input_email">Email</label><input type="text" name="email" id="input_email" /></fieldset>\
														<fieldset><label for="input_phone">Telefonnummer</label><input type="text" name="phonenumber" id="input_phone" /></fieldset>\
														<input type="hidden" id="hidden_datetime">\
													</div>\
													<h4>Modtag information</h4>\
													<fieldset class="InfoSubscribe">\
														<input type="checkbox" name="subscribe" id="input_subscribe" />\
														<label for="input_subscribe">Ja tak, jeg vil gerne modtage information om kommende events og andet indhold fra 3.</label>\
													</fieldset>\
													<div class="Button">\
														<a href="javascript:" ><img src="/media/img/Buttons/20_tilmeldButton.png" alt="Tilmeld" /></a>\
													</div>\
												</div>\
											</div>\
											<div id="ThanksState">\
												<h3>Tak for din tilmeding</h3>\
												<div class="Body">\
													<p class="Thanks">Du er nu tilmeldt <strong>' + title + ', ' + datetime + '</strong></p>\
													<div class="FacebookShare"><img src="/media/img/facebook-share-icon-18x17.png" alt="" /> <a target="_blank" href="http://www.facebook.com/sharer.php?u=' + facebooklink + '">Del med dine venner på Facebook</a></div>\
												<div>\
											</div>\
										</div>');
				$("#hidden_datetime").val(datetime);
				$("#ShopEventPageLightbox #FormState .Button a").click(function () {
					//$('#RegisterToEventFormBlock .status').hide();
					Event.Register.Lightbox.Submit(eventid, pagename, registrationform);
				});
			},
			SendXForm: function (remoteFunctionName, jsonData, successFunction, errorFunction) {
				var d = $.toJSON(jsonData);
				$.ajax({
					type: "POST",
					url: "/WebServices/TreXFormWS.asmx/" + remoteFunctionName,
					contentType: "application/json",
					dataType: "json",
					cache: false,
					data: d,
					success: typeof (successFunction) != 'function' ? function (data) { alert("Formuläret är skickat."); } : successFunction,
					error: typeof (errorFunction) != 'function' ? function () { alert("Formuläret kunde inte skickas."); } : errorFunction

				});
			},
			Submit: function (pageId, pageName, registrationForm) {
				var params = {
					name: { value: $('input[name=name]:first').val(), displayname: 'Navn' },
					phoneNumber: { value: $('input[name=phonenumber]:first').val(), displayname: 'Telefonnummer' },
					email: { value: $('input[name=email]:first').val(), displayname: 'Email' },
					subscribe: { value: $('input[name=subscribe]:first').is(':checked'), displayname: 'Accept Information from 3' },
					date: { value: $('input[id=hidden_datetime]:first').val(), displayname: 'Date' }
				};

				Event.Register.Lightbox.SendXForm('SubmitEventRegistration', {
					pageId: pageId,
					formName: registrationForm,
					formData: params
				},
				function (data) {
					var response = (typeof data.d) == 'string' ? eval('(' + data.d + ')') : data.d;

					if (response.Success) {
						$('#FormState').hide().siblings('#ThanksState').show();
					}
					else {
						$("#ShopEventPageLightbox #FormState p.Errors").html(response.Message).show();
					}
				},
				function () {
					var responehtml = 'En fejl er opstået. Prøv venligst igen senere';
					$("#ShopEventPageLightbox #FormState p.Errors").html(responehtml).show();
				});
			}
		}
	}

}

NewsListModule = {
	Next: function () { $('div.NewsListModule div.NewsList a:first').appendTo('div.NewsListModule div.NewsList'); },
	Prev: function () { $('div.NewsListModule div.NewsList a:last').prependTo('div.NewsListModule div.NewsList'); }
};

SearchResult = {
	Expand : function(){
		$('div.Result.hidden').show();
		$('div.ExpandSearch').html('<a href="javascript:SearchResult.Contract();">Vis færre resultater <span>&and;</span></a>');
	},
	Contract : function(){
		$('div.Result.hidden').hide();
		$('div.ExpandSearch').html('<a href="javascript:SearchResult.Expand();">Se alle resultater <span>&or;</span></a>');
	}
}
/* sets fallback/default texts for form input:texts that disappear when you click/focus the element and re-appear when you blur with no text */
Form = {
	Input : {
		SetFallback : function(sender, text, fallbackColor){
			sender.textColor = sender.style.color;
			sender.fallbackText = text;
			sender.fallbackColor = fallbackColor || sender.textColor;
			$(sender).focus(function(){
				if(this.value == this.fallbackText){
					this.value = '';
					this.style.color = this.textColor;
				}
			}).blur(function(){
				if(this.value == '' || this.value == this.fallbackText){
					this.value = this.fallbackText;
					this.style.color = this.fallbackColor;
				}
			}).blur();
		}
	}
}


$(document).ready(function() {
    ShopFlow.init();
    Event.Init();
});

// logpolls set global status to check lightbox-poll
   var polllog = true;



/* remove the previous one after merging */
/* sets fallback/default texts for form input:texts that disappear when you click/focus the element and re-appear when you blur with no text */
Form = {
	Input: {
		SetFallback: function (sender, text, fallbackColor) {
			$(sender).each(function () {
				this.textColor = this.style.color;
				this.fallbackText = text;
				this.fallbackColor = fallbackColor || this.textColor;
				$(this).focus(function () {
					if (this.value == this.fallbackText) {
   					this.value = '';
   					this.style.color = this.textColor;
					}
				}).blur(function () {
					if (this.value == '' || this.value == this.fallbackText) {
   					this.value = this.fallbackText;
   					this.style.color = this.fallbackColor;
					}
				}).blur();
			});
		}
	}
  }


  /***** LIVE STORE ********/

  var jsotemp;
  LiveStore = {
  	Url: null,
  	Method: "POST",
  	QueueKey: "DK1",
  	LsWindow: null,
  	Show: function () { return $(".LiveShopStatus").show(); },
  	SetWindow: function (win) {
  		LiveStore.LsWindow = win;
  	},
  	UpdateStatus: function () {
  		$.ajax({
  			url: LiveStore.Url,
  			data: { s: $.cookie(".SESSIONID"), queue_key: LiveStore.QueueKey },
  			type: LiveStore.Method,
  			dataType: "json",
  			success: function (jso, textStatus) {
  				LiveStore.Show();
  				var minLeft = Math.round(jso.time_left / 60.0);
  				if (minLeft < 1)
  					minLeft = 0;
  				if (jso.open == true) {

  					if (jso.pos == 0) { //place #0 in queue, your turn
  						if (LiveStore.LsWindow && LiveStore.LsWindow.focus) { // we probably don't need this if-statement
  							LiveStore.LsWindow.focus();
  						}
  					}

  					if (jso.pos > -1) {
  						$(".LiveShopStatus").html("Personer i kø: <span style='font-weight:bold'>" + jso.pos + "</span><br />Anslået tid: <span style='font-weight:bold'>" + minLeft + " min.</span>");
  					}

  					if (jso.poll_interval > 5) {
  						setTimeout("LiveStore.UpdateStatus()", jso.poll_interval * 1000);
  					}

  				}
				else
				{
  					$(".LiveShopStatus").html("Der er ingen ledige medarbejdere<br />Prøv igen om lidt.");
  				}
  			}
  		});
  	}
  }


  //TEST
  $(function () {
  	//$.cookie(".SESSIONID", "TEST123");
  	//LiveStore.Url = "/Test/LiveStore/closed.js?";
  	//LiveStore.Url = "/Test/LiveStore/finished.js?";
  	//LiveStore.Url = "/Test/LiveStore/inqueue.js?";
  	//LiveStore.Url = "/Test/LiveStore/manyinqueue.js?";
  	//LiveStore.Url = "/Test/LiveStore/noneinqueue.js?";
  	//LiveStore.Url = "/Test/LiveStore/pos1.js?";
  	//LiveStore.Method = "GET";
  });

  $(function () {
  	if ($.cookie(".SESSIONID") != null && LiveStore.Url != null) {
  		LiveStore.UpdateStatus();
  	}
  	else
  		LiveStore.Show();
  });

  //If we have an existing window, focus that and prevent opening
  $(function () {
  	$(".livestoreBtn a").click(function (evt) {
  		if (LiveStore.LsWindow != null && !LiveStore.LsWindow.closed) {
  			LiveStore.LsWindow.focus();
  			evt.stopPropagation();
  			return false;
  		}
  		else {
  			window.open($(this).attr("href"), $(this).attr("target"), $(this).attr("data-openoptions"), true);
  		}
  	});
  });


  /***** END LIVE STORE ********/
