/**
 * @author Pablo Cuadrado (pablo@estudioquadra.com)
 * (c) Estudio Quadra S.H. (Rosario - Santa Fe - Argentina)
 * www.estudioquadra.com
 *
 * Estudio Quadra S.H. autoriza a Rubro7 S.A. a utilizar este código.
 * Si está interesado en él, envie un email a info@estudioquadra.com con sus 
 * datos y haremos expresa una autorización hacia usted de forma gratuita.
 * __________________________________________________________________________
 * Grilla para entrada caracter por caracter de algún texto.
 * 
 */

var K_CURSOR_UP = 38, K_CURSOR_DOWN = 40, K_CURSOR_LEFT = 37, K_CURSOR_RIGHT = 39;
var K_ENTER = 13, K_ESCAPE = 27, K_BACKSPACE = 8, K_DELETE = 46;

function CharGrid(cName, cDestino, nCols, nMax, cCSSClass) {

	cValue = document.getElementById('gridValue').value;

	if(!cName) {
		alert('No se especificó un nombre para CharGrid');
		return false;	
	}
	if(!cDestino) {
		alert('No se especificó un elemento destino para CharGrid');
		return false;	
	}
	if(!cCSSClass) cCSSClass = 'CharGrid';	
	oDestino = document.getElementById(cDestino);
	if(oDestino.tagName != 'DIV') {
		alert('El elemento destino no es un DIV.');
		return false;	
	}
	if(!nCols) nCols = 25;
	if(!nMax) nMax = 100;
	
	nChar = 0;
	
	while(nChar < nMax) {	
		var oNewInput = document.createElement('INPUT');
		var oBr = document.createElement('BR');
		
		oNewInput.value = ' ';
		if(nChar < cValue.length) {
			oNewInput.value = cValue.substr(nChar,1);
		}
		
		oNewInput.name = cName + '[' + nChar + ']';
		oNewInput.setAttribute("autoComplete", 'off');
		oNewInput.maxLength = 1;
		oNewInput.size = 1;
		oNewInput.className = cCSSClass;
		oNewInput.onfocus = function() {
			this.style.backgroundColor = '#ddddee';
		}
		oNewInput.onblur = function() {
			this.style.backgroundColor = '';
		}
		oNewInput.onkeydown = function(e) {
			
			var key = (oBrowser.Name.indexOf('Explorer') > -1) ? event.keyCode : e.which;
			var bShift = (oBrowser.Name.indexOf('Explorer') > -1) ? event.shiftKey : e.shiftKey;
			
			// Obtiene los argumentos obviando los dos primeros.
			//strArgs = argsACadena(arguments, 2);
			
			
			switch(key) {
					
				// Teclas a ignorar:
				case K_DELETE:
					// Obtiene el número del elemento y le resta 1.
					// Sacar el -1 para que borre el actual.
					numAnterior = parseInt(this.id.substr(this.id.indexOf('[')+1));
					//this.value = ' ';
					if(numAnterior >= 0) {
						//document.getElementById(cName + "[" + (num) + "]").value = '';	
						for(i = numAnterior; i < (nMax-1); i++) {
							document.getElementById(cName + "[" + i + "]").value = document.getElementById(cName + "[" + (i+1) + "]").value;
						}
						document.getElementById(cName + "[" + (nMax-1) + "]").value = ' ';
					}		
					//document.getElementById(cName + "[" + numAnterior + "]");
										
				break;
				case K_CURSOR_UP:
				case K_CURSOR_DOWN:
					return false;
				break;

				// Casos contemplados
				case K_BACKSPACE:
				
					// Obtiene el número del elemento y le resta 1.
					// Sacar el -1 para que borre el actual.
					numAnterior = parseInt(this.id.substr(this.id.indexOf('[')+1)) - 1;
					//this.value = ' ';
					if(numAnterior >= 0) {
						//document.getElementById(cName + "[" + (num) + "]").value = '';	
						for(i = numAnterior; i < (nMax-1); i++) {
							document.getElementById(cName + "[" + i + "]").value = document.getElementById(cName + "[" + (i+1) + "]").value;
						}
						document.getElementById(cName + "[" + (nMax-1) + "]").value = ' ';
						CBAPI.Focus(cName + "[" + numAnterior + "]");
					}		
					//document.getElementById(cName + "[" + numAnterior + "]");
										
					return false;		
				break;
				case K_CURSOR_LEFT:
					num = parseInt(this.id.substr(this.id.indexOf('[')+1)) - 1;
					if(num >= 0) {
						CBAPI.Focus(cName + "[" + num + "]");
					}							
					return false;
				break;
				case K_CURSOR_RIGHT:
					num = parseInt(this.id.substr(this.id.indexOf('[')+1)) + 1;
					if(num < nMax) {
						CBAPI.Focus(cName + "[" + num + "]");
					}						
					return false;
				break;				
				default:
					num = parseInt(this.id.substr(this.id.indexOf('[')+1)) + 1;
					if((key > 20) && (num <= nMax)) {
						if(key < 226) {
							this.value = String.fromKeyCode(key, bShift);
						} else {
							this.value = '';
						}
						if(num < nMax) CBAPI.Focus(cName + "[" + num + "]");
					}
					return false;				
				break;
			}
			return false;	
		}
		oNewInput.id = oNewInput.name;
		oDestino.appendChild(oNewInput);
		nChar++;
		if((nChar % nCols) == 0) {
			oDestino.appendChild(oBr);
		}
		
	}
	
	document.getElementById(cName + '[0]').focus();
	
}

	
