/*****************************************************************************************
CONFIGURACIONES GLOBALES DE LA HERRAMIENTA WHOIS
*****************************************************************************************/
var esIE = navigator.appName; esIE = esIE.search(/Microsoft/); esIE = (esIE>=0)?true:false;

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 =  "";	

var FORCE_SUBMIT = false;

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
	if( TEXTBOX_CHALLENGE==false ){ 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
*****************************************************************************************/
function contratar_dominios(destino) {
	
	if( FORCE_SUBMIT ) return true;
	
	var dominios_seleccionados = '';
	dominios_seleccionados = obtener_marcados();
	
	variables = 'accion=crear_llave&datos='+escape(dominios_seleccionados)+'&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 ( dominios_seleccionados == '' ) {
		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  = getCheckboxes(DIV_RESULTS);
	
	for ( x=0; x<arreglo_inputs.length; x++ ) {
		datos += arreglo_inputs[x].name.replace('.','_') + '=' + arreglo_inputs[x].value + ',';
	}
	datos = datos.replace(/,$/,'');

	return (datos);
}

/*****************************************************************************************
ENVIA LA SOLICITUD PARA LA DISPONIBILIDAD DE LOS DOMINIOS
*****************************************************************************************/
function enviar_peticion() {
	var checks = getCheckboxes("frmWhois");
	var tlds='', vars="";
	var dominios='', doms='';
	
	dominios = document.getElementById("textDominios").value;

	for ( i=0; i<checks.length; i++ ) { tlds+=checks[i].value+','; }
	tlds = tlds.replace(/,$/,'');

	dominios = dominios.split('\n');
	for ( i=0; i<dominios.length; i++ ){ doms+=dominios[i]+","; }
	doms = doms.replace(/,$/,'');

	checkbox = '';
	
	if ( poner_checkbox ) {
		checkbox = '&checks=si';
		if ( marcar_checkbox ) {
			checkbox += '&checks_s=si';
		}
	}
	
	while( /\r/.test(doms) ){ doms = doms.replace('\r',''); }
		
	tlds = escape(tlds); doms = escape(doms);
	
	vars = 'exe=server&solicitud='+doms+"|"+tlds+checkbox;
	convocar('whois_utils/whois_cliente.php','',vars);
		
	return true;
}

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

function imprimir_resultados(regreso) {

	var datos = false;
	var dominios = false;
	var d=0,total_dominios=0;
	
	datos = regreso.split("#");
	dominios = datos[1].split("|");
	total_dominios = dominios.length;

	var dominio, tld, checkbox, estado, estaDisponible;
	var oEstado=false, oIcono=false, oInput=false;

	for( d=0; d<total_dominios; d++ ){
		datos = dominios[d].split(",");		
		dominio = datos[0];
		tld = datos[1];
		estado = datos[2];
		checkbox = datos[3];

		estaDisponible = /No Disponible/.exec( estado );
		estaDisponible = (estaDisponible==null)?true:false;

		if( estaDisponible ){
			icono = "images/resource_lil_yes.gif";
			estado = "";	
		}else{
			icono = "images/resource_lil_no.gif";
			checkbox = "";
			estado = estado.replace(/No Disponible/,'Ver&nbsp;Detalles');
		}
		
		//Buscar los elemnetos del dominio para mostrar los resultados.
		oEstado = document.getElementById( 'estado_' + dominio+'_'+tld );
		oIcono = document.getElementById( 'icon_' + dominio+'_'+tld );
		oInput = document.getElementById( 'check_' + dominio+'_'+tld );
		
		//Si no exiten los objetos, pasar al siguiente dominio.
		if( oEstado==null || oIcono==null || oInput==null ) continue;
		
		oEstado.innerHTML = estado;
		oIcono.innerHTML = "<img src='"+icono+"' />";
		oInput.innerHTML = checkbox;		
	}
}

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 );
}

