﻿var uberAutoCompleteMembers;

function uberAutoComplete()
{
    this.index = undefined;
    this.targetId = undefined;
    this.topOffSet = undefined;
    this.cssClass = undefined;
    this.servicePath = undefined;
    this.timeout = undefined;
    this.precursors = undefined;
    this.prefixLength = undefined;

    this.addPrecursor = function(value)
    {
        if (this.precursors == undefined)
        {
            this.precursors = new Array();
        }

        this.precursors[this.precursors.length] = value;
    }

    this.attach = function()
    {
        document.getElementById(this.targetId).setAttribute('autocomplete', 'off');

        if (uberAutoCompleteMembers == undefined)
        {
            uberAutoCompleteMembers = new Array();
        }

        for (var i = 0; i <= uberAutoCompleteMembers.length && this.index == undefined; i++)
        {
            if (uberAutoCompleteMembers[i] == undefined)
            {
                this.index = i;
                uberAutoCompleteMembers[i] = new Object();
            }
        }

        this.id = Math.random().toString(16).substring(2);

        uberAutoCompleteMembers[this.index].id = this.id;
        uberAutoCompleteMembers[this.index].targetId = this.targetId;
        uberAutoCompleteMembers[this.index].topOffSet = this.topOffSet;
        uberAutoCompleteMembers[this.index].cssClass = this.cssClass;
        uberAutoCompleteMembers[this.index].servicePath = this.servicePath;
        uberAutoCompleteMembers[this.index].precursors = this.precursors;
        uberAutoCompleteMembers[this.index].timeout = this.timeout;
        uberAutoCompleteMembers[this.index].prefixLength = this.prefixLength;

        var autoCompleteBox = document.createElement('div');
        autoCompleteBox.setAttribute('id', this.id);
        autoCompleteBox.className = this.cssClass;
        autoCompleteBox.style.display = 'none';
        autoCompleteBox.style.position = 'absolute';
        autoCompleteBox.style.width = document.getElementById(this.targetId).clientWidth + 'px';

        document.body.appendChild(autoCompleteBox);

        autoCompleteBox.style.left = uberGetElementPosition(this.targetId)[0] + 'px';
        autoCompleteBox.style.top = uberGetElementPosition(this.targetId)[1] + this.topOffSet + 'px';

        uberAddEvent(this.targetId, 'keyup', function()
        {
            uberAutoCompleteSendRequest(this);
        });

        //This is rubbish but so is IE handling of javascript
        if (this.index == 0)
        {
            uberAddEvent(this.targetId, 'blur', function()
            {
                uberAutoCompleteHide(0);
            });
        }
        else if (this.index == 1)
        {
            uberAddEvent(this.targetId, 'blur', function()
            {
                uberAutoCompleteHide(1);
            });
        }
        else if (this.index == 2)
        {
            uberAddEvent(this.targetId, 'blur', function()
            {
                uberAutoCompleteHide(2);
            });
        }
        else if (this.index == 3)
        {
            uberAddEvent(this.targetId, 'blur', function()
            {
                uberAutoCompleteHide(3);
            });
        }
        //////////////////////////////////////////////////
    }
}

function uberAutoCompleteSendRequest(element)
{
    var autoCompleteIndex = undefined;
    var targetControlId = undefined;
    var ajaxRequest = undefined;

    //Firefox
    if (element.getAttribute)
    {
        targetControlId = element.getAttribute('id');
    }
    //IE
    else
    {
        targetControlId = document.activeElement.getAttribute('id');
    }

    for (var i = 0; i < uberAutoCompleteMembers.length && autoCompleteIndex == undefined; i++)
    {
        if (uberAutoCompleteMembers[i].targetId == targetControlId)
        {
            autoCompleteIndex = i;
        }
    }

    if (window.XMLHttpRequest)
    {
        ajaxRequest = new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
        ajaxRequest = new ActiveXObject('Microsoft.XMLHTTP');
    }

    ajaxRequest.onreadystatechange = function()
    {
        if (ajaxRequest.readyState == 4 && ajaxRequest.status == 200)
        {
            var output = new String();
            var entry = new String();
            var currentPosition = 0;
            var currentEnd = 0;

            output += '<ul>';

            while (currentPosition != -1)
            {
                currentEnd = ajaxRequest.responseText.indexOf('|', currentPosition + 1);

                if (currentEnd == -1)
                {
                    currentEnd = ajaxRequest.responseText.length;
                }

                entry = ajaxRequest.responseText.substring(currentPosition, currentEnd);

                if (entry != '')
                {
                    output += '<li onclick="uberAutoCompleteSelect(' + autoCompleteIndex + ', this.innerHTML);">' + ajaxRequest.responseText.substring(currentPosition, currentEnd).replace('|', '') + '</li>';
                }

                currentPosition = ajaxRequest.responseText.indexOf('|', currentPosition + 1);
            }

            output += '</ul>';
            
            if(output.length == 9){
                document.getElementById('TcName').style.backgroundImage = 'URL(/Images/Css/form-back-none.gif)';}
            else{
                document.getElementById('TcName').style.backgroundImage = 'URL(/Images/Css/form-back.gif)';}
                
            
            document.getElementById(uberAutoCompleteMembers[autoCompleteIndex].id).innerHTML = output;
            if(output.length == 9)
            {
                document.getElementById(uberAutoCompleteMembers[autoCompleteIndex].id).style.display = 'none';
            }
            else
            {
                document.getElementById(uberAutoCompleteMembers[autoCompleteIndex].id).style.display = 'block';
            }
        }
    };

    var servicePath = uberAutoCompleteMembers[autoCompleteIndex].servicePath;
    servicePath = servicePath + '?cacheBuster=' + new Date();
    servicePath = servicePath + '&' + uberAutoCompleteMembers[autoCompleteIndex].targetId + '=' + document.getElementById(uberAutoCompleteMembers[autoCompleteIndex].targetId).value;

    if (uberAutoCompleteMembers[autoCompleteIndex].precursors != undefined)
    {
        for (var i = 0; i < uberAutoCompleteMembers[autoCompleteIndex].precursors.length; i++)
        {
            servicePath = servicePath + '&' + uberAutoCompleteMembers[autoCompleteIndex].precursors[i] + '=' + document.getElementById(uberAutoCompleteMembers[autoCompleteIndex].precursors[i]).value;
        }
    }
    if (document.getElementById(uberAutoCompleteMembers[autoCompleteIndex].targetId).value.length >= uberAutoCompleteMembers[autoCompleteIndex].prefixLength)
    {
        ajaxRequest.open('GET', servicePath, true);
        ajaxRequest.send(null);
    }
    else
    {
        document.getElementById(uberAutoCompleteMembers[autoCompleteIndex].id).style.display = 'none';
    }
}

function uberAutoCompleteSelect(autoCompleteIndex, value)
{
    uberAutoCompleteHide(autoCompleteIndex);
    document.getElementById(uberAutoCompleteMembers[autoCompleteIndex].targetId).value = value.replace(/(<([^>]+)>)/ig,"");
    document.getElementById('TcName').style.backgroundImage = 'URL(/Images/Css/form-back.gif)';
    document.getElementById('btnSearch').href = '/System/ActivateTc.aspx?TcName=' + value;
}

function uberAutoCompleteHide(autoCompleteIndex)
{
    setTimeout('uberAutoCompleteHider(' + autoCompleteIndex + ')', 400);
}

function uberAutoCompleteHider(autoCompleteIndex)
{
    document.getElementById(uberAutoCompleteMembers[autoCompleteIndex].id).style.display = 'none';
}

function uberGetElementPosition(elementId)
{
    var left = 0;
    var top = 0;
    var element = document.getElementById(elementId);

    if (element.offsetParent)
    {
        do
        {
            left += element.offsetLeft;
            top += element.offsetTop;
        }
        while (element = element.offsetParent);
    }

    return [left, top];
}

function uberAddEvent(elementId, eventName, method)
{
    if (document.getElementById(elementId).addEventListener)
    {
        document.getElementById(elementId).addEventListener(eventName, method, false);
    }
    else if (document.getElementById(elementId).attachEvent)
    {
        document.getElementById(elementId).attachEvent('on' + eventName, method);
    }
}

var uberTextMaskMembers;
var uberTextMaskLast;
function uberTextMask(inputBoxId, maskText)
{
    this.index = undefined;

    if (uberTextMaskMembers == undefined)
    {
        uberTextMaskMembers = new Array();
    }

    for (var i = 0; i <= uberTextMaskMembers.length && this.index == undefined; i++)
    {
        if (uberTextMaskMembers[i] == undefined)
        {
            this.index = i;
            uberTextMaskMembers[i] = new Object();
        }
    }

    uberTextMaskMembers[this.index].inputBoxId = inputBoxId;
    uberTextMaskMembers[this.index].maskText = maskText;
    document.getElementById(inputBoxId).value = maskText;

    uberAddEvent(inputBoxId, 'focus', uberTextMaskFocus);
    uberAddEvent(inputBoxId, 'blur', uberTextMaskBlur);
}

function uberTextMaskFocus(e)
{
    var elementId;

    if (e.target)
    {
        elementId = e.target.getAttribute('id');
    }
    else
    {
        elementId = document.activeElement.getAttribute('id');
    }

    for (var i = 0; i < uberTextMaskMembers.length; i++)
    {
        if (uberTextMaskMembers[i].inputBoxId == elementId)
        {
            if (document.getElementById(elementId).value == uberTextMaskMembers[i].maskText)
            {
                document.getElementById(elementId).value = '';
            }

            uberTextMaskLast = elementId;
        }
    }
}

function uberTextMaskBlur()
{
    for (var i = 0; i < uberTextMaskMembers.length; i++)
    {
        if (uberTextMaskMembers[i].inputBoxId == uberTextMaskLast)
        {
            if (document.getElementById(uberTextMaskLast).value == '')
            {
                document.getElementById(uberTextMaskLast).value = uberTextMaskMembers[i].maskText;
            }

            uberTextMaskLast = elementId;
        }
    }
}

function uberWriteCookie(name, value, daysToExpire)
{
    var dateToExpire = new Date();
	daysToExpire = (daysToExpire || 30);
	dateToExpire.setTime(dateToExpire.getTime() + (daysToExpire * 86400000));
	
	document.cookie = name + "=" + value + "; expires=" + dateToExpire.toGMTString() + "; path=/";
}

function uberReadCookie(name)
{
	var cookieCollection = document.cookie;

	if (cookieCollection.indexOf(name) != -1)
	{
		var cookieStart = cookieCollection.indexOf(name) + name.length + 1;
		var cookieEnd = cookieCollection.indexOf(";", cookieStart);

		if (cookieEnd == -1)
		{
		    cookieEnd = cookieCollection.length;
		}

		return unescape(cookieCollection.substring(cookieStart, cookieEnd));
	}
	else
	{
		return null;
	}
}

function uberDeleteCookie(name)
{
	writeCookie(name, "", -1);
}
