var EkolayTabCounter = {
    Collection: Object
};
EkolayTabCounter.Collection.Factory = function() 
{
    var timeOutMiliSeconds = 180000;
    var homePageURL = '/';
    var nameOfCookie = 'EkolayTabCounter';
    var map = new EkolayTabCounter.Collection.Map();
    var tabIdx = 0;
    this.init = function()
    {
        var cookieVal = this.getCookie();
        if(null == cookieVal) return;
        var arr1 = cookieVal.split('|');
        for(var i=0; i<arr1.length; i++)
        {
            var arr2 = arr1[i].split('$');
            if(arr2.length > 0)
            {
                var subMap = new EkolayTabCounter.Collection.Map();
                for(var j=1; j<arr2.length; j++)
                {
                    var arr3 = arr2[j].split(':');
                    subMap.put(arr3[0], arr3[1]);
                }
                map.put(arr2[0], subMap);
            }
        }
    }
    this.setTabIdx = function(tabId, idxOrder, selectedIdx)
    {
        var subMap = map.get(tabId);
        if(null == subMap)
        {
            tabIdx = selectedIdx;
        }
        else
        {
            var tempVal = 99999;
            for(var i=0; i<idxOrder.length; i++)
            {
                var val = subMap.get(idxOrder[i]);
                if(null == val)
                {
                    tabIdx = idxOrder[i];
                    break;
                }
                if(parseInt(val) < tempVal)
                {
                    tempVal = parseInt(val);
                    tabIdx = idxOrder[i];
                }
            }
        }
        this.incrementTabClick(tabId, tabIdx);
    }
    this.writeSelectedClass = function(idx)
    {
        if(idx == tabIdx)
        {
            return ' class=selected';
        }
        return '';
    }
  
    this.persist = function()
    {
        var cookieVal = '';
        for(var i=0; i<map.length(); i++)
        {
            if(i>0) cookieVal += '|';
            cookieVal += map.getKeyFromIndex(i) + '$';
            var subMap = map.getValueFromIndex(i);
            for(var j=0; j<subMap.length(); j++)
            {
                if(j>0) cookieVal += '$';
                cookieVal += subMap.getKeyFromIndex(j) + ':' + subMap.getValueFromIndex(j);
            }
        }
        this.setCookie(cookieVal);
    }
    this.incrementTabClick = function(tabId, tabIdx)
    {
           var subMap = map.get(tabId);
        if(null == subMap)
        {
            subMap = new EkolayTabCounter.Collection.Map();
            map.put(tabId, subMap);
        }
        var val = subMap.get(tabIdx);
        if(null == val)
        {
            subMap.put(tabIdx, 1);
        }
        else
        {
            subMap.put(tabIdx, parseInt(val)+1);
        }
        this.persist();
    }
    this.getCookie = function()
    {
        if (document.cookie.length > 0) 
        {
            begin = document.cookie.indexOf(nameOfCookie+"="); 
            if (begin != -1)
            { 
                begin += nameOfCookie.length+1; 
                end = document.cookie.indexOf(";", begin);
                if (end == -1) end = document.cookie.length;
                return unescape(document.cookie.substring(begin, end));
            } 
        }
        return null;
    }
    this.setCookie = function(value)
    {
        document.cookie = nameOfCookie + "=" + escape(value);
    }
    this.init();
}
EkolayTabCounter.Collection.Map = function()
{
    var len = 0;
    var keys = new Array();
    var values = new Array();
    this.get = function(key)
    {
        var val = null;
        for(var i=0; i<len; i++)
        {
            if(keys[i] == key)
            {
                val = values[i];
                break;
            }
        }
        return val;
    }
    this.getKeyFromIndex = function(idx)
    {
        return keys[idx];
    }
    this.getValueFromIndex = function(idx)
    {
        return values[idx];
    }
    this.put = function(key, value)
    {
        if(this.contains(key))
        {
            for(var i=0; i<len; i++)
            {
                if(keys[i] == key)
                {
                    values[i] = value;
                    break;
                }
            }
        }
        else
        {
            keys[len] = key;
            values[len++] = value;
        }
    }
    this.length = function()
    {
        return len;
    }
    this.contains = function(key)
    {
	    var con = false;
        for(var i=0; i<len; i++)
        {
            if(keys[i] == key)
            {
                con = true;
                break;
            }
        }
        return con;
    }
    this.remove = function(key)
    {
        var keyArr = new Array();
        var valArr = new Array();
        var l = 0;
        for(var i=0; i<len; i++)
        {
            if(keys[i] != key)
            {
                keyArr[l] = keys[i];
                valArr[l++] = values[i];
            }
        }
        keys = keyArr;
        values = valArr;
    	len = l;
    }
}
var ekolayTabCounter = new EkolayTabCounter.Collection.Factory();
