/* ************************************************************************ */
/* ***************** Metodos propios de Label ***************************** */

Element.Methods.visibilityV = function(element) { 
	element = $(element);
    element.style.visibility = 'visible';
    return element;
}

Element.Methods.visibilityH = function(element) { 
	element = $(element);
    element.style.visibility = 'hidden';
    return element;
}

Element.addMethods();

// Obtengo elementos dentro de un iframe (Ejemplos mas abajo)
// SERGI 29.6.2009 Primer uso en Mantenimiento de Tareas
Element.Methods.$ =  function(element, frameElement) { 
  element = $(element);

  var frameDocument = null;

  if (element.contentWindow)
      frameDocument = element.contentWindow.document;
  else if (element.contentDocument)
      frameDocument = element.contentDocument;
  else
      frameDocument = null;

  if (arguments.length > 2) {
      for (var i = 1, frameElements = [], length = arguments.length; i < length; i++)
          frameElements.push(element.$(arguments[i]));
      return frameElements;
  }
  if (Object.isString(frameElement))
      frameElement = frameDocument.getElementById(frameElement);
  return frameElement || element;
};

Element.addMethods();

/*
	Ejemplos del uso de la funcion anterior
	-- index.html
	<html>
	...
	<iframe id="my_frame" src="contents.html" />
	...
	</html>

	-- contents.html
	<html>
	...
	<h1 id="logo">Hello World Industries</h1>
	...
	</html>

	And the usage is thusly (this goes in index.html):

	var iframe = $('my_frame');
	var the_logo = iframe.$('logo');
*/

//window.onerror = function(msg, url, linenumber){alert("Error en linea " + linenumber + " de " + url + "\n\r" + msg);};

// SERGI 24.7.2009
// Obtiene el navegador y si version
var LabelBrowser = {
	userAgent : function(){return navigator.userAgent.toLowerCase();},
	_version: function(strCadena){
		var index = this.userAgent().indexOf(strCadena);
		var subCadena = this.userAgent().substr(index+strCadena.length);
		var indexFinal = subCadena.indexOf(".");
		return subCadena.substr(0,indexFinal);
	},
	Version: function() {
		var version = 999; // we assume a sane browser
		if (this.isIE()){
			version = this._version("msie ");
		}else if (this.isMozilla()){
			version = this._version("firefox/");
		}else if(this.isChrome()){
			version = this._version("chrome/");
		}
		return version;
	},
	Name: function(){
		if (LabelBrowser.isIE()){
			return "IE";
		}else if (this.isMozilla()){
			return "FF";
		}else if (this.isOpera()){
			return "OPERA";
		}else if (this.isSafari()){
			return "SAFARI";
		}else if (this.isChrome()){
			return "CHROME";
		}else{
			return "UNDEFINED";
		}
	},
	isChrome: function(){return (/chrome/.test( this.userAgent() ));},
	isSafari: function(){return (/webkit/.test( this.userAgent() ) && !/chrome/.test( this.userAgent() ));},
	isOpera: function(){return (/opera/.test( this.userAgent() ));},
	isIE: function(){return (/msie/.test( this.userAgent() ) && !/opera/.test( this.userAgent() ));},
	isMozilla: function(){return (/mozilla/.test( this.userAgent() ) && !/(compatible|webkit)/.test( this.userAgent() ));}
};
// FIN - Obtiene el navegador y si version


// Sergi 26.8.2009 Personalizaci¡n y automatizaci¡n de acciones tipicas

Element.Methods.aspDisable = function(element, blnParent){
		return elementDisable(element, blnParent);
};

Element.Methods.aspEnable = function(element, blnParent){
		return elementEnable(element, blnParent);
};

Element.Methods.markError = function(element, blnParent){
	return elementMarkError(element, blnParent);
};

Element.Methods.unMarkError = function(element, blnParent){
	return elementUnMarkError(element, blnParent);
};

Element.Methods.inError = function(element, blnParent){
	return elementInError(element, blnParent);
};

Element.Methods.setValue = function(element, strValue){
	if(element.tagName.toLowerCase() == "input"){
		// Intenta fer la assignaci¾. (si l'element estÓ disabled llenþaria un error, i aixÝ ho controlem)
		try{element.value = strValue;}
		catch(msg){}
	}
	return element;
}

Element.Methods.AC = function(element){
	element = $(element);
	if(element.hasClassName("autocompletar2"))
		return getACByElementId(element.identify());
	else
		return element;
};

Element.addMethods();

function elementMarkError(element, blnParent){
	var obj = getElementConditions(element, blnParent);

	if(!elementInError(element, blnParent)){
		if(obj.blnParent){
			obj.myParent.addClassName("erroneo");
		}else{
			if(obj.myElement.hasClassName("autocompletar2")){
				getACByElementId(obj.myElement.identify()).markError();
			}else{
				obj.myElement.addClassName("erroneo");
			}
		}
	}

	return element;
}

function elementUnMarkError(element, blnParent){
	var obj = getElementConditions(element, blnParent);

	if(elementInError(element, blnParent)){
		if(obj.blnParent){
			obj.myParent.removeClassName("erroneo");
		}else{
			if(obj.myElement.hasClassName("autocompletar2")){
				getACByElementId(obj.myElement.identify()).unMarkError();
			}else{
				obj.myElement.removeClassName("erroneo");
			}
		}
	}

	return element;
}

function elementInError(element, blnParent){
	var obj = getElementConditions(element, blnParent);

	if(obj.blnParent){
		return obj.myParent.hasClassName("erroneo");
	}else{
		if(obj.myElement.hasClassName("autocompletar2")){
			return inErrorAC(obj.myElement.identify());
		}else{
			return obj.myElement.hasClassName("erroneo");
		}
	}
}

function elementDisable(element, blnParent){
	// Como se le hace que se pueda realizar esta accion sobre el parentNode, puede ser que el parentNode no permita enabla()/disable(),
	// de la siguiente manera lo controlamos
	var obj = getElementConditions(element, blnParent);

	// hay casos en que no hay que desabilitar el elemento
	var blnDisableElement = true;

	if(obj.blnParent){
		if(obj.myElement.tagName.toLowerCase() == "select"){
			obj.myElement.addClassName("selectDisableds").addClassName("desabledGris");
		}else
			obj.myParent.addClassName("desabled");
	}else{
		// Algunos controles Personalizados
		if(obj.myElement.hasClassName("autocompletar2")){     			// Autocomplete
			deshabilitarAC(obj.myElement.identify());
			blnDisableElement = false;
		}else{															//Por defecto
			obj.myElement.addClassName("desabled") 
						 .addClassName("desabledGris");

			if(obj.myElement.hasClassName("calendario")){				// Calendario
				obj.myElement.hideImageCalendar()
			}
		}
	}

	if(blnDisableElement && obj.myElement.disable)
		return obj.myElement.disable();

	return element;
}

function elementEnable(element, blnParent){
	//Cualquier elemento que se le pase que contenga la clase "siempreDisabled" no lo habilitarß
	if($(element).hasClassName("siempreDisabled")) return element;

	// Como se le hace que se pueda realizar esta accion sobre el parentNode, puede ser que el parentNode no permita enabla()/disable(),
	// de la siguiente manera lo controlamos
	var obj = getElementConditions(element, blnParent);

	// hay casos en que no hay que desabilitar el elemento
	var blnEnableElement = true;

	if(obj.blnParent){
		if(obj.myElement.tagName.toLowerCase() == "select"){
			obj.myElement.removeClassName("selectDisableds").removeClassName("desabledGris");
		}else
			obj.myParent.removeClassName("desabled");
	}else{
		// Algunos controles Personalizados
		if(obj.myElement.hasClassName("autocompletar2")){			// Autocomplete
			habilitarAC(obj.myElement.identify());
			blnEnableElement = false;
		}else{														// Por defecto
			obj.myElement.removeClassName("desabled") 
						 .removeClassName("desabledGris");

			if(obj.myElement.hasClassName("calendario")){			// Calendario
				obj.myElement.showImageCalendar()
			}
		}
	}

	if(blnEnableElement && obj.myElement.disable)
		return obj.myElement.enable();

	return element;
}

function getElementConditions(element, blnParent){
	var myEl = $(element);
	// Si no viene informado, compruebo si es un select, (automaticamente le asignare un true a blnParent)
	if(blnParent == undefined || typeof blnParent == "undefined"){
		// Buscar si es select
		if(myEl.tagName.toLowerCase() == "select"){
			blnParent = true;
		}else{
			blnParent = false;
		}
	}else if(!blnParent){ //si viene informado y es false, obtengo el elemento y no su padre
		blnParent = false;
	}else{
		blnParent = true; //En cualquier otro caso, obtengo el padre
	}

	//alert(element + "-" + myEl.identity());
	if(myEl == null)
		alert("'" + element + "' no existe en la pßgina");

	return {
		blnParent: blnParent,
		myParent: (blnParent) ? $(myEl.parentNode) : null,
		myElement: myEl
	};
}

// Fin personalizaci¡n  y automatizaci¡n de acciones tipicas
