var maxNumToSave = 8;
var cookieVersionId = '9G7X';
var maxCookieSize = 3800;
var dontUseCookies = false;


function isCookiesEnabled()
{
	var cookieEnabled = (navigator.cookieEnabled) ? true : false;

	if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled)
	{ 
		document.cookie="testcookie";
		cookieEnabled = (document.cookie.indexOf("testcookie") != -1) ? true : false;
	}
	return (cookieEnabled);
}


//
// In Firefox I'm having a problem with selecting text during the onFocus event
// of an input text box. If I do the select of the text directly from the onFocus
// event, every other time it does not work. My fix is to do it in two steps using
// the onFocus event and the click event.
//
function specialOnFocus(obj)
{
    obj.doSelect = true;
}

function specialOnClick(obj)
{
    if (obj.doSelect)
    {
        obj.doSelect = false;
        obj.select();
    }
}

function findMeta(ref)
{
	var regExRemoveSpaces = / +/g;

	ref = ref.replace(regExRemoveSpaces, '');

	for (i = 0; i < maxNumToSave; i++)
	{
		var tmpArr = getCookieArr('bsbmeta' + i);
		
		if (0 == tmpArr.length)
		{
			return(-1);
		}
		
		toCmp = tmpArr[0].replace(regExRemoveSpaces, '');

		if (toCmp == ref)
		{
			return(i);
		}
	}
}

function makeRawCookieArr(valueArr)
{
	var	value = cookieVersionId + '|' + valueArr.length;
    var i;
	
	for (i = 0; i < valueArr.length; i++)
	{
		value += '|' + escape(valueArr[i]);
	}
	return value;
}


function setCookieArr(key, valueArr)
{
	var value = makeRawCookieArr(valueArr);
	
	document.cookie = key + '=' + value + '; expires=Thu, 31-Dec-2020 00:00:00 GMT; path=/';
}

function setCookieRaw(key, value)
{
    document.cookie = key + '=' + value + '; expires=Thu, 31-Dec-2020 00:00:00 GMT; path=/';
}

function clearCookieArr(key)
{
    document.cookie = key + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/';
}

function getCookieArr(key)
{
	var arr = ('; ' + document.cookie).split('; ');
    var i;
	
	nkey = key + '=';

	for (i = 1; i < arr.length; i++)
	{
		if (arr[i].substr(0, nkey.length) == nkey)
		{
			arr2 = arr[i].substr(nkey.length);

			var tmpVArr = arr2.split('|');
			
			var j;
			
			for (j = 0; j < tmpVArr.length; j++)
			{
				tmpVArr[j] = unescape(tmpVArr[j]);
			}
			
			var checkID = tmpVArr[0];
			var arrLen = tmpVArr[1];
			
			if ((checkID != cookieVersionId) || (arrLen != tmpVArr.length - 2))
			{
				return new Array();
			}
			
			return(tmpVArr.slice(2));
		}
	}
	
	return new Array();
}

function getCookieRaw(key)
{
	var arr = ('; ' + document.cookie).split('; ');
    var i;
	
	nkey = key + '=';

	var len = nkey.length;
	
	for (i = 1; i < arr.length; i++)
	{
		if (arr[i].substr(0, len) == nkey)
		{
			arr2 = arr[i].split('=');
			return(arr2[1]);
		}
	}
	
	return null;
}

function scrubCookies()
{
    var holdVArr = new Array();
    var holdMArr = new Array();
    var needFix = false;
    var i;
    
    for (i = 0; i < maxNumToSave; i++)
    {
        var tmpV = getCookieArr('bsbverse' + i);

        if (0 != tmpV.length)
        {
            holdVArr[holdVArr.length] = tmpV;
            
            var tmpM = getCookieArr('bsbmeta' + i);
            
            holdMArr[holdMArr.length] = tmpM;
        }
        else
        {
            needFix = true;
        }
    }
    
    if (0 == holdVArr.length)
    {
        return;
    }
    
    if (!needFix)
    {
        return;
    }
    
    for (i = 0; i < maxNumToSave; i++)
    {
        clearCookieArr('bsbverse' + i);
        clearCookieArr('bsbmeta' + i);
    }
    
    for (i = 0; i < holdVArr.length; i++)
    {
        setCookieArr('bsbverse' + i, holdVArr[i]);
        setCookieArr('bsbmeta' + i, holdMArr[i]);
    }
}
            

function cookiePromoteToTop(which)
{
    theOne = getCookieRaw('bsbverse' + which);
    
    if (null == theOne)
    {
        return theOne;
    }
    
    if (0 == which)
    {
        return theOne;
    }
    
    theOneM = getCookieRaw('bsbmeta' + which);
    
    for (i = which; i > 0; i--)
    {
        var iLessOne = i - 1;
        
        tmpVArr = getCookieRaw('bsbverse' + iLessOne);
        tmpMArr = getCookieRaw('bsbmeta' + iLessOne);
        
        setCookieRaw('bsbverse' + i, tmpVArr);
        setCookieRaw('bsbmeta' + i, tmpMArr);
    }
    
    setCookieRaw('bsbverse0', theOne);
    setCookieRaw('bsbmeta0', theOneM);
}

function cookieAddToTop(valArrRaw, metaArr)
{
	if (valArrRaw > maxCookieSize)
	{
		return;
	}

	for (i = maxNumToSave - 1; i > 0; i--)
	{
		var iLessOne = i - 1;

		var tmpVArr = getCookieRaw('bsbverse' + iLessOne);
		
		if (null == tmpVArr)
		{
			continue;
		}
		
		var tmpMArr = getCookieRaw('bsbmeta' + iLessOne);
		
        setCookieRaw('bsbverse' + i, tmpVArr);
        setCookieRaw('bsbmeta' + i, tmpMArr);
	}
	
    setCookieRaw('bsbverse0', valArrRaw);
    setCookieArr('bsbmeta0', metaArr);
}


function entryDelete(which)
{
	var i;

    for (i = which; i < maxNumToSave - 1; i++)
    {
        var iPlusOne = i + 1;
        
        tmpVArr = getCookieRaw('bsbverse' + iPlusOne);
		
		if (null == tmpVArr)
		{
			break;
		}
        tmpMArr = getCookieRaw('bsbmeta' + iPlusOne);
        
        setCookieRaw('bsbverse' + i, tmpVArr);
        setCookieRaw('bsbmeta' + i, tmpMArr);
    }

	clearCookieArr('bsbverse' + i);
	clearCookieArr('bsbmeta' + i);
}
    
	

function testThings()
{
	for (i = 0; i < maxNumToSave; i++)
	{
	    clearCookieArr('bsbverse' + i);
	    clearCookieArr('bsbmeta' + i);
	}

	var v1 = ['w1.1', 'w1.2', 'w1.3'];
	var m1 = ['john 1:1', 0, 1, 2, 3];
	var v2 = ['w2.1', 'w2.2', 'w2.3', 'w2.4', 'w2.5'];
	var m2 = ['john 2:2', 5, 4, 3, 2, 1, 0];
	var v3 = ['w3.1', 'w3.2', 'w3.3', 'w3.4', 'w3.5'];
	var m3 = ['john 3:3', 0, 2, 4, 1, 3, 5];
	
	setCookieArr('bsbverse2', v1);
	setCookieArr('bsbmeta2', m1);
	setCookieArr('bsbverse3', v2);
	setCookieArr('bsbmeta3', m2);
	setCookieArr('bsbverse4', v3);
	setCookieArr('bsbmeta4', m3);

}