
// ----------------------------------------------------------------------------------------
//  Constructor parameters:
//      name:           Used to generate the id of divs and HTML controls 
//                      (other words will be added to create unique id's).    
//      listContent:    Array containing the all possible content of the MultiCheckBox.
//                      (each will get a checkbox with that text and value will be used to 
//                      generate id for that particular checkbox).
//      headline:       Text shown at top of control.   
// ----------------------------------------------------------------------------------------
function ControlSortBy(name, headline)
{
    this.headline= headline;
    this.name = name;
    this.nameDiv = "ControlSortBy_"+name+"Div";      // Name of div that surrounds the control.
    this.IdSelect = "ControlSortBy_Select_"+name;
    var self= this;
    
    // ------------------------------------------------------------------------------
    //  Render the control.
    // ------------------------------------------------------------------------------
    this.Render = function() {
        var temp = "";
        var criteria;

        // Outer div    
        temp += "<div id='" + this.nameDiv + "' class='Sortby'>";
        //        temp += "<div class='SortbyHeadline'>"+this.headline+"</div>";            
        temp += this.headline;
        //        temp += "<div class='SortbySelectDiv'>";
        temp += "<select class='SortbySelect' id='" + this.IdSelect + "'>"
        /* temp += "<option value='Ranking'>V&aelig;lg</option>";
        temp += "<option value='Brand'>Brand (alfabetisk)</option>";
        temp += "<option value='Category'>Kategori (alfabetisk)</option>";
        temp += "<option value='PriceAsc'>Pris (stigende)</option>";
        temp += "<option value='PriceDesc'>Pris (faldende)</option>";*/
        temp += "</select>"; //</div>";

        // End outer div.
        temp += "</div>";

        // Write HTML to page. 
        document.write(temp);

        $jq(document).ready(function() {
            $("select#" + self.IdSelect).bind('change', { selectId: self.IdSelect, obj: self }, self.OnSelectChange);
        });
    }
    this.Render();
    
    this.AddSortOption = function(value, text)
    {
        //$("#"+self.IdSelect).addOption(value, text);  
        
        $("#"+self.IdSelect).append("<option value='"+value+"'>"+text+"</option>");
    }
    
    // ------------------------------------------------------------------------------
    //  Subscribe to specific event from searchcontroller.
    // ------------------------------------------------------------------------------ 
    this.SubscribeEvent = function(searchController, eventName, callback)
    {
        fc.SubscribeEvent(this, searchController, eventName, callback);
    }
    
    // ------------------------------------------------------------------------------
    //  Subscribe to all relevant events from searchcontroller.
    // ------------------------------------------------------------------------------ 
    this.SubscribeEvents = function(searchController)
    {
        self.SubscribeEvent(searchController, "SearchResult", self.OnSearchResult);
    }   
    
    this.RegisterAsTrigger = function(searchController)
    {
        fc.RegisterTrigger(this.name, searchController);
    }
    
    this.OnSelectChange = function(event)
    {   
        var sortField;
        var sortDir;
        
        switch($("#"+self.IdSelect).val())
        {
            case "Ranking":
                 sortField = null;
                 sortDir = null;
                break;
            case "Brand":
                sortField = "b";
                sortDir = "asc";
                break;
            case "Category":
                sortField = "c";
                sortDir = "asc";
                break;
            case "PriceAsc":
                sortField = "sp";
                sortDir = "asc";
                break;
            case "PriceDesc":
                sortField = "sp";
                sortDir = "desc";
                break;
        }
        fc.CriteriaChange_Sorting(self.name, sortField, sortDir);        
    }
	
	this.OnSearchResult = function(data, _this, persistedSearch)
	{	
		switch(data.responseHeader.params.sort)
		{
			case "c asc":
					$jq("#"+self.IdSelect).val("Category");
					break;
			case "b asc":
					$jq("#"+self.IdSelect).val("Brand");
					break;
			case "sp asc":
					$jq("#"+self.IdSelect).val("PriceAsc");
					break;	
			case "sp desc":
					$jq("#"+self.IdSelect).val("PriceDesc");
					break;	
			case "":
					$jq("#"+self.IdSelect).val("Ranking");
					break;						
		}
	}
}