<script>

function caracterEspecial(charCode) {
	var valor='';
	if (charCode == 186) valor=";"; // semi-colon
	if (charCode == 187) valor="="; // equal-sign
	if (charCode == 188) valor=","; // comma
	if (charCode == 189) valor="-"; // dash
	if (charCode == 190) valor="."; // period
	if (charCode == 191) valor="/"; // forward slash
	if (charCode == 192) valor="`"; // grave accent
	if (charCode == 219) valor="["; // open bracket
	if (charCode == 220) valor="\\"; // back slash
	if (charCode == 221) valor="]"; // close bracket
	if (charCode == 222) valor="'"; // single quote
	return valor;
}

function formateaBloqueConParentesis(bloque) {

	//console.log('funcion formateaBloqueConParentesis INICIO. Trabajamos sobre el bloque: '+bloque);

	var identificadores=new Array('01','10','21','91','98','99','240','7040','8008','00','J');
	var devolucion='';
	
	for(var i=0;i<identificadores.length;i++) {
	
		var coincidencia=false;
		var longitud=identificadores[i].length;
		
		for(var j=0;j<longitud;j++) {
			if(bloque.charAt(j)==identificadores[i].charAt(j)) {
				coincidencia=true;
			}
			else {
				coincidencia=false;
				break;
			}
		}
		
		if(coincidencia) {
			//console.log("coincidencia: "+coincidencia+" identificador: "+identificadores[i])
        	<?php if($aceptarCodigosTTTNoValidos) { ?>
            devolucion='('+identificadores[i]+')'+bloque.substring(identificadores[i].length,bloque.length);
            <?php } else { ?>
        	if( identificadores[i]=='01' && bloque.length!=16 ) devolucion='error';
			else if( identificadores[i]=='00' && bloque.length!=20 ) devolucion='error';
			else devolucion='('+identificadores[i]+')'+bloque.substring(identificadores[i].length,bloque.length);
			//console.log('devolucion: '+devolucion);
            <?php } ?>
			break;
		}
	}
	
	//console.log('funcion formateaBloqueConParentesis FIN --> '+devolucion);
	
	if(devolucion) return devolucion;
	else return 'error';
    
}

function pintaLecturaHumana(lectura){

	//console.log('funcion pintaLecturaHumana INICIO');

	var error=false;
	var cadenaFinal='';
	var bloqueFormateado='';
	var bloques=lectura.split('#');
	
	for(var i=0;i<bloques.length;i++) {
		if(bloques[i]!='') {
			bloqueFormateado=formateaBloqueConParentesis(bloques[i]);
			if(bloqueFormateado=='error') {
				error=true;
				break;
			}
			else cadenaFinal+=bloqueFormateado;
		}
	}
	
	//console.log('funcion pintaLecturaHumana FIN --> '+cadenaFinal+' con error: '+error);
	
	if(error) return 'error';
	else return cadenaFinal;
}

function limpiaLecturaDesdeScanner(lectura){

	//NOTA: lectura es un array que contiene en [0] la tecla gráfica y en el [1] el código de tecla pulsada
	//      por eso unas veces miramos un valor y otras, otro
	
	var cadenaLectura='';

	var caracterCorchete=<?php if($caracterDataMatrix) echo $caracterDataMatrix; else echo "''"; ?>; 
	var caracterShift=16;
	var caracterControl=17;
	var caracterEnter=13;

	var siguientePosicion=0;
	
	//Primero eliminamos todos los caracteres shift
	var lecturaTemp=new Array();
	for(var i=0;i<lectura.length;i++) if(lectura[i][1]!=caracterShift) lecturaTemp.push(lectura[i]);
	lectura=lecturaTemp;

	if( (lectura[0][1]==caracterCorchete && lectura[1][0]=='D' && lectura[2][0]=='2') || (lectura[0][1]==caracterCorchete && lectura[1][0]=='C' && lectura[2][0]=='1') ) {
		
		//Excepcion bloque 01 con longitud fija y sin separador detrás
		if(lectura[3][0]=='0' && lectura[4][0]=='1') { //Bloque 01
			cadenaLectura+='01';
			for(var i=5;i<=18;i++) cadenaLectura+=lectura[i][0];
			cadenaLectura+='#';
			siguientePosicion=19;
		}
		else siguientePosicion=3;
		
		for(var i=siguientePosicion;i<lectura.length;i++) {
			if(lectura[1][1]==caracterEnter) break; //Fin de lectura
			else {
				if(lectura[i][1]==caracterControl && lectura[i+1][1]==caracterCorchete) cadenaLectura+='#';
				else {
					if(lectura[i][1]!=caracterCorchete) {
						if(caracterEspecial(lectura[i][1])) cadenaLectura+=caracterEspecial(lectura[i][1]);
						else cadenaLectura+=lectura[i][0];
					}
				}
			}
		}
		
	}
	else { //Contemplamos la posibilidad de que no sea un GS1-128 pero sea un código de palet "lineal" 00+18 caracteres
	
		if(lectura[0][0]=='0' && lectura[1][0]=='0') {
			cadenaLectura='00';
			for(var i=2;i<=19;i++) cadenaLectura+=lectura[i][0];
			cadenaLectura+='#';
		}
	
	}
	
	return cadenaLectura;
}

function transformaLecturaManualAlFormatoScanner(lectura) {
	
	var resultado='';
	
	for(var i=0;i<lectura.length;i++) {
		if(lectura[i]=='(') {
			if(resultado!='') resultado+='#'
		}
		else if(lectura[i]!=')') resultado+=lectura[i];
	}
	
	return resultado;
	
}

</script>