/**
 *  hmsgeneral JavaScript framework, version 1.0
 *  Copyright (c) 2006 Elvis Navarro Vega ( http://www.unipamplona.edu.co )
 *	@autor: Ing Elvis Navarro Vega
 *  @email: elvisnv@unipamplona.edu.co
 *	Grupo de Desarrollo Plataforma - Universidad de Pamplona.
 *	Pamplona (Norte de Santander). Colombia.
 *	Jueves 12 de Octubre del 2006
 *	hmsgeneral.js
 *	@descripcion :	Comprende el manejo de funciones generales que no estan sujetas a un obejto
 *					en particular paro que son requeridas por los demas	paquetes
 */
 
hms = window.hms || {} ;

hms.esOpera	= ( /opera/i.test ( navigator.userAgent ) ) ;
hms.esIE 	= ( /msie/i.test ( navigator.userAgent ) && !hms.esOpera ) ;

hms.emptyFunction = function() {}

function $() {
	var results = [], element;
  	for ( var i = 0; i < arguments.length; i++ ) {
    	element = arguments [ i ] ;
    	if (typeof element == 'string')
      		element = document.getElementById ( element ) ;
    	results [ results.length ] = element ;
  	}
  	
	return ( results.length < 2 ? results [ 0 ] : results ) ;
}

var $A = Array.from = function ( iterable ) {
	if (!iterable) return [];
  	if ( iterable.toArray ) {
    	return iterable.toArray() ;
  	} else {
    	var results = [];
    	for (var i = 0; i < iterable.length; i++)
      		results.push ( iterable [ i ] ) ;
    	return results ;
  	}
}

Function.prototype.bind = function() {
	var __method = this, args = $A(arguments), object = args.shift();
	return function() {
    	return __method.apply ( object, args.concat ( $A(arguments) ) ) ;
  	}
}

Object.extend = function ( destination, source ) {
	for ( var property in source )
    	destination [ property ] = source [ property ] ;
  	return destination;
}

/*--------------------------------------------------------------------------*/
/*
 * Manejo de funciones para el objeto hms.field ( manejo para los campos )
 * y el objeto hms.form ( manejo para los elementos de un formulario ).
 * Estos objetos se crearon en primera instancia para la implementacion
 * del paquete hmsvalidator
 */
 
hms.field = {
	clear: function () {
    	for ( var i = 0; i < arguments.length; i++ )
      		$( arguments [ i ] ).value = '' ;
  	},

  	focus: function ( element ) {
    	$( element ).focus () ;
  	},

	empty : function () {
		for ( var i = 0; i < arguments.length; i++ ) {		
			var content = $( arguments [ i ] ).value ;
			if ( content == '' || content == null || 
					typeof content == 'undefined' ) 
				return true ;

			for ( var c = 0; content.length; c ++ ) {
				var charat = content.charAt ( c ) ;
				if ( charat != ' ' && charat != '\t' && 
						charat != '\n' && charat != '\r' ) 
					return false ;
			}
		}
		return true ;
	}, 

  	select: function ( element ) {
    	$( element ).select() ;
  	},

	activate: function ( element ) {
    	element = $( element ) ;
    	element.focus () ;
    	if ( element.select )
			element.select () ;
  	}, 
	
	integer: function ( element ) {
		element = $( element ) ;
		return ( parseInt ( element.value || element, 10) == ( Number ( element.value || element ) * 1 ) );	
	},
	
	flotante: function ( element ) {
		element = $( element ) ;
		return ( parseFloat ( element.value || element, 10) == ( Number ( element.value || element ) * 1 ) );	
	},
	
	length: function ( element ) {
		element = $( element ) ;
		return element.value.length ;
	},
	
	email: function ( element ) {
		element = $( element ) ;
		if ( /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test( element.value ) )
			return true ;
		return false ;	
	},

	time: function ( strTime ) {
		var RE_TIME = /^(0\d|1\d|2[0-3]):([0-5]\d):([0-5]\d)$/ ;
		if ( RE_TIME.exec ( strTime ) )
			return true ;
		return false ;	
	}, 

	date: function ( strDate ) {
		var RE_DATE = /^([012][1-9]|[123]0|3[1])-(0[1-9]|1[012])-((1[9]|2[0])\d{2})$/ ;
		if ( RE_DATE.exec ( strDate ) )
			return true ;
		return false ;	
	},  

	datetime: function ( strDatetime ) {
		var RE_DATETIME = /^([012][1-9]|[123]0|3[1])-(0[1-9]|1[012])-((1[9]|2[0])\d{2}) (0\d|1\d|2[0-3]):([0-5]\d):([0-5]\d)$/ ;
		if ( RE_DATETIME.exec ( strDatetime ) )
			return true ;
		return false ;	
	},
	
	string: function ( strString ) {
		var RE_STRING = /^\w+$/ ;	
		return RE_STRING.test ( strString ) ;
	}
}

/*--------------------------------------------------------------------------*/

hms.form = {
	getElements: function ( form ) {
		form = ( typeof form == 'string' ? $( form ) : form ) ;
		return form.elements ;	
	},
	
	checkAll: function ( form, name, checked ) {
		form = ( typeof form == 'string' ? $( form ) : form ) ;
		for ( var i = 0; i < form.elements.length; i ++ ) {
			var elemento = form.elements [ i ];
			if ( elemento.type == 'checkbox' && elemento.name == name )
				elemento.checked = checked ;
		}
		
	}
	
}




