/*
 * RPC DHTML bibliotecas Re-Utilizaveis
 * @autor: Cássio Vinícius Leguizamon Bueno 
*/

if (typeof RPC == 'undefined') {
  /**
   * Namespace definition.
   * @constructor
   */
  RPC = {};
}

/**
 * @constructor
 */
RPC.Utils = {};


// detect Opera browser
RPC.is_opera = /opera/i.test(navigator.userAgent);
// detect a special case of "web browser"
RPC.is_ie = ( /msie/i.test(navigator.userAgent) && !RPC.is_opera );
// detect IE5.0/Win
RPC.is_ie5 = ( RPC.is_ie && /msie 5\.0/i.test(navigator.userAgent) );
// detect IE for Macintosh
RPC.is_mac_ie = ( /msie.*mac/i.test(navigator.userAgent) && !RPC.is_opera );
// detect KHTML-based browsers
RPC.is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent);
// detect Konqueror
RPC.is_konqueror = /Konqueror/i.test(navigator.userAgent);
// detect Gecko
RPC.is_gecko = /Gecko/i.test(navigator.userAgent);


/**
  * Cria um elemento de algum tipo(HTML) usando document.createElement(). 
  * Esta funÃ§Ã£o criar um elemento do tipo dado e ajustar-lhe-? determinadas 
  * propriedades de :unselectable para o IE, e o CSS ?- moz-user-selecionar? 
  * para o Gecko de, a fim fazer o elemento unselectable nestes browsers. 
  * Opcionalmente, se o segundo argumento for passado, appendChild () o elemento 
  * recentemente criado de a seu pai.
  * 
  * @param type [string] Nome da Tag html a ser criado.
  * @param parent [HTMLElement, Opcional] o parent para o novo elemento.
  * @param selectable [boolean] A flag para indicar o element a ser selectable.
  * @return [HTMLElement] Referencia para o novo elemento.
  */
RPC.Utils.createElement = function(type, parent, selectable) {
	var el = null;
	if (window.self.document.createElementNS)
		el = window.self.document.createElementNS("http://www.w3.org/1999/xhtml", type);
	else
		el = window.self.document.createElement(type);
	if (typeof parent != "undefined" &&parent != null)
		parent.appendChild(el);
	if (!selectable) {
		if (RPC.is_ie)
			el.setAttribute("unselectable", true);
		if (RPC.is_gecko)
			el.style.setProperty("-moz-user-select", "none", "");
	}
	return el;
};
/**
 * Monta String Form HttpRequest.
 * Proposito desta funÃ§Ã£o e montar de forma automÃ¡tica a string para
 * o JSON interpretar.
 * A funÃ§Ã£o faz uma varredura em todos elementos do form menos elementos
 * do tipo file.
 *
 * @param {Form} Form
 * @return [string] Retorna uma String montando o name do input e seu value.
 */
RPC.Utils.createStrContent = function(objForm) {

	var strContent = null;
	var els = objForm.elements; 
	for(i=0; i<els.length; i++){
		if(els.type != "file")
			strContent = ((i>0)? strContent+"&"+els[i].name+"="+this.replaceStr(els[i].value) : els[i].name+"="+this.replaceStr(els[i].value) );
	}
	return strContent;
};

/**
 *
 * Efetua o replace de string incompatÃ­veis com o post via Ajax
 *
 * @param {String} String a ser convertida
 * @return [string] Retorna a nova string
 *
*/
RPC.Utils.replaceStr = function(newString){

/*	var chars = new Array ('&','\\+');
	var hex = new Array ('%26','%2B');

	for (var i = 0; i < chars.length; i++)
	{
		myRegExp = new RegExp();
		myRegExp.compile(chars[i],'g')
		newString = newString.replace (myRegExp, hex[i]);
	}*/
	return newString
};

/**
 * htmlEntities
 *
 * Converte todos os caracteres para HTML entities 
 *
 * @param {String} String a ser convertida
 * @return [string] Retorna a nova string
 */

RPC.Utils.htmlEntities = function(newString)
{
 var chars = new Array ('&','Ã ','Ã¡','Ã¢','Ã£','Ã¤','Ã¥','Ã¦','Ã§','Ã¨','Ã©',
                         'Ãª','Ã«','Ã¬','Ã­','Ã®','Ã¯','Ã°','Ã±','Ã²','Ã³','Ã´',
                         'Ãµ','Ã¶','Ã¸','Ã¹','Ãº','Ã»','Ã¼','Ã½','Ã¾','Ã¿','Ã€',
                         'Ã','Ã‚','Ãƒ','Ã„','Ã…','Ã†','Ã‡','Ãˆ','Ã‰','ÃŠ','Ã‹',
                         'ÃŒ','Ã','ÃŽ','Ã','Ã','Ã‘','Ã’','Ã“','Ã”','Ã•','Ã–',
                         'Ã˜','Ã™','Ãš','Ã›','Ãœ','Ã','Ãž','â‚¬','\"','ÃŸ','<',
                         '>','Â¢','Â£','Â¤','Â¥','Â¦','Â§','Â¨','Â©','Âª','Â«',
                         'Â¬','Â­','Â®','Â¯','Â°','Â±','Â²','Â³','Â´','Âµ','Â¶',
                         'Â·','Â¸','Â¹','Âº','Â»','Â¼','Â½','Â¾');




  var entities = new Array ('amp','agrave','aacute','acirc','atilde','auml','aring',
                            'aelig','ccedil','egrave','eacute','ecirc','euml','igrave',
                            'iacute','icirc','iuml','eth','ntilde','ograve','oacute',
                            'ocirc','otilde','ouml','oslash','ugrave','uacute','ucirc',
                            'uuml','yacute','thorn','yuml','Agrave','Aacute','Acirc',
                            'Atilde','Auml','Aring','AElig','Ccedil','Egrave','Eacute',
                            'Ecirc','Euml','Igrave','Iacute','Icirc','Iuml','ETH','Ntilde',
                            'Ograve','Oacute','Ocirc','Otilde','Ouml','Oslash','Ugrave',
                            'Uacute','Ucirc','Uuml','Yacute','THORN','euro','quot','szlig',
                            'lt','gt','cent','pound','curren','yen','brvbar','sect','uml',
                            'copy','ordf','laquo','not','shy','reg','macr','deg','plusmn',
                            'sup2','sup3','acute','micro','para','middot','cedil','sup1',
                            'ordm','raquo','frac14','frac12','frac34');

  if(newString != undefined && newString!=""){
	  for (var i = 0; i < chars.length; i++)
	  {
	    myRegExp = new RegExp();
	    myRegExp.compile(chars[i],'g')
	    newString = newString.replace (myRegExp, '&' + entities[i] + ';');
	  }
  }	  
  return newString;
}
