
//////////////////////////////////////////////////////////////////////////////////////////////
// 0. DECLARACION DE VARIABLES

var _oSVG, _AllSVG;
var _svgDocument;
var _down = false;
var _lastX, _lastY;
var _tx = 0, _ty = 0;
var _g, _grupos;
var _zX, _zY;
var changeMenu =true ;
var gVersion = "v.1";

var oBoton;

//////////////////////////////////////////////////////////////////////////////////////////////
// 4. BUSCA EN SVG
function oBuscaSVG(n,d)
{
 	if(!d)
 	{
  	if(!_svgDocument) { alert("Error: No encuentro un archivo SVG"); return false; }
		else { d = _svgDocument; }
 	}
	if(!n) { alert("Error: Faltan parámetros"); return false; }
	x = d.getElementById(n);
	return x;
}
//////////////////////////////////////////////////////////////////////////////////////////////
// 5. CONTROL NORMAL
function _ctrNormal(caso)
{
	_g.removeEventListener( "mousedown", Down, false );
	_g.removeEventListener( "mouseup", Up, false );
	_g.removeEventListener( "mousemove", Move, false );
}
//////////////////////////////////////////////////////////////////////////////////////////////
// 6. CONTROL MOVER
function _ctrMover()
{
	_grupos.addEventListener( "mousedown", Down, false );
	_grupos.addEventListener( "mouseup", Up, false );
	_grupos.addEventListener( "mousemove", Move, false );
}
function Down(evt)
{
  _lastX = evt.clientX
  _lastY = evt.clientY
  _down = true
}
function Up(evt)
{
  _down = false
}
function Move(evt)
{
  if( ! _down )
    return
  var x = evt.clientX
  var y = evt.clientY
  var dx = x - _lastX
  var dy = y - _lastY
  _lastX = x
  _lastY = y
  if( evt.shiftKey )
  {
    document.rootElement.currentTranslate.x += dx ;
    document.rootElement.currentTranslate.y += dy ;
  }
  else
  {
    _tx += dx
    _ty += dy
   	_grupos.setAttribute( "transform", "translate("+_tx+","+_ty+")" );
  }
}
//////////////////////////////////////////////////////////////////////////////////////////////
/*function _ctrZoom2(tipo, objD)
{
	if(tipo=="IN")
	{
	    if(_zY < 1)
			{
			  	_zY = 1 / _zY;
			  	_zY -= 1;
				_zY = 1/_zY;
			}
		else
			{
				_zY = 1+((_zY));
			}
	}
	if(tipo=="OUT")
	{
	    if(_zY > 1)
			{
				_zY = ((_zY))-1;
			}
		else
			{
			  	_zY = 1 / _zY;
			  	_zY += 1;
				_zY = 1/_zY;
			}
	}
	if(tipo=="1:1")
	{
		_zY = 1/_zX;
	}
	_g.setAttribute( "transform", "scale(" + _zY + "," + _zY + ")" );
	_movil.setAttribute( "zY", _zY );
}*/
//////////////////////////////////////////////////////////////////////////////////////////////
// 7. Control de ZOOM
function _ctrZoom(tipo, objD)
{
  switch(gVersion)
  {
    case "v.1":
      	xU = parseFloat(_g.getAttribute("x"));
      	yU = parseFloat(_g.getAttribute("y"));
      	wU = objD.width
      	hU = objD.height;
      	if(tipo=="IN")
      	{
      		if(_zY < 10)
      		{
      			if((_zY) >= 1)
      			{
      				_zY = (_zY)+1;
      			}
      			else
      			{
      				_zY = 1 / _zY;
      				_zY -= 1;
      				_zY = 1/_zY;
      			}
      		}
      		else
      		{
      			_zY = (_zY)+10;
      		}
      	}
      	if(tipo=="OUT")
      	{
      	  if((_zY-10) > 10)
      		{
      			_zY = (_zY)-10;
      		}
      		else
      		{
      			if((_zY-1) > 1)
      			{
      				_zY = (_zY)-1;
      			}
      			else
      			{
      				_zY = 1 / _zY;
      				_zY += 1;
      				_zY = 1/_zY;
      			}
      		}
      	}
      	if(tipo=="1:1")
      	{
      		_zY = 100;
      	}
      	//calcs
      	xcenter = xU + wU / 2;
      	ycenter = yU + hU / 2;
      	xnulcorner = xcenter - wU / 2 * (100/_zY);
      	ynulcorner = ycenter - hU / 2 * (100/_zY);
      	nWidth = wU * (100/_zY);
      	nHeight = hU * (100/_zY);
      	if (_zY == 100) {
      		xnulcorner = 0;
      		ynulcorner = 0;
      	}
      	newViewport = xnulcorner + " " + ynulcorner + " " + nWidth + " " + nHeight;
      	_g.setAttribute("viewBox",newViewport);
    break;
    case "v.2":
    break;
  }
}
//////////////////////////////////////////////////////////////////////////////////////////////
// 12. Mover Mapa, Movil estatico
function _mov_mapa()
{
}
//////////////////////////////////////////////////////////////////////////////////////////////
// 13. Convierte String a Array
function _str_to_arr(s, delim)
{
  s = "" + s;
  var d = (delim == null)? '~' : delim;
  return s.split(d);
}
//////////////////////////////////////////////////////////////////////////////////////////////
// 20. domMove
  function domMove(element)
  {
  	/*
  	   Guardo el ID, guardo el objeto, lo remuevo, lo vuelvo a adicionar
    */
   obj = element;
   objPadre = element.getParentNode();
   element.getParentNode().removeChild(element);
   _AllSVG.appendChild(obj);
  }
///////////////////////////////////////////////////////////////////////////////////////////////
// 29. _zoom11()
function _zoom11()
{
}

///////////////////////////////////////////////////////////////////////////////////////////////
function IniciaSVG(e)
{
	_svgDocument = e.target.ownerDocument;
	_oSVG 		 = _svgDocument.documentElement;
	_zX 			 = _oSVG.currentScale;
}
///////////////////////////////////////////////////////////////////////////////////////////////
function getVB()
{
  	if(!_oSVG) { alert("Error: No encuentro un archivo SVG"); return false; }
	else
	{
	 _sVB = _oSVG.getAttribute("viewBox");
	 _aVB = _str_to_arr(_sVB, ' ');
    _tmp = "_vbX=" + _aVB[0] + "; _vbY=" + _aVB[1] + "; _vbW=" + _aVB[2] + "; _vbH=" + _aVB[3] + ";";
	}
return _tmp;
}

///////////////////////////////////////////////////////////////////////////////////////////////
function setVB(_x, _y, _w, _h)
{
  if(!_oSVG) { alert("Error: No encuentro un archivo SVG"); return false; }
	else
	{
    _cad = "" + _x + " " + _y + " " + _w + " " + _h + "";
		_oSVG.setAttribute("viewBox", _cad);
	}
}

///////////////////////////////////////////////////////////////////////////////////////////////
function centrarOBJ(_obj)
{
  if(!_oSVG)
  { 
    alert("Error: No encuentro un archivo SVG"); 
    return false;
  }
	else
	{
    _oTmp =  oBuscaSVG(_obj);
    eval(getVB());
    _escala = _oSVG.currentScale;

    for(var j=0; j<_moviles.length; j++)
		{
      if(_moviles[j][0] == _obj)
			{
        movilX = _moviles[j][2];
        alert("x: "+movilX[2]+" - y: "+movilX[3]);
				_nX = movilX[2]-0.02; //x del array _moviles 
				_nY = movilX[3]-0.02; //y del array _moviles
				j=_moviles.length + 1;
  			break;
			}
		 }
    _vbW = 0.04;
	 	_vbH = 0.04;
    //alert(_id + " x: "+_nX +" y: "+_nY+" \n w: "+ _vbW+" h: " + _vbH + "\n\n\n" + getVB() + "\n" + _oTmp.id);
    setVB(_nX, _nY, _vbW, _vbH);
    //_oSVG.currentScale = 1;
    //    _nX = _oTmp.getAttribute("x") - ( (_vbW - _vbX) /2 );
    //    _nY = _oTmp.getAttribute("y") - ( (_vbH - _vbY) /2 );
    //    _nX = ( _oTmp.getAttribute("x") - ( (_vbW) /2 ) ) * _escala;
    //    _nY = ( _oTmp.getAttribute("y") - ( (_vbH) /2 ) ) * _escala;
    //    _nX = ( _oTmp.getAttribute("X") );
    //    _nY = ( _oTmp.getAttribute("y") );
    //		_oTmp.item[0]; // genera error para lanzar el depurador y mirar el objeto jejeje
    //    _nX = _oTmp.getAttribute("y"); // (_oTmp.getBBox.x -0.02);
    //    _nY = (_oTmp.getBBox.y - 0.02);
		//_svgDocument.SVGFitToViewBox;
	}
}


function AttrInfos(click_evt)
{
 var obj,out="";
// obj=click_evt.target;
 obj =  oBuscaSVG(click_evt);
 out+="Objeto : "+obj;
 out+="\n\nhasAttributes() : "+obj.hasAttributes();
 if(obj.hasAttributes())
 {
  attr=obj.attributes;
  out+="\n\nattributes : "+attr;
  out+="\n\nTam Attribute : "+attr.length;
  for(i=0;i<attr.length;i++)
  {
   out+="\nAttribute : "+attr.item(i).nodeName;
   out+=" - Valor : "+attr.item(i).nodeValue;
  }
 }
 alert(out);
}
