﻿// This JS file is for project wide JS.

var autotabs;

function initAutoTabEventHandlers()
{
    autotabs = getAutoTabs();
    for (autotab in autotabs){
        for (var i=0; i < autotabs[autotab].length; i++){
            attachEventListener(autotabs[autotab][i], "keyup", ef_autoTabListener, false);
        }
    }
}

function getAutoTabs()
{
    if (document.getElementsByTagName){
        var autoTabGroups = new Array();
        
        if (autoTabGroups.push){
            var inputElements = document.getElementsByTagName("input");
            for (var i=0; i < inputElements.length; i++){
                var inputElement = inputElements.item(i);
                if (inputElement.getAttribute('autotabgroup') != '' && inputElement.getAttribute('autotabid') != '' && inputElement.getAttribute('maxlength') != ''){
                    if (!(autoTabGroups[inputElement.getAttribute('autotabgroup')] instanceof Array)){
                        autoTabGroups[inputElement.getAttribute('autotabgroup')] = new Array();
                    }
                    autoTabGroups[inputElement.getAttribute('autotabgroup')].push(inputElement);
                }
            }
            return autoTabGroups;
        }
    }
    
    return false;
}

function ef_autoTabListener(event)
{
    var inputElement = getEventTarget(event);
    if(event.keyCode != 8 && event.keyCode != 13 && event.keyCode != 16 && event.keyCode != 9 && inputElement.value.length == inputElement.getAttribute("maxlength")) {
        ef_tabToNextField(inputElement);
    }
}

function ef_tabToNextField(inputElement)
{
    var tabid = inputElement.getAttribute('autotabid');
    
    var tabgroup = autotabs[inputElement.getAttribute('autotabgroup')];
    
    // If this is the last field in the tab group, do nothing
    if (tabid == tabgroup.length){
        return;
    }
    
    tabid++;
    
    for (var i=0; i < tabgroup.length; i++){
        if (tabid == tabgroup[i].getAttribute('autotabid')){
            tabgroup[i].focus();
			tabgroup[i].select();
            return;
        }
    }
}

/*
 * Event related convenience code
 **/
function attachEventListener(target, eventType, functionRef, capture)
{
    if (target != null && typeof target.addEventListener != "undefined") {
        target.addEventListener(eventType, functionRef, capture);
    } else if (target != null && typeof target.attachEvent != "undefined") {
        target.attachEvent("on" + eventType, functionRef);
    } else {
        eventType = "on" + eventType;
        
        if (target != null && typeof target[eventType] == "function") {
            var oldListener = target[eventType];
            
            target[eventType] = function()
            {
                oldListener();
                
                return functionRef();
            };
        } else {
            if (target != null ){
                target[eventType] = functionRef;
            }
        }
    }
}

function detachEventListener(target, eventType, functionRef, capture)
{
    if (target != null && typeof target.removeEventListener != "undefined") {
        target.removeEventListener(eventType, functionRef, capture);
    } else if (target != null && typeof target.detachEvent != "undefined") {
        target.detachEvent("on" + eventType, functionRef);
    } else {
        if (target != null ){
            target["on" + eventType] = null;
        }
    }
}

function stopDefaultAction(event)
{
    event.returnValue = false;
    
    if (typeof event.preventDefault != "undefined") {
        event.preventDefault();
    }
}

function getEventTarget(event)
{
    var targetElement = null;
    
    if (typeof event.target != "undefined") {
        targetElement = event.target;
    } else {
        targetElement = event.srcElement;
    }
    
    while (targetElement.nodeType == 3 && targetElement.parentNode != null) {
        targetElement = targetElement.parentNode;
    }
    
    return targetElement;

}