﻿/* Cross-browser compatibility functions */
function GetEvent(e) {
	if (typeof(event) == 'object')	e = event;
	return e;
}
function EventTarget(e) {
	if(typeof(e.srcElement) != 'undefined')
		return e.srcElement;
	else if(typeof(e.target) != 'undefined')
		return e.target;
}
function EventType(e) {
	if(e.type)
		if(e.type.substring(0,2) == 'on')
			return e.type.substring(2);
		else 
			return e.type;
}
function AttachEvent(obj, eventType, eventHandler) {
	if (typeof(obj.attachEvent) == 'object') {
		obj.detachEvent('on' + eventType, eventHandler);
		obj.attachEvent('on' + eventType, eventHandler);
	}
	else if (typeof(obj.addEventListener) == 'function') {
		obj.removeEventListener(eventType, eventHandler, false);
		obj.addEventListener(eventType, eventHandler, false);
	}
}
function DetachEvent(obj, eventType, eventHandler) {
	if (typeof(obj.detachEvent) == 'object')
		obj.detachEvent('on' + eventType, eventHandler);
	else if (typeof(obj.removeEventListener) == 'function')
		obj.removeEventListener(eventType, eventHandler, false);	
}
function FireEvent(obj, eventType) {
	if (typeof(obj.fireEvent) == 'object') {
		obj.fireEvent('on' + eventType);
	} else if (typeof(obj.dispatchEvent) == 'function') {
		var evt = document.createEvent("Events");
		evt.initEvent(eventType, 1, 1);
		obj.dispatchEvent(evt);
	}
}

function changeText(elementID, text)
{
    var element = document.getElementById(elementID);
    if(element.innerText) element.innerText = text;
    if(element.textContent) element.textContent = text;
    
}
/* End of Cross-browser compatibility functions */

function CBTextbox_OnClientCallback(source)
{
    return source.value;
}
function CBTextbox_OnClientCallbackResult(argument, context)
{
 /* progress indicator */
    //document.getElementById(context.id + "Arrow").innerText = "▼";
    changeText(context.id + "Arrow","▼");
    var itemString = '<a href="#" tabindex="-1" class="' + context.getAttribute("ItemClass") + 
        '" style="display: block;" onclick="return CBTextbox_OnClick(this)" onmouseover="this.className = \'' + 
        context.getAttribute("ItemClassActive") + '\'" onmouseout="this.className = \'' + context.getAttribute("ItemClass") + '\'" ';
    var itemHTML = '';
    var words = context.value.split(' ');
    for(var j=0; j<words.length; j++){
        words[j] = words[j].replace(/&/ig, "&amp;");
        words[j] = words[j].replace(/>/ig, "&gt;");
        words[j] = words[j].replace(/</ig, "&lt;");
        words[j] = words[j].replace(/[^a-z0-9]/ig, "\\$&");
    }

    if(argument > '')
    {
        var items = argument.replace(new RegExp("&", "ig"), "&amp;").replace(new RegExp(">", "ig"), "&gt;").split('<');
        //itemHTML = itemString + items.join('</a>' + itemString) + '</a>';
        var id = '';
        var text = '';
        var itemHTML = '';
        for(var i=0; i<items.length; i++){
            var itemsAndIds = items[i].split('~');
            if(typeof(itemsAndIds[1]) == "undefined"){
                id = '';
                text = itemsAndIds[0];
            }else{
                id = itemsAndIds[0];
                text = itemsAndIds[1];
            }
            //Highlight matched substrings
            for(var j=0; j<words.length; j++){
                if(words[j].length > 0) text = text.replace(new RegExp(words[j], "ig"), "<b><u>$&</u></b>");
            }
            itemHTML += itemString + ' name="' + id + '">' + text + '</a>'; 
        }
    }
    document.getElementById(context.id + '_Popup').innerHTML = itemHTML;
    CBTextbox_SelectItem(null, context);
}
function CBTextbox_OnClientCallbackError(argument, context)
{
    /* progress indicator */
    //document.getElementById(context.id + "Arrow").innerText = "▼";
    changeText(context.id + "Arrow","▼");
    alert('An error has occured: ' + argument);
}
function CBTextbox_OnFocus(source)
{
    clearTimeout(callbackTimeout[source.id]);
    document.getElementById(source.id + '_Popup').style.display = '';
    source.select();
    CBTextbox_Callback(source);
}
function CBTextbox_OnBlur(source)
{
    //document.getElementById(source.id + "Arrow").innerText = "▼";
    changeText(source.id + "Arrow","▼");
    var items = document.getElementById(source.id + "_Popup");
//    if(items.contains) if(items.contains(document.activeElement)) return;
//    if(window.getSelection) if(window.getSelection().containsNode(items, true)) return;
    CBTextbox_SelectItem(null, source);
    callbackTimeout[source.id] = setTimeout('document.getElementById("' + source.id + '_Popup").style.display = "none"', 200);
}
function CBTextbox_OnClick(source) {

    if(source == null) return false;
    var popup = source.parentNode;
    var textbox = document.getElementById(popup.id.substring(0, popup.id.length - "_Popup".length));
    //document.getElementById(textbox.id + "Arrow").innerText = "▼";
    changeText(textbox.id + "Arrow","▼");
    if(source.innerText) textbox.value = source.innerText;
    if (source.textContent) textbox.value = source.textContent; 
        
    //var value = source.name != "" ? source.name : null;    
    clearTimeout(callbackTimeout[textbox.id]);
    CBTextbox_Callback(textbox);
    callbackTimeout[textbox.id] = setTimeout('CBTextbox_OnSelectedIndexChanged(document.getElementById("' + textbox.id + '"),"' + source.name + '")', 10);
    if (selectedItem != null) selectedItem.focus();
    if(document.getElementById(textbox.id + "_Popup")) document.getElementById(textbox.id + "_Popup").style.display = "none";
    
    return false;
}

var callbackTimeout = new Array();
//var onFocusFlag = new Array();
var selectedItem;
function CBTextbox_SelectItem(item, source)
{
    if(selectedItem != null && source != null) selectedItem.className = source.getAttribute("ItemClass");
    selectedItem = item;
    if(selectedItem != null) 
    {
        selectedItem.className = source.getAttribute("ItemClassActive");
        if(selectedItem.innerText) source.value = selectedItem.innerText;
        if(selectedItem.textContent) source.value = selectedItem.textContent;
        if(window.getSelection)
        {
            window.getSelection().collapse(source, 0);
        }
        if(source.createTextRange)
        {
            var tr = source.createTextRange();
            tr.collapse(false);
            tr.select();
        }
    }
}
function CBTextbox_OnKeyDown(source, e)
{
    clearTimeout(callbackTimeout[source.id]);
    var items = document.getElementById(source.id + "_Popup").getElementsByTagName("A");
    
    switch(e.keyCode) {
    
        case 9: //Tab
        case 13: //Enter
            if (selectedItem != null) {
                //selectedItem.focus();
                CBTextbox_OnClick(selectedItem);
            } else {
                if (items.length == 1) {
                    selectedItem = items[0];
                    // selectedItem.focus();
                    CBTextbox_OnClick(selectedItem);
                }
            }

            return false;
            break;
        case 27: //Escape;
            source.blur();
            return false;
            break;
        case 33: //PageUp
            break;
        case 34: //PageDown
            break;
        case 38: //ArrowUp
            if(items.length > 0)
                if(selectedItem != null) {
                    if(selectedItem.previousSibling != null) CBTextbox_SelectItem(selectedItem.previousSibling, source);
                } else CBTextbox_SelectItem(items[items.length - 1], source);
            return false;
            break;
        case 40: //ArrowDown
            if(items.length > 0)
                if(selectedItem != null) {
                    if(selectedItem.nextSibling != null) CBTextbox_SelectItem(selectedItem.nextSibling, source);
                } else CBTextbox_SelectItem(items[0], source);
            return false;
            break;
        default:
            { 
                callbackTimeout[source.id] = setTimeout('CBTextbox_Callback(document.getElementById("' + source.id + '"))', 500);
            }
    }
/* progress indicator */
    //if(source) document.getElementById(source.id + "Arrow").innerText = "...";
    changeText(source.id + "Arrow", "...");
}
function CBTextbox_Callback(source)
{
    WebForm_DoCallback(source.name,eval(source.getAttribute("OnClientCallback") + "(source)"),CBTextbox_OnClientCallbackResult,source,CBTextbox_OnClientCallbackError,true);
}

function CBTextbox_OnSelectedIndexChanged(source, value)
{
    if(typeof(source.getAttributeNode) != "undefined"){
        eval(source.getAttributeNode("onselectedindexchanged").value + "(source, value)");
    }
}




