/*****************************************************************************************
CONFIGURACIONES GLOBALES DE LA HERRAMIENTA WHOIS
*****************************************************************************************/
var CAPCHA_REQUIRED = true;			//Bandera que determina si se validara con capcha, solo usado en function consultar(...
var DIV_ERRORES = "div_errores";	//Define el elemento en el que se mostraran los errores.
var DIV_RESULTS = "";				//Define el elemento en el que se mostraran los resultados de las disponibilidades.
var DIV_ERR_RESULTS = "";			//Define el elemento en el que se mostraran los errores de los resultados.
var SINGLE_SELECTION = false;		//Determina si se pueden seleccionar solo una extension en los resultados de disponibilidades
var CSS_ERROR_CLASS =  "";	

nueva_pagina = false;	// indica si los resultados se escribiran en una nueva pagina. (por defecto no)
nueva_pagina_archivo = '';	// indica el nombre del archivo donde se mostraran los datos si se selecciona que aparezcan en nueva pagina
nueva_pagina_destino = '_self';	// indica como debera aparecer la nueva pagina de resultados. (valores: _self, _blank)

mensaje_espera = '<div style="text-align:center;"><img src="http://www.neubox.net/clientes/panel_img/cargando.gif" alt="" /></div>';	// codigo HTML para indicar que hay un proceso en marcha cuando no se selecciona una pagina nueva

utilizar_estilos = true;	// definir si el whois utilizara hojas de estilos {por defecto no}
archivo_de_estilos = 'whois_libs/plantillas/whois_css04.css';	// indica el nombre de archivo que contiene los estilos del whois. Asegurarse de que la ruta sea correcta

poner_checkbox = true;	// indica si en el resultado se desea colocar checkboxes por cada dominio disponible
marcar_checkbox = true;	// si se desean colocar checkboxes, esta variable indica si aparecen seleccionadas o no

boton_contratar = true;		// indica si los resultados deberan tener un link para comprar los dominios seleccionados
contratar_texto = 'Comprar';	// indica el texto para comprar.
contratar_imagen = 'http://neubox.net/images/resource_contratar_seleccion_gray.gif';	// indica la ruta de una imagen si se desea que aparezca una
contratar_link = 'Contratacion_Paso_1.php';	// indica la pagina que recibira los datos de los dominios disponibles para realizar el proceso de compra

error_formato = true;	// indica si se desea dar formato al mensaje de error
error_color = '#D02626';	// color del texto del error valido para css (#FF0000)
error_fuente = 'Arial, Helvetica, sans-serif';	// nombre de la fuente valida por css (Arial, Helvetica, sans-serif)
error_tamano = '12px';	// tamaņo valido por css (12px, 13px, etc...)
error_negritas = 'normal';	// negritas valida para css (normal,bold)
error_estilo = 'normal';	// estilo valido para css (normal,italic)

/*****************************************************************************************
INCLUSION DE LA HOJA DE ESTILOS
*****************************************************************************************/
if ( utilizar_estilos  ) {
	var ss = document.createElement("link");
	ss.type = "text/css";
	ss.rel = "stylesheet";
	ss.href = archivo_de_estilos;
	document.getElementsByTagName("head")[0].appendChild(ss);
}

/*****************************************************************************************
OBJETO AJAX
*****************************************************************************************/
function XHConn() {
	var xmlhttp, bComplete = false, aaa;
	try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
	catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
	catch (e) { try { xmlhttp = new XMLHttpRequest(); }
	catch (e) { xmlhttp = false; }}}
	if (!xmlhttp) return null;
	this.connect = function(sURL, sMethod, sVars, fnDone) {
		if (!xmlhttp) return false;
		bComplete = false;
		sMethod = sMethod.toUpperCase();
		try {
			if (sMethod == "GET") {
				xmlhttp.open(sMethod, sURL+"?"+sVars, true);
				sVars = "";
			}
			else {
				xmlhttp.open(sMethod, sURL, true);
				xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
				xmlhttp.send(sVars);
			}
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4 && !bComplete) {
					bComplete = true;
					fnDone(xmlhttp);
				}
			};
			xmlhttp.send(sVars);
		}
		catch(z) { return false; }
		return true;
	};
	return this;
}

/*****************************************************************************************
LLAMADA AL OBJETO AJAX
*****************************************************************************************/
function convocar(archivo,destino,variables){
	if ( destino != '' ) {
		document.getElementById(destino).innerHTML = mensaje_espera;
	}
	
	var myConn = new XHConn();
	if (!myConn) alert("XMLHTTP no esta disponible. Intenta con un navegador mas reciente.");
	
	var peticion = function (oXML) {
		regreso = oXML.responseText;
		ereg_ok = /^ReSuLt/;
		ereg_er = /^ErRoR/;
		if ( !ereg_ok.test(regreso) && !ereg_er.test(regreso) ) {
			document.getElementById(destino).innerHTML = regreso;
			enviar_peticion();
			document.getElementById('link_comprar').style.display = 'none';
		}
		else if ( ereg_ok.test(regreso) ) {
			imprimir_resultados(regreso);
			if ( /"dom_/.test(regreso) ) {
				document.getElementById('link_comprar').style.display = '';
			}
		}
		else if ( ereg_er.test(regreso) ) {
			var arreglo_error = new Array();
			arreglo_error = regreso.split('#');
			mensaje_error = arreglo_error[1];
			document.getElementById('t_result').innerHTML = mensaje_error;
		}
		else {
			document.getElementById('t_result').innerHTML = 'Ocurrio un error inesperado al momento de consultar la disponibilidad';
		}
		
	};
	
	myConn.connect( archivo, "POST", variables, peticion );
}

/*****************************************************************************************
OBTENCION DE LOS DOMINIOS
*****************************************************************************************/
//Variable que contendra la instancia del captcha.
var DIV_CAPTCHA = false;
//Define si es la primera vez que se mostrara captcha.
var FIRST_CAPTCHA = true;
var CLONAR_CAPTCHA = true;

var TEXTBOX_CHALLENGE = false;

function consultar_disponibilidad(elem_dominios,elem_resultados,elem_formulario,elem_errores) {
	if( TEXTBOX_CHALLENGE==false ){	TEXTBOX_CHALLENGE =	document.getElementById('recaptcha_response_field_2');	}

	//Compruebo que se haya instanciado el contenedor del captcha.
	if(DIV_CAPTCHA==false) 		DIV_CAPTCHA = document.getElementById('captchawhois');
	
	// codigo para validar el captcha
	var original = document.getElementById('recaptcha_challenge_field').value;
	
	//Nombre alternativo para obtener el campo del formulario de whois, el original fue usado en formulario de login.
	var reto = TEXTBOX_CHALLENGE.value; 
	TEXTBOX_CHALLENGE.value = '';
	
	// hacer cadena de parametros 
	variables = 'original='+escape(original)+'&reto='+escape(reto)+'&skey=7BA30A997AD80B55F3228878236AE157';

	var myConn = new XHConn();
	if (!myConn) alert("XMLHTTP no esta disponible. Intenta con un navegador mas reciente.");
	
	var peticion = function (oXML) {
		regreso = oXML.responseText;
		if ( regreso == 'correcto' ) {			
			consultar(elem_dominios,elem_resultados,elem_formulario,elem_errores);
		}
		else {
			//muestro el contenedor de captcha
			DIV_CAPTCHA.style.display='';

			if( FIRST_CAPTCHA===true){
				FIRST_CAPTCHA=false;
				//Muestro el primer mensaje de captcha
				document.getElementById(elem_errores).innerHTML = imprimir_error('Por favor, ingresa el c&oacute;digo de verificaci&oacute;n.',DIV_ERRORES);
			}else	//Muestro el mensaje estandar de error captcha.
				document.getElementById(elem_errores).innerHTML = imprimir_error('El c&oacute;digo de verificaci&oacute;n que ingresaste no es correcto. Por favor intenta nuevamente.',DIV_ERRORES);
			

			document.frmWhois.recaptcha_response_field.focus();
		}

		//Si ya se ha mostrado el primer captcha actualizo el codigo cada vez.
		if( FIRST_CAPTCHA==false ){	
			Recaptcha.reload();	
			//Iniciar el clonado de captcha.
			if( CLONAR_CAPTCHA==true  )	{	clonar_captcha();	CLONAR_CAPTCHA==false;	}
		}
	};

	myConn.connect( 'includes/captcha.php', "POST", variables, peticion );
	// fin de validacion del captcha
}

/** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
Se mantiene copiando el area de la imagen del captcha en intervalos de tiempo. Esto para asegurarse 
de que es la ultima imagen generada correcta, debido al tiempo de regeneracion.

Params: divAuxId. String, Id del div que contendra la copia del captcha

** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **/
var DIV_CAPTCHA_AUX = 'recaptcha_image_aux';
var INTENTOS = 0;
function clonar_captcha(divAuxId){

	divAuxId = (divAuxId==null)?DIV_CAPTCHA_AUX:divAuxId;	
	//Contenedores de las imagenes de captcha
	var	CAPTCHA_IMG = document.getElementById('recaptcha_image');
	var CAPTCHA_IMG_AUX = document.getElementById(divAuxId);	
	if( CAPTCHA_IMG==null || CAPTCHA_IMG_AUX==null ) return;

	if(CAPTCHA_IMG_AUX.innerHTML != CAPTCHA_IMG.innerHTML)
		CAPTCHA_IMG_AUX.innerHTML = CAPTCHA_IMG.innerHTML;

	setTimeout( "clonar_captcha('"+divAuxId+"')",1000 );
}

//======================================================================================
function consultar(elem_dominios,elem_resultados,elem_formulario,elem_errores) {
	// extensiones seleccionadas	
	DIV_ERRORES = elem_errores;
	DIV_RESULTS = elem_resultados;
	var extensiones = '';
	mensaje_error = '';
	set_error_class("",DIV_ERR_RESULTS);
	set_error_class("",DIV_ERRORES);
	
	// limpiar mensaje de errores
	if( DIV_ERR_RESULTS=="" )	DIV_ERR_RESULTS = DIV_ERRORES;
	document.getElementById(elem_errores).innerHTML = mensaje_error;
	document.getElementById(DIV_ERR_RESULTS).innerHTML = "";
	
	if ( document.getElementById(elem_dominios) ) {
		
		dominios = document.getElementById(elem_dominios).value;
		
		document.getElementById(elem_dominios).length;
		inputs = document.getElementsByTagName('INPUT');
		
		for ( i=0; i<inputs.length; i++ ) {
			// inputs[i].type -> tipo de elemento de formulario
			// inputs[i].id -> id de elemento de formulario
			// inputs[i].name -> nombre de elemento de formulario
			// inputs[i].value -> valor de elemento de formulario
			// inputs[i].checked -> bandera de elemento de formulario si checado o no
			
			// si el control en turno es un checkbox, detectar si se ha seleccionado
			if ( inputs[i].type == 'checkbox' || inputs[i].type == 'radio' ) {
				// si el checkbox esta seleccionado, obtener el valore para hacer la cadena con las extensiones
				if ( inputs[i].checked == true ) {
					ereg = /^chk/;
					if ( ereg.test( inputs[i].id ) ) {
						extensiones += inputs[i].value + '|';
					}
				}
			}
		}
		
		// quitar la ultima coma
		extensiones = extensiones.substr(0,extensiones.length-1);
		
		// si no hay extensiones
		if ( dominios.length < 1 ) {
			mensaje_error += 'Escribe un dominio<br />';
		}
		// si no hay dominios
		else if ( extensiones.length < 1 ) {
			mensaje_error += 'Selecciona al menos una extensi&oacute;n<br />';
		}
		// si hay un dominio y una extension seleccionada
		else {
			// validar la sintaxis de los dominios
			dominios = validar_dominios( dominios );
			if ( !dominios ) {
				// algun dominio no cumple con la sintaxis
				mensaje_error += 'La sintaxis de algun dominio no es correcta<br />';
			}
		}
		
		// si no hubo errores, llamar al validador
		if ( mensaje_error == '' ) { 
			var_checks = 'no'; var_checks_s = 'si'; contratar_opciones = '';
			variables = 'exe=cliente&dominios='+escape(dominios)+'&extensiones='+escape(extensiones);
			// si se desea poner checkboxes
			if ( poner_checkbox ) {
				var_checks = 'si';
				variables += '&checks=si';
				if ( marcar_checkbox ) {
					variables += '&checks_s=si';
					var_checks_s = 'si';
				}
			}
			// si se desea colocar un boton para contratar
			if ( boton_contratar ) {
				contratar_opciones = contratar_texto+'|'+contratar_imagen+'|'+contratar_link;
				variables += '&contratar_opciones='+escape(contratar_opciones);
			}
			// si se ha seleccionado una nueva pagina, crear los valores necesarios y redirigir
			if ( nueva_pagina ) {
				// poner el action de destino en el formulario
				document.getElementById('frmWhois').action = nueva_pagina_archivo;
				// poner el target del formulario
				document.getElementById('frmWhois').target = nueva_pagina_destino;
				// llenar los campos con los valores necesarios
				document.getElementById('dominios').value = dominios;
				document.getElementById('extensiones').value = extensiones;
				document.getElementById('checks').value = var_checks;
				document.getElementById('checks_s').value = var_checks_s;
				document.getElementById('contratar_opciones').value = contratar_opciones;
				// si tiene hoja de estilos, agregarla
				if ( utilizar_estilos ) {
					document.getElementById('archivo_css').value = archivo_de_estilos;
				}
				// enviar el formulario
				document.frmWhois.submit();
			}
			// sino, llamar a ajax
			else {
			//	document.location.href = '#doms';				
				//goSlowToResults()

			//	convocar('whois_utils/whois_cliente.php',elem_resultados,variables);

			//	LLAMAR A PAGINA PARA GENERAR LA TABLA DE RESULTADOS.
				convocar('whois_utils/whois_v9.12.4/tabla-resultados.php',elem_resultados,variables);				
			}
		}
		// si hay errores, notificar al usuario
		else {
			
			if( CAPCHA_REQUIRED )	Recaptcha.reload();
			
			document.getElementById(elem_errores).innerHTML = imprimir_error(mensaje_error,DIV_ERRORES);
			document.frmWhois.textDominios.focus();
		}
	}
}
/*****************************************************************************************
CREAR EL MENSAJE DE ERROR CONFIGURABLE
*****************************************************************************************/
function imprimir_error(mensaje,divErrorID) {
	var msj ="";
	if ( error_formato ) {
		msj = '<span style="color:' + error_color + '; font-family:' + error_fuente + '; font-size:' + error_tamano + '; font-weight:' + error_negritas + ';font-style: ' + error_estilo + '">'+mensaje + '</span>';
		
	}
	else {
		msj = ''+mensaje+'';
	}
	//SI SE DEFINE UNA CLASE LA USO.
	if( CSS_ERROR_CLASS!='' )
		set_error_class(CSS_ERROR_CLASS,divErrorID);
	return ( msj );
}
//---------------------------------------------------------------------------
function set_error_class(divclass, divErrorID){	
	var div;
	try		{	div = document.getElementById(divErrorID);	}
	catch(e){	div = false;	}
	if( !div )	return;
	div.setAttribute("class",""+divclass);
	div.setAttribute("className",""+divclass);		
}
/*****************************************************************************************
VERIFICA LA CORRECTA ESCRITURA DE LOS DOMINIOS
*****************************************************************************************/
function validar_dominios(cadena_dominios) {
	var ereg = /^[a-zA-Z0-9]+(\-[a-zA-Z0-9]|[a-zA-Z0-9])*$/;
	var arreglo_dominios = new Array();
	var dominios = '';
	arreglo_dominios = cadena_dominios.split('\n');
	for ( ix=0; ix<arreglo_dominios.length; ix++ ) {
		// eliminar posibles espacios al principio y al final
		dominio_actual = trim(arreglo_dominios[ix]);
		// esta linea es para explorer :@
		dominio_actual = dominio_actual.replace('\r','');
		// si despues de eliminar los espacios, queda algo, validar la sintaxis
		if ( dominio_actual.length > 0 ) {
			if ( !ereg.test(dominio_actual) ) {
				return (false);
			}
			dominios += dominio_actual+'|';
		}
	}
	// quitar el ultimo paip
	dominios = dominios.substr(0,dominios.length-1);
	if ( dominios.length < 1 ) { return (false); }
	return (dominios);
}
/*****************************************************************************************
ELIMINA LOS POSIBLES ESPACIOS EN BLANCO Y SALTOS DE LINEA AL PRINCIPIO Y AL FINAL
*****************************************************************************************/
function trim(cadena){
	for(i=0; i<cadena.length; ){
		if(cadena.charAt(i)==" ")
			cadena=cadena.substring(i+1, cadena.length);
		else
			break;
	}
	for(i=cadena.length-1; i>=0; i=cadena.length-1){
		if(cadena.charAt(i)==" ")
			cadena=cadena.substring(0,i);
		else
			break;
	}
	return(cadena);
}
/*****************************************************************************************
ENVIA LOS DATOS DEL FORMULARIO DE SELECCION DE DOMINIOS DISPONIBLES
*****************************************************************************************/
var FORCE_SUBMIT = false;
function contratar_dominios(destino) {
	
	if( FORCE_SUBMIT ) return true;
	
	datos = '';
	
	datos = obtener_marcados();
	variables = 'accion=crear_llave&datos='+escape(datos)+'&param1=CONXDOM';
	document.getElementById(DIV_ERR_RESULTS).innerHTML = "";
	
	set_error_class("",DIV_ERR_RESULTS);
	set_error_class("",DIV_ERRORES);
	
	// si no hay seleccionados para compra
	if ( datos == '' ) {
		document.getElementById(DIV_ERR_RESULTS).innerHTML = imprimir_error("Selecciona al menos un dominio disponible para contratar",DIV_ERR_RESULTS );
		return false;
	}
	
	if( SINGLE_SELECTION )
			if( !isSingleChecked(DIV_RESULTS) ){
				document.getElementById(DIV_ERR_RESULTS).innerHTML = imprimir_error("Selecciona solo una extension.",DIV_ERR_RESULTS);
				return false;
			}
	
	var myConn = new XHConn();
	if (!myConn) alert("XMLHTTP no esta disponible. Intenta con un navegador mas reciente.");
	document.getElementById('btnContratar').setAttribute("src","images/lod.gif");
	
	var peticion = function (oXML) {		
		regreso = oXML.responseText;
		document.getElementById('whois-llave-dominios').value = regreso;
		document.getElementById('frmResults').action = destino;
		document.getElementById('frmResults').submit();		
	}

	myConn.connect( 'includes/contratar/ajax.php', "POST", variables, peticion );
	return false;
}

/*****************************************************************************************
OBTENER LOS DOMINIOS SELECCIONADOS PARA COMPRA
*****************************************************************************************/
function obtener_marcados() {
	var datos = '';
//	arreglo_inputs = document.getElementsByTagName('INPUT');
	arreglo_inputs  = getCheckboxes(DIV_RESULTS);
	
	for ( x=0; x<arreglo_inputs.length; x++ ) {	
	//	if ( arreglo_inputs[x].checked ) {
			datos += arreglo_inputs[x].name.replace('.','_') + '=' + arreglo_inputs[x].value + ',';
	//	}		
	}
	
	if ( dominios.length > 1 ) {
		datos = datos.substr( 0, datos.length-1 );
	}
	
	return (datos);
}

/*****************************************************************************************
ENVIA LA SOLICITUD PARA LA DISPONIBILIDAD DE LOS DOMINIOS
*****************************************************************************************/
function enviar_peticion() {
	var checks = getCheckboxes("frmWhois");
	var extsMX="", extsTLD="";
	var ruleMX = /.*mx$/;
	var vars="";
		
	for ( i=0; i<checks.length; i++ ) {
		if( ruleMX.exec( checks[i].value ) 	)
			extsMX=extsMX+checks[i].value+",";
		else
			extsTLD=extsTLD+checks[i].value+",";
	}
	
	var dominios = document.getElementById("textDominios").value;
	var doms="";
	dominios = dominios.split('\n');
	for ( i=0; i<dominios.length; i++ )
		doms+=dominios[i]+",";
	checkbox = '';
	if ( poner_checkbox ) {
		checkbox = '&checks=si';
		if ( marcar_checkbox ) {
			checkbox += '&checks_s=si';
		}
	}
	
	
	extsMX = extsMX.replace(/,$/,'');
	extsTLD = extsTLD.replace(/,$/,'');
	doms = doms.replace(/,$/,'');
	
	while( /\r/.test(doms) ){
		doms = doms.replace('\r','');
	}
	


	
	extsMX = escape(extsMX);
	extsTLD = escape(extsTLD);
	doms = escape(doms);
	if( extsMX!="" ){
		vars = 'exe=server&solicitud='+doms+"|"+extsMX+checkbox;
		convocar('whois_utils/whois_cliente.php','',vars);
	}
	if( extsTLD!="" ){
		vars = 'exe=server&solicitud='+doms+"|"+extsTLD+checkbox;	
		convocar('whois_utils/whois_cliente.php','',vars);	
	}
	
	return true;
}

/*****************************************************************************************
LLENA LA TABLA CON LOS RESULTADOS DE LOS DOMINIOS
*****************************************************************************************/

function imprimir_resultados(regreso) {
	
	datos = new Array();
	datos = regreso.split("#");
	resultados = datos[1];
	arreglo_resultados = new Array();
	arreglo_resultados = resultados.split('|');
	
	var iconUrl;
	var isUnAvaible=false;
	var checkbox;
	
	for ( ct=0; ct<arreglo_resultados.length; ct++ ) {
		finales = new Array();
		finales = arreglo_resultados[ct].split(',');
		dominio = finales[0];

		extension = finales[1].replace('\r','');	
		estado = finales[2].replace('\r','');	
		check = finales[3].replace('\r','');
		
		extension = extension.replace('\n','');
		estado = estado.replace('\n','');
		check = check.replace('\n','');
		
		isUnAvaible = /No Disponible/.exec( estado );
		
	//	alert( dominio+'_'+extension );
		
		if( isUnAvaible )  {
			iconUrl = "images/resource_lil_no.gif";
			check = "";
			estado = estado.replace(/No Disponible/,'Ver&nbsp;Detalles');		
		}else{
			iconUrl = "images/resource_lil_yes.gif";	
			estado = "";
		}
		
		// poner los estados de los dominios
		if ( document.getElementById('icon_'+dominio+'_'+extension) ) {
			document.getElementById('icon_'+dominio+'_'+extension).innerHTML = "<img src='"+iconUrl+"' />";
		}
		
		if ( document.getElementById('estado_'+dominio+'_'+extension) ) {
			document.getElementById('estado_'+dominio+'_'+extension).innerHTML = estado;
			if( estado=="")
				document.getElementById('estado_'+dominio+'_'+extension).style.display='none';
		}
		// poner los checkboxes para contratacion
		if ( document.getElementById('check_'+dominio+'_'+extension) ) {
		/*	checkbox = document.createElement("input");
			checkbox.setAttribute("type","checkbox");
			checkbox.setAttribute("name","dom_"+dominio+"."+extension);
			checkbox.setAttribute("id","dom_"+dominio+"."+extension);
			checkbox.setAttribute("value",dominio+"."+extension);	*/
						
			document.getElementById('check_'+dominio+'_'+extension).innerHTML = check;
			if( check=="")
				document.getElementById('check_'+dominio+'_'+extension).style.display='none';
		}
		
		
	}
}

function popUp(URL) {
	window.open(URL, "Detalles", 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=610,height=400');
}

////////////////////////////////////////////////////////////////////////////////////////////////
function isSingleChecked(contID){
	var cont =  document.getElementById(contID);
	var elems = cont.getElementsByTagName("INPUT");
	var contChecked = 0;
	for( e=0; e<elems.length;e++ ){
		if( elems[e].type=='checkbox' ){
			if( elems[e].checked == true ) 
				contChecked++;
		}
	}
	return ( contChecked<=1 );
}