if(!Array.indexOf){
    Array.prototype.indexOf = function(obj, start){
        for(var i=(start||0); i<this.length; i++){
            if(this[i]==obj){
                return i;
            }
        }
        
        return -1;
    }
}

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, skipDuplicates) {

	if (isUndefined(skipDuplicates))
	  skipDuplicates = false;
	  
	  
	var newArray = [];

	for (var j=0; j<oldArray.length; j++) 
	  if (skipDuplicates) {
	    //ver si ya estaba  
	    if (newArray.indexOf(oldArray[j]) == -1 )	    
	       newArray[ newArray.length ] = oldArray[j];
	  } 
	  else
	    newArray[ newArray.length ] = oldArray[j];

	return newArray;

}


var _hermesShowAlert = true;

function alertAndSkip(s) {
	if (_hermesShowAlert)
		_hermesShowAlert = confirm(s,s);
}


function ReplaceLinksWithContent() {
	var links  = copyArray( document.getElementsByTagName("a") ); //obtener un array que no se modifique
	var links2 = copyArray( document.getElementsByName("HERMES_INCLUDES") );
	
	links = links.concat( links2 );
	links = copyArray(links , true); //para quitar los repetidos	

	var E = null;
	var ext = null;

	var urlToLoad;
	var href;

	for (var i = 0; i < links.length; i++) {
	//for (var i = links.length-1; i > -1; i--) {

		if (links[i].alt) //si era imagen
			href = links[i].alt;
		else {
			href = links[i].href;
		}

		if (href.indexOf("|") >= 0 || href.indexOf(escape("|")) >= 0) {
			E = links[i];				
			
			while (E.tagName!="TD") {				
				//alertAndSkip( 'E.tagName:' + E.tagName +  '\n E.innerHTML:' + E.innerHTML );
				E = E.parentNode;
			}
			
			urlToLoad = href.substring(href.indexOf("|")+1,href.length);


			if (urlToLoad.indexOf(escape("|")) > 0)
				urlToLoad = href.substring(href.indexOf(escape("|"))+3,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 ProcessYouTubePlayer() {
	var youtubes = copyArray(document.getElementsByName("unYouTube"));

	var cualUrl;
	var w;
	var h;
	var tmp;
	

	for (var j=0; j<youtubes.length; j++) {
		cualUrl = GetValueFromQueryString(listaLinks['youtube'][j], 'url'); 		
		cualUrl = 'http://www.youtube.com/watch/v/' + cualUrl;
		youtubes[j].id = youtubes[j].id + j;
		var cualswf = new SWFObject(cualUrl, youtubes[j].id, '425', '355', "7", "#ffffff");
		cualswf.addParam("movie",cualUrl);
		cualswf.addParam("wmode","transparent");
		//alert(youtubes[j].id);
		cualswf.write(youtubes[j].id);
	}
}



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;
		
		if (h==0){
			elems[j].height = 240;
			//alert('h usando valores default');
		}else{
			elems[j].height = h;
		}
		
		if(w==0){
			elems[j].width = 320;
			//alert('w usando valores default');
		}else{
			elems[j].width = w;
		}		
		

		elemsDIV[j].innerHTML = elemsDIV[j].innerHTML;  //truco para firefox
	}
}




function ProcessFLVPlayer() {
	var flvs = copyArray(document.getElementsByName("unFLV"));

	var cualUrl;
	var w;
	var h;

	for (var j=0; j<flvs.length; j++) {

		cualUrl = GetValueFromQueryString(listaLinks['flv'][j], 'url');
		w = 320;
		h = 240;

		flvs[j].id = flvs[j].id + j;

		var cualFLV = new SWFObject("/js_srv/flvplayer.swf", flvs[j].id, w, h, "7", "#ffffff");
		cualFLV.addParam("allowfullscreen","true");
//		cualFLV.addParam("wmode", "opaque");
		cualFLV.addVariable("file",cualUrl);
		cualFLV.write(flvs[j].id);

		//alert('swfs.length al final=' + flvs.length);
		//alert(swfsOriginal.length);

	}
}



//buscar en el DOM actualizado luego de ReplaceLinksWithContent() elementos que deban desplegarse en un player
function ProcessPlayers() {
	ProcessSWGPlayer();
	ProcessIMGPlayer();
	ProcessVIDEOPlayer();
	ProcessYouTubePlayer();
	ProcessFLVPlayer();

}


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++) {
			
			//alert('name:' + attribs[j].nodeName + ', value=' + attribs[j].nodeValue);
			
			if (attribs[j].nodeName == attName && attribs[j].nodeValue == attValue)
				return elems[i];
		}
	}

	return null;
}

function FindElementsWithAttributeValue(elems, attName, attValue, parcial) {
	var returnElems = [];
		
	if (isUndefined(parcial))
	  parcial = false;

	for (var i=0; i<elems.length; i++) {
		attribs = elems[i].attributes;
		//alert('name:' + attribs[i].nodeName + ', value=' + attribs[i].nodeValue);

		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) != -1) //==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' || obj.type == 'file') {
		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.Enmarcar = function() {

	var divs =  FindElementsWithAttributeValue(document.getElementsByTagName('div'), 'class', 'hermes_enmarcar', false);  // document.getElementsByTagName('div');
 	var actual = 0;

 	//alert( divs.length );

 	for (var i=0; i<divs.length; i++) {
	// 	if (divs[i].id.toLowerCase().indexOf("hermes_enmarcar") > -1) {


			var E = divs[i];

			var contenido = E.innerHTML; //salvar el contenido anterior
			E.innerHTML = ReadFileSync('/redondeo.html'); //poner el html de redondeo

			var contenidoRedondeado = document.getElementById("contenidoRedondeado");

			contenidoRedondeado.innerHTML = contenido;  //ubicar dentro del html de redondeo el elemento donde se pone el contenido

			contenidoRedondeado.id = contenidoRedondeado.id + i
	//	}
	}
}


HASObject.ConvertirElementoEnToolTip = function(elem) {
	elem = document.getElementById(elem);
	var texto = elem.innerHTML;

	if (texto.length > 63) {
		var descripcion = texto.substring(0,63) + " ...<br>";

		// celda.innerHTML = descripcion + '<br><a class="info" href="#">[+ info]<span>' + texto + '</span></a>'
		elem.innerHTML = descripcion + '<div align="right"><span class="txt_masinfo" >[<a class="info" href="#" >+ info<span>' + texto + '</span></a>]</span></div>';
	}
 }


HASObject.fileExist = function (fileurl){
	var xmlHttp = XmlHttp.create();
	xmlHttp.open('GET', fileurl, false);
	xmlHttp.send(null);
	return(xmlHttp.status == 200)
}




function SaveFormBodyForHAF()
{
	var formBody = document.createElement('input');
	var theForm = FindElementsWithAttributeValue(document.forms, 'action', 'almacenarDatos.aspx', true);
	
	if (theForm) { 
		theForm = theForm[0]; //solo un formulario x page
		formBody.name = 'HERMESFORMBODY';
		formBody.type = 'hidden';
		formBody.value = theForm.innerHTML;
		theForm.appendChild(formBody);			
	}
}