MLJsLogger = function () { }

MLJsLogger.urlBasePlDfl = document.location.protocol+"//"+document.location.host+"/argentina/ml/";
MLJsLogger.proc = "UNDEFINED";
MLJsLogger.SEPARATOR = "||";
MLJsLogger.urlBasePl;

MLJsLogger.originalErrorHandlerDwr;

MLJsLogger.LEVEL_ERROR = 0;
MLJsLogger.LEVEL_WARN = 1;
MLJsLogger.LEVEL_DEBUG = 2;

MLJsLogger.level = 0;

MLJsLogger.setUrlBasePl = function (url){
	MLJsLogger.urlBasePl = url;	
}

MLJsLogger.getUrlBasePl = function (){
	if (MLJsLogger.urlBasePl == null)
		return MLJsLogger.getBase();
	else
		return MLJsLogger.urlBasePl;
}


MLJsLogger.getBase = function ()
{
     var baseTag = document.getElementsByTagName('base');
	 
	 if (typeof baseTag === 'undefined' || baseTag.length == 0)
	 	return MLJsLogger.urlBasePlDfl;
	 else {
		 if (MLJsLogger.isValidUrlBase (baseTag[0].href)) {
		   if (MLJsLogger.isDebugEnable())
				MLJsLogger.debug ('baseTag[0].href: ' +baseTag[0].href);
	 	   return baseTag[0].href;
		 }
		 else
		   return MLJsLogger.urlBasePlDfl;	
	 }
}


MLJsLogger.setLogProc = function (proc){
	MLJsLogger.proc = proc;	
}

MLJsLogger.setLevel = function (level){
	MLJsLogger.level = level;	
}

MLJsLogger.setLevelError = function (){
	MLJsLogger.setLevel (MLJsLogger.LEVEL_ERROR);
	MLJsLogger.setTrap ();
}

MLJsLogger.debug = function  (msj) {
	alert (DWRUtil.toDescriptiveString (msj, 2));
}

MLJsLogger.setLevelDebug = function (){
	MLJsLogger.setLevel (MLJsLogger.LEVEL_DEBUG);
	MLJsLogger.setTrap ();
}

MLJsLogger.setTrap = function (){
	if (typeof DWREngine != 'undefined' && typeof DWREngine._errorHandler != 'undefined') {
		MLJsLogger.originalErrorHandlerDwr = DWREngine._errorHandler;
		DWREngine.setErrorHandler(MLJsLogger.errorHandlerDwr);
	}
	window.onerror = MLJsLogger.trapError;
}

MLJsLogger.errorHandlerDwr = function (errorString, exception){
	MLJsLogger.logError (errorString + MLJsLogger.SEPARATOR + DWRUtil.toDescriptiveString(exception,1));
	
	if (MLJsLogger.originalErrorHandlerDwr != null) {
		MLJsLogger.originalErrorHandlerDwr(errorString, exception);	
	}
}

MLJsLogger.isDebugEnable = function () {
	return 	MLJsLogger.level == MLJsLogger.LEVEL_DEBUG;
}

MLJsLogger.isValidUrlBase = function  (url) {
	return url.indexOf('\/ml\/') > -1;	
}

MLJsLogger.logError = function (error, proc){
	if (typeof proc === 'undefined')
		MLJsLogger.insertLog ('Error: '+error, MLJsLogger.proc);
	else
		MLJsLogger.insertLog ('Error: '+error, proc);
}

MLJsLogger.trapError = function (sMsg, sUrl, sLine){
    s="Msg: " + sMsg + MLJsLogger.SEPARATOR;
    s+="Line: " + sLine + MLJsLogger.SEPARATOR;
    s+="URL: " + sUrl + MLJsLogger.SEPARATOR;
    MLJsLogger.logError (s);    
 }
 
 
MLJsLogger.getDataBrowser = function () {
	dataFromBrowser = "";
	dataFromBrowser+= DWRUtil.toDescriptiveString(navigator,1,2) +MLJsLogger.SEPARATOR;
	dataFromBrowser+= DWRUtil.toDescriptiveString(window.location, 1) +MLJsLogger.SEPARATOR;
	dataFromBrowser+= "Cookie: "+DWRUtil.toDescriptiveString(document.cookie, 1).replace(/;/gi, MLJsLogger.SEPARATOR) +MLJsLogger.SEPARATOR;
	return dataFromBrowser;
}

MLJsLogger.insertLog = function  (error, proc) {
	if (MLJsLogger.isDebugEnable()) {
		MLJsLogger.debug ('insertLog: error: '+error);
	}
	
	id = Math.random();	
	MLJsLogger.executeCall (MLJsLogger.getUrlLog (error+MLJsLogger.SEPARATOR+MLJsLogger.getDataBrowser(), proc, id), id);
}

MLJsLogger.executeCall = function  (url, id) {
	idname = id;
	div = document.createElement('div');
	div.innerHTML = "<iframe frameborder='0' width='1' height='1' id='" + idname + "' name='" + idname + "' src='"+url+"&idIframe="+id+"'></iframe>";
	if (typeof document.body != 'undefined')
		document.body.appendChild(div);
}
  
MLJsLogger.getUrlLog = function  (error, proc, id) {
	return MLJsLogger.getUrlBasePl()+"log_js_error?as_txt="+escape(error)+"&r="+id+"&proc="+proc; 		 
}


  