/** Función robada de Stage */
function openWindow(url, w, h, name){
    var viewportWidth = $(window).width();  
    var viewportHeight = $(window).height();  
	var screenHeight = (viewportHeight - h) / 2;
	var screenWidth = (viewportHeight - w) / 2;
	window.open(url,'pop'+name,'width=' + w + ',height=' + h + ',scrollbars=no,toolbar=0,location=0,status=0,menubar=0,resizable=0,left=' + screenWidth + ',top=' + screenHeight);
}
function popupEmail(advId){
	openWindow(GLOBAL_BASE_PATH+'popup.email.action?idAdvertisement='+advId, 320, 460, 'emailContact');
}

function setColorEmptyCaptchaError(idForm, rgbColor){
	$(idForm+" .captcha-message").css("color",rgbColor);
}

function setColorNotEmptyCaptchaError(idForm, rgbColor){
	$(idForm+" .captcha-message").css("color",rgbColor);
}

/* variable para controlar que un aviso está pidiendo información al moreinfo */
var waiting = [];
function checkServiceInvoked(advId){
	if (waiting[advId]) { 
		return true; 
	}
	if($("#advertise-menu-benefits-"+advId+" > *").length > 0 
			|| $("#advertise-menu-video-"+advId+" > *").length > 0
			|| $("#advertise-menu-contactInfo-"+advId+" > *").length > 0){		
		return true;
	}else{
		return false;
	}	
}

function offVideoIframe(){
	var tmp_src = $(this).attr("src");
	$(this).attr("ref",tmp_src);
	$(this).attr("src","");
}

function onVideoIframe(){
	var tmp_src = $(this).attr("ref");
	$(this).attr("src",tmp_src);
	$(this).attr("ref","");
}

function invokeMoreInfoService(advId, isVideo){
		
	waiting[advId] = true;
	$("#loading_tabs-"+advId).show();
	$.get(GLOBAL_BASE_PATH+"getMoreAdvertiseInfo.action?idAdvertisement="+advId+getRubroDesc(), 
			function(data){				
				$("#loading_tabs-"+advId).hide();
				var data_benefits = "";					
				var data_video = "";
				var data_address = "";
				var email_data = ""; 
				if(data.indexOf("<!--ERROR-->") == -1){			
					data_benefits = data.substring(data.indexOf("<!--BEGIN-BENEFITS-->"),data.indexOf("<!--END-BENEFITS-->"));					
					data_video = data.substring(data.indexOf("<!--BEGIN-VIDEO-->"),data.indexOf("<!--END-VIDEO-->"));
					data_address = data.substring(data.indexOf("<!--BEGIN-ADDRESS-->"),data.indexOf("<!--END-ADDRESS-->"));
					email_data = data.substring(data.indexOf("<!--BEGIN-EMAIL-->"),data.indexOf("<!--END-EMAIL-->"));
					// remover comentarios y espacios de los datos del email
					email_data=email_data.replace("<!--BEGIN-EMAIL-->","").replace(/^\s*|\s*$/g,"");
					// agregar los remitentes del email
					$("#form-email-"+advId+" select").html(email_data);
				}else{
					data_benefits = data;
					data_video = data;
					data_address = data;
					// en caso de que falle, en la pantalla de email no hacer nada					
				}				
				$("#advertise-menu-benefits-"+advId).append(data_benefits);
				$("#advertise-menu-video-"+advId).append(data_video);
				if(!isVideo){
					$("#galleryMain-"+advId+" iframe").each(offVideoIframe);
				}
				$("#advertise-menu-contactInfo-"+advId).append(data_address);
				// al final
				waiting[advId] = false;
			} 
	);
	
}
function getRubroDesc(){
	rubroDesc = "";
	termId = RUBRO_ID;
	rubroDesc += (termId!="")?"&termId="+termId:"";
	return rubroDesc;
}


function getMoreInfoBenefit(advId){
	jQuery.get(GLOBAL_BASE_PATH + 'benefits.do' + "?id="+advId+"&ignoreAction=true"+getRubroDesc());
	if(checkServiceInvoked(advId)){		
		$("#advertise-menu-benefits-"+advId+" > .ui-tabs-hide").removeClass("ui-tabs-hide");
	}else{		
		invokeMoreInfoService(advId,false);		
	}
}

function getMoreInfoVideo(advId){
	
	jQuery.get(GLOBAL_BASE_PATH + 'showVideos.do' + "?id="+advId+"&ignoreAction=true"+getRubroDesc());
	if(checkServiceInvoked(advId)){		
		$("#advertise-menu-video-"+advId+" > .ui-tabs-hide").removeClass("ui-tabs-hide");
		$("div.hiddenGallery").show();
		$("#galleryMain-"+advertiseId+" iframe").each(onVideoIframe);
	}else{		
		invokeMoreInfoService(advId, true);		
	}	
}

function getMoreInfoAddressPhone(advId){	
	
	jQuery.get(GLOBAL_BASE_PATH + 'direction.do' + "?id="+advId+"&ignoreAction=true"+getRubroDesc());
	if(!checkServiceInvoked(advId)){
		invokeMoreInfoService(advId, false);
		addIframeConversionTrakingAddress();
	}	
}

function getEmails(advId){	
	
	jQuery.get(GLOBAL_BASE_PATH + 'mail.do' + "?id="+advId+"&ignoreAction=true"+getRubroDesc());
	if(!checkServiceInvoked(advId)){
		invokeMoreInfoService(advId, false);
	}	
}

//function getURLParam(name){
//  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
//  var regexS = "[\\?&]"+name+"=([^&#]*)";
//  var regex = new RegExp( regexS );
//  var results = regex.exec( window.location.href );
//  if( results == null )
//    return "";
//  else
//    return results[1];
//}

function makeFreecall(advId, addressId, phoneArea, phoneNumber){
	advId = advId || '';
	addressId = addressId || '';
	var ispopcall = ""; 
	var phones = [];
	

	// chequear si tengo el teléfono o si necesito pedirlo
	if (phoneArea != null && phoneNumber != null && 
			phoneArea != "" && phoneNumber != ""){
			

		$.ajax({
			url: GLOBAL_BASE_PATH+'json.isPopCall.action?idAdvertisement='+advId+'&addressId='+addressId+getRubroDesc(), 
			success: function(data){
				var response = eval("("+data+")");
				ispopcall = response.isPopCall;
			},
			async: false
		});
	} else {
		$.ajax({
			url: GLOBAL_BASE_PATH+'json.isPopCallAndGetPhone.action?idAdvertisement='+advId+'&addressId='+addressId+getRubroDesc(), 
			success: function(data){
				var response = eval("("+data+")");
				ispopcall = response.isPopCall;
				phoneArea = response.phoneArea.replace(/(^\s*|\s*$)/g, ""); // trim the result
				phoneNumber = response.phoneNumber.replace(/(^\s*|\s*$)/g, ""); // trim the result
			},
			async: false
		});
	}
	
	/* seteamos phones así para mantener la compatibilidad con el resto del código */
	phones = [{codArea: phoneArea, numero: phoneNumber}];
	
	if(phones.length == 1){
		/*	si entra por el if, la funcionalidad responde correctamente*/
		var phone = phones[0];

		// phone area to int
		phone.codArea = phone.codArea * 1;
		// replace character added to display the phone in the results page
		phone.numero = phone.numero.replace("-","").replace(/\s/g, "");
		
		/* Esta parte de codigo , corresponde a freecall, por eso ahora va dentro del siguiente if/else, cuando ispopcall = false*/
		/*
		var href = document.location.toString();
		var url = href.substring(0, href.lastIndexOf('/')+1);
		var authurl = 'AuthorizeURL=' + url + 'authFreecall.do?id=' + advId + '&addressId=' + addressId + '&ddi=54&ddn=' + phone.codArea + '&tel=' + phone.numero;
		webVoicePop('Template=73845', authurl);
		*/
		
		if(ispopcall == true){
			/*Si es true tiene que abrir el popup de popCall*/
			openWindow('http://desa.codamation.com/popcallws/r.aspx?id='+  addressId  +'&ddi=54&ddn='+ phone.codArea +'&tel='+ phone.numero +'&guiid=1_1',430,379,'popCall');		
		}else{
			/*Si es false tiene que conservar la antigua funcionalidad, abriendo el popup de freecall*/
			var href = document.location.toString();
			var url = href.substring(0, href.lastIndexOf('/')+1);
			var authurl = 'AuthorizeURL=' + GLOBAL_BASE_PATH + 'json.authorize.action?idAdvertisement=' + advId + '&addressId=' + addressId + '&ddi=54&ddn=' + phone.codArea + '&tel=' + phone.numero;
			webVoicePop('Template=73845', authurl);		
		}
		
	}else{
		if(ispopcall == true){
			openWindow('http://desa.codamation.com/popcallws/r.aspx?id='+  addressId  +'&ddi=54&ddn='+ phone.codArea +'&tel='+ phone.numero +'&guiid=1_1',430,379,'popCall');		
		}else{
			openWindow('popupFreecall.do?authurl=11&id='+advId + '&addressId=' + addressId,430,379,'freeCall');
		}		
	}
};

/*
 * Se redefinio el metodo getParams (parametro final (boolean hideForm)). La finalidad de este parametro es verificar si
 * corresponde o no ocultar el formulario (id_form) que llega tambien por parametro.
 * 
 * if (hideForm){
		//Oculta el formulario
		$(id_form).hide();
	}
 * 
 * Para que no repercuta en la funcionalidad anterior, se genero otro getParams , que lo unico que hace es invocar al anterior con parametro hidForm en TRUE.
 * 
 * Todos los metodos involucrados en la invocacion a "getParams" sufrieron la misma modificacion:
 * 
 *			** sendFormEmailValidate
 * 
 */

function getParams(id_form,id_adv,multiEmailTo){
	return getParams(id_form,id_adv,multiEmailTo,true);
}

function getParams(id_form,id_adv,multiEmailTo, hideForm){
	var mailTo=$(id_form +" :input[name=mailTo]").val();
	var mailTel=$(id_form +" :input[name=mailTel]").val();
	var mailFrom=$(id_form +" :input[name=mailFrom]").val();
	var mailAddress=$(id_form +" :input[name=mailAddress]").val();
	var mailBody=$(id_form +" :textarea[name=mailBody]").val();
	var emailToMyself_element=$(id_form +" :input[name=emailToMyself]");
	
	var emailToMyself = $(emailToMyself_element).is(":checked"); //Indica si se va a enviar copia del mail enviado
	
	var advertisesInfo=$(id_form +" :input[name=advertisesInfo]").val();//Lleva el html maquetado con los datos de los anunciantes para el envio de mail
	
	var advertisesInfoNames=$(id_form +" :textarea[name=advertisesInfoNames]").val(); //Para multimail, se necesitan los nombres de los anunciantes
	
	if (hideForm){
		//Oculta el formulario
		$(id_form).hide();
	}
			
	return {idAdvertisement: id_adv, multiEmailTo: multiEmailTo ,mailTo: mailTo,mailTel: mailTel, mailFrom:mailFrom, mailAddress:mailAddress, mailBody:mailBody, emailToMyself:emailToMyself,advertisesInfo:advertisesInfo,advertisesInfoNames:advertisesInfoNames};
	
}

function sendFormEmailValidate(id_form,callback,id_adv,multiEmailTo,captcha,code){
	return sendFormEmailValidate(id_form,callback,id_adv,multiEmailTo,captcha,code,true);
}

/**
* Envia los datos al action que envia un email
* @param id_form - ID del formulario de donde se envia
* @param callback - Funcion llamada luego de que se al server y ejecuta el action
* @param id_for_callback - ID del aviso al que pertence el formulario. Puede ser vacio o nulo si el callback no necesita este id para mostrar el resultado.
* @param multiEmailTo - Boolean que indica si hay mas de 1 destinatario.
* @param captcha - The captcha Id
* @param code - The code captcha writed by the user
* @return void
*/
function sendFormEmailValidate(id_form,callback,id_adv,multiEmailTo,captcha,code,hideForm){
 	var params = getParams(id_form,id_adv,multiEmailTo,hideForm);
 	params["captchaId"] = captcha;
 	params["captchaCode"] = code;
 	
 	//Se toma el nombre de la action que sirve de enviador de mail
	var action=GLOBAL_BASE_PATH+$(id_form +" :input[name=sendEmailAction]").val()+".action";

	$.post(action,params,callback);

	return false;
}
 
 
/**
 * Registra el validador para el formulario del mapa. Valida y envia si es valido.
 * @return
 */

function validateEmailFormAndSubmit(form,callback,id_adv){
	
	$("#"+form.attr("id")).validate({
		errorPlacement: function(error, element) {
			var error_elem=element.parent().find(".error-form");

			if (error_elem.length != 0){
				error.appendTo(error_elem);
			}else{
				error.appendTo(element.parent().parent().find(".error-form"));
			}
		},

        rules: {
			mailTo: "required",
			//   mailTel: "required",
	        mailFrom: "required",
	        mailAddress: {
				required:true,
				email:true
		  	},
	        mailBody: "required"	 			          
        },
        messages: {
        	mailTo: "*",
	        //	mailTel: "*",
          	mailFrom: "*",
          	mailAddress: {
        		required: "*",
        		email: "!"	 			        	
        	},
          	mailBody: "*"
        }
	});
	setColorNotEmptyCaptchaError("#"+form.attr("id"),"#375881");
	var captchaValid = captchaValidator(form.attr("id"));
	//Si es valido, lo envia  
	if ($("#"+form.attr("id")).valid() && captchaValid){
		var c = $("#"+form.attr("id") +" :input[name=captcha]").val();
	    var code = $("#"+form.attr("id") +" :input[name=code]").val();
	    //Oculta el formulario
		$("#"+form.attr("id")).hide();
		sendFormEmailValidate("#"+form.attr("id"),callback,id_adv,false,c,code);
	}else{
		if(!captchaValid){
			setColorEmptyCaptchaError("#"+form.attr("id"),"#2D7CB5");
		}
		//Busca el elemento dentro de la tabla contenedora del formulario.
		$("#"+form.attr("id")).find(".message-email-error-text-asId").show();			
	}
	return false;
}
 
 var emailCommonCallback = function(o){
		var response = eval("("+o+")");
		
		//Esto es porque esta funcion se usa desde paginas
		//donde hay un solo formulario, y por lo tanto no se necesita diferenciar
		// a los forms con un id.
				
		var id_ok= "#message-email-ok-"+response.id; 
		var id_error="#message-email-error-"+response.id;
		var id_form="#form-email-"+response.id;
		var id_button_back="#back-to-email-button-"+response.id;
		
		$(id_form).find(".message-email-error-text-asId").hide();
		$(id_form).find(".captcha-message-error").removeClass("captcha-message-error-show").addClass("captcha-message-error-hide");
		
		//Refresco el captcha
		var captchaHidden = $(id_form).find("input.captchaHidden");
		var captchaImage = $(id_form).find("img.herramientasSecImage");
		refreshCaptchaImage(captchaHidden,captchaImage);
		
		//Si no ocurrio error
		if (response.responseStatus == 1){
			//Muestra el mensaje ok
			$(id_ok).toggle("fast");		
			$(id_button_back).show("fast");
			addIframeConversionTraking();
		}else if(response.responseStatus == 2){
			//Se oculta el mensaje de error en captcha si esta
            $(id_form).find(".captcha-message-error").removeClass("captcha-message-error-hide").addClass("captcha-message-error-show");
            $(id_form).find(".captcha-message>.ok-message").hide();
            $(id_form).find(".captcha-message-error").show();
			$(id_form).toggle("fast");
		}	
		else{
			$(id_error).toggle("fast");
			$(id_button_back).show("fast");
		}		
 }
 
var emailFancyCallback= function(o){
	 emailCommonCallback(o);	
	 var response = eval("("+o+")");
	 
	 //El resize se hace luego del envio del mail (error/exito)	 	 
	 if (response.responseStatus == 1 || response.responseStatus != 2){
		 $("#showSelection-body").addClass("showSelection-body-error");
	 }else{
		 $("#showSelection-body").removeClass("showSelection-body-error");
	 }	 
	 $.fancybox.resize();
}

function displayEmailForm(id_adv){
		
		var id_form="#form-email-"+id_adv;
		var id_button_back="#back-to-email-button-"+id_adv;
		var id_ok= "#message-email-ok-"+id_adv; 
		var id_error="#message-email-error-"+id_adv;
		$(id_form).find(".captcha-message>.ok-message").show();
		$(id_form).find(".captcha-message-error").hide();

		$(id_ok).hide();
		$(id_error).hide();
		$(id_form).show("fast");
		$(id_button_back).hide("fast");
		cleanMail(id_adv);
}

//Llamo a esta funcion sólo desde el envio de mail y multimails
function displayEmailFormResize(id_adv){	
	displayEmailForm(id_adv);
	$("#showSelection-body").removeClass("showSelection-body-error");
	$.fancybox.resize();
}

function cleanMail(id){	
	$('#cleanMail-'+id).click();
}
 
function emailValidator(value){
		return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value)
}

function captchaValidator(formId){
	var c = $("#"+formId +" :input[name=captcha]").val();
    var code = $("#"+formId +" :input[name=code]").val();
    if(c.length > 0 && code.length > 0){
    	return true;
    }else{
    	return false;
    }
}

/** 
* Script para abrir una ventana de popup
* @ref http://www.quirksmode.org/js/popup.html
*/
function popitup(url, name) {
	var newwindow=window.open(url, name);
	if (window.focus) {newwindow.focus()}
	return false;
}

$(document).ready( function() {
	var changeSearchType=function(){
		if ($("#rdPorCategoria").is(":checked")){
			// seteo el tipo de búsqueda a 3: por rubro
			$("#searchType").attr("value", 3);
		}else{
			// seteo el tipo de búsqueda a 1: por keyword
			$("#searchType").attr("value", 1);
		}
	};
	// cambiar el search type en respuesta a la selección del usuario
	$("#rdPorPalabra").click(changeSearchType);
	$("#rdPorCategoria").click(changeSearchType);
	
	// setear la keyword en base a lo que selecciona el usuario
	$("#alojamientos").change(function(){
		$("#keyword").attr("value", $("#alojamientos option:selected").attr("value"));
	});
	
	var homeLinkElem = "<div id=\"linkToHome\">&nbsp;</div>";
	// agregar un link en la home y las demás páginas
	$("#imgRotate, #search-header").append(homeLinkElem);
	$("#linkToHome").click(function(){
		document.location=GLOBAL_BASE_PATH;
	});
	
	var scrollParameters = {scrollbarWidth:7, dragMinHeight:18, dragMaxHeight:18, arrowSize:14, wheelSpeed: 10};
	$(".scroll-basic").jScrollPane(scrollParameters);	
	
	//Correccion del listado de avisos en modo mapa, sirve para cuando la frase de arriva es muy grande
	$("#advertise-list-map-container").height(($("#advertise-list-map-container").height() - ($(".search-results-map").height() - 30)));
	
	scrollParameters = {scrollbarWidth:7, showArrows:true, arrowSize:0, dragMaxHeight:69, dragMinHeight:68, wheelSpeed: 40};
	$(".scroll-basic-list-map").jScrollPane(scrollParameters);
	
	/**********************************************************
		Agregado para que se muestre la 
		pestaña inferior en el cajon de resultados en ie
	**********************************************************/
	$("#tab").css("display","block");
});

function displayLoadingSymbol(id_adv){
	$("#loading-"+id_adv).toggle();

}

/** 
* Debido a que listSuggestions devuelve html, y esta función viene embebida en el html
* por un requerimiento en paginasamarillas debemos proveer una implementación para evitar
* que aparezcan errores en javascript
*/
function restoreTooltip(){
	/* do nothing */
}

/* Refresca el contenido de la página */
function refresh(){
	document.location=document.location;
}

function refreshCaptchaImage(captchaHidden,captchaImage){
	var newCodigo = "";
	for(i=0; i < captchaHidden.val().length; i++){
		newCodigo = newCodigo.concat(captchaHidden.val().charAt(i) * 3);
	}
	newCodigo = newCodigo * newCodigo.length;
	newCodigo = newCodigo.toString();
	newCodigo = newCodigo.slice(0,captchaHidden.val().length);
	var newSrc = captchaImage.attr("src").replace(captchaHidden.val(),newCodigo);
	captchaImage.attr("src",newSrc);
	captchaHidden.val(newCodigo);
}

function addIframeConversionTraking(){
	var iframe = document.createElement('iframe');
	iframe.style.width = '0px';
	iframe.style.height = '0px';
	document.body.appendChild(iframe);
	iframe.src = GLOBAL_BASE_PATH+'jsp/adWordsTraking/adWordsTrakingForEmail.jsp';	
}

function addIframeConversionTrakingAddress(){
	var iframe = document.createElement('iframe');
	iframe.style.width = '0px';
	iframe.style.height = '0px';
	document.body.appendChild(iframe);
	iframe.src = GLOBAL_BASE_PATH+'jsp/adWordsTraking/adWordsTrakingForAddress.jsp';
}

function addIframeConversionTrakingMapGlobo(){
	var iframe = document.createElement('iframe');
	iframe.style.width = '0px';
	iframe.style.height = '0px';
	document.body.appendChild(iframe);
	iframe.src = GLOBAL_BASE_PATH+'jsp/adWordsTraking/adWordsTrakingForMapa.jsp';
}
