﻿
var __vgComboBox_myHeader = null; //Nome da vgComboBox que está a ser tratada.
var __vgComboBox_myList = null; //Nome da lista que está a ser tratada.

function __vgComboBox_MM_showHideLayers(ctrl, listId) { 
    if (__vgComboBox_myList != null && __vgComboBox_myList != listId) {
        var list = document.getElementById(__vgComboBox_myList);
        __vgComboBox_CloseList(list);
	}

	var list = document.getElementById(listId);

    if (list.style.display == '') 
        __vgComboBox_CloseList(list);
    else
        __vgComboBox_OpenList(list, ctrl.id);
}

function __vgComboBox_mouseDown(e) {

    if (__vgComboBox_myList != null) {

        if (!__vgComboBox_isMouseDownOnControl(e, __vgComboBox_myList)  &&
            !__vgComboBox_isMouseDownOnControl(e, __vgComboBox_myHeader)) {
            
            var list = document.getElementById(__vgComboBox_myList);
            if (list.style.display != 'none') __vgComboBox_CloseList(list);
        }
	}
}

function __vgComboBox_getPosOfControl(sID) {
    var o, obj1 = o = document.getElementById(sID);
    if (o == null) { return [0, 0]; }
    var top = o.offsetTop, left = o.offsetLeft;

    var scrollTop = 0;  // não está em uso, parace não fazer falta (LC Jan 2010)
    var scrollLeft = 0;  // não está em uso, parace não fazer falta
    //alert('userAgent=' + navigator.userAgent  + '\ntop=' + top + ', left=' + left);

    o = o.offsetParent;
    var sLog = '';
    while (o) {
        if (document.all) {
            if (o.offsetParent) {
                if (o.scrollTop) scrollTop -= o.scrollTop;
                if (o.scrollLeft) scrollLeft -= o.scrollLeft;
            }
        } else {

        if (o.scrollTop) scrollTop -= o.scrollTop;
        if (o.scrollLeft) scrollLeft -= o.scrollLeft;
            // Mozilla bug
            if ((o.tagName == 'DIV') || (o.tagName == 'TABLE' && navigator.vendor == 'Netscape'))
                scrollTop += getAttrPixValue(o, 'border-top-width') | 0; scrollLeft += getAttrPixValue(o, 'border-left-width') | 0;
        }
        top += o.offsetTop;
        left += o.offsetLeft;
        o = o.offsetParent;

        sLog += '\ntop=' + top + ', left=' + left;
        
    }

    //window.status = "scrollTop=" + scrollTop;
    //alert('sLog=' + sLog);

    if (navigator.userAgent.indexOf('Mac') != -1 && typeof (document.body.leftMargin) != 'undefined') {
        left += document.body.leftMargin; top += document.body.topMargin;   // working?
    }
    return [left, top, left + obj1.offsetWidth, top + obj1.offsetHeight];
}

function getAttrPixValue(e, a) {
    var px = 0;
    if (window.getComputedStyle) {
        var css, sty = window.getComputedStyle(e, '');
        if (sty && sty.getPropertyCSSValue) {
            css = sty.getPropertyCSSValue(a);
            if ((css) && css.primitiveType <= 18) { try { px = css.getFloatValue(5) | 0; } catch (e) { }; }
        }
    }
    return px;
}


//retorna um bool caso o evento mouseDown tenha ocorrido "dentro" do controlo especificado.
function __vgComboBox_isMouseDownOnControl(mouseargs, controlName) {

    var obj;
    obj = document.getElementById(controlName);

    //Excepção para quando a lista está aberta e se clica nela
    var tempX, tempY;
    var IE = document.all ? true : false;
    if (IE) { // grab the x-y pos.s if browser is IE
        tempX = event.clientX + window.document.documentElement.scrollLeft;
        tempY = event.clientY + window.document.documentElement.scrollTop;
    } else {  // grab the x-y pos.s if browser is NS
        tempX = mouseargs.pageX;
        tempY = mouseargs.pageY;
    }

    var pos = __vgComboBox_getPosOfControl(controlName);
    //window.status = (tempX >= pos[0] && tempX <= pos[2] && tempY >= pos[1] && tempY <= pos[3]);

    //alert('__vgComboBox_isMouseDownOnControl, tempX=' + tempX + ', tempY=' + tempY + ', pos[0]=' + pos[0] + ', pos[1]=' + pos[1] + ', pos[2]=' + pos[2] + ', pos[3]=' + pos[3]);
    //alert(tempX >= pos[0] && tempX <= pos[2] && tempY >= pos[1] && tempY <= pos[3]);
    
    return (tempX >= pos[0] && tempX <= pos[2] && tempY >= pos[1] && tempY <= pos[3]);
    //return (tempX >= pos[0] && tempX <= pos[2] && tempY <= pos[1] && tempY >= pos[3]);
}

function __vgComboBox_OpenList(list, headerId) {
    __vgComboBox_myList = list.id;
    __vgComboBox_myHeader = headerId;
    list.style.display = '';
    if (navigator.appName == "Netscape" && parseInt(navigator.appVersion) == 4) document.captureEvents(document.Event.MOUSEDOWN);
    document.onmousedown = __vgComboBox_mouseDown;
}

function __vgComboBox_CloseList(list) {
    list.style.display = 'none';
    __vgComboBox_myList = null;
    __vgComboBox_myHeader = null;
    if (navigator.appName == "Netscape" && parseInt(navigator.appVersion) == 4) document.releaseEvents(Event.MOUSEDOWN);
    document.onmousedown = null;
}

function __vgComboBox_btOk_Click(Ctrl, CtrlId, txtControl, lstValues, pnChklist, txtDefault) {
    // Validações básicas ?

    // se ok, fecha
    if (__vgComboBox_myList != null) {
        var list = document.getElementById(__vgComboBox_myList);
        if (list.style.display != 'none') __vgComboBox_CloseList(list);
    }
    // Obtem texto e values da Seleção
    var txt = '';
    var arrValues = new Array;
    var tstart = eval('__vgComboBox_TrimStart_' + CtrlId);

    if (lstValues != '') {
        var olstValues = document.getElementById(lstValues);
        if (olstValues.selectedIndex >= 0) {
            txt = ltrim(olstValues.options[olstValues.selectedIndex].text, tstart);
            arrValues[0] = olstValues.options[olstValues.selectedIndex].value;
        }
    }

    if (pnChklist != '') {
        var pnChklist = document.getElementById(pnChklist);

        // procura tabela
        var tbl = pnChklist.firstChild;
        var p = 5;

        while (p-- > 0 && tbl.tagName != 'TABLE') tbl = tbl.nextSibling;

        cleanTable(tbl);
        
        if (tbl && tbl.tagName == 'TABLE')
            for (var i = 0; i < tbl.rows.length; i++) {
                var td = tbl.rows[i].firstChild;
                var chk = td.firstChild.firstChild;
                var lbl = chk.nextSibling;

                if (chk.checked) {
                    if (lbl.innerHTML) txt += ', ' + ltrim(lbl.innerHTML, tstart)
                    else txt += ', ' + ltrim(lbl.innerText, tstart)
                }
/*
                if (lbl.innerHTML) {
                    if (chk.checked) txt += ', ' + ltrim(lbl.innerHTML, tstart);
                }
                else {
                    if (chk.checked) txt += ', ' + ltrim(lbl.innerHTML, tstart);
                }
*/                
            }
    }

    var txtOutrosId = (Ctrl.attributes['txtOutrosId'] ? Ctrl.attributes['txtOutrosId'].value : '');
    if (txtOutrosId != '') {
        var txtOutros = document.getElementById(txtOutrosId);
        if (txtOutros.value != '') txt = txtOutros.value;
    }

    // Actualiza TextBox Principal
    var txtControl = document.getElementById(txtControl);
    txtControl.value = ltrim(txt, ' ,');

    // solta evento de SelectionChanged

    // SelectionChanged="vgCbCountry_evSelectionChanged(this)
    var evSelectionChanged = '__vgComboBox_SelectionChanged_' + CtrlId;

    evSelectionChanged = eval(evSelectionChanged);

    if (evSelectionChanged != '') {
        var evToRaise = evSelectionChanged;

        var re = /this/g;
        evToRaise = evToRaise.replace(re, 'getVgComboBoxById(CtrlId)');

        var re = /id/g;
        evToRaise = evToRaise.replace(re, '\'' + CtrlId + '\'');
        
        //alert('arrValues = ' + arrValues[0]);

        eval(evToRaise);
    }

    return false
}

function __vgComboBox_lblInitialLink(CtrlId, txtControl, lstValues, pnChklist, txtDefault) {

    if (__vgComboBox_myList != null) {

        // Fecha lista
        var list = document.getElementById(__vgComboBox_myList);

        if (list.style.display != 'none') __vgComboBox_CloseList(list);

        var txt = txtDefault;

        var txtControl = document.getElementById(txtControl);
        txtControl.value = txt;
        
        // tirar todos os checked
        if (lstValues != '') {
            var lstValues = document.getElementById(lstValues);
            lstValues.selectedIndex = -1;
        }

        if (pnChklist != '') {
            var pnChklist = document.getElementById(pnChklist);
            var tbl = pnChklist.firstChild;

            var p = 5;

            while (p-- > 0 && tbl.tagName != 'TABLE') tbl = tbl.nextSibling;

            cleanTable(tbl);

            if (tbl && tbl.tagName == 'TABLE')
                for (var i = 0; i < tbl.rows.length; i++) {
                var td = tbl.rows[i].firstChild;
                var chk = td.firstChild.firstChild;
                //var lbl = chk.nextSibling;
                if (chk.checked) chk.checked = false;
            }

        }

    }
}

function getVgComboBoxById(id) {
    this.className = "VgComboBox";
    this.id = id.id;

    this.obj = document.getElementById(id + '_vgObjComboBoxId');

    this.pnChklistId = (this.obj.attributes['pnChklistId'] ? this.obj.attributes['pnChklistId'].value : '');
    this.lstValuesId = (this.obj.attributes['lstValuesId'] ? this.obj.attributes['lstValuesId'].value : '');

    this.GetSelCount = function GetSelCount() {
        var cnt = 0;
        if (this.lstValuesId != '') {
            var lstValues = document.getElementById(this.lstValuesId);
            if (lstValues.selectedIndex >= 0)
                cnt = 1;
        }

        if (this.pnChklistId != '') {
            var pnChklist = document.getElementById(this.pnChklistId);
            var tbl = pnChklist.firstChild;

            var p = 5;

            while (p-- > 0 && tbl.tagName != 'TABLE') tbl = tbl.nextSibling;

            cleanTable(tbl);

            if (tbl && tbl.tagName == 'TABLE')
                for (var i = 0; i < tbl.rows.length; i++) {
                    var td = tbl.rows[i].firstChild;
                    var chk = td.firstChild.firstChild;
                //var lbl = chk.nextSibling;
                if (chk.checked) cnt++;
            }
        }

        return cnt;
    }

    this.GetArraySel = function GetArraySel() {

        var arrValues = new Array;

        if (this.lstValuesId != '') {
            var lstValues = document.getElementById(this.lstValuesId);
            if (lstValues.selectedIndex >= 0)
                arrValues[0] = lstValues.options[lstValues.selectedIndex].value;
        }

        if (this.pnChklistId != '') {
            var pnChklist = document.getElementById(this.pnChklistId);

            if (tbl)
                for (var i = 0; i < tbl.rows.length; i++) {
                var td = tbl.rows[i].firstChild;
                var chk = td.firstChild;
                if (chk.checked) {
                    arrValues[i] = chk.value;
                }
            }
        }
        return arrValues;
    }
    return this;
}

function __vgComboBox_txtOutros_OnKeyUp(evt, Ctrl) {
    evt = (evt) ? evt : ((window.event) ? window.event : "")

    var ic = evt.keyCode ? evt.keyCode :
                       evt.charCode ? evt.charCode :
                       evt.which ? evt.which : void 0;

    //window.status = 'txtOutros :: ' + ic;

    // se está vazio enable listbox
    if (Ctrl.value != '') {
        // se tem conteudo remove selecção da listbox
        var lstValuesId = (Ctrl.attributes['lstValuesId'] ? Ctrl.attributes['lstValuesId'].value : '');
        if (lstValuesId != '') {
            var lstValues = document.getElementById(lstValuesId);
            lstValues.selectedIndex = -1;
        }
    }

    return true;
}


function __vgComboBox_lstValues_OnChange(evt, Ctrl) {
    evt = (evt) ? evt : ((window.event) ? window.event : "")

    var ic = evt.keyCode ? evt.keyCode :
                       evt.charCode ? evt.charCode :
                       evt.which ? evt.which : void 0;

    //window.status = 'txtOutros :: ' + ic;

    // se tem selecao limpa outros
    if (Ctrl.selectedIndex != -1) {
        var txtOutrosId = (Ctrl.attributes['txtOutrosId'] ? Ctrl.attributes['txtOutrosId'].value : '');
        if (txtOutrosId != '') {
            var txtOutros = document.getElementById(txtOutrosId);
            txtOutros.value = '';
        }
    }

    return true;
}