/**
 *
 * Picabo AjaxFramework
 *
 * @category   PcbJs
 * @package    PcbJs_Debug
 * @copyright  Copyright (c) 2008 Picabo s.r.o.(http://www.picabo.cz)
 * @author     Lukas Musalek(musalek@picabo.cz)
 * @version    001 0005 20.07.2011 16:31
 * 
 */

var debugWindow;

/**
 *
 * Debug okno - Constructor
 *   
 *         
 */  
function Debug() {
  debugWindow = this;
  this.doc = document;
  this._id = 'debug_window';
  
  var rv = -1;
  var ua = navigator.userAgent;
  var re = new RegExp("Trident\/([0-9]{1,}[\.0-9]{0,})");
  var rie8 = new RegExp("MSIE ([0-9]{1,}[0-9]{0,})");
  if (rie8.exec(ua) != null) {
    rv2 = parseFloat(RegExp.$1);
  }
  if (re.exec(ua) != null) {
    rv = parseFloat(RegExp.$1);
  }
  if (rv == 4 && rv2 == 8) this.ie8 = true;
  else this.ie8 = false;
  this.ie = false;
  
  /*@cc_on
		/*@if (@_jscript)
			this.ie = (document.all && !window.opera) ? true : false;
		/*@else @*/
			this.ie = false;
		/*@end
	@*/
	this.ie7 = (this.ie && window.XMLHttpRequest);	
	//if (!this.ie) document.captureEvents(Event.MOUSEMOVE);
	if (this.ie8) this.ie = false;
	this.chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
	
	if (!document.getElementById(this._id)){
	  this.generate();
  }
  
}

/**
 * Generování okna pro debug 
 */ 
Debug.prototype.generate = function() {
  var objBody = this.doc.getElementsByTagName("body").item(0);
  
  var objButton = this.doc.createElement("div");
		objButton.setAttribute('id','button'+this._id);
		objButton.setAttribute((this.ie ? 'className' : 'class'), 'debug_button');
		objButton.style.display = 'block';
		objButton.innerHTML = 'Debug';
		objButton.onclick = function () {debugWindow.showDebug();};
		objBody.appendChild(objButton);
		
  var objDebug = this.doc.createElement("div");
		objDebug.setAttribute('id',this._id);
		objDebug.setAttribute((this.ie ? 'className' : 'class'), 'debug_window_hlavni');
		objDebug.style.display = 'none';
		//objDebug.innerHTML = '<div class="popup_window_vnejsi_ram" id="ramecek_'+this._id+'" onmousedown="popupObject[\''+this._id+'\'].focusPopup();"></div>';
		objBody.appendChild(objDebug);
	var objText = this.doc.createElement("iframe");
		objText.setAttribute('id','text'+this._id);
		objText.setAttribute((this.ie ? 'className' : 'class'), 'debug_window_text');
    objDebug.appendChild(objText);
  var objClear = this.doc.createElement("div");
		objClear.setAttribute('id','clear'+this._id);
		objClear.setAttribute((this.ie ? 'className' : 'class'), 'clear_window_text');
		objClear.innerHTML = "Clear";
		objClear.onclick = function () {debugWindow.clearDebug();};
    objDebug.appendChild(objClear);  

  var doc = objText.contentWindow.document;
  doc.open();
  doc.write('<html><head><link rel="stylesheet" type="text/css" media="all" href="/css/debug.css" /></head><body style="font-size: 12px;font-family: Arial;margin:0; padding: 0;"></body></html>');
  doc.close();  
}	 

/**
 * Pridani textu do okna 
 * 
 * @param string info - obsah
 * @param int status - status hlasky (0 - no problem, 1 - exception)   
 */ 
Debug.prototype.addMessage = function(info, status) {
  var objText = document.getElementById('text'+this._id);
  var my_time = new Date();
  var doc = objText.contentWindow.document.body;
  var text_status = 'ok';
  if (status == 0) text_status = 'ok';
  if (status == 1) text_status = 'error';
  var content = this.htmlspecialchars(info).replace(/\n/g,'<br />');
  content = this.colorize(content); 
  content = '<span class="event_'+text_status+'">' + my_time.getHours()+':'+my_time.getMinutes() + ':'  + my_time.getSeconds() + '.' + my_time.getMilliseconds() + '</span><br /><div class="debug_content">'+ content + '</div><br />';
  var newDoc = document.createElement("div");
  newDoc.innerHTML = content;
  if (typeof(doc.childNodes[0]) != "undefined") {
    doc.insertBefore(newDoc, doc.childNodes[0]);
  } else {
    doc.appendChild(newDoc);
  }
  
  //doc.innerHTML = content + doc.innerHTML;
  //doc.write(this.htmlspecialchars(content));
  //doc.close();
  //objText.contentWindow.document.innerHTML = '**** ' + my_time.getHours()+':'+my_time.getMinutes() + ':'  + my_time.getSeconds() + '.' + my_time.getMilliseconds() + ' ****\n'+info + '\n\n' + objText.innerHTML;
  //objText.innerHTML = '**** ' + my_time.getHours()+':'+my_time.getMinutes() + ':'  + my_time.getSeconds() + '.' + my_time.getMilliseconds() + ' ****\n'+info + '\n\n' + objText.innerHTML;
} 

/**
 * Obarvovani textu
 * 
 * @param string info - obsah
 * @param int status - status hlasky (0 - no problem, 1 - exception)   
 */ 
Debug.prototype.colorize = function(content) {
  var pomCont = content.replace(/&lt;/g,'<span class="tag">&lt;'); 
  pomCont = pomCont.replace(/&gt;/g,'&gt;</span>'); 
  pomCont = pomCont.replace(/<span class=["]tag["]>&lt;!\[CDATA\[/g,'<a href="#" onclick="this.nextSibling.nextSibling.style.display=\'block\';this.nextSibling.style.display=\'block\';this.style.display=\'none\';return false;" class="db_more"></a><a href="#" onclick="this.previousSibling.style.display=\'block\';this.nextSibling.style.display=\'none\';this.style.display=\'none\';return false;" class="db_less"></a><div class="db_hidden">&lt;![CDATA['); 
  var regExp = new RegExp("]]&gt;</span>","g");
  pomCont = pomCont.replace(regExp,']]&gt;</div>');
  //regExp = new RegExp("&lt;newhtml&gt;</span>","g");
  //pomCont = pomCont.replace(regExp,'&lt;newhtml&gt;</span><a href="#" onclick="this.nextSibling.nextSibling.style.display=\'block\';" class="db_more"><div class="db_hidden">');
  //regExp = new RegExp("<span class=["]tag["]>&lt;/newhtml&gt;","g");
  //pomCont = pomCont.replace(/&lt;![CDATA/g,'</div><span class="tag">&lt;/newhtml&gt;');
  
  return pomCont;
}

/**
 * zobrazeni okna
 */ 
Debug.prototype.showDebug = function() {
  var objDebug = document.getElementById(this._id);
  var objButton = document.getElementById('button'+this._id);
  objDebug.style.display = "block";
  objButton.onclick = function () {debugWindow.hideDebug();};
} 

/**
 * skryti okna 
 */ 
Debug.prototype.hideDebug = function() {
  var objDebug = document.getElementById(this._id);
  var objButton = document.getElementById('button'+this._id);
  objDebug.style.display = "none";
  objButton.onclick = function () {debugWindow.showDebug();};
} 

/**
 * vymazani textu z okna 
 */ 
Debug.prototype.clearDebug = function() {
  var objText = document.getElementById('text'+this._id);
  var doc = objText.contentWindow.document.body;
  doc.innerHTML = '';
  this.hideDebug();
} 

/**
 * htmlspecialchars
 */ 
Debug.prototype.htmlspecialchars = function (p_string) {
	p_string = p_string.replace(/&/g, '&amp;');
	p_string = p_string.replace(/</g, '&lt;');
	p_string = p_string.replace(/>/g, '&gt;');
	p_string = p_string.replace(/"/g, '&quot;');
//	p_string = p_string.replace(/'/g, '&#039;');
	return p_string;
}

/**
 * htmlspecialchars
 */ 
Debug.prototype.highlight = function (text) {
	text.indexOf();
	return p_string;
}


