/**
 *
 * Depends on JQuery 1.4.2 and sf-start.js
 */

SF.ns('Partner.List', function(){

    var data,
    historyReady = SF.History.ready;


    /**
     * Init partners list
     */
    function init() {
    	if(!(SF.ns('Partner.List')).ready) return;

        showHide();

        // if default region defined - set this value
        if (SF.Partner.List.data.regionID != null) {
        	$('#ps_region').val(SF.Partner.List.data.regionID);
        }

        $('#ps_region').change(updateList);
        $('#ps_region_url').change(function() {
            var url = $("#ps_region_url option:selected").val();
            document.location = url;
        	}
        );

        $('#p-popup').jqm();
        $('#p-popup .p-close').click(function(e){
            $('#p-popup').jqmHide();
        });
        $('div.p-link').click(function(e) {
            // main processing
            $("#partner-description").html($("div.hidden",this).html());
            $(".p-desc h4").html($("img.p-logo",this).attr('title'));
            $("#i-box").html($("img.p-logo",this).clone().removeClass('hidden'));
            var parType = $(this).attr('type');
            if (parType) {
                //for all list
                if ($(this).attr('strategic')) {
                  $(".type-logo").html($(".tabs img.t-logo-strategic#type" + parType).clone().removeClass('hidden'));
                }else {
                  $(".type-logo").html($(".tabs img.t-logo#type" + parType).clone().removeClass('hidden'));
                }
            }else{
                $(".type-logo").html($(".type-desc img.t-logo").clone().removeClass('hidden'));
                if ($(this).attr('strategic')) {
                    $(".type-logo").html($(".type-desc img.t-logo-strategic").clone().removeClass('hidden'));
                }
            }

            $(".par-link").html($("a.partner-link", this).clone().removeClass('hidden'));
            //par-link

            $('#p-popup').jqmShow();
            e.preventDefault();
        });

        updateList(true);
        if(historyReady) {
            SF.History.addCallback('partner', historyCallback);
        }
    }

    /**
     * Rerutns values of all filters
     */
    function getFiltersState() {
        return {
            reg: $('#ps_region').val()
        }
    }

    /**
     * Is called when URL hash is changed
     *
     * @param {Object} hashObj
     * @param {String} hashStr
     */
    function historyCallback(hashObj, hashStr) {
        //console.log(hashObj);

        if(hashObj.hasOwnProperty('region')) {
            $('#ps_region').val(hashObj.region.split(',')[0]);
        } else {
            $('#ps_region').val('all');
        }

        updateList(true);
    }

    /**
     * Updates list of partners according to the current state of filters
     *
     * @param {Boolean} flag - if set to true URL hash isn't updated.
     *                         We need this to prevent unlimited recursion
     *                         when this method is called from hash changed callback.
     */
    function updateList(flag) {
    	var f_conf = getFiltersState();
        var itemsArr = $("div.p-link");
        if (SF.Partner.List.data.regions[f_conf.reg]) {
            itemsArr.hide();
            for(var i=0; i < itemsArr.length; i++){
                if (itemsArr[i].className.indexOf(f_conf.reg) + 1)
                    $(itemsArr[i]).show();
            }
        } else {
            $("div.p-link").show();
        }
        showHide();

        //Update URL
        if(historyReady && flag !== true) {
            var hObj = {region:'all'};
            if(SF.Partner.List.data.regions[f_conf.reg]) {
                hObj.region = f_conf.reg + ',' + SF.Partner.List.data.regions[f_conf.reg];
            }
            SF.History.load({partner:hObj});
        }

    }

    function showHide() {
        // main view
        $("#label_no_items").hide();
        $("#items_regular").show();
        $("#items_strategic").show();

        if (! ($(".items_strategic > div.p-link").filter(":visible").length > 0))
            $("#items_strategic").hide();
        if (!($(".items_regular > div.p-link").filter(":visible").length > 0))
            $("#items_regular").hide();
        if ($(".items_regular > div.p-link").filter(":visible").length + $(".items_strategic > div.p-link").filter(":visible").length < 1 ) {
            $("#label_no_items").show();
       }
    }

    SF.addToDOMReady(init);

});

