// CRIA UM NOVO ELEMENTO NO DOM ###############################################################################

// tipo: 		o tipo de tag a ser criado (A, TR, TABLE)
// atributos:	objeto com os atributos da tag. Ex: {id:"id", className:"classe"}
// conteudo:	o conteudo da tag, que pode ser html ou um objeto
// conteiner: 	o id ou o objeto de um elemento para ser o pai / use 'true' para pegar o body do doc. 

// retorna o objeto criado.

function tag(tipo,atributos,conteudo,container)
{
	// CRIA O NOVO ELEMENTO
	var elemento = document.createElement(tipo);
	
	if (!elemento)
		return false;
		
	// INSERE OS ATRIBUTOS
	if (atributos)
		for (var a in atributos)
			elemento[a] = atributos[a];
			
	// VERIFICA O TIPO DO CONTEUDO E INSERE NO ELEMENTO
	inserirElemento(elemento, conteudo);

	// SE HOUVER CONTAINER, INSERE O ELEMENTO NELE
	if(container)
	{	
		// SE O VALOR FOR TRUE, USAR O BODY
		if (container == true)
			if(document.getElementsByTagName("body")[0])
				container = document.getElementsByTagName("body")[0];
			else
				return false;	
		else
			container = get(container);

		container.appendChild( elemento );
	}
	
	return elemento;

}

// INSERIR ELEMENTO(S) ################################################################################################
function inserirElemento(pai,conteudo,sobrescrever,clonar)
{
	if (!conteudo || !pai) return false;
	
	//SE SOBRESCREVER FOR TRUE, APAGA O CONTEUDO DO PAI
	if (sobrescrever) pai.innerHTML = "";

	// SE FOR STRING
	if (typeof(conteudo) == "string" && conteudo != "") 
		pai.innerHTML += conteudo;
	
	// SE FOR OBJETO (UMA TAG)
	else if (typeof(conteudo) == "object" && conteudo.tagName)
	{
		if (clonar)
			conteudo = conteudo.cloneNode(true);
		
		pai.appendChild(conteudo);
	}
		
	// SE FOR UM ARRAY DE OBJETOS, INSERE A TODOS
	else if (typeof(conteudo) == "object" && conteudo[0]) 
	{
		for (var n in conteudo) 
		{
			if (isNaN(n)) continue;
			if (!conteudo[n].tagName) continue; // SE FOR UM OBJETO MAS NAO FOR UMA TAG, PULA
			pai.appendChild(conteudo[n])
		}
	}
	else
		return false;

	return pai;	
}

// REMOVER TAG ################################################################################################
// o parametro id pode ser um id ou o proprio objeto

function deltag(id) {
	
	if (typeof(id) == "object") {
		obj = id;
	} else if (typeof(id) == "string") {
		obj = get(id);
	} else {
		return false;
	}

	obj.parentNode.removeChild(obj);
	obj = null;
	
}


// CENTRALIZA UMA DIV NA TELA ##################################################################################
// os parametros offset servem para deslocar apos centralizar, em pixels.
// div pode ser um id ou um objeto
function jsdom_centralizar_div(div,offsetY,offsetX) {
	
	div = get(div);
	
	div.style.position = "absolute";
	div.style.top = "50%";
	div.style.left = "50%";

	varX = div.offsetWidth / 2;
	varY = div.offsetHeight / 2;

	if (offsetY) varY = varY + offsetY;
	if (offsetX) varX = varX + offsetX;
	
	div.style.marginLeft = "-" + varX + "px";
	div.style.marginTop = "-" + varY + "px";

}

// POSICIONAMENTO DE UMA DIV ################################################################################
// retorna um objeto com as propriedades x e y do elemento
/*
function jsdom_get_posicao(obj)
{
	obj = get(obj);
	var curleft = curtop = 0;
	if (obj.offsetParent) 
	{
		do 
		{
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
		while (obj = obj.offsetParent);
		return {x:curleft, y:curtop};
	}
	
}
*/

function jsdom_get_posicao(oElement)
{
	if (typeof(oElement.offsetParent) != 'undefined') 
	{
		var originalElement = oElement;
		for (var posX = 0, posY = 0; oElement; oElement = oElement.offsetParent) 
		{
			posX += oElement.offsetLeft;
			posY += oElement.offsetTop;
			if (oElement != originalElement && oElement != document.body && oElement != document.documentElement) 
			{
				posX -= oElement.scrollLeft;
				posY -= oElement.scrollTop;
			}
		}
		return {
			x: posX,
			y: posY
		};
	}
	else 
	{
		return {
			x: oElement.x,
			y: oElement.y
		};
	}
}

// CAPTURA OS MOVIMENTOS DO MOUSE ##############################################################

var objSelecionado = null;
var mouseOffset = null;

document.onmousemove = function(ev)
{
	var ev = ev || window.event;
	var mousePos = mouseCoords(ev);
	
	if (objSelecionado)
	{
		get(objSelecionado).style.left = mousePos.x - mouseOffset.x + 'px';
		get(objSelecionado).style.top = mousePos.y - mouseOffset.y + 'px';
		get(objSelecionado).style.margin = '0px';
		
		return false;
	}
}

function mouseCoords(ev)
{
	if(ev.pageX || ev.pageY)
	{
		var saida = {x:ev.pageX, y:ev.pageY};
	}
	else
	{
		var saida = {
			x : (ev.clientX + document.body.scrollLeft - document.body.clientLeft),
			y : (ev.clientY + document.body.scrollTop  - document.body.clientTop)
		};
	}
	
	return saida;
}

function getPosition(e, ev)
{
	e = get(e);
	var left = 0;
	var top  = 0;
	var coords = mouseCoords(ev);
	
	while (e.offsetParent)
	{
		left += e.offsetLeft;
		top  += e.offsetTop;
		e     = e.offsetParent;
	}
	
	left += e.offsetLeft;
	top  += e.offsetTop;
	
	return {x: coords.x - left, y: coords.y - top};
}

document.onmouseup = function()
{
	objSelecionado = null;
}



// TAGS ################################################################################

tag.img = function(config)
{
	var img = tag("IMG");
	img.herdar(config);
	
	if (config.style) img.style.herdar(config.style);
	
	if (typeof(config.onclick) == "string") 
		img.onclick = function()
		{
			// VERIFICA SE TEM CAIXA DE CONFIRMACAO
			if (config.confirmacao)
			{
				if (confirm(config.confirmacao))
				{
					eval(config.onclick);
					if (config.callback) eval(config.callback);	
				}
			}
			else
			{
				eval(config.onclick);
				if (config.callback) eval(config.callback);	
			}
		}
	
	return img;
}

tag.div = function(config)
{
	var div = tag("DIV");;
	div.herdar(config);
	
	if (config.style) div.style.herdar(config.style);
	
	if (typeof(config.onclick) == "string") 
		div.onclick = function()
		{
			eval(config.onclick);
		}
	
	if (config.conteudo) inserirElemento(div, config.conteudo);
	
	return div;
}

