﻿/// <reference path="./API/Agility.UGC.API.js" />


Agility.RegisterNamespace("Subaru.AgilityData");

(function(AgilityData) {
    AgilityData.Provinces = null;
    AgilityData.ActivityTypes = null;
    AgilityData.ActivityTags = null;
    AgilityData.GlobalLanguageResoureces = null;
    AgilityData.InappropriateWords = null;
    AgilityData.LoadedContentViews = new Object();
    AgilityData.WinterGames = null;

    AgilityData.ActivtyTypePageIndex = 1;


    AgilityData.LoadActivityTypes = function() {
        $.ajax({
            type: "POST",
            url: AgilityData_WebserviceUrl + '/GetActivityTypes',
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result) {

                if (result.d != undefined && result.d != null) {

                    AgilityData.ActivityTypes = result.d;

                    Subaru.AgilityData.LoadContentItem("WinterGames", function(contentItem) {

                        AgilityData.WinterGames = contentItem;
                        AgilityData.LoadActivityMenu(1);
                    });
                }
            },
            complete: function(XMLHttpRequest, textStatus) {
                //alert(XMLHttpRequest.status + ' ' + textStatus);
                //alert(XMLHttpRequest.responseText);
            }
        });
    }

    AgilityData.LoadProvinces = function() {

        $.ajax({
            type: "POST",
            url: AgilityData_WebserviceUrl + '/GetProvinces',
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result) {

                if (result.d != undefined && result.d != null) {
                    AgilityData.Provinces = result.d;

                    AgilityData.LoadProvincesMenu();
                }
            },
            complete: function(XMLHttpRequest, textStatus) {
                //alert(XMLHttpRequest.status + ' ' + textStatus);
                //alert(XMLHttpRequest.responseText);
            }
        });

    }

    AgilityData.LoadActivityTags = function() {

        $.ajax({
            type: "POST",
            url: AgilityData_WebserviceUrl + '/GetActivityTags',
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result) {

                if (result.d != undefined && result.d != null) {
                    AgilityData.ActivityTags = result.d;
                }
            },
            complete: function(XMLHttpRequest, textStatus) {
                //alert(XMLHttpRequest.status + ' ' + textStatus);
                //alert(XMLHttpRequest.responseText);
            }
        });

    }

    AgilityData.LoadGlobalLanguageResources = function() {

        $.ajax({
            type: "POST",
            url: AgilityData_WebserviceUrl + '/GetGlobalLanguageResources',
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function(result) {
                if (result.d != undefined && result.d != null) {
                    AgilityData.ProcessGlobalLanguageResoureces(result.d);
                }
            },
            complete: function(XMLHttpRequest, textStatus) {
                //alert(XMLHttpRequest.status + ' ' + textStatus);
                //alert(XMLHttpRequest.responseText);
            }
        });
    };

    AgilityData.LoadInappropriateWords = function() {
        if (AgilityData.InnappropriateWords == null) {
            $.ajax({
                type: "POST",
                url: AgilityData_WebserviceUrl + '/GetInappropriateWords',
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                async: false,
                success: function(result) {
                    if (result.d != undefined && result.d != null) {

                        AgilityData.InappropriateWords = result.d;


                    }
                },
                complete: function(XMLHttpRequest, textStatus) {
                    //alert(XMLHttpRequest.status + ' ' + textStatus);
                    //alert(XMLHttpRequest.responseText);
                }
            });
        }

    }

    AgilityData.LoadContentItem = function(referenceName, callback) {

        if (AgilityData.LoadedContentViews[referenceName] == null) {

            $.ajax({
                type: "POST",
                url: AgilityData_WebserviceUrl + '/GetContentItem',
                data: "{'ReferenceName': '" + referenceName + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                async: false,
                success: function(result) {
                    if (result.d != undefined && result.d != null) {

                        //save results so data doesn't need to be loaded again
                        AgilityData.LoadedContentViews[referenceName] = result.d;

                        callback(result.d);
                    }
                },
                complete: function(XMLHttpRequest, textStatus) {
                    //alert(XMLHttpRequest.status + ' ' + textStatus);
                    //alert(XMLHttpRequest.responseText);
                }
            });
        }
        else {
            //send the already loaded data to the callback
            callback(AgilityData.LoadedContentViews[referenceName]);
        }
    };

    AgilityData.FindContentItemProperty = function(data, propertyName) {
        try {
            propertyName = propertyName.toLowerCase()
            for (var i = 0; i < data.length; i++) {
                if (data[i].Key.toLowerCase() == propertyName) {

                    return data[i].Value;
                }
            }
        }
        catch (e) {
            return "";
        }
    };

    AgilityData.LoadActivityMenu = function(page) {

        if (AgilityData.ActivityTypes != null) {
            AgilityData.ActivtyTypePageIndex = page;

            var activityPanel = $('#ActivityTypes');
            var additionalItemsOnFirstPage = (Subaru.AgilityData.FindContentItemProperty(AgilityData.WinterGames, "ShowOnActivityMenu") == "True") ? 13 : 14;

            if (activityPanel != null) {
                templateUrl = Agility.ResolveUrl("~/ClientTemplates/ActivityTypes.htm");
                activityPanel.setTemplateURL(templateUrl);

                var totalTemp = AgilityData.ActivityTypes.length;
                while (totalTemp % additionalItemsOnFirstPage != 0) {
                    totalTemp++;
                }

                var totalPages = 0;
                totalPages = totalTemp / additionalItemsOnFirstPage

                var previousPage = AgilityData.ActivtyTypePageIndex - 1;
                if (previousPage < 1) {
                    previousPage = 1;
                }

                var nextPage = AgilityData.ActivtyTypePageIndex + 1;
                if (nextPage > totalPages) {
                    nextPage = totalPages;
                }

                var offset = 0;
                if (page > 1) {
                    offset = additionalItemsOnFirstPage * (page - 1);
                }
                else {
                    offset = 0;
                }

                var dataSet = new Array();
                for (var i = offset; i < offset + additionalItemsOnFirstPage; i++) {
                    if (AgilityData.ActivityTypes[i] != null && AgilityData.ActivityTypes[i] != undefined) {
                        dataSet[dataSet.length] = AgilityData.ActivityTypes[i];
                    }
                }

                activityPanel.setParam("AllActivities", AgilityData.GetGlobalLanguageResource("ActivityTypes_AllActivities"));
                activityPanel.setParam("AllActivitiesHeader", AgilityData.GetGlobalLanguageResource("Header_AllActivities"));
                activityPanel.setParam("PagerValue", page + " " + Subaru.AgilityData.GetGlobalLanguageResource("SearchResults_of") + " " + totalPages);

                activityPanel.setParam("WinterGamesEnabled", Subaru.AgilityData.FindContentItemProperty(AgilityData.WinterGames, "ShowOnActivityMenu"));
                activityPanel.setParam("WinterGamesTitle", Subaru.AgilityData.FindContentItemProperty(AgilityData.WinterGames, "ActivityTitle"));
                activityPanel.setParam("WinterGamesIconImage", Subaru.AgilityData.FindContentItemProperty(AgilityData.WinterGames, "IconImage"));
                activityPanel.setParam("WinterGamesIconOverImage", Subaru.AgilityData.FindContentItemProperty(AgilityData.WinterGames, "IconOverImage"));

                activityPanel.processTemplate(dataSet);
                RefreshRollOvers();

                $("#ActivityTypeMenu_Previous").unbind("click", null);
                $("#ActivityTypeMenu_Previous").bind("click", function() {
                    Subaru.AgilityData.LoadActivityMenu(previousPage);
                });
                $("#ActivityTypeMenu_Next").unbind("click", null);
                $("#ActivityTypeMenu_Next").bind("click", function() {
                    Subaru.AgilityData.LoadActivityMenu(nextPage);
                });
            }
        }
    };

    AgilityData.GetProvinceNameByID = function(prvinceID) {

        if (AgilityData.Provinces != null) {
            for (var i = 0; i < AgilityData.Provinces.length; i++) {
                if (AgilityData.Provinces[i].ProvinceID == prvinceID) {
                    return AgilityData.Provinces[i].Name;
                }
            }
        }
        return null;
    };

    AgilityData.GetActivityTypeIconUrl = function(typeID) {

        try {
            for (var i = 0; i < AgilityData.ActivityTypes.length; i++) {
                if (AgilityData.ActivityTypes[i].ActivityTypeID == typeID) {
                    if (AgilityData.ActivityTypes[i].ActivityMapIcon != null && AgilityData.ActivityTypes[i].ActivityMapIcon != "" && AgilityData.ActivityTypes[i].ActivityMapIcon != undefined) {

                        return AgilityData.ActivityTypes[i].ActivityMapIcon;
                    }
                    else {
                        return null;
                    }
                }
            }
        }
        catch (Error) {
            return null;
        }

        return null;
    }

    AgilityData.GetActivityType = function(typeID) {


        if (typeID < -2) {

            var typeAll = new Object();
            typeAll.ActivityTypeID = -1;

            var title = AgilityData.GetGlobalLanguageResource("ActivityTypes_AllActivities");
            alert("the Type title = " + title);
            typeAll.Title = title;
            typeAll.IconImage = "../img/Icons/all_activities_iconimage.png";
            typeAll.IconOverImage = "../img/Icons/all_activities_iconimage-Over.png";
            typeAll.ActivityMapIcon = "";

            return typeAll;
        }


        for (var i = 0; i < AgilityData.ActivityTypes.length; i++) {
            if (AgilityData.ActivityTypes[i].ActivityTypeID == typeID) {
                return AgilityData.ActivityTypes[i];
            }
        }

        return null;
    };

    AgilityData.LoadProvincesMenu = function() {
        if (AgilityData.Provinces != null) {
            var provincesPanel = $('#Provinces');

            if (provincesPanel != null) {
                templateUrl = Agility.ResolveUrl("~/ClientTemplates/ProvincesMenu.htm");

                provincesPanel.setTemplateURL(templateUrl);

                provincesPanel.setParam("SelectProvinceLabel", AgilityData.GetGlobalLanguageResource("ProvinceMenu_SelectProvince"));
                provincesPanel.setParam("AllProvincesLabel", AgilityData.GetGlobalLanguageResource("ProvinceMenu_AllProvinces"));

                provincesPanel.processTemplate(AgilityData.Provinces);

                //Rollover the provinces menu
                $("div.Province", provincesPanel).each(function() {
                    var div = $(this);
                    div.hover(
                        function() {
                            mapMouseOver($(this));
                        },
                        function() {
                            mapMouseOut($(this));
                        }
                    );
                    //Preload Provinces Maps
                    jQuery("<img>").attr("src", div.attr("provincemap"));
                });

                //Rollover the provinces map
                $("div.Map area", provincesPanel).each(function() {
                    $(this).hover(
                        function() {
                            var mapArea = $(this);
                            var pmenu = $("div.Province[provinceid=" + mapArea.attr("provinceid") + "]", mapArea.parent().parent().next());
                            mapMouseOver(pmenu);
                        },
                        function() {
                            var mapArea = $(this);
                            var pmenu = $("div.Province[provinceid=" + mapArea.attr("provinceid") + "]", mapArea.parent().parent().next());
                            mapMouseOut(pmenu);
                        }
                    );
                });
            }
        }
    };

    var currentProvinceMap = "";

    function mapMouseOver($sender) {
        var t = $sender;
        if (!t.is(".ProvinceSelected")) {
            t.addClass("ProvinceSelected");
            var img = $("img", t.parent().prev());
            currentProvinceMap = img.attr("src");
            img.attr("src", t.attr("provincemap"));
        }
    };

    function mapMouseOut($sender) {
        var t = $sender;
        if (t.is(".Province")) {
            t.removeClass("ProvinceSelected");
            var img = $("img", t.parent().prev());
            img.attr("src", currentProvinceMap);
        }
    };

    AgilityData.ProcessGlobalLanguageResoureces = function(data) {

        AgilityData.GlobalLanguageResoureces = new Object();
        for (var i = 0; i < data.length; i++) {
            AgilityData.GlobalLanguageResoureces[data[i].ReferenceName] = data[i].ReferenceValue;
        }
    };

    AgilityData.GetGlobalLanguageResource = function(ReferencName) {

        var value = null;
        if (AgilityData.GlobalLanguageResoureces != null) {
            value = AgilityData.GlobalLanguageResoureces[ReferencName];
        }
        if (value != null && value != undefined) {
            return value;
        }
        return "";
    };

    AgilityData.ArticleSearch = function(SearchTerm, callback) {

        $.ajax({
            type: "POST",
            url: AgilityData_WebserviceUrl + '/ArticleSearch',
            data: "{'searchTerm': '" + SearchTerm + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function(result) {
                if (result.d != undefined && result.d != null) {
                    callback(result.d);
                    return;
                }
                else {
                    callback(null);
                }
            },
            complete: function(XMLHttpRequest, textStatus) {
                //alert(XMLHttpRequest.status + ' ' + textStatus);
                //alert(XMLHttpRequest.responseText);
            }
        });
    };

    AgilityData.ActivityTextSearch = function(SearchTerm, sortField, callback) {

        $.ajax({
            type: "POST",
            url: AgilityData_WebserviceUrl + '/ActivityTextSearch',
            data: "{'searchTerm': '" + SearchTerm + "','sortField':'" + sortField + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function(result) {
                if (result.d != undefined && result.d != null) {
                    callback(result.d);
                }
            },
            complete: function(XMLHttpRequest, textStatus) {
                //alert(XMLHttpRequest.status + ' ' + textStatus);
                //alert(XMLHttpRequest.responseText);
            }
        });
    };

    AgilityData.ActivityTypeAndProvinceSearch = function(activityTypeID, provinceID, sortField, callback) {

        if (activityTypeID == null) {
            activityTypeID = 0;
        }

        if (provinceID == null) {
            provinceID = 0;
        }

        $.ajax({
            type: "POST",
            url: AgilityData_WebserviceUrl + '/ActivityTypeAndProvinceSearch',
            data: "{'activityTypeID': '" + activityTypeID + "','provinceID':'" + provinceID + "','sortField':'" + sortField + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function(result) {
                if (result.d != undefined && result.d != null) {
                    callback(result.d);
                }
            },
            complete: function(XMLHttpRequest, textStatus) {
                //alert(XMLHttpRequest.status + ' ' + textStatus);
                //alert(XMLHttpRequest.responseText);
            }
        });
    };

    AgilityData.GetEditorials = function(callback) {

        $.ajax({
            type: "POST",
            url: AgilityData_WebserviceUrl + '/GetEditorials',
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result) {
                if (result.d != undefined && result.d != null) {
                    callback(result.d);
                }
            },
            complete: function(XMLHttpRequest, textStatus) {
                //alert(XMLHttpRequest.status + ' ' + textStatus);
                //alert(XMLHttpRequest.responseText);
            }
        });
    };

    AgilityData.GetCurrentUserID = function() {
        var userid = $.ajax({
            type: "POST",
            url: Agility.ResolveUrl("~/HTTPHandlers/CurrentUserID.ashx"),
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            cache: false

        }).responseText;

        var id = parseInt(userid);
        if (isNaN(id)) return -1;
        return parseInt(userid);
    };

    AgilityData.HasInappropriateWords = function(stringValue) {
        try {
            if (AgilityData.InappropriateWords == null) {
                AgilityData.LoadInappropriateWords();
            }
            if (AgilityData.InappropriateWords != null) {

                for (var i = 0; i < AgilityData.InappropriateWords.length; i++) {

                    var comp = stringValue.toLowerCase().indexOf(AgilityData.InappropriateWords[i].toLowerCase());

                    if (comp >= 0) {
                        return true;
                    }
                }
            }
            return false;
        } catch (e) {
            return false;
        }
    };

    //Removes any html tags/data inside the input string
    AgilityData.HTMLFilter = function(inputString) {
        try {
            return jQuery("<div>").html(inputString).text();
        } catch (err) {
            return "";
        }
    };

})(Subaru.AgilityData);

