﻿// JScript File

function URL(href)
{
    var QM = "?";
    var AMP = "&";
    var EQ = "=";
    var HASH = "#";
    
    var sHref = new String(href);
    var indexOfQM;
    var indexOfHASH;
    var queryString;
    var length;
    
    
    if (typeof (this.parametersArr) == "undefined")
    {
        this.parametersArr = new Array();
    }
    
    length = sHref.length;
    
    indexOfHASH = sHref.indexOf(HASH, 0);
    if (indexOfHASH == (-1))
    {
        this.hash = null;
    }
    else if (indexOfHASH == length)
    {
        this.hash = '';
    }
    else 
    {
        this.hash = sHref.substring(indexOfHASH + 1, length);
    }
    
    // check if question mark exists
    indexOfQM = sHref.indexOf(QM, 0);
    if (indexOfQM == (-1))
    {
        // doesn't exist
        
        var temp;
        
        temp = indexOfHASH == (-1) ? length : indexOfHASH;
        this.before = sHref.substring(0, temp);
        this.qmExists = false;
    }
    else
    {
        this.before = sHref.substr(0, indexOfQM);
        this.qmExists = true;
        
        // check if it's the last char
        if (indexOfQM != (length - 1))
        {
            queryString = sHref.substring(indexOfQM + 1, ((-1) == indexOfHASH) ? length : indexOfHASH);
            if (queryString.length != 0)
            {
                var items = queryString.split(AMP);
                if (items.length != 0)
                {
                    for (var k = 0; k < items.length ; k++)
                    {
                        var innerItems = items[k].split(EQ);
                        if (innerItems.length == 2)
                            this.parametersArr.push(new Param(innerItems[0], innerItems[1]));
                    }
                }
            }
        }
    }
    
    this.setHash = function(v)
    {
        this.hash = v;
    }
    this.getHash = function()
    {
        return this.hash;
    }

    this.setParam = function(name, value)
    {
        for (var j = 0; j < this.parametersArr.length ; j++)
        {
            if ((this.parametersArr[j] != null) && (this.parametersArr[j].name == name))
            {
                this.parametersArr[j].value = value;
                return;
            }
        }
        this.parametersArr.push(new Param(name, value));
    }
    
    this.getParam = function(name)
    {
        for (var j = 0; j < this.parametersArr.length ; j++)
        {
            if (this.parametersArr[j].name == name)
            {
                return this.parametersArr[j].value;
            }
        }
        return null;
    }


    this.removeParam = function(name)
    {
        for (var j = 0; j < this.parametersArr.length ; j++)
        {
            if ((this.parametersArr[j] != null) && (this.parametersArr[j].name == name))
            {
                this.parametersArr[j] = null;
                return;
            }
        }
    }
    
    this.getHref = function()
    {
        var res;
        
        if (this.parametersArr.length == 0)
        {
            res = this.before;
            if (this.qmExists)
                res += QM;
        }
        else
        {
            var newqs = new String("");
            var tempItems = new Array();
            var idx = 0;
            
            for (var j = 0; j < this.parametersArr.length ; j++)
            {
                if (this.parametersArr[j] != null)
                {
                    tempItems[idx] = this.parametersArr[j].name + "=" + this.parametersArr[j].value;
                    idx++;
                }
            }
            
            newqs = tempItems.join("&");
            
            var result = this.before + "?" + newqs;
            res = result;
        }
        
        if (null == this.hash)
            return res;
        res += HASH + this.hash;
        return res;
    }
}

function Param(name, value)
{
    this.name =  name;
    this.value = value;
}