﻿var ie = document.all;
var nn6 = document.getElementById && !document.all;

var isdrag = false;
var objDiv, x, y, tx, ty, offsetY;
var objGadgetTitle, objGadgetBar, objGadget, objGadgetContainer, objGadgetZone, objContainer, objZone, objExpander, objBody;

var opacity = 60;

if(nn6){
	Node.prototype.insertAfter = function(newNode, refNode) {
		if(refNode.nextSibling) {
			return this.insertBefore(newNode, refNode.nextSibling);
		} else {
			return this.appendChild(newNode);
		}
	}
}

function disableError() {
	return true;
}

function enableError() {
	return true;
}

function bodySize(){
	var e = window, a = 'inner';

	if ( !( 'innerWidth' in window ) )
	{
		a = 'client';
		e = document.documentElement || document.body;
	}

	return { width : e[ a+'Width' ] , height : e[ a+'Height' ] }
}

function ajustScroll(objReference){
	var inObjTop = parseInt(objReference.offsetTop, 10);
	//setDebugger("objReference.offsetTop: " + inObjTop);
	var inObjHeight = parseInt(objReference.offsetHeight, 10);
	//setDebugger("objReference.offsetHeight: " + inObjHeight);
	var inAux = 0;
	var inAuxHeight = 310;
	var inDragHeight = inObjTop + inObjHeight + inAuxHeight;
	//setDebugger("inDragHeight: " + inDragHeight);
	var inScrollTop = document.documentElement.scrollTop;
	//setDebugger("inScrollTop: " + inScrollTop);
	var inBodySize = bodySize().height + inScrollTop;
	//setDebugger("inBodySize: " + inBodySize);
	//document.getElementById("divTeste").style.height = inDragHeight + "px";
	
	if(inDragHeight > inBodySize){
		document.documentElement.scrollTop += (inObjHeight + inAux);
		//setDebugger("MAIOR!");
	}
	else if ((inObjTop + inObjHeight) <= inBodySize && inScrollTop > inObjTop){
		if(document.documentElement.scrollTop - (inObjHeight + inAux) >= 0){
			document.documentElement.scrollTop -= (inObjHeight + inAux);
		}
		//setDebugger("MENOR!");
	}
}

function movemouse(e)
{
	if (isdrag)
	{
		var objMouseTarget = (nn6) ? e.target : event.srcElement;
		
		//if (objMouseTarget.className == 'Ia'){
		if (objMouseTarget.className == 'Ia' || objMouseTarget.className == 'divResultsText'){
			objContainer = (nn6) ? objMouseTarget.parentNode : objMouseTarget.parentElement;
			objZone = (nn6) ? objContainer.parentNode : objContainer.parentElement;
			//setDebugger("Container interno: " + objContainer.id + " Class: " + objContainer.className + " Tag: " + objContainer.nodeName)
			//setDebugger("Zona interna: " + objZone.id + " Class: " + objZone.className + " Tag: " + objZone.nodeName)
			
			var x1 = (nn6) ? e.clientX : event.clientX;
			var y1 = (nn6) ? e.clientY : event.clientY;
			//setDebugger("x1: " + x1 + " y1: " + y1);
			
			for (i = 0; i < objZone.childNodes.length; i++)
			{
				try {
					//setDebugger("tá no for dos filhos da zona")
					objZone.childNodes[i].onmouseover = function(){
						//setDebugger(this.id)
						if (isdrag)
						{
							window.onerror = disableError;
							
							if(nn6){
								// Movendo cursor para baixo
								if (y1 >= y){
									// Insere depois do "this"
									objZone.insertAfter(objGadgetContainer, this);
								}
								// Movendo cursor para cima
								else if (y1 < y || x1 >= x || x1 < x){
									// Insere antes do "this"
									objZone.insertBefore(objGadgetContainer, this);
								}
								//objZone.replaceChild(objGadgetContainer, this);
							}
							else
							{
								objZone.insertBefore(objGadgetContainer, this);
							}
							
							ajustScroll(objGadgetContainer);
							
							window.onerror = enableError;
						}
					}
				}
				catch (e)
				{
					// Não há tratamento para este erro
				}
			}
		}
		
		//objGadgetContainer.style.left = (nn6) ? tx + e.clientX - x : tx + event.clientX - x;
		//objGadgetContainer.style.top = (nn6) ? ty + e.clientY - y : ty + event.clientY - y;
		
		return false;
	}
}

function setDebugger(value){
	objDebugger = document.getElementById("divDebugger");
	objDebugger.value += value + "\n";
}

function displayRoles(blnStatus){
	if(blnStatus){
		strBgColor = "#C0C0C0";
	}
	else
	{
		strBgColor = "";
	}
	
	if(objDiv != null){
		for (var objProp in objDiv)
		{
			if (objDiv[objProp].className == 'Ia' && objDiv[objProp].getAttribute("IaID") == null)
			{
				objContainer = (nn6) ? objDiv[objProp].parentNode : objDiv[objProp].parentElement;
				objContainer.style.backgroundColor = strBgColor;
			}
		}
	}
}

function selectmouse(e)
{
	// Tenta localizar o item clicado
	var objTarget = (nn6) ? e.target : event.srcElement;
	
	var topelement = (nn6) ? 'HTML' : 'BODY';
	
	while (objTarget != null && objTarget.tagName != topelement && objTarget.className != 'IaTitleMiddle')
	{
		objTarget = (nn6) ? objTarget.parentNode : objTarget.parentElement;
	}
	
	// Caso o item clicado seja a barra de um Gadget
	if (objTarget != null && objTarget.className == 'IaTitleMiddle')
	{
		isdrag = true;
		
		// Apenas para manter coerência na nomenclatura dos objetos, criamos um novo objeto mnemônico
		objGadgetTitle = objTarget;
		//objGadgetTitle.style.cursor = 'move';
		//setDebugger("Título: " + objGadgetTitle.id + " Class: " + objGadgetTitle.className + " Tag: " + objGadgetTitle.nodeName)
		
		// Identificamos a Barra
		// Primeiro pai: TR / Avô: Table
		objGadgetBar = (nn6) ? objGadgetTitle.parentNode : objGadgetTitle.parentElement;
		while(objGadgetBar.className.indexOf("IaTitle") == -1){
			objGadgetBar = (nn6) ? objGadgetBar.parentNode : objGadgetBar.parentElement;
		}
		//setDebugger("Barra: " + objGadgetBar.id + " Class: " + objGadgetBar.className + " Tag: " + objGadgetBar.nodeName)
		
		// Identificamos o container da Barra
		objGadget = (nn6) ? objGadgetBar.parentNode : objGadgetBar.parentElement;
		objGadget.style.zIndex = 12;
		//setDebugger("Container da Barra/Conteúdo: " + objGadget.id + " Class: " + objGadget.className + " Tag: " + objGadget.nodeName)
		//alert(objGadgetTitle.getAttribute("IaID"))
		if(objGadgetTitle.getAttribute("IaID") != null){
			objExpander = document.getElementById("exp" + objGadgetTitle.getAttribute("IaID"));
			objBody = document.getElementById(objGadget.id.replace("pnlIa", "divIaBody"));
			if (objBody.style.display == "" || objBody.style.display == "block") Expand(objExpander, objBody);
		}
		
		// Identificamos o container do Gadget
		objGadgetContainer = (nn6) ? objGadget.parentNode : objGadget.parentElement;
		//objGadgetContainer.style.position = "absolute";
		objGadgetContainer.className = 'GadgetContainerOver';
		objGadgetContainer.style.zIndex = 11;
		//setDebugger("Container Geral: " + objGadgetContainer.id + " Class: " + objGadgetContainer.className + " Tag: " + objGadgetContainer.nodeName)
		
		if (nn6)
		    objGadgetContainer.style.MozOpacity = opacity / 100;
		//else
		    //objGadgetContainer.style.filter = 'Alpha(Opacity=' + opacity.toString() + ')';
		    
		// Guarda deslocamento original
		offsetY = objGadgetContainer.offsetTop;
		
		/// Identificamos a Zona
		objGadgetZone = (nn6) ? objGadgetContainer.parentNode : objGadgetContainer.parentElement;
		/*//while(objGadgetZone.id.indexOf("divLeftResult") == -1 && objGadgetZone.id.indexOf("divRight") == -1){
		while(objZoneNode.className != 'divLeftContent' && objGadgetZone.id.indexOf("divRight") == -1){
			objGadgetZone = (nn6) ? objGadgetZone.parentNode : objGadgetZone.parentElement;
		}*/
		objGadgetZone.style.zIndex = 10;
		//objGadgetZone.style.cursor = 'move';
		//setDebugger("Zona: " + objGadgetZone.id + " Class: " + objGadgetZone.className + " Tag: " + objGadgetZone.nodeName)
		
		tx = 0;
		ty = 0;
		
		x = (nn6) ? e.clientX : event.clientX;
		y = (nn6) ? e.clientY : event.clientY;
		
		displayRoles(true);
		
		document.onmousemove = movemouse;
		
		return false;
	}
}

function leavemouse(e)
{
	if (isdrag && objExpander != null && objBody != null){
		if (objBody.style.display == "none") Expand(objExpander, objBody);
	}
	
	isdrag = false;
	
	displayRoles(false);
	
	if (objGadgetContainer != null)
	{
		// Não deu certo, pois um DIV com descrição pode estar em diferentes níveis de nós
		/*// Verifica se há uma Zona e GadgetContainer "percorridos" no momento
		if(objZone != null &&
		   objGadgetContainer != null){
			// Verifica se a Zona permite que descrições sejam apresentadas
			if(objZone.getAttribute("showdesc") != null &&
			   objZone.getAttribute("showdesc").toLowerCase() == "true"){
				// Armazena o objeto Gadget na variável (Lembrando q os DIVs devem sempre respeitar a estrutura combinada)
				var objAuxGadget = objGadgetContainer.childNodes[1];
				// Percorre os nós do Gadget
				for (var objChild in objAuxGadget.childNodes){
					var objDescNode = objAuxGadget.childNodes[objChild];
					// Verifica se existe algum nó de descrição
					if(objDescNode.nodeName.toUpperCase() == "DIV" &&
					   objDescNode.getAttribute("desc") != null &&
					   objDescNode.getAttribute("desc").toLowerCase() == "true"){
					}
				}
			}
		}*/
		
		//objGadgetTitle.style.cursor = 'default';
		objGadgetContainer.className = '';
		objGadgetContainer.style.zIndex = 0;
		
		if (nn6)
		    objGadgetContainer.style.MozOpacity = 100;
//		else
//		    objGadgetContainer.style.filter = 'Alpha(Opacity=100)';

		//objGadgetZone.style.cursor = 'default';
		
		objGadgetTitle = null;
		objGadgetBar = null;
		objGadget = null;
		objGadgetContainer = null;
		objGadgetZone = null;
		x = null;
		y = null;
		
		hdnXmlGadgets.setAttribute("value", verifySeq());
		//alert(hdnXmlGadgets.value)
		
		__doPostBack(repositioningControl.name, "");
		//__doPostBack("btnRepositioning", "");
	}
	
	if(objDiv != null){
		// Percorre os DIVs da página
		for (var objProp in objDiv)
		{
			// Verifica se o DIV percorrido é um DIV de descrição
			if (objDiv[objProp].getAttribute != null &&
				objDiv[objProp].getAttribute("desc") != null &&
				objDiv[objProp].getAttribute("desc").toLowerCase() == "true"){
				// Armazena o objeto do DIV na variável
				var objDescNode = objDiv[objProp];
				// Armazena a Zona do objeto DIV em questão
				// ****
				var objZoneNode = (nn6) ? objDescNode.parentNode : objDescNode.parentElement;
				//while(objZoneNode.id.indexOf("divLeftResult") == -1 && objZoneNode.id.indexOf("divRight") == -1){
				while(objZoneNode.className != 'divLeftContent' && objZoneNode.id.indexOf("divRight") == -1){
					objZoneNode = (nn6) ? objZoneNode.parentNode : objZoneNode.parentElement;
				}
				// ****
				// Antecipadamente, já esconde o DIV de descrição
				objDescNode.style.display = "none";
				// Verifica se é uma zona que permite descrição
				if (objZoneNode.getAttribute("showdesc") != null &&
					objZoneNode.getAttribute("showdesc").toLowerCase() == "true"){
					objDescNode.style.display = "block";
				}
			}
		}
	}
}

document.onmousedown = selectmouse;
document.onmouseup = leavemouse;

function switchGadget(o)
{
	var objGadgetSwitch		= (nn6) ? o.parentNode : o.parentElement;
	var objGadgetBar		= (nn6) ? objGadgetSwitch.parentNode : objGadgetSwitch.parentElement;
	var objGadget			= (nn6) ? objGadgetBar.parentNode : objGadgetBar.parentElement;
	var objGadgetContent	= (nn6) ? objGadget.childNodes[3] : objGadget.childNodes[1];
	
	if (o.opened)
	{
		o.src = 'opened_gray_lg.gif';
		objGadgetContent.style.display = 'block';
	}
	else
	{
		o.src = 'closed_gray_lg.gif';
		objGadgetContent.style.display = 'none';
	}
	
	o.opened = !o.opened;
}

function verifySeq(){
    //var intNumColumn = -1; // Para se adaptar a nova regra que as colunas começam da direita para a esquerda
    var intNumColumn = 2;
    var intNumGadget = 0;
    var strXML = "<DATA>";
    
    if(objDiv != null){
		for(var oDiv in objDiv)
		{
			//if(objDiv[oDiv].id == 'divLeftResult' ||
			if(objDiv[oDiv].className == 'divLeftContent' ||
				objDiv[oDiv].className == 'divRightGeneralContent')
			{
			//alert("Zona: " + objDiv[oDiv].id);
				//intNumColumn++;
				intNumColumn--;
				//alert("Coluna: " + intNumColumn);
				intNumGadget = 0;
				//if (intNumColumn > 0)
				if (intNumColumn < 1)
					strXML += "</COLUMN><COLUMN COLPOS='" + intNumColumn + "'>";
				else
					strXML += "<COLUMN COLPOS='" + intNumColumn + "'>";
			}
			if(objDiv[oDiv].className == 'Ia' && objDiv[oDiv].id != '' && objDiv[oDiv].getAttribute("IaID") != '')
			{
				//alert("Gadget: " + objDiv[oDiv].id);
				//alert("Ordem: " + intNumGadget);
				//strXML += "<GADGET GADPOS='" + intNumGadget + "' GADID='" + objDiv[oDiv].id + "' />";
				if(objDiv[oDiv].getAttribute("IaID") != null)
					strXML += "<GADGET GADPOS='" + intNumGadget + "' GADID='" + objDiv[oDiv].getAttribute("IaID") + "' />";
				intNumGadget++;
			}
		}
	}
	
	strXML += "</COLUMN></DATA>";
    return strXML;
}