function ReadFileSync(sUri) {
   var async = false;

   try {

     var xmlHttp = XmlHttp.create();

     xmlHttp.open("GET", sUri, async);

   } catch (ex) {

     alert('Descripción: ' + ex.description
        //+ ' Línea ' + ex.number
        //+ ' Mensaje: ' + e.message
        );
   };

   xmlHttp.send(null);
   return xmlHttp.responseText;
}

function SendFormAsXMLHTTP(form, returnString) {
   var async = false;

   try {

     var xmlHttp = XmlHttp.create();

     sUri = form.action;

	 //según la documentación el url debe ser absoluto
	 //FireFox completa el action de los forms en caso de ser ruta relativa, IE no,
	 //por lo tanto es necesario completar
     if (sUri.toUpperCase().indexOf('HTTP://') == -1) {
     	sUri = location.protocol + '//' + location.host + sUri;
	 	alert(sUri);
	}

     xmlHttp.open(form.method, sUri, async);

   } catch (ex) {

     alert('Descripción: ' + ex.description
        //+ ' Línea ' + ex.number
        //+ ' Mensaje: ' + e.message
        );
   };

   xmlHttp.send(buildQueryString(form));
   //return xmlHttp.responseText;

   if (returnString)
     return returnString;
   else
     form.innerHTML = xmlHttp.responseText;
}

var listaLinks = [];


function copyArray(oldArray) {
	var newArray = [];

	for (var j=0; j<oldArray.length; j++)
		newArray[ newArray.length ] = oldArray[j];

	return newArray;

}


function copyArray(oldArray) {
	var newArray = [];

	for (var j=0; j<oldArray.length; j++)
		newArray[ newArray.length ] = oldArray[j];

	return newArray;

}

function ReplaceLinksWithContent() {
	var links = copyArray( document.getElementsByTagName("a") ); //obtener un array que no se modifique
	var E = null;
	var ext = null;

	var urlToLoad;

	for (var i = 0; i < links.length; i++) {
	//for (var i = links.length-1; i > -1; i--) {

		if (links[i].href.indexOf("|") > 0 || links[i].href.indexOf(escape("|")) > 0) {
			E = links[i];

			while (E.tagName!="TD")
				E = E.parentNode;


			urlToLoad = links[i].href.substring(links[i].href.indexOf("|")+1,links[i].href.length);

			if (urlToLoad.indexOf(escape("|")) > 0)
				urlToLoad = links[i].href.substring(links[i].href.indexOf(escape("|"))+3,links[i].href.length);

			ext = GetValueFromQueryString(urlToLoad, 'ext');

			if (ext != null) {
				if (listaLinks[ ext ] == null)
					listaLinks[ ext ] = [];

				listaLinks[ ext ][ listaLinks[ ext ].length ] = urlToLoad;
			}

			E.innerHTML = ReadFileSync(urlToLoad)

			//alert( urlToLoad );

			//alert(E.innerHTML);
		}
	}


	ProcessPlayers();

}



function ProcessSWGPlayer() {
	var swfs = copyArray(document.getElementsByName("unSWF"));

	var cualUrl;
	var w;
	var h;

	for (var j=0; j<swfs.length; j++) {

		cualUrl = GetValueFromQueryString(listaLinks['swf'][j], 'url');
		w = GetValueFromQueryString(listaLinks['swf'][j], 'w');
		h = GetValueFromQueryString(listaLinks['swf'][j], 'h');

		swfs[j].id = swfs[j].id + j;

		var cualSWF = new SWFObject(cualUrl, swfs[j].id, w, h, "8", "#ffffff");
		cualSWF.addParam("wmode", "opaque");
		cualSWF.write(swfs[j].id);

		//alert('swfs.length al final=' + swfs.length);
		//alert(swfsOriginal.length);

	}
}

function ProcessIMGPlayer() {
	var imgs = copyArray(document.getElementsByName("unIMG"));
	var cualUrl;

	for (var j=0; j<imgs.length; j++) {

		cualUrl = GetValueFromQueryString(listaLinks['img'][j], 'url');

		imgs[j].id = imgs[j].id + j;

		imgs[j].src = cualUrl;

	}
}

function ProcessVIDEOPlayer() {
	var elems = copyArray(document.getElementsByName("unVIDEO"));
	var elemsDIV = copyArray(document.getElementsByName("unVIDEODIV"));
	var cualUrl;
	var w;
	var h;

	for (var j=0; j<elems.length; j++) {

		cualUrl = GetValueFromQueryString(listaLinks['video'][j], 'url');
		w = GetValueFromQueryString(listaLinks['video'][j], 'w');
		h = GetValueFromQueryString(listaLinks['video'][j], 'h');


		elems[j].id = elems[j].id + j;
		elemsDIV[j].id = elemsDIV[j].id + j;

		elems[j].src = cualUrl;
		elems[j].height = h;
		elems[j].width = w;

		elemsDIV[j].innerHTML = elemsDIV[j].innerHTML;  //truco para firefox
	}
}

//buscar en el DOM actualizado luego de ReplaceLinksWithContent() elementos que deban desplegarse en un player
function ProcessPlayers() {
	ProcessSWGPlayer();
	ProcessIMGPlayer();
	ProcessVIDEOPlayer();
}


function GetValueFromQueryString(queryString, sParam) {

    var sKey = sParam + "=";

    //var myregexp = new RegExp(regexstring, "gims").

    //var oParams = queryString.split("?")[1].split("&");
    var oParams = queryString.split("?");
    oParams = oParams[oParams.length-1].split("&");

    for(var i = 0; i < oParams.length; i++)
        if(oParams[i].indexOf(sKey) == 0)
            return oParams[i].substring(sKey.length);
    return null;
};


function TravelDOM(elem, actionFunction) {
	if (elem.childNodes) {
		for (var i=0; i < elem.childNodes.length; i++) {
			TravelDOM(elem.childNodes[i], actionFunction);
		}
	}
	actionFunction( elem )
}

function TravelCollection(collection, actionFunction) {
	if (collection) {
		//el recorrido se hace inverso pues si el "actionFunction" elimina elementos la colección también se acorta
		for (var i=collection.length-1; i >= 0; i--) {
			actionFunction( collection[i] )
		}
	}
}

function FindElementWithAttributeValue(elems, attName, attValue) {
	for (var i=0; i<elems.length; i++) {
		attribs = elems[i].attributes;

		for (var j=0; j < attribs.length; j++)
			if (attribs[j].nodeName == attName && attribs[j].nodeValue == attValue)
				return elems[i];
	}


	return null;
}

function FindElementsWithAttributeValue(elems, attName, attValue, parcial) {
	var returnElems = [];



	for (var i=0; i<elems.length; i++) {
		attribs = elems[i].attributes;

		for (var j=0; j < attribs.length; j++)
			if (attribs[j].nodeName == attName) {

				if (!parcial && attribs[j].nodeValue == attValue)
					returnElems[returnElems.length] = elems[i];
				else
				  if (parcial && attribs[j].nodeValue.indexOf(attValue) == 0)
				    	returnElems[returnElems.length] = elems[i];
			}
	}


	return returnElems;
}

function RemoveAttributes(elems, attName)
{

	for (var i = 0; i < elems.length; i++) {

		elems[i].removeAttribute(attName);

	}

}

function buildQueryString(theForm) {
  var qs = ''
  for (e=0;e<theForm.elements.length;e++) {
    if (theForm.elements[e].name!='') {
      qs+=(qs=='')?'?':'&'
      qs+=theForm.elements[e].name+'='+escape(theForm.elements[e].value)
      }
    }
  return qs
}

/*
function CambiarImage(cual) {
	var img = document.getElementById("destino");
	if (img != null){
		img.src = cual;
	}
}

function AlterarHRefs() {
	var imgLinks = document.getElementsByTagName('A');
	var actual;

	for (var i=0; i<imgLinks.length; i++) {
	  actual = imgLinks[i].href.toUpperCase();
	  if (actual.lastIndexOf('.JPG') > 0 || actual.lastIndexOf('.GIF') > 0 || actual.lastIndexOf('.PNG') > 0)
		  imgLinks[i].href = "javascript:CambiarImage('" + actual + "')";

	 }
}*/


function AutoFitIframe(iFrameObj) {
	try {
		//alert('antes de resize');
		iFrameObj.height = iFrameObj.contentWindow.document.body.scrollHeight + 40;
		//alert('despues de resize');
	}
	catch(e)
	   {
		//alert(e);
		iFrameObj.height = 800;
	   }
}



function FixMenuStyle() {

  var tablasConMenu = FindElementsWithAttributeValue(document.getElementsByTagName("table"), 'class', 'topMenu', true); //apy0m0TB
  var tds;
  var tablas;

  for (var t=0; t < tablasConMenu.length; t++) {

    tds = tablasConMenu[t].getElementsByTagName("td");
    tablas = tablasConMenu[t].getElementsByTagName("table");

    RemoveAttributes(tds, "style");
    RemoveAttributes(tds, "cellpadding");
    RemoveAttributes(tds, "cellspacing");

    RemoveAttributes(tablas, "cellpadding");
    RemoveAttributes(tablas, "cellspacing");
  }
}

//nuevas funciones incluidas en el objecto HASObject

if(typeof HASObject=="undefined"){var HASObject=new Object();}

HASObject.GetElementValue = function(obj) {
	var resultado = null;

	//alert( 'GetElementValue obj.type=' + obj.type );
	//alert( 'GetElementValue obj.length=' + obj.length );

	if (obj == null)
		alert('GetElementValue, obj == null');

	if (isUndefined(obj))
		alert('GetElementValue, obj == undefined');

	if (obj.length != null)
		for ( var i = 0; i < obj.length; i++) {
			resultado = HASObject.GetElementValue( obj[i] );
			if (resultado != null)
				return resultado
		}

	if ( obj.type == 'hidden' || obj.type == 'text' || obj.type == 'password' || obj.type == 'textarea' || obj.type == 'button' || obj.type == 'submit' || obj.type == 'reset') {
		return obj.value;
	} else if ( obj.type == 'checkbox' || obj.type == 'radio' ) {
		//alert( 'GetElementValue obj.value=' + obj.value );
		if (obj.checked)
			return obj.value;

	} else if ( obj.type == 'select-one' || obj.type == 'select-multiple') {

		//alert(obj.type);

	    for ( var i = 0; i < obj.options.length; i++) {
		  if (obj.options[i].selected) {
		    return obj.options[i].value
		  }
		}
	}

	return null;
}

HASObject.RevisarCamposRequeridos = function () {

	if(typeof __HermesRequeridos=="undefined")
		return;

	var campos = __HermesRequeridos;
	var faltantes = "";
	var elem, elems;
	var focalizado = false;
	var valor = null;

	for (var i=0; i<campos.length; i++) {
	  elems = document.getElementsByName(campos[i])

	  if (elems.length > 0) //posiblemente un radio
	  	valor = HASObject.GetElementValue(elems);
	  else
		valor = HASObject.GetElementValue(elems[0]);

	  if (valor == null || valor.length == 0 ) {
		faltantes += '\n' +campos[i];

		if (!focalizado) {
		  elems[0].focus();
		  focalizado = true;
		}
	  }
	}

	if (faltantes == "")
	  return true
	else {
	  alert('Los siguientes datos son requeridos:\n' + faltantes);
	  return false;
	}
}


HASObject.fileExist = function (fileurl){
	var xmlHttp = XmlHttp.create();
	xmlHttp.open('GET', fileurl, false);            
	xmlHttp.send(null); 
	return(xmlHttp.status == 200)
}



