﻿/*
* Contructs a javascript UrlBuilder object.
* This object generates Endeca URL's based on a number of inputs 
* including multiple dimension values and search terms
* 
* SGM 2011
*/
UrlBuilder = function(base) {
    this.selectedDimensionIds = Array();
    this.baseUrl = base;
};

UrlBuilder.prototype = {

    selectedDimensionIds: undefined,

    baseUrl: undefined,
	
	searchTerm: undefined,

    /*
    * Adds the given dimension value to the internal array.
    */
    addDimensionValue: function(dimVal) {
        if (dimVal) {
            var addToArray = true;
            for (var i = 0; i < this.selectedDimensionIds.length; i++) {
                if (this.selectedDimensionIds[i] === dimVal) {
                    addToArray = false;
                    break;
                }
            }
            if (addToArray) {
                this.selectedDimensionIds.push(dimVal);
            }
        }
    },
    /*
    * Removes the given dimension value from the internal array.
    */
    removeDimensionValue: function(dimVal) {
        for (var i = 0; i < this.selectedDimensionIds.length; i++) {
            if (this.selectedDimensionIds[i] === dimVal) {
                this.selectedDimensionIds.splice(i, 1);
                break;
            }
        }
    },
	/*
    * Sets the search term that's to be added to this URL
    */
    setSearch: function(term, name) {
		if (term)
		{
			if (!name) {
				name = "AllSearch";
			}
			this.searchTerm = name + "|" + escape(term.replace(/ /g, "+")) + "|1|";							
		} else {
			this.searchTerm = undefined;
		}        
    },
    /*
    * Generates the complete URL based on all input sources provided
    */
    toString: function() {
        var url = this.baseUrl + "?nav=N:";
        if (this.selectedDimensionIds.length == 0) {
            url = url + "0";
        } else {
            url = url + this.selectedDimensionIds.join('-');
        }        
        if (this.searchTerm) {
			url = url + ",Ntk:" + this.searchTerm;
		}
		
        return url;
    }
};


