﻿/// <reference path="jquery.intellisense.js"/>

jQuery.namespace = function() {
    var a = arguments, o = null, i, j, d;
    for (i = 0; i < a.length; i = i + 1) {
        d = a[i].split(".");
        o = window;
        for (j = 0; j < d.length; j = j + 1) {
            o[d[j]] = o[d[j]] || {};
            o = o[d[j]];
        }
    }
    return o;
};

// CANALPLUS
var CPLUS = {
    init: function() {
        CPLUS.userRating.init();
        CPLUS.ajax.init();
        CPLUS.external.initSchedjoules();
        CPLUS.ui.init();
    },

    hasContent: function(val) {
        return !(val === undefined || val === null || val == "");
    }
};

jQuery.namespace("CPLUS.userRating");
CPLUS.userRating = {
    init: function() {
        $("span.star-rating-control div.star:not(.star-rating-readonly) a")
        .live("click", function() {

            var controlId = $(this).parents("div.rating-select").attr("id");
            var programId = controlId.substring(1, controlId.length);
            var rating = $("#" + controlId + " span.star-rating-control div.star.star-rating-on").length;
            var url = "services/userratingservice.ashx?programid=" + programId + "&rating=" + rating;
            var ratingCallback = CPLUS.userRating.ratingCallback;

            if (CPLUS.userRating.getHasRated(programId)) {
                $("#" + controlId + " div.rating-feedback.has-rated").show("fast");
                $("#" + controlId + " span.star-rating-control div.star").rating("readOnly", true);
                $("#" + controlId + " span.star-rating-control div.star").rating("clear");
            } else {
                $("#" + controlId + " div.rating-feedback.not-rated").show("fast");
                $("#" + controlId + " div.rating-feedback.not-rated > span").html(rating);
                $.getJSON(url, null, ratingCallback);
            }
        });
    },

    getHasRated: function(programId) {
        var ratedPrograms = JUNE.getCookie("__ratedprograms");
        if (ratedPrograms !== null) {
            return (ratedPrograms.indexOf("[" + programId + "]") !== -1);
        } else {
            return false;
        }
    },

    setHasRated: function(programId) {
        var ratedPrograms = JUNE.getCookie("__ratedprograms");
        var theDate = new Date();
        var oneYearLater = new Date(theDate.getTime() + 31536000000);

        if (ratedPrograms == null) {
            ratedPrograms = "[" + programId + "]";
        } else {
            ratedPrograms += "[" + programId + "]";
        }

        JUNE.setCookie("__ratedprograms", ratedPrograms, oneYearLater);
    },

    ratingCallback: function(data) {

        var controlId = "p" + data.ProgramId;
        var count = data.RatingCount;
        var rating = data.RoundedRating;
        
        if (count >= 5) {
            $("#" + controlId + " span.star-rating-control div.star").rating("select", (rating - 1));
            $("#" + controlId + " span.star-rating-control div.star").rating("readOnly", true);
        } else {
            $("#" + controlId + " span.star-rating-control div.star").rating("readOnly", true);
            $("#" + controlId + " span.star-rating-control div.star").rating("clear");
        }
        $("#" + controlId + " div.rating-message").replaceWith(data.RatingStatusMessage);
        CPLUS.userRating.setHasRated(data.ProgramId);
    }
};

jQuery.namespace("CPLUS.ajax");
CPLUS.ajax = {
    prevSelect: null,
    init: function() {
        // Listen for clicks on links we need to perform actions on
        CPLUS.ajax.listen("click", "a[rel]");

        // TODO: We need to have different handling of IE until jQuery 1.4.3
        if (!$.browser.msie) {
            $(".liveGenreChooser").live("change", function() {
                var uri = $(this).val();
                CPLUS.ajax.get(uri, "#area2");
            });
        }
        else {
            //CPLUS.ajax.prevSelect = ($(".liveGenreChooser").length>0) ? $(".liveGenreChooser").get(0).selectedIndex : 0;
            this.resetSelect();
            $(".head-play").live("click", function(event) {
                if (event.target.nodeName == "SELECT" && CPLUS.ajax.prevSelect != CPLUS.ajax.getSelect()) {
                    var uri = $(".liveGenreChooser").val();
                    CPLUS.ajax.prevSelect = CPLUS.ajax.getSelect();
                    CPLUS.ajax.get(uri, "#area2");
                }
            });
        }
    },

    getSelect: function() {
        return $(".liveGenreChooser").get(0).selectedIndex;
    },

    resetSelect: function() {
        CPLUS.ajax.prevSelect = ($(".liveGenreChooser").length > 0) ? CPLUS.ajax.getSelect() : 0;
    },

    listen: function(event, target) {
        $(target).live(event, function(e) {
            // Get the first link element (either current or descendant)
            var $link = $(this).filter("a");
            if ($link.length == 0) {
                $link = $(this).find("a").eq(0);
            }

            // Check current and child nodes for the rel attribute
            var action = $link.attr("rel"); // Usage rel="method->target (css selector)->mode (add, replace(css selector to replace))"

            // Only do stuff if we have a rel-attribute with actions on the link
            if (CPLUS.hasContent(action)) {
                e.preventDefault();

                var separator = "->";
                var uri = $link.attr("href");
                var method = action.split(separator)[0];
                var target, mode;

                switch (method) {
                    case "xhr": // Load data into target selector with ajax
                        target = action.split(separator)[1];
                        mode = action.split(separator)[2];
                        CPLUS.ajax.get(uri, target, mode);
                        break;
                }
                return false;
            }
        });
    },

    insert: function(data, target, mode) {
        data = $(data).find(target).children();

        if (CPLUS.hasContent(mode)) {
            var regexpSelector = /\((.*)\)/; // Get the stuff between the parenthesis      
            var modeSelector = regexpSelector.exec(mode);
            if (modeSelector) {
                modeSelector = modeSelector[1];
            }

            mode = mode.split("(")[0];
        }

        switch (mode) {
            case "add":
                $(target).append(data);
                break;
            case "addTo":
                $(target).find(modeSelector).replaceWith(data);
                break;
            case "exec":
                eval(modeSelector + "(data,target)"); // TODO: Is there a better way to do this?
                break;
            /*case "slide":
            $(target).html(data);
            C5.ui.slide(target, "list");*/ 
            default:
                $(target).html(data);
                break;
        }
    },

    get: function(uri, target, mode) {
        $(window).trigger("xhr.start", [uri]); // Throw ajax start event

        // Direct load into DOM if we have a target but no special mode
        //if (CPLUS.hasContent(target) && !CPLUS.hasContent(mode)) {
        if (CPLUS.hasContent(target)) {
            var filterRequest = " " + target + ">*";

            $(target).load(uri + filterRequest, null, function(data) {
                //C5.exec(data); // Execute any script comments
                if (CPLUS.hasContent(mode)) {
                    eval(mode);
                }

                $(window).trigger("xhr.end", [uri]); // Throw ajax end event
            });
        }
        /*else {
        $.get(uri, function(data) { // data contains the response
        if (CPLUS.hasContent(mode)) {
        CPLUS.ajax.insert(data, target, mode);
        }
        //C5.exec(data); // Execute any script comments
        $(window).trigger("xhr.end", [uri]); // Throw ajax end event
        });
        }*/
    }
};
jQuery.namespace("CPLUS.external");
CPLUS.external = {
    // Initiates all schedjoules related controls 
    // only if the extrenal script is successfully loaded
    initSchedjoules: function() {
        if ($(".ext-schedjoules").length > 0) {
            $.getScript("http://canalplus.clients.schedjoules.com/modalhandler.js?language=" + JUNE.siteRegion, function() {
                if ($.isFunction(openSchedjoules)) {
                    $(".ext-schedjoules").show("slow");
                }
            });
        }
    }
};

jQuery.namespace("CPLUS.ui");
CPLUS.ui = {
    init: function() {
        CPLUS.ui.activateSearchIndicator();
        CPLUS.ui.activateHeaderSearchIndicator();

        //        $('<img />')
        //        .attr('src', '/Client/Images/ajax-loader.gif')
        //        .load(function(){
        //            $('.profile').append($(this));
        //                });

    },

    activateSearchIndicator: function() {
        $(".search-box a").click(function() {
            CPLUS.ui.toggleAnimation();
        });
        $(".large:input").keyup(function(e) {
            if (e.keyCode == 13) {
                CPLUS.ui.toggleAnimation();
            }
        });
    },

    activateHeaderSearchIndicator: function() {
        $(".push-button-small").click(function() {
            CPLUS.ui.toggleHeaderSearchAnimation();
        });
        $(".menu-search").keyup(function(e) {
        if (e.keyCode == 13) {
                $(".push-button-small").click()
                CPLUS.ui.toggleHeaderSearchAnimation();
            }
        });
    },

    toggleAnimation: function() {
        if (jQuery.browser.msie) {
            $(".push-button-large").replaceWith('<span class="loading ie"><img src="client/images/ajax-loader.gif" /></span>');
        }
        else {
            $(".search-input").addClass("disabled");
            $(".push-button-large").css("display", "none");
            $(".search-page .search-indicator").css("display", "inline");
        }
    },

    toggleHeaderSearchAnimation: function() {
        if (jQuery.browser.msie) {
            $(".push-button-small").attr("src", "client/images/ajax-loader.gif").load(function() {
                $(".menu-search").addClass("disabled");
            });
        }
        else {
            $(".menu-search").addClass("disabled");
            $(".push-button-small").css("display", "none");
            $(".menu-search .search-indicator").css("display", "inline");
        }
    }
};
