var inputs = function(OlOs){ this.OlOs=OlOs; return this };

inputs.prototype.dateValidate = function( p_obj, p_event ) {
	var v_format = "NN/NN/NNNN";
	var value = p_obj.value;
	var v_key = this.OlOs.events.getKeyboardCode( event=p_event );
		
	/* If a backspace was entered, and it deleted a '/' then remove one more charater. */
		if(
			v_key != 191
		&&
			v_key == 8
		&&
			v_format.substr(value.length,1) != "N"
		){
			value = value.substr(0,value.length - 1);
		}
	/* end */

	value = this.OlOs.convert.format_number( value , v_format );// Format the entry

	if(
		value.length == v_format.length
	&&
		v_key.toString().search(/^(13|37|39|8|46)$/) < 0
	){
		/* We have enough charaters, so see if it's a good date. */
			if ( this.OlOs.validate.isDate( value , true ) ){
				p_obj.value = value;
			} else {
				p_obj.select();
			}
		/* end */
	}else if( v_key.toString().search(/^(13|37|39|8|46)$/) < 0 ){
		// required.
		p_obj.value = value;
	}
}
//
	inputs.prototype.getTargetsValue = function( target ){
		var returnValue = new Array();

		if( typeof(target) != 'object' ){
			alert('Invalid target. Cannot get value in method "getTargetsValue"');
			return;
		}

		if( target.nodeName == 'INPUT' ){
			if( target.type == 'TEXT' ){
				return target.value;
			}else{
				for( var x=0; x < target.length; ++x ){
					if( target[x].checked ){
						returnValue[returnValue.length] = target[x].value;
					}
				}
				return returnValue;
			}
		}else if( target.nodeName == 'SELECT' ){
			if(  target.multiple ){
				for( var x=0; x < target.options.length; ++x ){
					if( target.options[x].selected ){
						returnValue[returnValue.length] = target[x].value;
					}
				}
				return returnValue;
			}else{
				return target.options[target.selectedIndex].value;
			}
		}
		alert('"getTargetsValue" falied');
	}
//
	inputs.prototype.numberOnlyFormat = function( input , strictMode ){
		if(typeof(strictMode)=='undefined'){ var strictMode=null }
	
		if( strictMode && input.value.search(/[^0-9]/) >= 0 ){
			input.value = input.value.replace(/[^0-9]/g,'');
		}else if( input.value.search(/[^0-9.-]/) >= 0 ){
			input.value = input.value.replace(/[^0-9.-]/g,'');
		}
	}
//
/* CURSOR FOCUS SPECIFIC FUNCTIONS */
	inputs.prototype.periodtab = function(input){ 
		if(
			!this.OlOs.validate.isElementInsideFormTag(input)
		){
			alert('Error: Element is not inside form tag');
			return false;
		}


		if( input.value.search(/\./) > 0 ){
			var i=input.value.replace(/\./g,'');
			input.value=i;
			var ifl=input.form.length;
			for (i=0; i < ifl; ++i){
				if(input==input.form[i]){
					++i;
					if(input.form[i].type=='text'){
						input.form[i].select()
					}else{
						input.form[i].focus();
					}
					break;
				}
			}
	
		}
	}

	inputs.prototype.spacetab = function(input){
		if(
			!this.OlOs.validate.isElementInsideFormTag(input)
		){
			alert('Error: Element is not inside form tag');
			return false;
		}

		i=0;
		input.value=input.value.replace(/ /g,'');

		if(this.OlOs.events._last_event.keypress_code==32){
			var ifl=input.form.length;
	
			for (i=0; i < ifl; ++i){
				if(input == input.form[i]){
					++i;
					if(input.form[i].type=='text'){
						input.form[i].select()}else{input.form[i].focus()
					} break;
				}
			}
		}
	}

	inputs.prototype.dashtab = function(input){ 
		if(
			!this.OlOs.validate.isElementInsideFormTag(input)
		){
			alert('Error: Element is not inside form tag');
			return false;
		}


		i=0;
		if(this.OlOs.events._last_event.keypress_code==45){ 
			var ifl=input.form.length;
			for (i=0; i < ifl; ++i){ 
	
				if(input == input.form[i]){
					++i; input.form[i].focus(); i=input.form.length;
				}
			}
	
		}
	}

	inputs.prototype.autotab = function( input , charchar ){
		if(
			!this.OlOs.validate.isElementInsideFormTag(input)
		){
			alert('Error: Element is not inside form tag');
			return false;
		}
		
		if(
			input.value.length==charchar
		&&
			this.OlOs.events._last_event.keydown_code.toString().search(/^(9|37|39|13|8|46)$/) < 0
		){ 
			var ifl=input.form.length;
			for(i=0; i <= ifl; ++i){ 
				if(input == input.form[i]){
					for(var t=0; t<10000; ++t){
						++i;
						temp=input.form[i].type;
						if(temp=='text'){ 
							input.form[i].select();i=input.form.length; break; break;
						}else if(temp=='button' || temp=='select-one'){
							input.form[i].focus();i=input.form.length; break; break;
						}
					}
				}
			}
		} 
	}

	inputs.prototype.deleteMoveFocuesBack = function(input){

		if( !this.OlOs.validate.isElementInsideFormTag(input) ){
			alert('Error: Element is not inside form tag');
			return false;
		}

		var i=0;
		var ivl=input.value.length;
		if(
			this.OlOs.events._last_event.keydown_code == 8
		&&
			ivl==0
		){
			var ifl=input.form.length;
			for (i=0; i < ifl; ++i){
				if(input == input.form[i]){
					--i;
					if(input.form[i].type=='text'){
						input.form[i].select();
					} else{
						input.form[i].focus();
					}
					break;
				}
			}
		}
	}
/* end */

/* have `target` input default describe its title, and onfocus remove that title, and unblur if value empty: display that title */
	inputs.prototype.setDefaultValueHint = function( target , title ){
		var local = new Object();

		target.setAttribute( "defaultValueHint" , title );

		if( target.nodeName.toLowerCase() != 'input' ){
			for( x in this ){
				if( !confirm(x+' - '+this[x]) ){
					break;
				}
			}
			return false;
		}

		if(
			target.value.length == 0
		||
			target.value === title
		){
			target.value = title;
			target.style.color = '#999999';
		}

		/* ONBLUR FUNCTION */
			local.action = function(event){
				var	local = new Object();

				local.target			= (event.target||event.srcElement);
				local.defaultValueHint	= local.target.getAttribute( "defaultValueHint" );

				if(
					local.target.value.length == 0
				||
					local.target.value === local.defaultValueHint
				){
					local.target.style.color	= '#999999';
					local.target.value			= local.defaultValueHint;
				}
			}

			if( target.attachEvent ){
				target.attachEvent( 'onblur' , local.action );
			}else if( target.addEventListener ){
				target.addEventListener( 'blur' , local.action , false );
			}
		/* END */

		/* ONFOCUS function */
			local.action = function(event){
				var	local = new Object();

				local.target			= (event.target||event.srcElement);
				local.defaultValueHint	= local.target.getAttribute( "defaultValueHint" );

				if( local.target.value === local.defaultValueHint ){
					local.target.value			= '';
					local.target.style.color	= '#000000';
				}
			}

			if( target.attachEvent ){
				target.attachEvent( 'onfocus' , local.action );
			}else if( target.addEventListener ){
				target.addEventListener( 'focus' , local.action , false );
			}
		/* end */

		/* find out if the input belongs to a form, if so then lets clear the defaultValueHint onsubmit if still just a hint */
			if(
				target.form != null
			&&
				target.form.getAttribute("clearDefaultValueHints") == null
			){
				local.action = function(event){
					var eventTarget	= (event.target||event.srcElement);
					OlOs.inputs.clearDefaultValueHints(eventTarget);
				}

				this.OlOs.events.appendOnSubmit( target.form , local.action )

				target.form.setAttribute('clearDefaultValueHints','true');
			}
		/* end */
	}
/* */
	inputs.prototype.clearDefaultValueHints = function( form ){
		var local	= new Object();

		local.inputs		= form.getElementsByTagName('INPUT');
		local.input_count	= local.inputs.length;
		
		for( local.x=0; local.x < local.input_count; ++local.x ){
			local.loop_target			= local.inputs[local.x];
			local.loop_defaultValueHint	= local.loop_target.getAttribute( "defaultValueHint" );

			if(
				local.loop_target.type.toLowerCase() == 'text'
			&&
				local.loop_defaultValueHint != null
			&&
				local.loop_defaultValueHint === local.loop_target.value
			){
				local.loop_target.value='';
			}
		}
	}
/* end */

if( typeof(OlOs) != typeof(new Object()) ){
	document.write("<script type=\"text/javascript\" src=\"OlOs.js\"></script>");
}

OlOs.attachTo( new inputs(OlOs) , "inputs" );

if( OlOs.form != null)OlOs.form.inputs = OlOs.inputs;