﻿var ShopFlow = {

	CurrentPageId: null,


    init: function() {

        /* Add overlay to checked addons */
        $j(".addon .left-column input:checked").each(function() {
            ShopFlow.toogleClass($j(this).parents(".addon"), "active");
        });

        /* Hook up click event to addon list */
        $j(".addon .left-column input").click(function() {

            ShopFlow.toogleClass($j(this).parents(".addon"), "active");
            ShopFlow.handleAddOns();
        });

        /* Bind AddOn Removers If there exists any */
        ShopFlow.bindAddonRemovers();
        
        ShopFlow.bindDataDeviceInputs();
    },


    handleAddOns: function() {
        var pageLinks = "";
        $j(".addon .left-column input:checked").each(function() {
            pageLinks += $j(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("¤¤¤¤");

        $j("#right").html(htmlContainer[0]);
        $j("#addon-control-container").html(htmlContainer[1]);
        $j("#popup-container").html(htmlContainer[2]);

        ShopFlow.bindAddonRemovers();

    },

    bindAddonRemovers: function() {

        $j(".removeAddon").click(function() {
            var checkBox = $j(".addon .left-column input[value='" + $j(this).attr("rel") + "']");
            $j(checkBox).attr('checked', false);
            ShopFlow.toogleClass($j(checkBox).parents(".addon"), "active");
            ShopFlow.handleAddOns();

        });


    },
    
    bindDataDeviceInputs: function(){
		$j(".data-subscription-shopflow input").click(function(){
			var deviceId = $j(this).val();
			ShopFlow.ChangeDevice(deviceId);
		});
    },


    MakeRequest: function(pageLinks) {

        $j.ajax({
            type: "POST",
            url: "/templates/UtilityPages/AddonPickerAjax.aspx",
            data: "pageLinks=" + pageLinks,
            error: ShopFlow.ajaxError,
            success: ShopFlow.ajaxComplete
        });



    },

    ChangeSubscription: function() {

        var subscription = $j(".sub-option:radio:checked").val();
        
        
        $j.ajax({
            type: "POST",
            url: "/templates/UtilityPages/AddonPickerAjax.aspx",
            data: "subscriptionLink=" + subscription,
            error: ShopFlow.ajaxError,
            success: ShopFlow.ajaxComplete
        });

        Popcorn.Close();
    
    },

    ChangeDevice: function(deviceId) {
        $j.ajax({
            type: "GET",
            url: "/templates/UtilityPages/BasketAjax.aspx",
            data: "deviceId=" + deviceId + "&rnd=" + Math.random() + "&id=" + ShopFlow.CurrentPageId,
            error: ShopFlow.ajaxError,
            success: function(result){
				$j("#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 = $j(o).siblings('div:first');
        var visible = $j(div).css("display");

        if (visible == "block") {
            $j(o).removeClass("faq_active");
            $j(o).parent().css("border-bottom", "1px solid #e3e3e3");
            $j(div).hide("fast");
        }
        else {
            $j(o).addClass("faq_active");
            $j(o).parent().css("border-bottom", "1px solid #fff");
            $j(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 = $j(".scrolling-newsitem");
        NewsTicker.newsItemCount = NewsTicker.newsItem.length;
        NewsTicker.newsTickerObj = $j("#newsticker");

        NewsTicker.selectNewsItem();
        NewsTicker.mainInterval = setInterval("NewsTicker.selectNewsItem()", 6000);

    },

    selectNewsItem: function() {

        if (NewsTicker.markerInterval != null) {
            clearInterval(NewsTicker.markerInterval);
        }

        clearInterval(NewsTicker.scrollInterval);


        $j(NewsTicker.newsTickerObj).empty();

        NewsTicker.content = $j(NewsTicker.newsItem[NewsTicker.itemIndex]).val().split('¤');
        NewsTicker.text = NewsTicker.content[0];
        NewsTicker.charIndex = 0;
        //Reset click and cursor
        $j(NewsTicker.newsTickerObj).css("cursor", "default");
        $j(NewsTicker.newsTickerObj).attr("href", "javascript:void(0)");


        if (NewsTicker.content.length > 1) {
            NewsTicker.link = NewsTicker.content[1];
            $j(NewsTicker.newsTickerObj).css("cursor", "pointer");
            $j(NewsTicker.newsTickerObj).attr("href", NewsTicker.link);
        }


        NewsTicker.scrollInterval = setInterval("NewsTicker.scrollText()", 25);
    },

    scrollText: function() {

        if (NewsTicker.text.length > NewsTicker.charIndex) {
            $j(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.
            $j(NewsTicker.newsTickerObj).append("<span id='marker-span'>_</span>");
            NewsTicker.marker = $j("#marker-span");
            NewsTicker.markerInterval = setInterval("NewsTicker.createMarker()", 150);
            clearInterval(NewsTicker.scrollInterval);

        }
    },


    createMarker: function() {

        if ($j(NewsTicker.marker).is(":hidden"))
            $j(NewsTicker.marker).show();
        else
            $j(NewsTicker.marker).hide();
    }


}

// Tell a friend functionality
var TellAFriend = {
    fields: new Array("#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 = $j(TellAFriend.fields[i]);
            var defaultValue = field.val();
            TellAFriend.defaultValues[i] = defaultValue;
            
            field.bind("focus", {v:defaultValue}, function(e) {
                $j(this).addClass("filled");
                if($j(this).val() == e.data.v) {
                    $j(this).val("");
                }
            }).bind("blur", {v:defaultValue}, function(e){
                if($j(this).val() == "") {
                    $j(this).removeClass("filled");
                    $j(this).val(e.data.v);
                }
            });
        }
    },
    
    // Hide/show email or sharing module
    Toggle: function(o, contentId){
        var div = $j(o).parent();
        div.addClass('active');
        var inactive = $j(div).siblings();
        inactive.removeClass('active');
        
        $j("#email-friend").addClass("invisible");
        $j("#share").addClass("invisible");
        TellAFriend.Empty();
        $j(contentId).removeClass('invisible');
        return false;
    },
    
    // Send email
    Email : function() {
        if(!TellAFriend.Validate()){
            return false;
        }
        
        // Extract values from form
        var email = $j("#taf-email").val();
        var friendEmail = $j("#taf-friend-email").val();
        var url = $j("#taf-url").val();
        var message = $j("#taf-message").val();
        var image = $j("#taf-image").val();
        var module = $j("#taf-module").val();
        var deviceImage = $j(".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
        $j.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) {
        $j("#email-friend").addClass("invisible");
        $j("#taf-result").html(result).removeClass("invisible");
        return false;
    },
    
    //TODO: Error handling
    MailError: function() {
        return false;
    },
    
    // Validates mail form
    Validate : function(){
   
        var valid = true;
        
        for(var i in TellAFriend.fields){
            var field = $j(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(){
        $j("#email-friend").removeClass("invisible");
        TellAFriend.Empty();
        return false;
    },
    Empty: function(){
        $j("#taf-result").addClass("invisible");
        for(var i in TellAFriend.fields){
            $j(TellAFriend.fields[i]).val(TellAFriend.defaultValues[i]);
            $j(TellAFriend.fields[i]).removeClass("filled");
        }
    }
}


$j(document).ready(function() {
    ShopFlow.init();
});


