//-------------------------------------------------------------------
// Author: Raul Morales <raulemofe@hotmail.com>
// WWW: http://www.MovimientoWeb.com/
// Funciones con caracteres o cadenas
//-------------------------------------------------------------------
function CreaEmail(User, Domain, Active) // Escribe un email con javascript para evitar el spam...
{
	// Si "Active == 1" se crea un AHref, si no, solo se crea el texto. 
	if(Active=='1') { document.write('<a href="mailto:'+User+'&#64;'+Domain+'">'); } document.write(User+'&#64;'+Domain); if(Active=='1') { document.write('</a>'); }
}

function Link(Url) { document.location=Url; } // Envia a un "Url" dado...


//-------------------------------------------------------------------
// Author: Raul Morales <raulemofe@hotmail.com>
// WWW: http://www.MovimientoWeb.com/
// Funciones de números
//-------------------------------------------------------------------
function formatCurrency(num) // Devuelve de "num" un valor numérico con dos decimales...
{
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num)) { num = "0"; }
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10) { cents = "0" + cents; }
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) 
	{ 
		num = num.substring(0,num.length-(4*i+3))+num.substring(num.length-(4*i+3)); 
	}
	return (((sign)?'':'-') + num + '.' + cents);
}

function Redondea(Num, Decimales) // Máximo 2 decimales... Si decimales es mayor de 2 solo devolverá 2...
{
	var Num = parseFloat(Num);
	var Decimales = parseFloat(Decimales);
	Decimales = (!Decimales ? 2 : Decimales);
	return Math.round(Num * Math.pow(10, Decimales)) / Math.pow(10, Decimales);
}    


//-------------------------------------------------------------------
// Author: Raul Morales <raulemofe@hotmail.com>
// WWW: http://www.MovimientoWeb.com/
// Funciones de Fecha y Hora
//-------------------------------------------------------------------
function currentDate() // Devuelve la fecha actual...
{
	var d = new Date();
	var date  = d.getDate() > 9 ? d.getDate() : '0' + String(d.getDate());
	var month = (d.getMonth() + 1) > 9 ? (d.getMonth() + 1) : '0' + (d.getMonth() + 1);
	var year  = d.getFullYear();
	return date+'/'+ month + '/' + year;
}

function currentTime() // Devuelve la hora actual...
{
	var d = new Date();
	var hours   = d.getHours() > 9 ? d.getHours() : '0' + d.getHours();
	var minutes = d.getMinutes() > 9 ? d.getMinutes() : '0' + d.getMinutes();
	var seconds = d.getSeconds() > 9 ? d.getSeconds() : '0' + d.getSeconds();
	return hours + ':' + minutes + ':' + seconds;
}

function currentDateTime() 	{ return currentDate() + ' ' + currentTime(); } // Devuelve la Fecha - Hora actual...


//-------------------------------------------------------------------
// Author: Raul Morales <raulemofe@hotmail.com>
// WWW: http://www.MovimientoWeb.com/
// Funciones con objetos del navegador
//-------------------------------------------------------------------
function Navigator() // Regresa el nombre del navegador actual...
{
	var Navigator='';
	var ua		= navigator.userAgent;
	var opera	= /opera [56789]|opera\/[56789]/i.test(ua);
	var ie		= !opera && /msie [56789]/i.test(ua);
	var moz		= !opera && /mozilla\/[56789]/i.test(ua);
	if(opera) 	{ var Navigator='Opera'; }
	if(ie) 		{ var Navigator='IE'; }
	if(moz) 	{ var Navigator='Mozilla'; }
	if(!Navigator) { var Navigator='Desconocido';  }
	return Navigator;
}

function CambiaClase(Class, ObjetId) { document.getElementById(ObjetId).className=Class; } // Cambia la clase a un elemento por la nueva clase enviada a la función.

function PNG_loader() // Aplica transparencia a los Elementos PNG's en IE...
{ 
	if(Navigator()=="IE") // Solo para IE...
	{
		for(var i=0; i<document.images.length; i++) 
		{ 
			var img = document.images[i]; 
			var imgName = img.src.toUpperCase(); 
			if(imgName.substring(imgName.length-3, imgName.length) == "PNG") 
			{ 
				var imgID = (img.id) ? "id='" + img.id + "' " : ""; 
				var imgClass = (img.className) ? "class='" + img.className + "' " : ""; 
				var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "; 
				var imgStyle = "display:inline-block;" + img.style.cssText; 
				if(img.align == "left") imgStyle += "float:left;"; 
				if(img.align == "right") imgStyle += "float:right;"; 
				if(img.parentElement.href) imgStyle += "cursor:hand;"; 
				var strNewHTML = "<span " + imgID + imgClass + imgTitle + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";" 
					+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader" + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"; 
				img.outerHTML = strNewHTML; 
				i--; 
			} 
		}
	} 
} 
//window.attachEvent("onload", PNG_loader); // Al hacer OnLoad ejecutamos la funcion PNG_loader...

function WindowOpenPopup(Url, Name, Width, Height, Align, Bars)
{
	if(Align=="1") { var ScreenWidth=screen.width; var ScreenHeight=screen.height; var Left=(parseInt(ScreenWidth-Width)/2); var Top=(parseInt(ScreenHeight-Height)/2); }
	else { var Left=0; var Top=0; }
	if(!Name) { var Name="Popup"; }
	if(Bars==0) { var Parameters=" Scrollbars=no, Directories=no, Location=no, Menubar=no, Status=no, Titlebar=no, Toolbar=no "; }
	else if(Bars==1) { var Parameters=" Scrollbars=yes, Directories=yes, Location=yes, Menubar=yes, Status=yes, Titlebar=yes, Toolbar=yes "; }
	if(Url) { window.open(Url,Name,'width='+Width+', height='+Height+', left='+Left+', top='+Top+', '+Parameters+''); }
	else { alert("No se puede abrir el popup!"); }
}

function PlaySound(FileSound, Path, Element, RequestFalse) // Reproduce un sonido(FileSound) dada su ubicación(Path) y el nombre del elemento de html donde se reproducirá(Element)... Solo IE...
{ 
	if(Navigator()=="IE") { document.getElementById(Element).src=Path+FileSound; }
	else { if(RequestFalse) { alert(RequestFalse); } }
}

function PageReload() { location.reload(); } // Recarga o refresca la página actual...

function AddFavorites(Site, Title, RequestFalse) // Agrega a favoritos un sitio(Site) con el titulo(Title)... Solo IE...
{ 
	if(Navigator()=="IE") { window.external.AddFavorite(Site,Title); }
	else { if(RequestFalse) { alert(RequestFalse); } } 
}

function HomePage(Site, Title, RequestFalse) // Asigna como página de inicio un sitio(Site)... Solo IE...
{ 
	if(Navigator()=="IE") 
	{
		var url = "'"+Site+"'"; 
		with(document)
		{ 
			write('<a href="#" '); 
			write('onClick="this.style.behavior=');  
			write("'url(#default#homepage)';")
			write('this.setHomePage('+url+');">');
			write(''+Title+'</a>') 
		}
	} 
	else if(RequestFalse) { document.write(RequestFalse); } 
}

function ElementDisabled(Element) { document.getElementById(Element).disabled=true; } // Cambia el atributo "disabled" a verdadero del elemento "Element" enviado...

//-------------------------------------------------------------------
// Author: Raul Morales <raulemofe@hotmail.com>
// WWW: http://www.MovimientoWeb.com/
// Al intentar cerrar o refrescar el navegador, envia un mensaje si "AutorizaSalida" es verdadero...
//-------------------------------------------------------------------
var AutorizaSalida=false;
function AutorizarSalida() { AutorizaSalida=false; } 
function NoAutorizarSalida() { AutorizaSalida=true; } 
function AutorizaSalidaMSG(Msg) 
{ 
	if(!Msg) { var Msg='Esta acción perderá los cambios hechos a la página!'; }
	if(AutorizaSalida==true) { return Msg; } 
} 

//-------------------------------------------------------------------
// Author: Raul Morales <raulemofe@hotmail.com>
// WWW: http://www.MovimientoWeb.com/
// Funciones con ajax
//-------------------------------------------------------------------
function funcionnuevoAjax() // Crea conexion ajax. Contacto: edanps@gmail.com
{
	var xmlhttp=false; 
	try 		{ xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); } 
	catch(e)	{ try 		{ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch(E) 	{ xmlhttp=false; } }
	if (!xmlhttp && typeof XMLHttpRequest!="undefined") { xmlhttp=new XMLHttpRequest(); }
	return xmlhttp;
}

function LoadCombo(ComboA, ComboB, DescriptionB, Table, Row, Required, Parameters) // Carga un combo de otro...
{
	var Type="Combos";
	var PathAjax='ajax/';
	var FileAjax='FileAjax.php?Type='+Type;
	var UrlAjax=PathAjax+''+FileAjax;
	if((ComboA) && (ComboB) && (DescriptionB) && (Table) && (Row))
	{
		var ComboAValue=document.getElementById(ComboA).value; ComboBActions=document.getElementById(ComboB); ComboBActions.length=0; var NewOption=document.createElement("option"); NewOption.value=0; 
		if(ComboAValue) 
		{ 
			NewOption.innerHTML="Cargando..."; ComboBActions.appendChild(NewOption); ComboBActions.disabled=true;
			var ajax=funcionnuevoAjax();
			ajax.open("POST", UrlAjax, true);
			ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			ajax.send("ComboA="+ComboA+"&ComboAValue="+ComboAValue+"&ComboB="+ComboB+"&DescriptionB="+DescriptionB+"&Table="+Table+"&Required="+Required+"&Parameters="+Parameters);
			ajax.onreadystatechange=function()
			{
				if(ajax.readyState==1) { }
				if(ajax.readyState==4)
				{
					//alert(ajax.responseText);
					if(ajax.responseText) { document.getElementById(Row).innerHTML=ajax.responseText; } 
				}
			}
		}
	}
}

//-------------------------------------------------------------------
// Author: Raul Morales <raulemofe@hotmail.com>
// WWW: http://www.MovimientoWeb.com/
// Funciones de Validaciones en formularios
//-------------------------------------------------------------------
function Validacion(FormName, RequestRequiredBlank, RequestError, RequestOk) // Validación generica...
{
	var FormName=document.getElementById(FormName);
	var Elements=FormName.length;
	if(Elements>0)
	{
		for(var i=0; i<Elements; i++)
		{
			var Class=FormName.elements[i].className;
			var Type=FormName.elements[i].type;
			FormName.elements[i].value=Trim(FormName.elements[i].value); // Quitamos los espacios en blanco a la derecha y a la izquierda y actualizamos el Contenido del campo...
			var Value=FormName.elements[i].value; // Obtenemos el Contenido ya sin espacios en blanco...
			var Name=FormName.elements[i].name;
			var Id=FormName.elements[i].id;
			//alert("Class: "+Class+";\nType: "+Type+";\nValue: "+Value+";\nName: "+Name+";\nId: "+Id);
			if(Class)
			{
				switch(Class)
				{
					case "InputTextEmailRequired": 
						if(Type=='text')
						{
							if(!Value) 
							{ 
								FormName.elements[i].style.border='1px solid #CC3333';
								if(RequestRequiredBlank) { alert(RequestRequiredBlank); }
								FormName.elements[i].focus();
								return false;
							}
							else if(!ValidarEmail(Value))
							{ 
								FormName.elements[i].style.border='1px solid #CC3333';
								FormName.elements[i].value='';
								if(RequestError) { alert("Formato de correo electrónico incorrecto!"); }
								FormName.elements[i].focus();
								return false;
							}
							else 
							{ 
								FormName.elements[i].style.border='1px solid #7f9db9';
								FormName.elements[i].className='InputTextEmailRequired'; 
							}
						}
					break;
					case "InputTextEmailNoRequired": 
						if(Type=='text')
						{
							if(!ValidarEmail(Value) && (Value))
							{ 
								FormName.elements[i].style.border='1px solid #CC3333';
								if(RequestError) { alert("Formato de correo electrónico incorrecto!"); }
								FormName.elements[i].focus();
								return false;
							}
							else 
							{ 
								FormName.elements[i].style.border='1px solid #7f9db9';
								FormName.elements[i].className='InputTextEmailNoRequired'; 
							}
						}
					break;
					case "InputNumRequired":
						if(Type=='text')
						{
							if(!Value) 
							{ 
								FormName.elements[i].style.border='1px solid #CC3333';
								if(RequestRequiredBlank) { alert(RequestRequiredBlank); }
								FormName.elements[i].focus();
								return false;
							}
							else if(!isInteger(Value))
							{ 
								FormName.elements[i].style.border='1px solid #CC3333';
								FormName.elements[i].value='';
								if(RequestError) { alert("Esto no es un número!\nNo debe contener Letras, comas, puntos, etc."); }
								FormName.elements[i].focus();
								return false;
							}
							else 
							{ 
								FormName.elements[i].style.border='1px solid #7f9db9';
								FormName.elements[i].className='InputNumRequired'; 
							}
						}
					break;
					case "InputNumNoRequired":
						if(Type=='text')
						{
							if(!isInteger(Value) && (Value))
							{ 
								FormName.elements[i].style.border='1px solid #CC3333';
								FormName.elements[i].value='';
								if(RequestError) { alert("Esto no es un número!\nNo debe contener Letras, comas, puntos, etc."); }
								FormName.elements[i].focus();
								return false;
							}
							else 
							{ 
								FormName.elements[i].style.border='1px solid #7f9db9';
								FormName.elements[i].className='InputNumNoRequired'; 
							}
						}
					break;
					case "InputDateRequired":
						if(Type=='text')
						{
							if(!Value) 
							{ 
								FormName.elements[i].style.border='1px solid #CC3333';
								if(RequestRequiredBlank) { alert("Escribe una fecha correcta!"); }
								FormName.elements[i].focus();
								return false;
							}
							else if(!isDate(Value,'dd/MM/yyyy'))
							{ 
								FormName.elements[i].style.border='1px solid #CC3333';
								FormName.elements[i].value='';
								if(RequestError) { alert(RequestError); }
								FormName.elements[i].focus();
								return false;
							}
							else 
							{ 
								FormName.elements[i].style.border='1px solid #7f9db9';
								FormName.elements[i].className='InputDateRequired'; 
							}
						}
					break;
					case "InputDateNoRequired":
						if(Type=='text')
						{
							if(!isDate(Value,'dd/MM/yyyy') && (Value))
							{ 
								FormName.elements[i].style.border='1px solid #CC3333';
								FormName.elements[i].value='';
								if(RequestError) { alert("Escribe una fecha correcta!"); }
								FormName.elements[i].focus();
								return false;
							}
							else 
							{ 
								FormName.elements[i].style.border='1px solid #7f9db9';
								FormName.elements[i].className='InputDateNoRequired'; 
							}
						}
					break;
					case "InputTextRequired": 
						if((Type=='text') || (Type=='textarea') || (Type=='password') || (Type=='select-one'))
						{
							if(!Value) 
							{ 
								FormName.elements[i].style.border='1px solid #CC3333';
								if(RequestRequiredBlank) { alert(RequestRequiredBlank); }
								FormName.elements[i].focus();
								return false;
							}
							else 
							{ 
								FormName.elements[i].style.border='1px solid #7f9db9';
								FormName.elements[i].className='InputTextRequired'; 
							}
						}
					break;
					case "InputButton": 
						if(Type=='submit' || Type=='button')
						{
							FormName.elements[i].disabled=true;
						}
					break;
					default: break;
				}
			}
		}
	}
	if(RequestOk) { alert(RequestOk); }
	return true;
}

function ValidarEmail(Email) // Valida el formato de un email(Email) dado...
{
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(Email)) { return true; } 
	else { return false; }
}

//-------------------------------------------------------------------
// Author: Matt Kruse <matt@mattkruse.com>
// WWW: http://www.mattkruse.com/
// Trim functions (Elimina los espacios vacios de un string)
//-------------------------------------------------------------------
function LTrim(str)
{
	if (str==null){return null;}
	for(var i=0;str.charAt(i)==" ";i++);
	return str.substring(i,str.length);
}

function RTrim(str)
{
	if (str==null){return null;}
	for(var i=str.length-1;str.charAt(i)==" ";i--);
	return str.substring(0,i+1);
}

function Trim(str){return LTrim(RTrim(str));}

function LTrimAll(str) 
{
	if (str==null){return str;}
	for (var i=0; str.charAt(i)==" " || str.charAt(i)=="\n" || str.charAt(i)=="\t"; i++);
	return str.substring(i,str.length);
}

function RTrimAll(str) 
{
	if (str==null){return str;}
	for (var i=str.length-1; str.charAt(i)==" " || str.charAt(i)=="\n" || str.charAt(i)=="\t"; i--);
	return str.substring(0,i+1);
}

function TrimAll(str) { return LTrimAll(RTrimAll(str)); }

//-------------------------------------------------------------------
// isNull(value) - Devuelve verdadero si el valor enviado es "null".
//-------------------------------------------------------------------
function isNull(val){return(val==null);}

//-------------------------------------------------------------------
// isBlank(value) - Devuelve verdadero si el valor enviado es vacío o contiene espacios en blanco.
//-------------------------------------------------------------------
function isBlank(val)
{
	if(val==null){return true;}
	for(var i=0;i<val.length;i++) 
	{
		if ((val.charAt(i)!=' ')&&(val.charAt(i)!="\t")&&(val.charAt(i)!="\n")&&(val.charAt(i)!="\r")){return false;}
	}
	return true;
}

//-------------------------------------------------------------------
// isInteger(value) - Devuelve verdaderos si todos los elementos del "val" son numeros.
//-------------------------------------------------------------------
function isInteger(val)
{
	if (isBlank(val)){return false;}
	for(var i=0;i<val.length;i++)
	{
		if(!isDigit(val.charAt(i))){return false;}
	}
	return true;
}

//-------------------------------------------------------------------
// isNumeric(value) - Devuelve verdadero si "val" es un numero
//-------------------------------------------------------------------
function isNumeric(val){return(parseFloat(val,10)==(val*1));}

//-------------------------------------------------------------------
// isArray(obj) - Devuelve verdadero si el objeto(obj) es un arreglo.
//-------------------------------------------------------------------
function isArray(obj){return(typeof(obj.length)=="undefined")?false:true;}

//-------------------------------------------------------------------
// isDigit(value) - Devuelve verdadero si el valor(num) es un digito numerico.
//-------------------------------------------------------------------
function isDigit(num) 
{
	if (num.length>1){return false;}
	var string="1234567890";
	if (string.indexOf(num)!=-1){return true;}
	return false;
}

//-------------------------------------------------------------------
// setNullIfBlank(input_object) - Sets a form field to "" if it isBlank()
//-------------------------------------------------------------------
function setNullIfBlank(obj) { if(isBlank(obj.value)){obj.value="";} }

//-------------------------------------------------------------------
// setFieldsToUpperCase(input_object) - Sets value of form field toUpperCase() for all fields passed
//-------------------------------------------------------------------
function setFieldsToUpperCase()
{
	for(var i=0;i<arguments.length;i++) { arguments[i].value = arguments[i].value.toUpperCase(); }
}

//-------------------------------------------------------------------
// disallowBlank(input_object[,message[,true]]) - Checks a form field for a blank value. Optionally alerts if blank and focuses
//-------------------------------------------------------------------
function disallowBlank(obj)
{
	var msg=(arguments.length>1)?arguments[1]:"";
	var dofocus=(arguments.length>2)?arguments[2]:false;
	if (isBlank(getInputValue(obj)))
	{
		if(!isBlank(msg)){alert(msg);}
		if(dofocus)
		{
			if (isArray(obj) && (typeof(obj.type)=="undefined")) {obj=obj[0];}
			if(obj.type=="text"||obj.type=="textarea"||obj.type=="password") { obj.select(); }
			obj.focus();
		}
		return true;
	}
	return false;
}

//-------------------------------------------------------------------
// disallowModify(input_object[,message[,true]]) - Checks a form field for a value different than defaultValue. - Optionally alerts and focuses
//-------------------------------------------------------------------
function disallowModify(obj)
{
	var msg=(arguments.length>1)?arguments[1]:"";
	var dofocus=(arguments.length>2)?arguments[2]:false;
	if (getInputValue(obj)!=getInputDefaultValue(obj))
	{
		if(!isBlank(msg)){alert(msg);}
		if(dofocus)
		{
			if (isArray(obj) && (typeof(obj.type)=="undefined")) {obj=obj[0];}
			if(obj.type=="text"||obj.type=="textarea"||obj.type=="password") { obj.select(); }
			obj.focus();
		}
		setInputValue(obj,getInputDefaultValue(obj));
		return true;
	}
	return false;
}

//-------------------------------------------------------------------
// commifyArray(array[,delimiter]) - Take an array of values and turn it into a comma-separated string - Pass an optional second argument to specify a delimiter other than comma.
//-------------------------------------------------------------------
function commifyArray(obj,delimiter)
{
	if (typeof(delimiter)=="undefined" || delimiter==null) 
	{
		delimiter = ",";
	}
	var s="";
	if(obj==null||obj.length<=0){return s;}
	for(var i=0;i<obj.length;i++)
	{
		s=s+((s=="")?"":delimiter)+obj[i].toString();
	}
	return s;
}

//-------------------------------------------------------------------
// getSingleInputValue(input_object,use_default,delimiter) - Utility function used by others
//-------------------------------------------------------------------
function getSingleInputValue(obj,use_default,delimiter) 
{
	switch(obj.type)
	{
		case 'radio': case 'checkbox': return(((use_default)?obj.defaultChecked:obj.checked)?obj.value:null);
		case 'text': case 'hidden': case 'textarea': return(use_default)?obj.defaultValue:obj.value;
		case 'password': return((use_default)?null:obj.value);
		case 'select-one':
			if (obj.options==null) { return null; }
			if(use_default)
			{
				var o=obj.options;
				for(var i=0;i<o.length;i++){if(o[i].defaultSelected){return o[i].value;}}
				return o[0].value;
			}
			if (obj.selectedIndex<0){return null;}
			return(obj.options.length>0)?obj.options[obj.selectedIndex].value:null;
		case 'select-multiple': 
			if (obj.options==null) { return null; }
			var values=new Array();
			for(var i=0;i<obj.options.length;i++) 
			{
				if((use_default&&obj.options[i].defaultSelected)||(!use_default&&obj.options[i].selected)) 
				{
					values[values.length]=obj.options[i].value;
				}
			}
			return (values.length==0)?null:commifyArray(values,delimiter);
	}
	alert("FATAL ERROR: Field type "+obj.type+" is not supported for this function");
	return null;
}

//-------------------------------------------------------------------
// getSingleInputText(input_object,use_default,delimiter) - Utility function used by others
//-------------------------------------------------------------------
function getSingleInputText(obj,use_default,delimiter) 
{
	switch(obj.type)
	{
		case 'radio': case 'checkbox': 	return "";
		case 'text': case 'hidden': case 'textarea': return(use_default)?obj.defaultValue:obj.value;
		case 'password': return((use_default)?null:obj.value);
		case 'select-one':
			if (obj.options==null) { return null; }
			if(use_default)
			{
				var o=obj.options;
				for(var i=0;i<o.length;i++){if(o[i].defaultSelected){return o[i].text;}}
				return o[0].text;
			}
			if (obj.selectedIndex<0){return null;}
			return(obj.options.length>0)?obj.options[obj.selectedIndex].text:null;
		case 'select-multiple': 
			if (obj.options==null) { return null; }
			var values=new Array();
			for(var i=0;i<obj.options.length;i++) 
			{
				if((use_default&&obj.options[i].defaultSelected)||(!use_default&&obj.options[i].selected)) 
				{
					values[values.length]=obj.options[i].text;
				}
			}
			return (values.length==0)?null:commifyArray(values,delimiter);
	}
	alert("FATAL ERROR: Field type "+obj.type+" is not supported for this function");
	return null;
}

//-------------------------------------------------------------------
// setSingleInputValue(input_object,value)
//   Utility function used by others
//-------------------------------------------------------------------
function setSingleInputValue(obj,value) 
{
	switch(obj.type)
	{
		case 'radio': case 'checkbox': if(obj.value==value){obj.checked=true;return true;}else{obj.checked=false;return false;}
		case 'text': case 'hidden': case 'textarea': case 'password': obj.value=value;return true;
		case 'select-one': case 'select-multiple': 
			var o=obj.options;
			for(var i=0;i<o.length;i++)
			{
				if(o[i].value==value){o[i].selected=true;}
				else{o[i].selected=false;}
			}
			return true;
	}
	alert("FATAL ERROR: Field type "+obj.type+" is not supported for this function");
	return false;
}

//-------------------------------------------------------------------
// getInputValue(input_object[,delimiter]) - Get the value of any form input field - Multiple-select fields are returned as comma-separated values, or delmited by the optional second argument 
// (Doesn't support input types: button,file,reset,submit)
//-------------------------------------------------------------------
function getInputValue(obj,delimiter) 
{
	var use_default=(arguments.length>2)?arguments[2]:false;
	if (isArray(obj) && (typeof(obj.type)=="undefined")) 
	{
		var values=new Array();
		for(var i=0;i<obj.length;i++)
		{
			var v=getSingleInputValue(obj[i],use_default,delimiter);
			if(v!=null){values[values.length]=v;}
		}
		return commifyArray(values,delimiter);
	}
	return getSingleInputValue(obj,use_default,delimiter);
}

//-------------------------------------------------------------------
// getInputText(input_object[,delimiter]) - Get the displayed text of any form input field - Multiple-select fields are returned as comma-separated values, or delmited by the optional second argument 
// (Doesn't support input types: button,file,reset,submit)
//-------------------------------------------------------------------
function getInputText(obj,delimiter) 
{
	var use_default=(arguments.length>2)?arguments[2]:false;
	if (isArray(obj) && (typeof(obj.type)=="undefined")) 
	{
		var values=new Array();
		for(var i=0;i<obj.length;i++)
		{
			var v=getSingleInputText(obj[i],use_default,delimiter);
			if(v!=null){values[values.length]=v;}
		}
		return commifyArray(values,delimiter);
	}
	return getSingleInputText(obj,use_default,delimiter);
}

//-------------------------------------------------------------------
// getInputDefaultValue(input_object[,delimiter]) - Get the default value of any form input field when it was created - Multiple-select fields are returned as comma-separated values, or 
// delmited by the optional second argument - (Doesn't support input types: button,file,password,reset,submit)
//-------------------------------------------------------------------
function getInputDefaultValue(obj,delimiter){return getInputValue(obj,delimiter,true);}

//-------------------------------------------------------------------
// isChanged(input_object) - Returns true if input object's value has changed since it was created.
//-------------------------------------------------------------------
function isChanged(obj){return(getInputValue(obj)!=getInputDefaultValue(obj));}

//-------------------------------------------------------------------
// setInputValue(obj,value) - Set the value of any form field. In cases where no matching value is available (select, radio, etc) then no option will be selected 
// (Doesn't support input types: button,file,password,reset,submit)
//-------------------------------------------------------------------
function setInputValue(obj,value) 
{
	var use_default=(arguments.length>1)?arguments[1]:false;
	if(isArray(obj)&&(typeof(obj.type)=="undefined"))
	{
		for(var i=0;i<obj.length;i++){setSingleInputValue(obj[i],value);}
	}
	else{setSingleInputValue(obj,value);}
}
	
//-------------------------------------------------------------------
// isFormModified(form_object,hidden_fields,ignore_fields) - Check to see if anything in a form has been changed. By default it will check all visible form elements and ignore all hidden  fields.  
// You can pass a comma-separated list of field names to check in addition to visible fields (for hiddens, etc). You can also pass a comma-separated list of field names to be ignored in the check.
//-------------------------------------------------------------------
function isFormModified(theform,hidden_fields,ignore_fields)
{
	if(hidden_fields==null){hidden_fields="";}
	if(ignore_fields==null){ignore_fields="";}
	var hiddenFields=new Object();
	var ignoreFields=new Object();
	var i,field;
	var hidden_fields_array=hidden_fields.split(',');
	for (i=0;i<hidden_fields_array.length;i++) 
	{
		hiddenFields[Trim(hidden_fields_array[i])]=true;
	}
	var ignore_fields_array=ignore_fields.split(',');
	for (i=0;i<ignore_fields_array.length;i++) 
	{
		ignoreFields[Trim(ignore_fields_array[i])]=true;
	}
	for (i=0;i<theform.elements.length;i++) 
	{
		var changed=false;
		var name=theform.elements[i].name;
		if(!isBlank(name))
		{
			var type=theform.elements[i].type;
			if(!ignoreFields[name])
			{
				if(type=="hidden"&&hiddenFields[name]){changed=isChanged(theform[name]);}
				else if(type=="hidden"){changed=false;}
				else {changed=isChanged(theform[name]);}
			}
		}
		if(changed){return true;}
	}
	return false;
}

/***********************************************
* Disable "Enter" key in Form script- By Nurul Fadilah(nurul@REMOVETHISvolmedia.com)
* This notice must stay intact for use
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/
function handleEnter(field, event) 
{
	var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	if (keyCode == 13) 
	{
		var Type="hidden";
		var i=0; 
		while(Type=='hidden' || Type=='select-one' || Type=='other')
		{ 
			for (i = i; i < field.form.elements.length; i++)
				if ((field == field.form.elements[i]))
				break;
			i = (i + 1) % field.form.elements.length; 
			var Name=field.form.elements[i].id;
			var Type=field.form.elements[i].type;
			if(Type=='hidden' || Type=='select-one' || Type=='other') { field=field.form.elements[i]; } 
		} 
		if(Type!='hidden' && Type!='other') { field.form.elements[i].focus(); } 
		if(Type!='select-one' && Type!='button' && Type!='submit' && Type!='textarea' && Type!='other') { field.form.elements[i].select(); } 
		return false;
	} 
	else { return true; } 
}    
