var POS0=300;
var POS1=0;
var elPosN=0;
var WH=document.viewport.getHeight();
var WD=document.viewport.getWidth();
var onShowM=-1;
var xmlDoc= null;
var arElPos = new Array();
var arITH = new Array();
var onMove=0;
var elementN=-1;

function elPos(id) {
	this.id = id;
	this.x = 0;
	this.y = -1000;
	this.loaded = 0;
	return this;
}
elPos.prototype.set = function(x,y,w,h){
	this.x = x;
	this.y = y;
	this.w = w;
	this.h = h;
	this.xb = null;
	this.yb = null;
	return this;
}
elPos.prototype.setPos = function(){
	//if(! $("Img"+this.id) ) return -1;
    return $("Img"+this.id).setStyle({top: this.y+'px', left: this.x+'px' });
}
elPos.prototype.setBval = function(){
	if(!this.xb){ this.xb = this.x;
	  this.yb = this.y;
	}
}
elPos.prototype.setBPos_scale = function(scale){
    return $("Img"+this.id).setStyle({top: this.yb+'px', left: this.xb+'px', width: (this.w*scale)+'px', height: (this.h*scale)+'px' });
}
elPos.prototype.resetScale = function(){
    $("Img"+this.id).setStyle({ width: this.w+'px', height: this.h+'px' });
}

function oEntrada(titulo, subtext, srcImg, text, hrefPdf){
  return oEntrada[id] = {
	titulo:titulo,
	src:srcImg,
	subText: subtext,
	text:text,
	href:hrefPdf
  };
}

Event.observe(window, 'load', function() {
  loadXML();
  loadMenu();
  if(location.search!=''){
	var strLink = String(location.search) 
    if( sendParse( xmlDoc.documentElement, strLink.substr(1).replace('%20', ' ').capitalize() ) != 1 ){ //search for corresponding node@titulo
      if( searchNode(location.search) != 1 ) initShow();
//check that the given route leads to a valid node > load node
    }
  }else{
    initShow();
  }
  Event.observe(window, 'resize', actualizeInfTabH);
});

setScreenSizeVar();

//Functions>>

function loadXML(){
  if (window.XMLHttpRequest)
	{
	xhttp=new XMLHttpRequest()
	}
  else
	{
	xhttp=new ActiveXObject("Microsoft.XMLHTTP")
	}
  xhttp.open("GET","contenido.xml",false);
  xhttp.send("");
  xmlDoc=xhttp.responseXML;
}


function loadMenu(){
  var xmlMenu = xmlDoc.getElementsByTagName("Menu");
  var subMenu = null;
  var subSubMenu = null;
  var txtHtml = "";
  var txtHtmlDiv = "";
  var sTitulo = "";
  var sSubTitulo = "";
  for(i=0; xmlMenu[i] ;i++){
	sTitulo= xmlMenu[i].getAttributeNode('titulo').nodeValue;
	if(sTitulo == "vínculos"){ //entrada de menu pagina de vínculos
	  txtHtml = "<div id='pMTit"+i+"' class='mTitle'><a id='aMTit"+i+"' onclick='loadLinks_page();";}
    else{
	  txtHtml = "<div id='pMTit"+i+"' class='mTitle'><a id='aMTit"+i+"' onclick='MShow("+i+");";
	  for(j=0; xmlMenu[i].childNodes[j]; j++){
		if(xmlMenu[i].childNodes[j].tagName == "Entrada"){
		  txtHtml += "setTimeout(&quot;entShow("+i+","+j+")&quot;,4);";
		  break;
		}
	  }
	}
	txtHtml += "'>"+ sTitulo + "</a></div>";
	txtHtml += "<div id='dM"+i+"' class='subTit'>";
	subMenu = xmlMenu[i].getElementsByTagName("subMenu");
	for(j=0; subMenu[j] ;j++){	
	  sSubTitulo = subMenu[j].getAttributeNode('titulo').nodeValue;
	  txtHtml += "<img src='pics/spac.gif' class='iSubSpc'/><a "
	  subSubMenu = null;
	  subSubMenu = subMenu[j].getElementsByTagName("subSubMenu");
	  if( subSubMenu[0] ){
	    txtHtml +=  "class='aSubT' ";
	  }else{
		txtHtml +=  "class='aSubT' ";
	  }
	  txtHtml += "onclick='";
	  for(k=0; subMenu[j].childNodes[k]; k++){
		if(subMenu[j].childNodes[k].tagName == "Entrada"){
		  txtHtml += "entShow("+i+","+j+","+k+");";
		  break;
		}
	  }
	  if( subSubMenu[0] ){
		txtHtml += "$(&quot;subDiv"+k+"&quot;).toggle();"
		txtHtmlDiv = "<div id='subDiv"+k+"'>"
		//= subMenu[j].getElementsByTagName("subSubMenu");
		for(k=0;subSubMenu[k];k++){	
		  var strTemp =	subSubMenu[k].getAttributeNode('titulo').nodeValue;		
		  txtHtmlDiv += "<img src='pics/spac.gif' class='iSubSubSpc'/><a class='aSubT' onclick='sendParse( xmlDoc.documentElement, &quot;"+strTemp.capitalize()+"&quot;)'>"+strTemp+"</a><br/>";
		}
		txtHtmlDiv += "</div>";
	  }
	  txtHtml += "'>" + sSubTitulo + "</a><br/>";
	  txtHtml += txtHtmlDiv;
	  txtHtmlDiv = "";
	}
	txtHtml += "</div>";
	$("mContainer").innerHTML += txtHtml;
	$('dM'+i).hide();
  }
  						//
  $('dM'+(i-1)).innerHTML = "<div class='subTit'>" //950 059 style='background-color:#f00;color:#fff'
  +"<a href='http://jaspeado.com/wfm/' class='aSubT' >web file manager</a>"
	+"<img src='pics/spac.gif' class='iSubSpc'/>"
	//+"&nbsp;/&nbsp;"
	+"<a href='https://jaspeado.com:2096/' class='aSubT' >correo</a><br/>"
	+"<img src='pics/spac.gif' id='cntVrtSpc'/>"
  +"</div>"
  +"<img src='pics/spac.gif' class='iSubSpc'/>JAR jaspeado arquitectos<br/><img src='pics/spac.gif' class='iSubSpc'/>av. forjadores de puebla 502<br/><img src='pics/spac.gif' class='iSubSpc'/>col. manantiales, san pedro cholula<br/><img src='pics/spac.gif' class='iSubSpc'/>cp. 72760 puebla, méxico. <br/>"
  +"<p class='subTit'><img src='pics/spac.gif' class='iSubSpc'/>t/f +52 (222) 242 53 20<br/><img src='pics/spac.gif' class='iSubSpc'/><a class='contactos' href = 'mailto:estudio@jaspeado.com'>estudio@jaspeado.com</a><br/></p>"
  +"";
  
}

function initShow(){
  for(i=0; xmlDoc.getElementsByTagName("JAR")[0].childNodes[i] && i<50; i++){
	if(xmlDoc.getElementsByTagName("JAR")[0].childNodes[i].tagName == "Entrada"){
	  loadEntrada(xmlDoc.getElementsByTagName("JAR")[0].childNodes[i]);
	  return;
	}
  }
}

function entShow(){
  if(entShow.arguments[0]!=undefined){
	i=entShow.arguments[0];
	if(entShow.arguments[1]!=undefined){
	  j= entShow.arguments[1];
	  if(entShow.arguments[2]!=undefined){
		 k = entShow.arguments[2];
		loadEntrada( xmlDoc.getElementsByTagName("Menu")[i].getElementsByTagName("subMenu")[j].childNodes[k] );
	  }else{
		loadEntrada( xmlDoc.getElementsByTagName("Menu")[i].childNodes[j]);
	  }
	}
  }
}

function searchNode(strRoute){
  var arRoute = strRoute.split("");
  var cNode = xmlDoc.documentElement;
  var entNode = null;
  elementN = -1;
  for(i=1; i<strRoute.length ;i++){
	  
	if( cNode.nodeName == 'Entrada' ) entNode=cNode;
	if( cNode.nodeName == 'Elemento' ) 
	  elementN++;
	  
	switch( arRoute[i]){
	  case '1': 
	  if( cNode.firstChild && cNode.firstChild.nodeType == 1){
		cNode=cNode.firstChild;
	  }else{
	    if(cNode.firstElementChild){
		  cNode=cNode.firstElementChild;
		}else{
		  return 0;
		}
	  }
	  break;
	case '0':
	  if( cNode.nextSibling && cNode.nextSibling.nodeType == 1){
		cNode=cNode.nextSibling;
	  }else{
		if(cNode.nextElementSibling){
		  cNode=cNode.nextElementSibling;
		}else{
		  return 0;
		}
	  }
	  break;
	default:
	  return 0; 
	}
  }
  //if( elementN > -1 )
  if( entNode != null){ 
    if( cNode.getElementsByTagName('Entrada')[0] ){
		//var tempNode=cNode.getElementsByTagName('Entrada')[0];
	  loadEntrada( cNode.getElementsByTagName('Entrada')[0] ); return 1;
	}
    loadEntrada( entNode ); return 1;
  }
  return -1;
}


function loadEntrada(xmlNode){
  var txtHtml0="";
  var txtHtml1="";
  var cNode;
  var dx=0;
  var txt0=new String();
  var eltTags= xmlNode.getElementsByTagName("Elemento");
  var strEntradaTit="";
  onMove=-1;
  if( xmlNode.getAttributeNode('titulo') ){ strEntradaTit = xmlNode.getAttributeNode('titulo').value;
  }
  for(i=0; eltTags[i]; i++){
	if(eltTags[i].getElementsByTagName("Img")){
	  var cNode= eltTags[i].getElementsByTagName("Img")[0]	
	  if(cNode.text && cNode.text != undefined ){
		txt0 = cNode.text;
	  }else{
		if(cNode.textContent) 
		txt0 = cNode.textContent;
	  }
	  if( txt0=="")break;
	  txt0 = "pics/"+txt0.strip();
	  txtHtml0 += "<img id='Img"+i+"' src='"+txt0+"' onload='iLoaded("+i+")'";
	  if( !xmlNode.getAttributeNode('no_img_link') && eltTags[i].getAttributeNode('vincular') && eltTags[i].getAttributeNode('vincular').value ){
		txtHtml0 += "class='eltImgLnk'";
		if( eltTags[i].getAttributeNode('vincular').value.search("http://")>-1 ){
		  txtHtml0 += "onClick='window.open(&quot;"+ eltTags[i].getAttributeNode('vincular').value +"&quot;)'/>";
		}else{
		  txtHtml0 += "onClick='sendParse( xmlDoc.documentElement, &quot;"+ eltTags[i].getAttributeNode('vincular').value.capitalize() +"&quot;)'/>";
		}
	  }else{
	    txtHtml0 += "class='eltImg' onClick='derivatedPos("+i+");'/>";
	  }
	}else{
	   break;
	}
	
	txtHtml1 += "<div id='infTab" +i+ "' class='infTab'>";
	if(eltTags[i].getElementsByTagName("Txt")){	  
	  //txtHtml1 += "<a class='bt'>&nbsp;</a>"; //spacer
	  if( eltTags[i].getAttributeNode('titulo') ){
		if( eltTags[i].getAttributeNode('vincular') ){
		  if( eltTags[i].getAttributeNode('vincular').value.search("http://")>-1 ){	
		    txtHtml1 += "<p><a class='tabTitle' target='_blank' href='"+ eltTags[i].getAttributeNode('vincular').value+"' >" + eltTags[i].getAttributeNode('titulo').nodeValue + "</a>";
		  }else{
		    txtHtml1 += "<p ><a class='tabTitle' onclick='sendParse( xmlDoc.documentElement, &quot;"+ eltTags[i].getAttributeNode('vincular').value.capitalize() +"&quot;)' >" + eltTags[i].getAttributeNode('titulo').nodeValue + "</a>";
		  }
		}else{
		  txtHtml1 += "<p><span class='tabTitle'>" + eltTags[i].getAttributeNode('titulo').value +"</span>";
		}
	  }
	  if( eltTags[i].getAttributeNode('subtitulo') ){
		 txtHtml1 += "<br/>"+eltTags[i].getAttributeNode('subtitulo').value; 
	  }
	    txtHtml1 += "</p>";
	  var cNode = eltTags[i].getElementsByTagName("Txt")[0];
	  if( cNode ){	
		if(cNode.text){
		  txt0 = cNode.text;
		}else{
		  if( cNode.textContent ){ 	
		    txt0 = cNode.textContent;
		  }else{			   		
	        txt0 = "EMPTY";	
		  }
		}
		if( txt0 != "EMPTY" ) txtHtml1 += "<div class='text'>" + txt0 + "</div>";
	  }
   	}
	if(i==0 && strEntradaTit != ""){
	  txtHtml1 +="<link rel='bookmark' href='http://www.jaspeado.com/avances1/?"+strEntradaTit+"'/>";
	  if( !xmlNode.getAttributeNode('no_p_link') ){
	    txtHtml1 +="&nbsp;<br/><a href='http://www.jaspeado.com/avances1/?"+strEntradaTit+"' class='subTit'>[permalink:"+strEntradaTit+"]</a>";
	  }
	}
	txtHtml1 += "</div>";
	arElPos[i] = new elPos(i);
  }
  txtHtml1.strip();
  $("imgDiv").update(txtHtml0);
  $("infTabDiv").update(txtHtml1);		
  elPosN= i;
  for(i=0; i<elPosN; i++)
  {
	if(i>0){
	  $("infTab"+i).hide();
	}else{
	  arElPos[i].set(POS0, POS1, null, null);
	}
	arElPos[i].setPos();
	arITH[i] = $("infTab"+i).getHeight()+22;
  }
  actualizeInfTabH();
}

function iLoaded(id){
  var nLd=0;
  arElPos[id].loaded=1;  
  if(!elPosN) return;
  for(var i=0; i<elPosN; i++)
  {
	if(arElPos[i])
	  nLd += arElPos[i].loaded;
  }
  if(nLd<elPosN){ 
    $("but2").update("cargando " + Math.round(100*nLd/elPosN) + "%");
    return;
  }
  if(nLd>elPosN) return; //avoid ie-"comptbl.mode" to reload function
  for(var i=0; i<elPosN; i++)
  {
	if(i>0){
	  dx = arElPos[(i-1)].x + arElPos[(i-1)].w; 
	}else{ 
	  dx= POS0; 
	}
	var wh= $("Img"+i).getDimensions();
	arElPos[i].set(dx, POS1, wh.width, wh.height);
	arElPos[i].setPos();
	arElPos[i].loaded=2;
  }
  onMove=0;
  if( elementN > 0 ) derivatedPos(elementN);
   $("but2").update();
}

//>>><<< end of loading functions

function MShow(id){
  if(onShowM > -1) $('dM'+onShowM).hide();
  if(onShowM == id){$('dM'+onShowM).hide(); onShowM=-1; return;}
  for(i=0;i<10;i++){
    if( $('subDiv'+i) ){
	  $('subDiv'+i).hide();}}
  $('dM'+id).show();	  
  onShowM = id;
}

function slidePosT(dx, dy, nSteps, fId){
  if(onMove==0){ 
    onMove=fId=Math.random();
  }else{
    if( onMove!=fId )return -1;
  }
  if(nSteps <= 0){ onMove=0; return 0;}
  /*if(arElPos[0].x + dx > POS0){ // jaja
  	dx = -arElPos[0].x + POS0;
  }*/
  if ( Math.abs(dx) < 0.01 ) return 0;
   if(arElPos[elPosN-1].x + dx < POS0 ){ 
  	dx = POS0 - arElPos[elPosN-1].x;
	if (dx > -0.5 ) return 0;
  }
  var fSteps= 1.0/nSteps;
  var i=0;
  for (i = 0;i < elPosN;i++){
	if(arElPos[i]){
	  arElPos[i].x += dx*fSteps;
	  arElPos[i].y += dy*fSteps;
	  arElPos[i].setPos();
	}
  }
  setTimeout( "slidePosT(" + (dx-dx*fSteps)+","+ (dy-dy*fSteps)+","+(nSteps-1)+","+fId+")" , 33 );
  return 0;
}

function randomPos(){
  if(elPosN<1) return;
  for(i=0; i < elPosN; i++){
	arElPos[i].setBval();
	arElPos[i].setBPos_scale(0.4);
	$("infTab"+i).hide();
    //$( randomPos.arguments[i] ).setAttribute("style","position:absolute;top:" + (Math.random()*WH*0.22+WH*0.34-75) + "px;left:" + (Math.random()*WD*0.9+WD*0.05-75) + "px;");
	slidePosTb( (Math.random()*(WD-POS0-arElPos[i].w*0.4)+POS0)-arElPos[i].xb, Math.random()*(WH-arElPos[i].h*0.4)-arElPos[i].yb, 10, i);
	$( "Img"+i ).setStyle({zIndex: Math.floor( Math.random()*9) - 9  });
  }
}

function slidePosTb(dx, dy, nSteps, id){
  if(nSteps < 1 || onMove != 0){ return;}
  var vSteps= 1.0/nSteps;
  arElPos[id].xb += dx*vSteps;
  arElPos[id].yb += dy*vSteps;
  //if(nSteps < 2){ var ascale= 0.5}else{ var ascale=1;}// - (0.5*(1/nSteps));
  arElPos[id].setBPos_scale(0.4)//ascale);
  setTimeout( "slidePosTb(" + (dx-dx*vSteps)+","+ (dy-dy*vSteps)+","+(nSteps-1)+","+id+")" , 33 );
}

function derivatedPos(id){
  if(onMove != 0) return;	
  var i;
  for(i=0; i<elPosN ;i++){
	if(POS0-1 < arElPos[i].x && arElPos[i].x < POS0+1) break;
  }
  var idC=i;
  switch(id){
	case -1: id=idC+1; if(id >= elPosN) return; break;
	case -2: id=idC-1; if(id < 0) return; break;
	case idC: id=idC+1; if(id >= elPosN) return;
  }
  for(i=0; i<elPosN ;i++) arElPos[i].resetScale();
  var dx= (POS0 -  arElPos[id].x);
  if(Math.abs(dx)>0.1){
	if(Math.abs(dx)>WD) window.scrollTo(0,0); 
    if( slidePosT(dx, 0, 10) < 0) return;
	$('infTab'+0).hide();
    if(idC > 0) $('infTab'+idC).hide(); 
	$('infTab'+id).show();
  }
}

function setScreenSizeVar(){
WH=document.viewport.getHeight();
WD=document.viewport.getWidth();
}

function actualizeInfTabH(){
  setScreenSizeVar();
  var heightC;
  var heightDisp;
  for(var i=0; i<elPosN; i++){	
	heightDisp=(WH-(POS1+370+37));
	if(heightDisp<0) heightDisp=0;
	if(!arITH[i]) return 1;
	heightC= arITH[i];
	if( heightC > heightDisp ){
	  if( heightDisp > 50){
	    $("infTab"+i).setStyle({ height: String(heightDisp+'px')});
	  }else{
		$("infTab"+i).setStyle({ height: '50px'});
	  }
	}else{
	  $("infTab"+i).setStyle({ height: String(heightC+'px')});
	}
  }
  //$('Body').setStyle({height:WH+'px', width:(WD+elPosN*600)+'px'});
}

function sendParse( cDoc, strLink ){
  //Test
  var intReturn = 0;
  if( cDoc.getAttributeNode('titulo') ){
	var strCurTit = cDoc.getAttributeNode('titulo').nodeValue.capitalize() ;
    if( strCurTit == strLink ){
	  if(cDoc.getElementsByTagName('Entrada')[0]){
	    loadEntrada (cDoc.getElementsByTagName('Entrada')[0]);
	    return 1;
	  }
	  if(cDoc.tagName == 'Entrada'){
		loadEntrada(cDoc);
		return 1;	    
	  }
	  //}else{
	    //return 2;	 
	  //}
    }
  }
  //Parse
  if( cDoc.firstElementChild ){
  	intReturn= sendParse(cDoc.firstElementChild, strLink);
  }else{
 	if( cDoc.firstChild && cDoc.firstChild.nodeType == 1){
  	  intReturn=  sendParse(cDoc.firstChild, strLink);
	}
  }
  if( intReturn > 0 ) return intReturn;
  if( cDoc.nextElementSibling ){
  	 intReturn= sendParse(cDoc.nextElementSibling, strLink);
  }else{
 	if( cDoc.nextSibling && cDoc.nextSibling.nodeType == 1){
  	   intReturn= sendParse(cDoc.nextSibling, strLink);
	}
  }
  return intReturn;
}

function loadLinks_page(){
  var strHtml, txt0;
  var nDiv=1;
  var Y=0;
  var cDoc = xmlDoc.getElementsByTagName('Menu');
  for(i=0; cDoc[i]; i++){
    if(cDoc[i].getAttributeNode('titulo').value == 'vínculos'){
	  cDoc=cDoc[i].getElementsByTagName('Entrada'); break;
	}
  }
  
  strHtml="<div class='vinculos' style='left:"+POS0*nDiv+"px'>";
  
  for(i=0; cDoc[i]; i++){
	cDocElement=cDoc[i].getElementsByTagName('Elemento');
	strHtml+="<p class='mTitle'>"+cDoc[i].getAttributeNode('titulo').value+"</p>";
	Y++;
	for(j=0;cDocElement[j];j++){
	  if(Y>(WH/58)){
		nDiv++;
		strHtml+="</div><div class='vinculos' style='left:"+POS0*nDiv+"px'>";
		Y=0
	  }
	  var cNode = cDocElement[j].getElementsByTagName("Link")[0];
	  if( cNode ){	
		if(cNode.text){
		  txt0 = cNode.text;
		}else{
		  txt0 = cNode.textContent;
	    }
	  	strHtml+="<p><a href='http://"+txt0+"'>"+txt0+"</a>";
	  }
	  var cNode = cDocElement[j].getElementsByTagName("Txt")[0];
	  if( cNode ){	
		if(cNode.text){
		  txt0 = cNode.text;
		}else{
		  txt0 = cNode.textContent;
	    }
	    strHtml+="<br/>"+txt0+"</p>"
	  }
	  Y++
	}
  }
  strHtml+="</div>";
  $("imgDiv").update("");
  $("infTabDiv").update(strHtml);
}
