//Variaveis
var thismenu = Array();
var _xmouse = 0;
var _ymouse = 0;
var _ascii = 0;
var _ultascii = 0;

/* funções basicas */
function byId(id){
	return document.getElementById(id);
}
function CaptMouse(e){
   _xmouse = ((document.all)?event.clientX:e.pageX)+document.body.scrollLeft;
   _ymouse  = ((document.all)?event.clientY:e.pageY)+document.body.scrollTop;
   
	//document.title='x='+_xmouse+' y='+_ymouse+ ' ascii='+_ascii+' Tecla='+ String.fromCharCode(_ascii);
	
	if(myActions && myActions.dragging)myActions.move();
	//return false;
}
function CaptTecla(e){
	_ultascii = _ascii;
	_ascii = (!document.all)?e.keyCode:event.keyCode	
	if(_ultascii == 17 || _ultascii == 18){
		for(i=0;i<thismenu.length;i++)thismenu[i].presskey(String.fromCharCode(_ascii));
	}
	if(_ascii==112)CaptHelp();
	//document.title='x='+_xmouse+' y='+_ymouse+ ' ascii='+_ascii+' Tecla='+ String.fromCharCode(_ascii);
	//return false;
}
function ContextMenu(){
	//alert('Você apertou o botão direito do mouse');
	//return false;
}
function CaptHelp(){
	alert('Você apertou o botão F1');
	return false;
}

function PageScroll(){
	alert(1);
	//this.cont++;
	//debug('aa'+this.cont);
}

/*********************************************************************************************************************************/
/* classe de açoes nos Objetos como Drag and Drop e suas funções*/
/*********************************************************************************************************************************/
function myLibObjAct(){
	this.objdrag=null;
	this.dragging=false;
}

myLibObjAct.prototype.drag = function(obj,minX,minY,maxX,maxY){
	this.objdrag = obj;
	this.divdrag=byId('divdragable');
	
	//alterando tamanho do objeto transportador
	this.divdrag.style.width = this.objdrag.offsetWidth; 
	this.divdrag.style.height = this.objdrag.offsetHeight; 

	this.position=this.divdrag.style.position;
	
	this.objOrigem=this.objdrag.parentNode;
	this.objDestino=undefined;

	this.divdrag.style.zIndex=10000;
	setOpacity(this.divdrag,50);
	
	
	this.objdrag.iniX=getLeft(this.objdrag);
	this.objdrag.iniY=getTop(this.objdrag);

	if(this.objdrag.finiX==undefined)this.objdrag.finiX=this.objdrag.iniX;
	if(this.objdrag.finiY==undefined)this.objdrag.finiY=this.objdrag.iniY;

	if(this.objdrag.finiXo==undefined)this.objdrag.finiXo=this.objdrag.offsetLeft;//vai apagar
	if(this.objdrag.finiYo==undefined)this.objdrag.finiYo=this.objdrag.offsetTop;//vai apagar

	this.objdrag.lx1 = minX;
	this.objdrag.ly1 = minY;
	this.objdrag.lx2 = minX+maxX;//document.body.clientWidth-1;
	this.objdrag.ly2 = minY+maxY;//document.body.clientHeight-1;

	if(this.divdrag.childNodes.length==0){
		if(this.position=='relative'){
			this.divdrag.style.left = this.objdrag.iniX; 
			this.divdrag.style.top = this.objdrag.iniY; 
		}else{
			this.divdrag.style.left = this.objdrag.offsetLeft; 
			this.divdrag.style.top = this.objdrag.offsetTop; 
		}
	}
	
	
	if(this.position=='relative'){
		this.divdrag._xclic=_xmouse-getLeft(this.divdrag);
		this.divdrag._yclic=_ymouse-getTop(this.divdrag);
	}else{
		this.divdrag._xclic=_xmouse-this.divdrag.offsetLeft;
		this.divdrag._yclic=_ymouse-this.divdrag.offsetTop;
	}
	
	this.divdrag.style.left = (_xmouse-this.divdrag._xclic)+'px';
	this.divdrag.style.top = (_ymouse-this.divdrag._yclic)+'px';

	//jogando objeto a ser arrastado para dentro do objeto transportador
	//alert(this.divdrag.childNodes.length)
	this.divdrag.onDragStart	=  new Function();
	this.divdrag.onDragEnd	= new Function();
	this.divdrag.onDrag		= new Function();
	
	if(this.divdrag.childNodes.length==0)this.divdrag.appendChild(this.objdrag);

	this.dragging=true;
	document.onmouseup=StopDrag; 
	
	return false;
}

myLibObjAct.prototype.drop = function(obj){
	this.dragging=false;
	setOpacity(this.divdrag,100);
	
	if(this.objDestino!=undefined){
		
	}else{
		//byId('target5').appendChild(this.objdrag);
		//movePara(this.objdrag,   getLeft(byId('target5')),  getTop(byId('target5'))  );
		//movePara(this.objdrag,0,0);
		//movePara(this.objdrag,this.objdrag.finiXo,this.objdrag.finiYo);
	}		
	document.title = 'Objeto dropado';
	return true;
}
/*
myLibObjAct.prototype.volta = function(){
	
	if(this.incrXv==undefined)this.incrXv=((this.objdrag.offsetLeft - this.objdrag.finiXo)/10);
	if(this.incrYv==undefined)this.incrYv=((this.objdrag.offsetTop - this.objdrag.finiYo)/10);
	
	//alert(this.objdrag.finiXo);
	//alert(this.objdrag.finiX);
	if(this.objdrag.offsetLeft != this.objdrag.finiXo || this.objdrag.offsetTop != this.objdrag.finiYo){
		document.title=(this.objdrag.finiXo + ' ' + this.objdrag.offsetLeft+'\n'+this.objdrag.finiYo + ' ' + this.objdrag.offsetTop);
		this.objdrag.style.left = (this.objdrag.offsetLeft+(-this.incrXv));
		this.objdrag.style.top = (this.objdrag.offsetTop+(-this.incrYv));
		setTimeout("if(myActions && myActions.objOrigem)myActions.volta();",100);
	}
	
}
*/
myLibObjAct.prototype.move = function(){

	this.divdrag.nx = (_xmouse-this.divdrag._xclic);
	this.divdrag.ny = (_ymouse-this.divdrag._yclic);

	if(this.divdrag.nx+this.divdrag.offsetWidth >= this.objdrag.lx2 || this.divdrag.nx<=this.objdrag.lx1)this.divdrag._xclic=_xmouse-this.divdrag.offsetLeft;
	if(this.divdrag.ny+this.divdrag.offsetHeight >= this.objdrag.ly2 || this.divdrag.ny<=this.objdrag.ly1)this.divdrag._yclic=_ymouse-this.divdrag.offsetTop;

	if(this.divdrag.nx+this.divdrag.offsetWidth <= this.objdrag.lx2 && this.divdrag.nx>=this.objdrag.lx1)this.divdrag.style.left = this.divdrag.nx+'px';
	if(this.divdrag.ny+this.divdrag.offsetHeight <= this.objdrag.ly2 && this.divdrag.ny>=this.objdrag.ly1)this.divdrag.style.top = this.divdrag.ny+'px';

	//document.title = 'Dragging x=' + (this.objdrag.offsetLeft+this.objdrag.offsetWidth) + ' fim = '+ document.body.clientWidth;
	//document.title = 'Dragging y=' + (this.objdrag.offsetLeft+this.objdrag.offsetHeight) + ' fim = '+ document.body.clientHeight;
	//document.title = 'Dragging x=' + (this.objdrag.offsetLeft+this.objdrag.offsetWidth) + ' fim = '+ document.body.clientWidth;

	return false;
	
	
}

var myActions = new myLibObjAct();


/* Funções auxiliares da classe acima */
function StartDrag(obj,x1,y1,x2,y2){
	if(myActions)myActions.drag(obj,x1,y1,x2,y2);
	return false;
}

function StopDrag(){
	if(myActions)myActions.drop(myActions.objdrag);
	return false;
}


function movePara(obj,x,y){
	//alert(obj);
	obj.style.left = x;
	obj.style.top = y;
}
/*
function getLeft(obj){
	if (!obj)return false;
	_x=0;
	objtemp=obj;
	while (objtemp.parentNode){
		if (objtemp.tagName != 'TR' && objtemp.tagName != 'TBODY'){
		   _x+=objtemp.offsetLeft;
		}
		objtemp=objtemp.parentNode;	
	}
	return _x;
}
*/

function getLeft(obj){
	if (!obj)return false;
	_x=0;
	objtemp=obj;
	while (objtemp.parentNode){
		//objtemp.style.border='1px dashed blue';
		//alert(objtemp.tagName + ' = ' + objtemp.offsetLeft);
		if (objtemp.tagName != 'TR' && objtemp.tagName != 'TD' && objtemp.tagName != 'TBODY' && objtemp.tagName != 'TABLE'){
		   _x+=objtemp.offsetLeft;
		}
		objtemp=objtemp.parentNode;	
	}
	return _x;
}


/*
function getTop(obj){
	if (!obj)return false;
	_y=0;
	objtemp=obj;
	while (objtemp.parentNode){
		if (objtemp.tagName != 'TR' && objtemp.tagName != 'TBODY'){
		   _y+=objtemp.offsetTop;
		}
		objtemp=objtemp.parentNode;	
	}
	return _y;
}
*/
function getTop(obj){
	if (!obj)return false;
	_y=0;
	objtemp=obj;
	while (objtemp.parentNode){
		if (objtemp.tagName != 'TR' && objtemp.tagName != 'TD' && objtemp.tagName != 'TBODY' && objtemp.tagName != 'TABLE'){
			//objtemp.style.border='1px dashed blue';
			//alert(objtemp.tagName + ' = ' + objtemp.offsetTop);
		   _y+=objtemp.offsetTop;
		}
		objtemp=objtemp.parentNode;	
	}
	return _y;
}

//Função de Transparencia num objeto
function setOpacity(obj,valor){
	obj.opacity=valor;
	if(document.all){
		obj.style.filter='alpha(opacity='+valor+')';
	}else{
		obj.style.opacity=(valor/100);
	}
}

/*função que inicia o Frame Work*/
function InitMyFrameWork(){
	if(!document.all){
		document.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP | Event.CONTEXTMENU | Event.KEYDOWN | Event.KEYUP | Event.KEYPRESS |  Event.SELECTSTART)
	}	
	document.oncontextmenu=ContextMenu;
	document.onmousemove=CaptMouse;
	document.onhelp=Function("return false");
	
	document.onkeydown=CaptTecla;
	
	document.onselectstart=new Function("if(myActions && myActions.dragging)return false;");
	
	
	//document.body.onscroll=PageScroll;
}


/*testes*/
function newDiv(n,at){
	
	if (!at)at=document.body;
	nObj = document.createElement("DIV");
	
	nObj.id = n;
	nObj.name = n;
	
	at.appendChild(nObj);	
	return nObj;
}

	


function debug(txt){
	objdebug = byId('my_framework_div_debug')
	if(!objdebug){
		objdebug=new newDiv('my_framework_div_debug',null,'');
		objdebug.style.position='absolute';
		objdebug.style.width='99%';
		objdebug.style.height='150px';
		objdebug.style.overflow='auto';
		objdebug.style.left='0px';
		objdebug.style.bottom='0px';
		objdebug.style.border='1px solid red';
	}
	objdebug.innerHTML+=txt+'<br>';
}







