﻿(function() {

    var star_ad = {
        config: {
            trigger_id: 'starred_ads',
            saved_container: 'save',
            saved_class: 'starred',
            starred_ad_count_class: 'starred-ad-count'
        },
        init: function() {
            this.timer = new Array();
            var _results = Dom.getElementsByClassName(this.config.saved_container);
            this.stars = new Array();

            for (var i = 0; i < _results.length; i++) {
                var _d = _results[i];
                var _fc = Dom.getFirstChild(_d);
                this.stars.push(_fc);
            };
            Event.addListener(this.stars, "click", star_ad.handle_click, star_ad, true);
            this.counters = Dom.getElementsByClassName(this.config.starred_ad_count_class);
        },
        handle_click: function(ev) {
            var _tar = Event.getTarget(ev);
            var _message_box;

            if(_message_box) {
                _message_box.hide();
            };
            if (star_ad.timer[0]) {
                clearTimeout(star_ad.timer[0]);
            };
            star_ad.timer[0] = setTimeout(function() {
                _message_box = LOOT.widget.showInfoMessage;
                _message_box.show(LOOT.constant.timeout_message);
            }, LOOT.constant.timeout);

            this.set_class_name(_tar);
            this.call_ajax(_tar);
            this.clicked = _tar;
        },
        set_class_name: function(tar) {
            if (tar.className == this.config.saved_class) {
                Dom.removeClass(tar, this.config.saved_class);
            } else {
                Dom.addClass(tar, this.config.saved_class);
            };
        },
        call_ajax: function(tar) {
            try {                
                var isStarred = Dom.hasClass(tar, 'starred');
            
                var _servicePath = "WebServices/LootAdvertService.asmx";
                var _methodName = "UpdateSavedAd";
                var _params = { savedAdvertId: tar.id , visitorExternalId: EXTERNAL_VISITOR_KEY, starred:isStarred };
                var _webServiceProxy = new Sys.Net.WebServiceProxy();
                _webServiceProxy.set_timeout(0);

                var _request = _webServiceProxy._invoke(_servicePath,   // the webservice to be called
                                                        _methodName,    // the method to call in the webservice
                                                        false,          // get (true) or post (false)
                                                        _params,        // parameteres expected by the method
                                                        this.handle_success,    // callback function for success
                                                        this.handle_failure);   // callback function for failure
            } catch (ex) {
                star_ad.set_class_name(tar);
            };
        },
        handle_success: function(objJSON) {
            if (star_ad.timer[0]) {
                clearTimeout(star_ad.timer[0]);
            };

            LOOT.widget.showInfoMessage.hide();

            for (var i = 0; i < star_ad.counters.length; i++) {
                var _c = star_ad.counters[i];
                _c.innerHTML = '(' + objJSON + ')';
            };
            
        },
        handle_failure: function() {
            var _m;

            star_ad.set_class_name(star_ad.clicked);

            if (star_ad.timer[0]) {
                clearTimeout(star_ad.timer[0]);
            };
            if (LOOT.widget.showInfoMessage.hidden) {
                _m = 'Sorry, we encountered a problem, please try again.';
                LOOT.widget.showInfoMessage.show(_m);
            } else {
                _m = 'Sorry, we still appear to have a problem, please try again.';
                LOOT.widget.showInfoMessage.update(_m);
            };
            star_ad.timer[0] = setTimeout(function() {
                LOOT.widget.showInfoMessage.hide();
            }, LOOT.constant.timeout);
        }
    };
    Event.onAvailable(star_ad.config.trigger_id, star_ad.init, star_ad, true);

})();
