// esta funcion es para enchufarle funciones a eventos de elementos
function addEvent(obj, evType, fn){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, false);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    return false;
  }
}
// es la forma correcta para el <body onload
addEvent(window, 'load', doAllThisOnLoad);

function doAllThisOnLoad(){
// initEvents le carga eventos a los elementos que quiero, para no ensuciar con JS el html
	initEvents();
	initEventsHead();
}

// inicializa eventos de los elementos que haga falta
function initEvent(tagname,tipo,funcion,evento){
	var eles = document.getElementsByTagName(tagname);
	var i;
	for(i = 0;i < eles.length; i++){
		// estos attributos 'attach_<algo>' se los defino en el xhtml
		// para saber luego a que le tengo que enchufar que evento
		if(eles[i].getAttribute(tipo) == '1'){
			if(evento == 'keyup'){
				eles[i].onkeyup = funcion;
			}else if(evento == 'click'){
				eles[i].onclick = funcion;
			}else if(evento == 'change'){
				eles[i].onchange = funcion;
			}else if(evento == 'blur'){
				eles[i].onblur = funcion;
			}else if(evento == 'submit'){
				eles[i].onsubmit = funcion;
			}else if(evento == 'mouseover'){
				eles[i].onmouseover = funcion;
			}else if(evento == 'mouseout'){
				eles[i].onmouseout = funcion;
			}
			if(eles[i].captureEvents){
				if(evento == 'keyup'){
					eles[i].captureEvents(Event.KEYUP);
				}else if(evento == 'click'){
					eles[i].captureEvents(Event.CLICK);
				}else if(evento == 'change'){
					eles[i].captureEvents(Event.CHANGE);
				}else if(evento == 'blur'){
					eles[i].captureEvents(Event.BLUR);
				}else if(evento == 'submit'){
					eles[i].captureEvents(Event.SUBMIT);
				}else if(evento == 'mouseover'){
					eles[i].captureEvents(Event.MOUSEOVER);
				}else if(evento == 'mouseout'){
					eles[i].captureEvents(Event.MOUSEOUT);
				}
			}
		}
	}
}

var request = false;
try {
  request = new XMLHttpRequest();
} catch (trymicrosoft) {
  try {
    request = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (othermicrosoft) {
    try {
      request = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (failed) {
      request = false;
    }
  }
}
if (!request)
	alert("Error initializing XMLHttpRequest.");

// tal vez estas helper funcs deberian ir a otro .js file
function $(o){return document.getElementById(o);}//ver tips and tricks de docs/doc/php<tab>
function nl2br (str, is_xhtml) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Philip Peterson
    // +   improved by: Onno Marsman
    // +   improved by: Atli
    // +   bugfixed by: Onno Marsman
    // *     example 1: nl2br('Kevin\nvan\nZonneveld');
    // *     returns 1: 'Kevin<br />\nvan<br />\nZonneveld'
    // *     example 2: nl2br("\nOne\nTwo\n\nThree\n", false);
    // *     returns 2: '<br>\nOne<br>\nTwo<br>\n<br>\nThree<br>\n'
    // *     example 3: nl2br("\nOne\nTwo\n\nThree\n", true);
    // *     returns 3: '<br />\nOne<br />\nTwo<br />\n<br />\nThree<br />\n'
 
    breakTag = '<br />';
//    if (typeof is_xhtml != 'undefined' && !is_xhtml) {
//        breakTag = '<br>';
//    }
 
    return (str + '').replace(/([^>]?)\n/g, '$1'+ breakTag +'\n');
}


// Convert HTML breaks to newline
String.prototype.br2nl =
function() {
	return this.replace(/<br\s*\/?>/mg,"\n");
};

String.prototype.br_remove =
function() {
	return this.replace(/<br\s*\/?>/mg,"");
};
