
SearchProfessionByActivitySector = {


    init: function() {
        TFI.ClientUtils.initPopup(".pnlPanelSPAS");
        SearchProfessionByActivitySector.setEventHandlers();
        SearchProfessionByActivitySector.hide();
    },
    
    setEventHandlers: function() {
        $(".btnModifySectorSPAS").unbind().click(SearchProfessionByActivitySector.onClickModifySector);    
        $(".btnModifyJobCategorySPAS").unbind().click(SearchProfessionByActivitySector.onClickModifyJobCategory);    
        $(".btnCancelSPAS").unbind().click(SearchProfessionByActivitySector.onClickCancel);    
        $(".btnPreviousPageSPAS").unbind().click(SearchProfessionByActivitySector.onClickPreviousPage);    
        $(".btnNextPageSPAS").unbind().click(SearchProfessionByActivitySector.onClickNextPage);    
        $(".btnSectorSPAS").unbind().click(SearchProfessionByActivitySector.onSelectSector);    
        $(".btnJobCategorySPAS").unbind().click(SearchProfessionByActivitySector.onSelectJobCategory);    
        $(".btnProfessionSPAS").unbind().click(SearchProfessionByActivitySector.onSelectProfession);    
    },

    show: function() {
        SearchProfessionByActivitySector.showSelectSector();
        //TODO: remove css width, apply css styles in css file
        //$.blockUI({ message: $(".pnlPanelSPAS"), css: { width: '700px' } });
        $.blockUI({ message: $(".pnlPanelSPAS") });
        $(".pnlPanelSPAS").addClass("AjaxSize");
        return false;    
    },
    
    hide: function() {
        $(".pnlPanelSPAS").css("display", "none"); //Hide panel    
        $.unblockUI({ message: $(".pnlPanelSPAS") });
        return false;
    },
    
    showPanel: function(enumPanel) {
        $(".pnlSectorTableSPAS").css("display", (enumPanel==TFI.Const.EnumSPASViewPanel.SelectSector ? "" : "none") );
        $(".btnModifySectorSPAS").css("display", (enumPanel!=TFI.Const.EnumSPASViewPanel.SelectSector ? "" : "none") );
        $(".litActivitySectorSelectedSPAS").css("display", (enumPanel!=TFI.Const.EnumSPASViewPanel.SelectSector ? "" : "none") );
        $(".pnlJobCategorySPAS").css("display", (enumPanel!=TFI.Const.EnumSPASViewPanel.SelectSector ? "" : "none") );
        $(".btnModifyJobCategorySPAS").css("display", (enumPanel==TFI.Const.EnumSPASViewPanel.SelectProfession ? "" : "none") );
        $(".litJobCategorySelectedSPAS").css("display", (enumPanel==TFI.Const.EnumSPASViewPanel.SelectProfession ? "" : "none") );
        $(".pnlJobCategoryTableSPAS").css("display", (enumPanel==TFI.Const.EnumSPASViewPanel.SelectJobCategory ? "" : "none") );
        $(".pnlProfessionSPAS").css("display", (enumPanel==TFI.Const.EnumSPASViewPanel.SelectProfession ? "" : "none") );
        $(".pnlProfessionTableSPAS").css("display", (enumPanel==TFI.Const.EnumSPASViewPanel.SelectProfession ? "" : "none") );
    },
    
    showSelectSector: function(){
        //Create table if it doesn't exist
        if($(".pnlSectorTableSPAS a").length == 0) {
            var res = TFI.ClientServices.Candidate.GetActivitySectors();                        
            TFI.ClientUtils.createLinksTable(".pnlSectorTableSPAS", eval(res.value), SearchProfessionByActivitySector.onSelectSector);
			//Show table and hide other panels
			SearchProfessionByActivitySector.showPanel(TFI.Const.EnumSPASViewPanel.SelectSector);
        } else {
			//Show table and hide other panels
			SearchProfessionByActivitySector.showPanel(TFI.Const.EnumSPASViewPanel.SelectSector);        
        } 
    },
      
    showSelectJobCategory: function(sectorValue){
        //Show table and hide other panels
        SearchProfessionByActivitySector.showPanel(TFI.Const.EnumSPASViewPanel.SelectJobCategory);
        //Create table for JobCategory
        var res = TFI.ClientServices.Candidate.GetJobCategories(sectorValue);
        TFI.ClientUtils.createLinksTable(".pnlJobCategoryTableSPAS", eval(res.value), SearchProfessionByActivitySector.onSelectJobCategory);
    },
    
    showSelectProfession: function(jobCategoryValue){
        //Show table and hide other panels
        SearchProfessionByActivitySector.showPanel(TFI.Const.EnumSPASViewPanel.SelectProfession);
        //Create table for Professions
        var res = TFI.ClientServices.Candidate.GetProfessions(jobCategoryValue);
		var table = new TFI.UI.Table(".pnlProfessionTableSPAS", eval(res.value), SearchProfessionByActivitySector.onSelectProfession, 5);
    },    

    getSelectedSector: function() {
        var control = $(".litActivitySectorSelectedSPAS");
        return { "text": control.val(), "value": control.attr("value") };
    },

    setSelectedSector: function(value, text) {
        var control = $(".litActivitySectorSelectedSPAS");
        control.text(text);
        control.attr("value", value);
    },

    getSelectedJobCategory: function() {
        var control = $(".litJobCategorySelectedSPAS");
        return { "text": control.val(), "value": control.attr("value") };
    },

    setSelectedJobCategory: function(value, text) {
        var control = $(".litJobCategorySelectedSPAS");
        control.text(text);
        control.attr("value", value);
    },    
    
    addEventHandlerProfessionSelected: function(eventHandler) { //Add custom event
        if(eventHandler != null)
            $(document).bind("profession:selected", eventHandler);
    },

    removeEventHandlerProfessionSelected: function(eventHandler) { //Remove custom event
        if(eventHandler != null)
            $(document).unbind("profession:selected", eventHandler);
    },
    
    triggerEventProfessionSelected: function(profession) { //Trigger custom event
        $(document).trigger("profession:selected", [ profession ] );
    },    
    
    onClickModifySector: function(e) {
        SearchProfessionByActivitySector.showSelectSector();
        return false;
    },
    
    onClickModifyJobCategory: function(e) {
        var sector = SearchProfessionByActivitySector.getSelectedSector();
        SearchProfessionByActivitySector.showSelectJobCategory(sector.value);
        return false;
    },
    
    onClickCancel: function(e) {
        SearchProfessionByActivitySector.hide();
        return false;
    },
    
    onClickPreviousPage: function(e) {
        //TODO: show previous page
        return false;
    },
    
    onClickNextPage: function(e) {
        //TODO: show next page
        return false;
    },
    
    onSelectSector: function(e) {
        var control = $(e.target);
        var value = control.attr("value");
        SearchProfessionByActivitySector.setSelectedSector(value, control.text());
        SearchProfessionByActivitySector.showSelectJobCategory(value);
        return false;
    },
    
    onSelectJobCategory: function(e) {
        var control = $(e.target);
        var value = control.attr("value");
        SearchProfessionByActivitySector.setSelectedJobCategory(value, control.text());
        SearchProfessionByActivitySector.showSelectProfession(value);
        return false;
    },
    
    onSelectProfession: function(e) {
        //TODO: get selected id and profession
        var control = $(e.target);
        var profession = {"text": control.text(), "value": control.attr("value")};
        SearchProfessionByActivitySector.triggerEventProfessionSelected(profession);
        SearchProfessionByActivitySector.hide();
        return false;
    }
    
}

