﻿/**
 * @author msalla
 */
var Pb = Pb ||
{};
(function() {
    if (window.jQuery) {
        (function($) {
			/**
			 * Funciones de traceo de visitas.
			 */
			var TTracer = function() {
			    /**
			     * Constructor del manejador de la toolBar básica.
			     */
			    function Tracer(opt) {
			        // El constructor debe ejecutarse en el load de la 
			        // toolBar o sinó los bindeos de click de los botones
			        // de la toolBar no se llevaran a cabo correctamente.
			        // Definimos valores por defecto de las propiedades
			        var cfg = {
			            mainContentId: ''
			        };
			        $.extend(cfg, opt);
			        this._mainContentId = cfg.mainContentId;
			        this._startTime = new Date();
			        this._referrer = document.referrer;
			        this._queryString = window.location.search;
			        
			        // Usamos una función para establecer el contexto de ejecución 
			        var self = this;
			        $(document).ready(function() {
			            self.tracerInit.apply(self, arguments);
			        });
			    }
			    
			    Tracer.prototype = {
					/**
			        * Makes an AJAX request call to the EditInPlace Service.
			        * @param {Object} aMethodName - Service method name.
			        * @param {Object} aParams - Parameter list { ParamName: ParamValue,...}
			        * @param {Object} aSuccessFunc
			        * @param {Object} aErrorFunc
			        */
			        AjaxCallTraceService: function(aMethodName, aParams, aSuccessFunc, aErrorFunc, aSynchronousRequest) {
			            var self = this;
			            function DefaultErrorFunctionCallback(XMLHttpRequest, textStatus, errorThrown) {
							var lText = "Se produjo un error de comunicaci&oacute;n con el servidor. ";
							if (errorThrown) {
								lText += 'Error:' + errorThrown;
							}
							if (textStatus) {
								lText += ' Estado:' + textStatus;
							}
							if (textStatus) {
								lText += ' Información del error: ' + XMLHttpRequest.responseText;
							}
			                //TLK.RadAlert(lText,600,"Error");
							alert(lText);
			            }
			            var lErrorFunc = aErrorFunc || DefaultErrorFunctionCallback;
			            $.ajax({
			                type: "POST",
			                url: "/pb/services/TraceService.asmx/" + aMethodName + "?pbl=" + Pb.Utils.Url.getPageLang(),
			                contentType: "application/json; charset=utf-8",
			                dataType: "json",
			                data: $.compactJSON(aParams),
			                success: function(result) {
			                    if (aSuccessFunc) {
									aSuccessFunc(result);
								}
			                },
			                error: function(XMLHttpRequest, textStatus, errorThrown) {
			                    lErrorFunc(XMLHttpRequest, textStatus, errorThrown);
			                }
			            });
			        },		
					/**
					 * Init function to trace the current page visit.
					 */
			        tracerInit: function() {
			            var lElapsedMilliseconds = new Date() - this._startTime;
			            var lParams = {
			                ContentId: this._mainContentId,
			                Referrer: this._referrer,
			                QueryString: this._queryString,
			                // Tiempo de carga de la página
			                ElapsedTime: lElapsedMilliseconds,
			                // Parámetros imprescindibles para que vaya con los repeater paginados
							// esta variable global guarra se asigna en la CntVwrBasePage
			                DataPagerQueryStrings: _dataPagerQueryStrings
			            };
			            this.AjaxCallTraceService("RegisterVisit",{visit:lParams});
			        }
			    };
			    return {
			        Tracer: Tracer
			    };
			}();

			$.extend(Pb, TTracer);
			$.pbTracer = Pb.Tracer;
            
            //var extensions = {
            //};
        
            //$.each( extensions, function( i )
            //{
            //	$.fn[i] = this;
            //});
        })(window.jQuery);
    }
})();
