
//----------------------------------------------------------------------
// Abre el editor HTML en un popup rellenando un control web
//----------------------------------------------------------------------
// idTemplate   - Identificador del template a utilizar para incializar 
//			  	  el contenido del editor HTML
// width		- Ancho del popup con el editor
// height		- Alto del popup con el editor
// control		- Control web (usualmente un textbox) donde se rellenara
//				  el contenido del editor HTML, tomando además de este
//				  su valor inicial si no es vacío.
// div			- Nombre del DIV donde se mostrara el contenido del 
//				  editor en el opener
//----------------------------------------------------------------------
function OpenPopupEditor( idTemplate, width, height, control, div ) 
{
	var url		= '../Generic/EditorHTML.aspx?tipoTemplate=' + idTemplate + '&controlName=' + control + '&div=' + div + '&toolbar=editor';
	var ventana	= window.open( url, 'EditorHTML','scrollbars=no, status=no, width=' + width + ', height=' + height + ', titlebar=no, top=200, left=100, resizable=no' );
}

//---------------------------------------------------------------------------
// Abre el editor de formularios y HTML en un popup rellenando un control web
//---------------------------------------------------------------------------
// idTemplate   - Identificador del template a utilizar para incializar 
//			  	  el contenido del editor HTML
// width		- Ancho del popup con el editor
// height		- Alto del popup con el editor
// control		- Control web (usualmente un textbox) donde se rellenara
//				  el contenido del editor HTML, tomando además de este
//				  su valor inicial si no es vacío.
// div			- Nombre del DIV donde se mostrara el contenido del 
//				  editor en el opener
//----------------------------------------------------------------------
function OpenPopupFormEditor( idTemplate, width, height, control, div )
{
	var url		= '../Generic/EditorHTML.aspx?tipoTemplate=' + idTemplate + '&controlName=' + control + '&div=' + div + '&toolbar=formularios';
	var ventana	= window.open( url, 'EditorHTML','scrollbars=no, status=no, width=' + width + ', height=' + height + ', titlebar=no, top=200, left=100, resizable=no' );
}

//----------------------------------------------------------------------
// Abre el editor HTML en un popup rellenando un control web
//----------------------------------------------------------------------
// control   - Nombre del control web (usualmente textbox) donde se 
//			   guardará la fecha.
//----------------------------------------------------------------------
function OpenCalendar( control )
{
	var url		= 'Generic/Calendar.aspx?control=' + control;
	var ventana	= window.open( url, 'Calendario','scrollbars=no, status=no, width=200, height=164, titlebar=no, top=200, left=100, resizable=no' );
}

// ----------------------------------------------------------------------
// Cajas de selección
// ----------------------------------------------------------------------

// Función que pasa los elementos de un listbox hacia otro
function selectOptions(sel1, sel2)
{
	for (cont1 = sel1.length - 1; cont1 >= 0; cont1--) {
		if (sel1.options[cont1].selected) {
			newElement = document.createElement('OPTION');
			newElement.text = sel1.options[cont1].text;
			newElement.value = sel1.options[cont1].value;
			sel2.options.add(newElement);
			sel1.options.remove(cont1);
		}
	}
}

// Función que selecciona todos los items en el listbox destino
function selAll(list)
{
	for (cont = 0; cont < list.length; cont++) {
		list.options[cont].selected = true;
	}
}

function selectOptions(src, dst, hidden, check)
{
	if (dst.disabled) { // Si está deshabilitado es por el "Sin productos" entonces la habilito y borro el primero
		dst.disabled = false;
		dst.options[0] = null;
	}
	
	for (cont1 = src.length - 1; cont1 >= 0; cont1--) {
		if (src.options[cont1].selected) {
			if (!check || !containsValue(dst, src.options[cont1].value)) {
				newElement = document.createElement('OPTION');
				newElement.text = src.options[cont1].text;
				newElement.value = src.options[cont1].value;
				dst.options.add(newElement);
	
				newElement = document.createElement('OPTION');
				newElement.text = src.options[cont1].text;
				newElement.value = src.options[cont1].value;
				newElement.selected = true;
				hidden.options.add(newElement);
			}

			src.options.remove(cont1);
		}
	}
}

function containsValue(list, value)
{
	var contains = false;
	var count;
	
	for (count = 0; count < list.options.length && !contains; count++) {
		contains = list.options[count].value == value;
	}
	
	return contains;
}

function unselectOptions(src, dst, hidden, emptyItem)
{
	for (cont1 = dst.length - 1; cont1 >= 0; cont1--) {
		if (dst.options[cont1].selected) {
			newElement = document.createElement('OPTION');
			newElement.text = dst.options[cont1].text;
			newElement.value = dst.options[cont1].value;
			src.options.add(newElement);

			dst.options.remove(cont1);
			hidden.options.remove(cont1);
		}
	}
	
	// Si al terminar de pasar todos, me queda la lista vacía y emptyItem me vino como parámetro,
	// pongo el elemento y desactivo la lista
	if (emptyItem && dst.options.length == 0) {
		newElement = document.createElement('OPTION');
		newElement.text = emptyItem;
		dst.options.add(newElement);
		dst.disabled = true;
	}	
}

function initOptions(src, dst, hidden, emptyItem)
{
	var added = new Array();
	for (cont1 = hidden.length - 1; cont1 >= 0; cont1--) {
		if (hidden.options[cont1].selected) {
			newElement = document.createElement('OPTION');
			newElement.text = hidden.options[cont1].text;
			newElement.value = hidden.options[cont1].value;
			added[added.length] = newElement;
			
			// borro el elemento de la lista orígen (pero lo busco por valor en vez de por posición)
			var remPos = 0;
			while (remPos < src.options.length && src.options[remPos].value != hidden.options[cont1].value) remPos++;
			if (remPos < src.options.length) src.options.remove(remPos);
		} else {
			hidden.options.remove(cont1);
		}
	}

	for (cont1 = added.length - 1; cont1 >= 0; cont1--) {
		dst.options.add(added[cont1]);
	}
	
	// Si al terminar de pasar todos, me queda la lista vacía y emptyItem me vino como parámetro,
	// pongo el elemento y desactivo la lista
	if (emptyItem && dst.options.length == 0) {
		newElement = document.createElement('OPTION');
		newElement.text = emptyItem;
		dst.options.add(newElement);
		dst.disabled = true;
	}
}


//----------------------------------------------------------------------
// Funcion para chequear todos los hijos de un treeNode en un treeview
//----------------------------------------------------------------------
function client_OnTreeNodeChecked()
{
    var obj = window.event.srcElement;
    var treeNodeFound = false;
    var checkedState;
    if (obj.tagName.toUpperCase() == "INPUT" && obj.type.toUpperCase() == "CHECKBOX") 
    {
        var treeNode = obj;
        checkedState = treeNode.checked;
        do
        {
            obj = obj.parentElement;
        } 
        while (obj.tagName != "TABLE")
    
        var parentTreeLevel = obj.rows[0].cells.length;
        var parentTreeNode = obj.rows[0].cells[0];
        var tables = obj.parentElement.getElementsByTagName("TABLE");
        var numTables = tables.length
        
        if (numTables >= 1)
        {
            for (i=0; i < numTables; i++)
            {
                if (tables[i] == obj)
                {
                    treeNodeFound = true;
                    i++;
                    if (i == numTables)
                    {
                        return;
                    }
                }
                if (treeNodeFound == true)
                {
                    var childTreeLevel = tables[i].rows[0].cells.length;
                    if (childTreeLevel > parentTreeLevel)
                    {
                        var cell = tables[i].rows[0].cells[childTreeLevel - 1];
                        var inputs = cell.getElementsByTagName("INPUT");
                        inputs[0].checked = checkedState;
                    }
                    else
                    {
                        return;
                    }
                }
            }
        }
    }
}