﻿/// <reference name="MicrosoftAjax.js"/>
Type.registerNamespace("AsiaAustraliaTech");

/// <summary>
/// This component is responsible for entire row hover selection when the rows are grouped
///</summary>
AsiaAustraliaTech.NewsLinks = function () {
    AsiaAustraliaTech.NewsLinks.initializeBase(this);

    //fields
    this._VisitedClassName = null;
    this._CookieName = null;
    this._CookieExpirationDays = null;
    this._AttributeName = null;
    this._RecordLimit = null;
    this._onLoad$delegate = Function.createDelegate(this, this._onLoad);
    this._onClick$delegate = Function.createDelegate(this, this._onClick);
}

AsiaAustraliaTech.NewsLinks.prototype = {

    //properties
    get_VisitedClassName: function () {
        return this._VisitedClassName;
    },
    set_VisitedClassName: function (value) {
        this._VisitedClassName = value;
    },

    get_CookieName: function () {
        return this._CookieName;
    },
    set_CookieName: function (value) {
        this._CookieName = value;
    },

    get_CookieExpirationDays: function () {
        return this._CookieExpirationDays;
    },
    set_CookieExpirationDays: function (value) {
        this._CookieExpirationDays = value;
    },

    get_AttributeName: function () {
        return this._AttributeName;
    },
    set_AttributeName: function (value) {
        this._AttributeName = value;
    },

    get_RecordLimit: function () {
        return this._RecordLimit;
    },
    set_RecordLimit: function (value) {
        this._RecordLimit = value;
    },

    //constructors
    initialize: function () {
        AsiaAustraliaTech.NewsLinks.callBaseMethod(this, 'initialize');
        this._onLoad$delegate();
        Sys.Application.add_load(this._onLoad$delegate);
    },

    dispose: function () {
        Sys.Application.remove_load(this._onLoad$delegate);
        $(String.format("*[{0}]", this.get_AttributeName())).unbind('click');
        this._onLoad$delegate = null;
        this._onClick$delegate = null;
        AsiaAustraliaTech.NewsLinks.callBaseMethod(this, 'dispose');
    },

    //private methods
    _onLoad: function (evt) {
        $(String.format("*[{0}]", this.get_AttributeName())).click(this._onClick$delegate);
        var visited = this._getList();
        for (var i = 0; i < visited.length; ++i) {
            $(String.format("*[{0}={1}]", this.get_AttributeName(), visited[i])).addClass(this.get_VisitedClassName());
        }
    },

    _onClick: function (evt) {
        var element = $(evt.currentTarget);
        if (element && !element.hasClass(this.get_VisitedClassName())) {
            this._saveList(element.attr(this.get_AttributeName()));
            element.addClass(this.get_VisitedClassName());
        }
    },

    _getList: function () {
        var cookieValue = $.cookie(this.get_CookieName());
        return cookieValue == null ? [] : cookieValue.split(',');
    },

    _saveList: function (value) {
        var list = this._getList();
        if (list.length > this.get_RecordLimit()) {
            list.shift();
        }
        if (!Array.contains(list, value)) {
            Array.add(list, value);
            $.cookie(this.get_CookieName(), list.join(','), { expires: this.get_CookieExpirationDays() });
        }
    }
}
AsiaAustraliaTech.NewsLinks.registerClass('AsiaAustraliaTech.NewsLinks', Sys.Component);

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();

