/**
 *
 * @author Bernardo Rufino <bermonruf@gmail.com>
 * @license Creative Commons Developing Nations: http://creativecommons.org/licenses/devnations/2.0/
 * @version 1.1.070307
 * @description jRuf, a javascript library
 *
 *       !Não retire essas informações!
 */


//-----------------------------------------------------------------------------------//
//     CC: jRuf |    Prod Module: Productivity in Javascript
//-----------------------------------------------------------------------------------//


var bmr_extend_batch=new Array();

//-----------------------------------------------------------------------------------//

var DomMethods = {

	list: [],

	add: function(ename, method)
		{this.list.push([ename, method]);},

	remove: function()
		{var args=arguments;
		for(var i=0; i<arguments.length; i++)
			{this.list.each(function(array, index){
				if(array && array[0]==args[i]){DomMethods.list[index]=null;}
			});}
		this.list=this.list.compact();}

}

function extendDomBatch()
	{var objs=objDom("*","tag");
	for(var i=0; i<objs.length; i++)
		{var obj=objs[i];
		extendDom(obj, true);}}

function extendDom(id, from_dom_helper)
	{if(!from_dom_helper){var alvo=objDom(id);}
	else{var alvo=id;}
	DomMethods.list.each(function(array){
			alvo[array[0]]=array[1];
	});}

function extendDomOnload(name, method)
	{DomMethods.add(name, method);
	document[name]=method;}

function executeBatchDom()
	{extendDomBatch();}

//-----------------------------------------------------------------------------------//

/*function isset(param)
	{try{eval("bmr_param="+param); return true;}
	catch(e){return false;}}*/

//-----------------------------------------------------------------------------------//

function getContent(id)
	{var alvo=objDom(id);
	return alvo[getContentType(alvo)];}

function setContent(id, conteudo)
	{var alvo=objDom(id);
	alvo[getContentType(alvo)]=conteudo;
	return alvo;}

function addContent(id, conteudo, before)
	{var alvo=objDom(id);
	if(!before){alvo[getContentType(alvo)]+=conteudo;}
	else{alvo[getContentType(alvo)]=conteudo+alvo[getContentType(alvo)];}
	return alvo;}

function alternateContent(id, conteudo1, conteudo2)
	{var alvo=objDom(id); var cType=getContentType(alvo);
	if(alvo[cType]==conteudo1){alvo[cType]=conteudo2;}
	else{alvo[cType]=conteudo1;}
	return alvo;}

function getText(obj)
	{var alvo=objDom(obj); var text;
	if(alvo.innerText){text=alvo.innerText;}
	else if(alvo.textContent){text=alvo.textContent;}
	else if(getContentType(alvo)=="value"){text=alvo.value;}
	else{text=alvo[getContentType(alvo)].stripTags();} return text;}

function getContentType(id)
	{var alvo=objDom(id); var typeOf;
	var tag=alvo.tagName.toLowerCase();
	var values=new Array("input", "textarea");
	var srcs=new Array("img", "iframe", "frame", "script");
	//var selects= new Array("select");
	if(values.find(tag)){typeOf="value";}
	else if(srcs.find(tag)){typeOf="src";}
	//else if(selects.find(tag)){typeOf="options["+alvo.selectedIndex+"].innerHTML";}
	else if(alvo.innerHTML || alvo.innerHTML==""){typeOf="innerHTML"; }
	else {typeOf=false;}
	if(alvo.innerHTML && tag=="script"){typeOf="innerHTML";}
	return typeOf;}

var Content = {
	get: getContent,
	set: setContent,
	add: addContent,
	alternate: alternateContent,
	getType: getContentType,
	getText: getText
}

//-----------------------------------------------------------------------------------//

/*function valuesToQueryString(form, query)
	{var obj=objDom("*", "tag", objDom(form)); this.query=(query)?query:"";
	this.encodeQuery=function(n, v){this.query+=encodeURIComponent(n)+"="+encodeURIComponent(v)+"&";}
	for(var i=0; i<obj.length; i++)
		{var node=obj[i]; var tag=node.tagName.toLowerCase();
		try{var type=node.type.toLowerCase();}catch(e){}
		if (tag=="input")
			{if(type=="text" || type=="hidden" || type=="password" || type=="file")
				{this.encodeQuery(node.name, node.value);}
			else if(type=="checkbox" || type=="radio")
				{if(node.checked){this.encodeQuery(node.name, node.value);}}}
		else if(tag=="select"){this.encodeQuery(node.name, node.options[node.selectedIndex].value);}
		else if(tag=="textarea"){this.encodeQuery(node.name, node.value);}}
	return this.query.trimAnds();}

extendDomOnload("toQueryString", function(){return valuesToQueryString(this, "");})*/

//-----------------------------------------------------------------------------------//

/*function switchStyle(title, media)
	{var links=objDom("link", "tag");
	for(var i=0; i<links.length; i++)
		{var lnk=links[i];
		if(lnk.rel.toLowerCase().find("style") && lnk.title)
			{if(!media)
				{lnk.disabled=true;
				if(lnk.title==title){lnk.disabled=false;}}
			else if(lnk.media==media)
				{lnk.disabled=true;
				if(lnk.title==title){lnk.disabled=false;}}}}}

document.switchStyle=switchStyle; document.switchStyleSheet=switchStyle;

function applyCSS(content)
	{var head=objDom("head", "tag");
	style=document.createElement("style");
	style.type="text/css";
	if(style.styleSheet){style.styleSheet.cssText=content}
	else{style.appendChild(document.createTextNode(content));}
	head.appendChild(style);}

document.applyCSS=applyCSS; document.applyStyle=applyCSS;

function getStyle(id, style)
	{var alvo=objDom(id);
	var camelStyle=(style.charAt(0)!="-")?style.toCamelCase(null, true):style.toCamelCase();
	var value=alvo.style[camelStyle];
	if(!value) //Não é inline
		{if(window.getComputedStyle)
			{var def_css=document.defaultView.getComputedStyle(alvo, null);
			value=(def_css)?def_css.getPropertyValue(style):null;}
		else if(alvo.currentStyle){value=alvo.currentStyle[camelStyle];}}
	if(value && value instanceof String)
		{if(value.find("rgb") || value.find("#"))
			{value=value.toColorCode();}}
	return value;}

extendDomOnload("getStyle", function(s){return getStyle(this, s);})

function setStyle(id, style, value)
	{var alvo=objDom(id);
	var camelStyle=(style.charAt(0)!="-")?style.toCamelCase(null, true):style.toCamelCase();
	try{alvo.style[camelStyle]=value;}catch(e){}
	return alvo;}

extendDomOnload("setStyle", function(s, v){return setStyle(this, s, v);})

function css(id, style, value)
	{var alvo=objDom(id);
	if(value){return setStyle(alvo, style, value);}
	else{var type=typeof(style);
		if(type.toLowerCase()=="string"){return getStyle(id, style);}
		else if(type.toLowerCase()=="object")
			{for(property in style)
				{setStyle(alvo, property, style[property]);}}}
	return alvo;}

extendDomOnload("css", function(s,v){return css(this,s,v);})

function toHexColor(num)
	{var hex=num.toString(16);
	if(num<16){hex="0"+hex;}
	return hex;}

Number.prototype.toHexColor=function(){return toHexColor(this);};

function toColorCode(str)
	{var color_code="#";
	if(str.substr(0,3)=="rgb")
		{var rgb=str.substr(4,str.length-5).split(",");
		for(var i=0; i<rgb.length; i++)
			{color_code+=parseInt(rgb[i]).toHexColor()}}
	else if(str.find("#") && str.length==4)
		{str=str.substr(1);
		for(var i=0; i<3; i++)
			{color_code+=str.charAt(i)+str.charAt(i);}}
	else if(!str.find("#") && str.length==3)
		{for(var i=0; i<3; i++)
			{color_code+=str.charAt(i)+str.charAt(i);}}
	else if(str.length==7){color_code=str;}
	color_code=(color_code!="#"?color_code.toUpperCase():false);
	return color_code;}

String.prototype.toColorCode=function(){return toColorCode(this);};

function stripMeasure(str)
    {var vals=new Array("em", "ex", "px", "%", "pt", "pc", "mm", "cm", "in");
	for(var i=0; i<vals.length; i++)
		{str=str.replace(vals[i], "");}
	return str;}

String.prototype.stripMeasure=function(){return stripMeasure(this);};

function getMeasure(str)
    {var vals=new Array("em", "ex", "px", "%", "pt", "pc", "mm", "cm", "in");
	for(var i=0; i<vals.length; i++)
		{if(str.find(vals[i])){var measure=vals[i];}}
	return measure;}

String.prototype.getMeasure=function(){return getMeasure(this);};

function preloadImages()
	{document.preloadedImages=new Array(); var results=false;
	var args=arguments;
	for(var i=0; i<args.length; i++)
		{document.preloadedImages[i]=new Image();
		document.preloadedImages[i].src=args[i];
		results=true;}
	return results;}*/

//-----------------------------------------------------------------------------------//

/*function insertAfter(new_obj, exi_obj)
	{exi_obj=objDom(exi_obj);
	exi_obj.parentNode.insertBefore(new_obj, exi_obj.nextSibling);}

function insertBefore(new_obj, exi_obj)
	{exi_obj=objDom(exi_obj);
	exi_obj.parentNode.insertBefore(new_obj, exi_obj);}

function createObj(opts)
	{var opts=json(opts); opts.style=json(opts.style);
	if(opts.after || opts.before || opts.append)
		{if(opts.after){opts.after=objDom(opts.after);}
		else if(opts.before){opts.before=objDom(opts.before);}
		else if(opts.append){opts.append=objDom(opts.append);}}
	else{var theBody=objDom("body", "tag")[0];}
	var obj=document.createElement(opts.tag);
		if(opts.id){obj.id=opts.id;}
		if(opts.className){obj.className=opts.className;}
		if(opts.content){setContent(obj, opts.content);}
	if(theBody){theBody.appendChild(obj);}
	else{if(opts.after){insertAfter(obj, opts.after);}
		else if(opts.before){insertBefore(obj, opts.before);}
		else if(opts.append){opts.append.appendChild(obj);}}
	css(obj, opts.style);
	//Atribui os eventos aos objetos Dom inclusive o recém criado
	executeBatchDom();
	return obj;}*/

//-----------------------------------------------------------------------------------//

function getElementsByAttributeValue(attr, value, container, tag)
	{if(!container){var container=document;}
	var tag=(tag)?tag.toLowerCase():"*"; var elems=new Array();
	var objs=container.getElementsByTagName(tag);
	for(var i=0; i<objs.length; i++)
		{var obj=objs[i]; var attrv=null;
		if(obj[attr]){attrv=obj[attr];}
		else if(obj.getAttribute(attr)){attrv=obj.getAttribute(attr);}
		if(attrv && attrv==value){elems.push(obj);}}
	if(elems.length==0){elems=null;}
	return elems;}

document.getElementsByAttributeValue=function(a, v, t){return getElementsByAttributeValue(a, v, document, t);};
extendDomOnload("getElementsByAttributeValue", function(a, v, t){return getElementsByAttributeValue(a, v, this, t);})

function getElementsByClassName(className, container, tag)
	{var elems=getElementsByAttributeValue("class", className, container, tag);
	var objs=getElementsByAttributeValue("className", className, container, tag);
	return (elems)?elems:objs;}

document.getElementsByClassName=function(c, t){return getElementsByClassName(c, document, t);};
extendDomOnload("getElementsByClassName", function(c, t){return getElementsByClassName(c, this, t);})

function objDom(obj, type, container, get_first)
	{var elem=null; var obj_type=typeof(obj); obj_type=obj_type.toLowerCase();
	var container=(container)?objDom(container):document;
	var type=(type)?type.toLowerCase():"id";
	if(obj_type=="object" && isDom(obj)){elem=obj;}
	else if(obj_type=="string")
		{if(type=="id")
			{if(document.all){elem=document.all[obj];}
			else{elem=document.getElementById(obj);}}
		else if(type=="tag"){elem=container.getElementsByTagName(obj);}
		else if(type=="class"){elem=getElementsByClassName(obj, container);}
		else{elem=getElementsByAttributeValue(type, obj, container);}}
	//Extending the methods of the object
	if(elem && elem[0])
		{if(elem.length==1)
			{extendDom(elem[0], true);}
		else{for(var i=0; i<elem.length; i++)
				{extendDom(elem[i], true);}}
		if(get_first){elem=elem[0];}}
	else if(elem && isDom(elem)){extendDom(elem, true);}
	return elem;}

extendDomOnload("dom", function(o, t, g){return objDom(o, t, this, g);})

function $()
	{var objs=new Array; var args=arguments;
	if(args.length>1)
		{for(var i=0; i<args.length; i++)
			{objs.push(objDom(args[i]));}}
	else{return objDom(args[0]);}
	return objs;}

function $tag()
	{var objs=new Array; var args=arguments;
	if(args.length>1)
		{for(var i=0; i<args.length; i++)
			{objs.push(objDom(args[i], "tag"));}}
	else{return objDom(args[0], "tag");}
	return objs;}

function $class()
	{var objs=new Array; var args=arguments;
	if(args.length>1)
		{for(var i=0; i<args.length; i++)
			{objs.push(objDom(args[i], "class"));}}
	else{return objDom(args[0], "class");}
	return objs;}

function isDom(obj)
	{var results=false;	if(obj.tagName){results=true}
	return results;}

function remove(id)
	{var alvo=objDom(id);
	alvo.parentNode.removeChild(alvo);}

//-----------------------------------------------------------------------------------//

//Retirado de Cau Guanabara: http://cauguanabara.blogsome.com/2006/11/26/editinplace-editando-qualquer-elemento-html
/*function getPosition(id)
	{var alvo=objDom(id); var parent=alvo;
	for(var ol=alvo.offsetLeft, ot=alvo.offsetTop; parent=parent.offsetParent; )
		{ol+=parent.offsetLeft; ot+=parent.offsetTop;}
	return {x:parseInt(ol),y:parseInt(ot)};}
*/
//-----------------------------------------------------------------------------------//
/*
function addEvent(obj, type, fn)
	{if(obj.addEventListener)
		{obj.addEventListener(type, fn, false);
		//Last flag: Bubbling => false, Capturing => true
		results=true;}
	else if(obj.attachEvent)
		{results=obj.attachEvent("on"+type, fn);}
	else{if(obj["on"+type])
			{var old_ev=(obj["on"+type])?obj["on"+type]:function(){};
			obj["on"+type]=function(e){old_ev(e); fn(e);}
			results=true}}
	return results;}

function Event(e)
	{if(!e && window.event){var e=window.event;}
	if(e)
		{var source=(e.target)?e.target:e.srcElement;
		this.source=(source.nodeType==3)?source.parentNode:source;
		this.event=e; this.type=e.type;
		this.button=(e.button)?e.button:(e.which)?e.which-1:null;
		var x=0; var y=0; var doc=document;
		var abody=objDom("body", "tag");
		if(e.pageX && e.pageY)
			{x=e.pageX; y=e.pageY;}
		else if(e.clientX && e.clientY)
			{x=e.clientX; y=e.clientY;
			if(Browser.ie)
				{x+=(doc.documentElement)?doc.documentElement.scrollLeft:abody.scrollLeft;
				y+=(doc.documentElement)?doc.documentElement.scrollTop:abody.scrollTop;}}
		this.x=x; this.y=y;
		this.key={};
		this.key.code=(e.keyCode)?e.keyCode:(e.which)?e.which:(e.charCode)?e.charCode:null;
		this.key.character=(this.key.code && String.fromCharCode(this.key.code) && String.fromCharCode(this.key.code)!="")?String.fromCharCode(this.key.code):null;
		if(e.modifiers)
			{this.key.alt=Event.ALT_MASK;
			this.key.ctrl=Event.CONTROL_MASK;
			this.key.shift=Event.SHIFT_MASK;}
		else{this.key.alt=e.altKey;
			this.key.ctrl=e.ctrlKey;
			this.key.shift=e.shiftKey;}}}

Event.prototype.preventDefault=function()
	{if(this.event.preventDefault){this.event.preventDefault();}
	else{this.event.returnValue=false;}}

function link2event(findWhat, fnc, id, attr)
	{var container=(id)?objDom(id):objDom("body", "tag");
	var links=objDom("a", "tag", container);
	var attr=(attr)?attr:"href"; var results=false;
	for(var i=0;i<links.length; i++)
		{attr_value=links[i].getAttribute(attr);
		if(attr_value && attr_value.find(findWhat))
			{results=addEvent(links[i], "click", fnc);}}
	return results;}*/

//-----------------------------------------------------------------------------------//

function json(json)
	{if(!json){json={};}
	else if(typeof(json)=="string"){json=eval("("+json+")");}
	return json;}

//-----------------------------------------------------------------------------------//

function upto(init, end, iterator)
	{while(init<end){iterator(init); init++;}}

Number.prototype.upto=function(n,i){return upto(this,n,i);};

function stripTags(str)
	{return str.replace(/<\/?[^>]+>/gi, "");}

String.prototype.stripTags=function(){return stripTags(this);};

function trimAnds(query)
	{var last=query.charAt(query.length-1);
	if(last=="&"){query=query.substring(0, query.length-1);}
	if(query[0]=="&"){query=query.substring(1, query.length);}
	return query;}

String.prototype.trimAnds=function(){return trimAnds(this);};

function html2entities(str)
	{var keys=new Array("&", " ", "¡", "¢", "£", "¤", "¥", "¦", "§", "¨", "©", "ª", "«", "¬", "­", "®", "¯", "°", "±", "²", "³", "´", "µ", "¶", "·", "¸", "¹", "º", "»", "¼", "½", "¾", "¿", "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "Þ", "ß", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ý", "þ", "ÿ", "\"", "<", ">", "");
	var values=new Array("&amp;", "&nbsp;", "&iexcl;", "&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;", "&iquest;", "&Agrave;", "&Aacute;", "&Acirc;", "&Atilde;", "&Auml;", "&Aring;", "&AElig;", "&Ccedil;", "&Egrave;", "&Eacute;", "&Ecirc;", "&Euml;", "&Igrave;", "&Iacute;", "&Icirc;", "&Iuml;", "&ETH;", "&Ntilde;", "&Ograve;", "&Oacute;", "&Ocirc;", "&Otilde;", "&Ouml;", "&times;", "&Oslash;", "&Ugrave;", "&Uacute;", "&Ucirc;", "&Uuml;", "&Yacute;", "&THORN;", "&szlig;", "&agrave;", "&aacute;", "&acirc;", "&atilde;", "&auml;", "&aring;", "&aelig;", "&ccedil;", "&egrave;", "&eacute;", "&ecirc;", "&euml;", "&igrave;", "&iacute;", "&icirc;", "&iuml;", "&eth;", "&ntilde;", "&ograve;", "&oacute;", "&ocirc;", "&otilde;", "&ouml;", "&divide;", "&oslash;", "&ugrave;", "&uacute;", "&ucirc;", "&uuml;", "&yacute;", "&thorn;", "&yuml;", "&quot;", "&lt;", "&gt;", "");
	for(var i=0; i<keys.length; i++)
		{if(values[i]!="&nbsp;"){str=str.replace(keys[i], values[i]);}}
	return str;}

String.prototype.html2entities=function(){return html2entities(this);};
String.prototype.replaceEntities=function(){return html2entities(this);};

function toCamelCase(string, separator, first_lower)
	{var sep=false; var camelString="";
	var separators=new Array('-', ' ', '_');
	var orig_str=string.toString();
	string=string.toLowerCase();
	if(separator==null)
		{for(var i=0; i<separators.length; i++)
    		{if(string.find(separators[i])){sep=separators[i];}}}
	else{sep=separator;}
	if(!sep){camelString=orig_str;}
	else{string=string.split(sep);
		for(var i=0; i<string.length; i++)
			{var str=string[i];
			camelString+=str.charAt(0).toUpperCase()+str.substring(1);}}
	if(first_lower){camelString=camelString.charAt(0).toLowerCase()+camelString.substring(1);}
	return camelString;}

String.prototype.toCamelCase=function(s,f){return toCamelCase(this,s,f);};

function searchStr(busca, str)
	{if(str.replace(busca,"[%20]%e%r%r%o%r[%20]")==str){return false;}
	else{return true;}}

String.prototype.searchStr=function(s){return searchStr(s, this);};
String.prototype.find=function(s){return searchStr(s, this);};

function substrCount(str, search)
	{matches=0; match=true;
	while(match)
		{if(!str.find(search))
			{match=false;}
    	else{matches++;}
		str=str.replace(search,"error");}
	return matches;}

String.prototype.substrCount=function(s){return substrCount(this,s);};

String.prototype.last=function(){return this.charAt(this.length-1);};

//-----------------------------------------------------------------------------------//

function searchItem(array, witchItem)
	{var results=false;
	for(var i=0; i<array.length; i++)
		{var each=array[i];
		if (each==witchItem)
			{results=true;}}
	return results;}

Array.prototype.find=function(i){return searchItem(this, i);};

function lastArray(array)
	{return array[array.length-1];}

Array.prototype.last=function(){return lastArray(this);};

function firstArray(array)
	{return array[0];}

Array.prototype.first=function(){return firstArray(this);};

function indexOfArray(array, witchItem)
	{var results;
	if(array.find(witchItem))
		{for(var i=0; i<array.length; i++)
			{if(array[i]==witchItem)
				{indexNo=i;}}
		results=indexNo;}
	else{results=-1;} return results;}

Array.prototype.indexOf=function(i){return indexOfArray(this,i);};

function forEach(array, iterator)
	{if(!iterator){return [];}
	for(var i=0; i<array.length; i++)
		{var res=iterator(array[i], i);}
	return res;}

Array.prototype.each=function(i){return forEach(this,i);};

Array.prototype.add=function()
	{var array=this;
	var arrays=$A(arguments);
	for(var i=0; i<arrays.length; i++)
		{var arrayn=arrays[i];
		arrayn.each(function(elem, index){
			array.push(elem);
		});}
	return array;}

Array.prototype.flatten=function()
	{var results=new Array();
	for(var i=0; i<this.length; i++)
		{var elem=this[i];
		if(elem instanceof Array){results=results.add(elem.flatten())}
		else{results.push(elem);}}
	return results;}

function arrayCompact(array)
	{var new_array=new Array();
	for(var i=0; i<array.length; i++)
		{var elem=array[i];
		if(elem || elem===false){new_array.push(elem);}}
	return new_array;}

Array.prototype.compact=function(){return arrayCompact(this);};

function arrayFrom(list)
	{var results=[];
	if(list)
		{if(list.toArray){results=list.toArray();}
		else{for(var i=0; i<list.length; i++)
				{results.push(list[i]);}}}
	return results;}

function $a(l){return arrayFrom(l);}
function $A(l){return $a(l);}

Array.prototype.from=function(l){return arrayFrom(l);};

//-----------------------------------------------------------------------------------//

/*function tryThese()
	{var results=false; var args=arguments;
	for(var i=0; i<args.length; i++)
		{var fnc=args[i];
		try{results=fnc(); break;}
		catch(e){}}
	return results;}

var Try = {
	these: tryThese,
	each: tryThese
}*/

//-----------------------------------------------------------------------------------//

var bmr_nav=navigator.userAgent.toLowerCase();

var Browser = {
	name: navigator.appName,
	ie: bmr_nav.find("msie") && !bmr_nav.find("opera"),
	moz: bmr_nav.find("mozilla"),
	mozilla: bmr_nav.find("mozilla") && !bmr_nav.find(/(compatible|webkit)/),
	opera: bmr_nav.find("opera"),
	safari: bmr_nav.find("safari")
}

//-----------------------------------------------------------------------------------//
/*
function necessaryImages()
	{preloadImages(
		"http://i85.photobucket.com/albums/k43/bermonruf/sites_images/geral/window-up-bg.gif",
		"http://i85.photobucket.com/albums/k43/bermonruf/sites_images/geral/window-up-text-bg.gif",
		"http://i85.photobucket.com/albums/k43/bermonruf/sites_images/geral/button-bg.gif",
		"http://i85.photobucket.com/albums/k43/bermonruf/sites_images/geral/button-bg-over.gif",
		"http://i85.photobucket.com/albums/k43/bermonruf/sites_images/geral/button-bg-down.gif",
		"http://i85.photobucket.com/albums/k43/bermonruf/sites_images/geral/button-bg.gif"
	);}

addEvent(window, "load", function(){necessaryImages();})
addEvent(window, "load", extendDomBatch);*/


//-----------------------------------------------------------------------------------//
//     CC: jRuf |    Effects Module: User Interface Effects
//-----------------------------------------------------------------------------------//

/*
var loading_text="Carregando... Aguarde";
var bmr_global_alert=false;

//-----------------------------------------------------------------------------------//

//False->Down, True->Up
function Counter(id, secs, type)
	{this.id=Math.random().toString().replace(".","").substr(0,3)+""+(new Date()).getTime().toString();
	this.control=createObj({tag: "input", id: this.id, content: "stopped"});
	this.time=createObj({tag: "input", id: this.id+"secs", content: secs});
	this.control.setStyle("display", "none");
	this.time.setStyle("display", "none");
	this.alvo=objDom(id);
	this.type=(!type)?"down":"up";}

Counter.prototype.destroy=function()
	{setContent(this.control, "stopped");
	remove(this.control); remove(this.time);
	this.type=null; this.id=null;}

Counter.prototype.startStop=function()
	{if(getContent(this.control)=="running")
		{setContent(this.control, "stopped");}
	else if(getContent(this.control)=="stopped")
		{setContent(this.control, "running");
		if(this.type=="down")
			{if(!parseInt(getContent(this.alvo))){setContent(this.alvo, getContent(this.time));}
			decreaseCounter(this.control, getContent(this.alvo), this.alvo);}
		else{if(!parseInt(getContent(this.alvo))){setContent(this.alvo, "0");}
			increaseCounter(this.control, this.time, this.alvo);}}}

function decreaseCounter(control, time, alvo)
	{var secs=parseInt(time);
	if(getContent(control)=="running")
		{setContent(alvo, --secs);
		if(secs<=0){setContent(control, "stopped");}
		else{setTimeout(function(){decreaseCounter(control, secs, alvo);},1000);}}}

function increaseCounter(control, time, alvo)
	{var limit=parseInt(getContent(time)); var secs=parseInt(getContent(alvo));
	if(getContent(control)=="running")
		{setContent(alvo, ++secs);
		if(secs>=limit)
			{setContent(control, "stopped");}
		else{setTimeout(function(){increaseCounter(control, time, alvo);},1000);}}}

//-----------------------------------------------------------------------------------//

function showHideDelay(id, delay)
	{var alvo=objDom(id); bmr_old=getContent(alvo);
	if(alvo.getStyle("display")=="none")
		{setContent(alvo, loading_text);
		alvo.setStyle("display", "");
		setTimeout(function(){setContent(alvo, bmr_old);}, delay)}
	else{alvo.setStyle("display", "none");}}

extendDomOnload("showHideDelay", function(d){return showHideDelay(this,d);})

function showHide(id)
	{var alvo=objDom(id); var first=alvo.getFirst("display"); alvo.setFirst("display");
	alvo.setStyle("display",((alvo.getStyle("display")=="none")?(first!="none")?first:"":"none"));}

extendDomOnload("showHide", function(){return showHide(this);})
extendDomOnload("toggle", function(){return showHide(this);})

function show(id){objDom(id).setStyle("display",(((first=objDom(id).getFirst("display")) && first!="none")?first:""));}

extendDomOnload("show", function(){return show(this);})

function hide(id){objDom(id).setFirst("display"); objDom(id).setStyle("display", "none");}

extendDomOnload("hide", function(){return hide(this);})

var Display = {
	showHideDelay: showHideDelay,
	toggleDelay: showHideDelay,
	showHide: showHide,
	toggle: showHide,
	show: show,
	hide: hide
}

//-----------------------------------------------------------------------------------//

function getPageLimits()
	{var w="Width"; var h="Height";
	var iw="inner"+w; var ih="inner"+h;
	var ow="offset"+w; var oh="offset"+h;
	var cw="client"+w; var ch="client"+h;
	var sw="scroll"+w; var sh="scroll"+h;
	var px="pageXOffset"; var py="pageYOffset";
	var doc=document.documentElement;
	var abody=objDom("body", "tag");
	var sizes={width:0, height:0};
	this.pushSizes=function(w, h)
		{if(w>sizes.width){sizes.width=w;}
		if(h>sizes.height){sizes.height=h;}}
	if(window[iw] && window[ih]){this.pushSizes(window[iw], window[ih]);}
	if(window[px] && window[py]){this.pushSizes(window[px], window[py]);}
	if(abody[ow] && abody[oh]){this.pushSizes(abody[ow], abody[oh]);}
	if(abody[cw] && abody[ch]){this.pushSizes(abody[cw], abody[ch]);}
	if(abody[sw] && abody[sh]){this.pushSizes(abody[sw], abody[sh]);}
	if(doc[cw] && doc[ch]){this.pushSizes(doc[cw], doc[ch]);}
	return sizes;}*/

//-----------------------------------------------------------------------------------//
/*
function getFirst(id, attr)
	{var alvo=objDom(id); var results=false;
	if(alvo["orig_"+attr]){results=alvo["orig_"+attr];}
	return results;}

extendDomOnload("getFirst", function(s){return getFirst(this,s);})

function setFirst(id, attr)
	{var alvo=objDom(id); var results=true;
	if(!alvo["orig_"+attr]){alvo["orig_"+attr]=alvo.getStyle(attr);}
	return results;}

extendDomOnload("setFirst", function(s){return setFirst(this,s);})

function makeClipping(id)
	{var alvo=objDom(id); var results=null;
	if(!alvo.orig_overflow)
		{alvo.orig_overflow=alvo.getStyle("overflow") || "auto";
		alvo.setStyle("overflow", "hidden");
		results=alvo;}
	return results;}

extendDomOnload("makeClipping", function(){return makeClipping(this);})

function undoClipping(id)
	{var alvo=objDom(id); var results=null;
	if(alvo.orig_overflow)
		{alvo.setStyle("overflow", alvo.orig_overflow);
		alvo.orig_overflow=null;
		results=alvo;}
	return results;}

extendDomOnload("undoClipping", function(){return undoClipping(this);})

function Timeline(opts)
	{this.setup(opts);
	if(!document.timeline){document.timeline=new Array();}
	this.id=document.timeline.length;
	document.timeline.push({id:this.id,run:true});}

Timeline.prototype.setup=function(provided)
	{var provided=json(provided);
	this.fps=(provided.fps)?provided.fps:30;
	this.duration=(provided.duration)?parseInt(provided.duration):1000;
	this.oninitialize=(provided.oninitialize)?provided.oninitialize:function(){};
	this.oncomplete=(provided.oncomplete)?provided.oncomplete:function(){};
	this.onframes=(provided.onframes)?provided.onframes:function(){};
	this.nframes=parseInt(this.duration*this.fps/1000);
	this.frame=((pfr=provided.frame) && pfr instanceof Array)?pfr:new Array();
	this.interval=parseInt(1000/this.fps);
	this.frame[0]=(this.oninitialize)?this.oninitialize:function(){};
	this.frame[this.nframes+=1]=(this.oncomplete)?this.oncomplete:function(){};}

Timeline.prototype.setDelay=function(f,n){setTimeout(f,n);}

Timeline.prototype.play=function()
	{for(var frame=0; frame<=this.nframes; frame++)
		{this.frame[frame]=(this.frame[frame])?this.frame[frame]:this.onframes;
		this.setDelay(this.frame[frame],this.interval*frame);}}*/

//-----------------------------------------------------------------------------------//
/*
function getOpacity(id)
	{var alvo=objDom(id); var opacity=1.0;
	if(alvo.getStyle("filter"))
		{opacity=alvo.getStyle("filter").match(/alpha\(opacity=(.*)\)/)[1];
		if(opacity){opacity=parseFloat(opacity)/100;}}
	else if(alvo.getStyle("opacity")){opacity=parseFloat(alvo.getStyle("opacity"));}
	return opacity*10;}

extendDomOnload("getOpacity", function(){return getOpacity(this);})

function setOpacity(id, opacity)
	{var alvo=objDom(id); opacity=parseFloat(opacity);
	alvo.style.filter="alpha(opacity="+opacity*10+")";
	alvo.style.KhtmlOpacity=opacity/10;
	alvo.style.MozOpacity=opacity/10;
	alvo.style.opacity=opacity/10; return alvo;}

extendDomOnload("setOpacity", function(n){return setOpacity(this,n);})

//-----------------------------------------------------------------------------------//

function calculeIncrease(frames, from, to)
	{var increase=(Math.abs(to-from)/frames).toString();
	increase=parseFloat(increase.substring(0, increase.indexOf(".")+3));
	increase=(increase==0)?0.1:increase;
	increase=(from>to)?-increase:(from==to)?0:increase;
	return increase;}

//-----------------------------------------------------------------------------------//

var Slide = {

	down: function(id, opts)
		{return this.slide(id, opts, true);},

	up: function(id, opts)
		{return this.slide(id, opts, false);},

	downUp: function(id, opts)
		{if(objDom(id).offsetHeight<6){return this.down(id, opts);}
		else{return this.up(id, opts);}},

	toggle: function(id, opts)
		{return this.downUp(id, opts);},

	slide: function(id, opts, down)
		{var alvo=objDom(id); var opts=json(opts);
		makeClipping(alvo);
		var timeline=new Timeline(opts);
		var from=(opts.from || opts.from==0)?opts.from:(down)?0:alvo.offsetHeight;
		var to=(opts.to || opts.to==0)?opts.to:(down)?Size.getMax(alvo).height:0;
		var increase=calculeIncrease(timeline.nframes, from, to);
		opts.onframes=function()
			{from=from+increase;
			setStyle(alvo, "height", from+"px");}
		var oncomplete=opts.oncomplete || function(){};
		opts.oncomplete=function(){setStyle(alvo, "height", to+"px"); oncomplete();}
		timeline.setup(opts);
		timeline.play(); return alvo;}
}

extendDomOnload("slideDown", function(j){return Slide.down(this,j);})
extendDomOnload("slideUp", function(j){return Slide.up(this,j);})
extendDomOnload("slideDownUp", function(j){return Slide.downUp(this,j);})
extendDomOnload("slideToggle", function(j){return Slide.downUp(this,j);})
extendDomOnload("slide", function(j){return Slide.slide(this,j);})

//-----------------------------------------------------------------------------------//

function pulsate(id, opts)
	{var alvo=objDom(id); var dr=300; var opts=json(opts);
	opts.oncomplete=opts.oncomplete || function(){};
	this.fadeAll=function(fn){alvo.fadeOut({duration:dr,oncomplete:function(){alvo.fadeIn({duration:dr,oncomplete:fn})}								})}
	this.fadeAll(function(){this.fadeAll(opts.oncomplete)});
	return alvo;}

extendDomOnload("pulsate", function(j){return pulsate(this,j);})*/

//-----------------------------------------------------------------------------------//
/*
var Size = {

	getExtra: function(id, count_px)
		{var alvo=objDom(id); var extra={};
		if(count_px)//Só se o objeto tiver altura e largura em pixels
			{extra.width=alvo.offsetWidth-parseInt(getStyle(alvo,"width"));
			extra.height=alvo.offsetHeight-parseInt(getStyle(alvo,"height"));}
		else //Se não...
			{var pd="padding-"; var br="border-"; var mg="margin-"
			//Borders
			var bt=parseInt(getStyle(alvo, br+"top-width"));
			var bb=parseInt(getStyle(alvo, br+"bottom-width"));
			var bl=parseInt(getStyle(alvo, br+"left-width"));
			var br=parseInt(getStyle(alvo, br+"right-width"));
			//Paddings now
			var pt=parseInt(getStyle(alvo, pd+"top"));
			var pb=parseInt(getStyle(alvo, pd+"bottom"));
			var pl=parseInt(getStyle(alvo, pd+"left"));
			var pr=parseInt(getStyle(alvo, pd+"right"));
			//Margins now
			var mt=parseInt(getStyle(alvo, mg+"top"));
			var mb=parseInt(getStyle(alvo, mg+"bottom"));
			var ml=parseInt(getStyle(alvo, mg+"left"));
			var mr=parseInt(getStyle(alvo, mg+"right"));

			extra.top=bt+pt; extra.bottom=bb+pb;
			extra.left=bl+pl; extra.right=br+pr;
			extra.total={top: extra.top+mt, bottom: extra.bottom+mb,
				left: extra.left+ml, right: extra.right+mr};
			extra.width=extra.left+extra.right;
			extra.height=extra.top+extra.bottom;}
		return extra;},

	getMax: function(id)
		{var alvo=objDom(id); var results={};
		var height=getStyle(alvo, "height");
			setStyle(alvo, "height", "auto");
			results.height=alvo.offsetHeight;
		setStyle(alvo, "height", height);
		var width=getStyle(alvo, "width");
			setStyle(alvo, "width", "auto");
			results.width=alvo.offsetWidth;
		setStyle(alvo, "height", width);
		return results;},

	shrink: function(id, opts)
		{return this.change(id, opts, false);},

	grow: function(id, opts)
		{return this.change(id, opts, true);},

	growShrink: function(id, opts)
		{var alvo=objDom(id);
		if(alvo.offsetHeight<6 && alvo.offsetWidth<6){return this.grow(id, opts);}
		else{return this.shrink(id, opts);}},

	toggle: function(id, opts)
		{return this.growShrink(id, opts);},

	change: function(id, opts, grow)
		{var alvo=objDom(id); var opts=json(opts); makeClipping(alvo);
		var max_sizes=this.getMax(id); var increase={};
		var timeline=new Timeline(opts); var to={}; var from={};
		opts.to=opts.to || {}; opts.from=opts.from || {};
		to.height=(opts.to.height || opts.to.height==0)?opts.to.height:(grow)?max_sizes.height:0;
		to.width=(opts.to.width || opts.to.width==0)?opts.to.width:(grow)?max_sizes.width:0;
		from.height=(opts.from.height || opts.from.height==0)?opts.from.height:(grow)?0:alvo.offsetHeight;
		from.width=(opts.from.width || opts.from.width==0)?opts.from.width:(grow)?0:alvo.offsetWidth;
		increase.height=calculeIncrease(timeline.nframes, from.height, to.height);
		increase.width=calculeIncrease(timeline.nframes, from.width, to.width);
		opts.onframes=function()
			{from.height=from.height+increase.height;
			from.width=from.width+increase.width;
			setStyle(alvo, "height", from.height+"px");
			setStyle(alvo, "width", from.width+"px");}
		var oncomplete=opts.oncomplete || function(){};
		opts.oncomplete=function()
			{setStyle(alvo, "height", to.height+"px");
			setStyle(alvo, "width", to.width+"px"); oncomplete();}
		timeline.setup(opts);
		timeline.play(); return alvo;}
}

extendDomOnload("getMaxSize", function(){return Size.getMax(this);})
extendDomOnload("shrink", function(j){return Size.shrink(this,j);})
extendDomOnload("grow", function(j,b){return Size.grow(this,j,b);})
extendDomOnload("growShrink", function(j){return Size.growShrink(this,j);})
extendDomOnload("sizeToggle", function(j){return Size.toggle(this,j);})
extendDomOnload("changeSize", function(j){return Size.change(this,j);})

//-----------------------------------------------------------------------------------//

var Fade = {

	into: function(id, opts)
		{return this.fade(id, opts, false);},

	out: function(id, opts)
		{return this.fade(id, opts, true);},

	inOut: function(id, opts)
		{if(objDom(id).getOpacity()>8){return this.out(id, opts);}
		else{return this.into(id, opts);}},

	toggle: function(id, opts)
		{return this.inOut(id, opts);},

	fade: function(id, opts, out)
		{var alvo=objDom(id); var opts=json(opts);
		var from=(opts.from || opts.from==0)?opts.from:(out)?alvo.getOpacity():0;
		var to=(opts.to || opts.to==0)?opts.to:(out)?0:10;
		var timeline=new Timeline(opts);
		var increase=calculeIncrease(timeline.nframes, from, to);
		opts.onframes=function()
			{from=from+increase;
			setOpacity(alvo, from);}
		var oncomplete=opts.oncomplete || function(){};
		opts.oncomplete=function(){setOpacity(alvo, to); oncomplete();}
		timeline.setup(opts);
		timeline.play(); return alvo;}
}

extendDomOnload("fadeIn", function(j){return Fade.into(this,j);})
extendDomOnload("fadeOut", function(j){return Fade.out(this,j);})
extendDomOnload("fade", function(j){return Fade.fade(this,j);})
extendDomOnload("fadeInOut", function(j){return Fade.fadeInOut(this,j);})
extendDomOnload("fadeToggle", function(j){return Fade.toggle(this,j);})
*/
//-----------------------------------------------------------------------------------//
/*
function Dialog(content, opts)
	{this.setup(opts, content);	this.createBlur();
	var box=createObj({tag:"div", className: this.classname, content: this.content});
	if(this.append){box.appendChild(this.append);}
	var bgcolor=box.css("background-color"); this.box=box;
	box.dialog={width:this.width,height:this.height};
	this.bgcolor=(bgcolor.toLowerCase()=="transparent")?this.bgcolor:bgcolor;
	css(box, {
		visibility: this.visibility, overflow: "auto",
		position: "absolute",
		backgroundColor: this.bgcolor,
		zIndex: this.zindex
	}); css(box, this.style);
	this.resize(this.width, this.height);}

Dialog.prototype.setup=function(provided, content)
	{var provided=json(provided);
	try{this.opacity=parseInt(provided.opacity);}catch(e){this.opacity=5}
	this.style=json(provided.style);
	this.blur_style=json(provided.blur_style);
	this.zindex=(provided.zindex)?parseInt(provided.zindex):1001;
	this.blurbox=(provided.blurbox===false)?provided.blurbox:true;
	var autosize=(provided.autosize || provided.autosize===false)?provided.autosize:true;
	this.content=(!content)?"":content;
	this.append=(isDom(this.content))?this.content:false;
	if(isDom(this.content)){this.content="";}
	if(autosize)//Getting the minimun size for the provided content
		{var temp=createObj({tag:"div", content:this.content});
		temp.setAttribute("style","float:left;"); setOpacity(temp, 0);
		var sizes=Size.getMax(temp); remove(temp);}
	//I get the size! or if you dont want, default!
	else{var sizes={width:400,height:350};}
	//Autosize done.
	this.width=(provided.width)?parseInt(provided.width):parseInt(sizes.width);
	this.height=(provided.height)?parseInt(provided.height):parseInt(sizes.height);
	this.bgcolor=(provided.bgcolor)?provided.bgcolor:"#FFFFFF";
	this.opacity=(provided.opacity)?parseInt(provided.opacity):5;
	this.classname=(provided.classname)?provided.classname:"dialog-box";
	this.blur_classname=(provided.blur_classname)?provided.blur_classname:"dialog-blur";
	this.blur_bgcolor=(provided.blur_bgcolor)?provided.blur_bgcolor:"#000000";
	this.visible=(provided.visible===false)?provided.visible:true;
	this.visibility=(provided.visibility)?provided.visibility:(this.visible)?"visible":"hidden";}

Dialog.prototype.createBlur=function()
	{if(this.blurbox)
		{var page=getPageLimits();
		var blur_box=createObj({tag: "div", className: this.blur_classname});
		var bgcolor=blur_box.css("background-color");
		this.blur_bgcolor=(bgcolor.toLowerCase()=="transparent")?this.blur_bgcolor:bgcolor;
		setOpacity(blur_box, this.opacity); css(blur_box, {
			visibility: this.visibility,
			position: "absolute", zIndex: "1",
			width: page.width+"px",
			height: page.height+"px",
			backgroundColor: this.blur_bgcolor,
			left: "0px", top: "0px"
		});
		css(blur_box, this.blur_style);
		this.blur_box=blur_box; return blur_box;}}

Dialog.prototype.resize=function(width, height, free_resize)
	{this.width=parseInt(width);
	this.height=parseInt(height);
	var extra=Size.getExtra(this.box, true);
	//The margins must be ugly because the browser has to render it fast
	var margin_left=(!free_resize)?"-"+parseInt((width+extra.width)/2)+"px":css(this.box, "margin-left");
	var margin_top=(!free_resize)?"-"+parseInt((height+extra.height)/2)+"px":css(this.box, "margin-top");
	css(this.box, {
		width: this.width+"px", height: this.height+"px",
		marginLeft: margin_left, marginTop: margin_top,
		left: "50%", top: "50%"
	}); return this.box;}

Dialog.prototype.resizeEffect=function(width, height, opts)
	{var opts=json(opts); var increase={}; var timeline=new Timeline(opts); var box=this.box;
	box.dialog.height=parseInt(css(box, "height")); box.dialog.width=parseInt(css(box, "width"));
	increase.height=calculeIncrease(timeline.nframes, box.dialog.height, height);
	increase.width=calculeIncrease(timeline.nframes, box.dialog.width, width);
	var free_resize=(opts.free_resize)?opts.free_resize:false;
	var dialog=this;
	opts.onframes=function()
		{box.dialog.height=box.dialog.height+increase.height;
		box.dialog.width=box.dialog.width+increase.width;
		dialog.resize(box.dialog.width, box.dialog.height, free_resize);}
	var oncomplete=opts.oncomplete || function(){};
	opts.oncomplete=function(){dialog.resize(width, height, free_resize); oncomplete();}
	timeline.setup(opts);
	timeline.play();}

Dialog.prototype.show=function()
	{setStyle(this.box, "visibility", "visible");
	setStyle(this.blur_box, "visibility", "visible");
	return this.box;}

Dialog.prototype.close=function()
	{setStyle(this.box, "visibility", "hidden");
	setStyle(this.blur_box, "visibility", "hidden");
	return this.box;}

Dialog.prototype.remove=function()
	{remove(this.box);
	remove(this.blur_box);
	return this.box;}*/


//-----------------------------------------------------------------------------------//
//     CC: jRuf |    Dynamic Module: Dynamism (Ajax, Drag and Drop)
//-----------------------------------------------------------------------------------//


var ajax_loading_text="<p class=\"ajax-carregando\"><img src=\"http://i85.photobucket.com/albums/k43/bermonruf/net/carregando.gif\" width=\"16\" height=\"16\" /> Carregando... Aguarde</p>";

//-----------------------------------------------------------------------------------//

function requestAjax(url, opts){
	var results=false;
//	alert(url);
	opts=executeOptions(opts, "get");
	var com=setUrlParams(url, opts, false);
	opts.params=com.params; url=com.url;
	var xmlhttp=getTransfer();
	if(xmlhttp){
		xmlhttp.onreadystatechange=function(){treatRequest(xmlhttp, opts);}
		xmlhttp.open(opts.method, url, true);
		setRequestHeaders(xmlhttp, opts);
		xmlhttp.send(opts.params);
		results=true;
	}
	return results;
}

function getAjax(url, opts){
	var results=false;
	opts=executeOptions(opts, "get");
	var com=setUrlParams(url, opts, false);
	opts.params=com.params; url=com.url;
	var xmlhttp=getTransfer();
	if(xmlhttp)
		{xmlhttp.onreadystatechange=function(){treatRequest(xmlhttp, opts);}
		xmlhttp.open("get", url, true);
		setRequestHeaders(xmlhttp, opts);
		xmlhttp.send(null);
		results=true;}
	return results;}

function postAjax(url, opts)
	{
		
		
		var results=false;
	opts=executeOptions(opts, "post");
	var com=setUrlParams(url, opts, false);
	opts.params=com.params; url=com.url;
	var xmlhttp=getTransfer();
	if(xmlhttp)
		{xmlhttp.open("post", url, true);
		setRequestHeaders(xmlhttp, opts);
		xmlhttp.send(opts.params);
		xmlhttp.onreadystatechange=function(){treatRequest(xmlhttp, opts);}
		results=true;}
	return results;}

function getTransfer()
	{var xmlhttp=null; //Ou coloque false
	if(typeof(XMLHttpRequest)!="undefined"){xmlhttp=new XMLHttpRequest();}
    var opts=new Array('Microsoft.XMLHTTP','Msxml2.XMLHTTP','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0');
    for(var i=0;i<opts.length;i++)
		{try{xmlhttp=new ActiveXObject(opts[i]);}
		catch(e){}}
    return xmlhttp;}

Browser.ajax=(!getTransfer)?false:true;

//-----------------------------------------------------------------------------------//

function domLoadAjax(url, id, opts)
	{opts=executeOptions(opts, "get"); var alvo=objDom(id);
	var old_fnc=opts.onsucess;
	this.showAt=function(xmlhttp){
		extraiScript(xmlhttp.responseText);
//		alert(url);
//		alert(xmlhttp.responseText);
		setTimeout("EscondeCarregando()", 900);
		setContent(alvo, xmlhttp.responseText); executeBatchDom(); old_fnc(xmlhttp);
		setTimeout("EscondeCarregando()", 900);
	}
	opts.onsucess=this.showAt; return requestAjax(url, opts);}

extendDomOnload("load", function(u, o){domLoadAjax(u, this, o);})

function extraiScript(texto){
//Maravilhosa função feita pelo SkyWalker.TO do imasters/forum
//http://forum.imasters.com.br/index.php?showtopic=165277&
    // inicializa o inicio ><
    var ini = 0;
    // loop enquanto achar um script
    while (ini!=-1){
        // procura uma tag de script
        ini = texto.indexOf('<script', ini);
        // se encontrar
        if (ini >=0){
            // define o inicio para depois do fechamento dessa tag
            ini = texto.indexOf('>', ini) + 1;
            // procura o final do script
            var fim = texto.indexOf('</script>', ini);
            // extrai apenas o script
            codigo = texto.substring(ini,fim);
            // executa o script
            //eval(codigo);
            /**********************
            * Alterado por Micox - micoxjcg@yahoo.com.br
            * Alterei pois com o eval não executava funções.
            ***********************/
            novo = document.createElement("script")
            novo.text = codigo;
            document.body.appendChild(novo);
        }
    }
}
//-----------------------------------------------------------------------------------//

function executeOptions(provided, prmethod)
	{var opts={}; var provided=json(provided);
	opts.onreadystate=(provided.onreadystate)?provided.onreadystate:function(){};
	opts.onloading=(provided.onloading)?provided.onloading:function(){};
	opts.onloaded=(provided.onloaded)?provided.onloaded:function(){};
	opts.oninteractive=(provided.oninteractive)?provided.oninteractive:function(){};
	opts.oncompleted=(provided.oncompleted)?provided.oncompleted:(provided.oncomplete)?provided.oncomplete:function(){};
	opts.onsucess=(provided.onsucess)?provided.onsucess:function(){};
	opts.onfailure=(provided.onfailure)?provided.onfailure:treatError;
	opts.params=(provided.params)?provided.params:null;
	opts.method=(provided.method)?provided.method.toLowerCase():prmethod.toLowerCase();
	opts.form=(provided.form)?provided.form:false;
	return opts;}

function setRequestHeaders(xmlhttp, opts)
	{var requestHeaders=new Array(
		"Pragma", "no-cache",
		"Cache-Control", "no-cache",
		"X-Requested-With", "XMLHttpRequest");
	if(opts.method=="post")
		{requestHeaders.push("Content-type", "application/x-www-form-urlencoded");
		requestHeaders.push("Content-length", opts.params.length);}
	for(var i=0; i<requestHeaders.length; i+=2)
		{xmlhttp.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);}}

function setUrlParams(url, opts, anticache)
	{opts.params=(opts.params)?opts.params.trimAnds()+"&":""; url=url.trimAnds();
	if(opts.form){opts.params+=objDom(opts.form).toQueryString();}
	if(opts.method=="get")
		{if(opts.params!="")
			{if(url.last()!="?"){url+=((url.find("?"))?"&":"?")+opts.params;}
			else{url+=opts.params;}}
		opts.params=null;}
	if(anticache)
		{var complx="complx"+encodeURI(Math.random().toString().replace(".","")+"="+(new Date()).getTime());
		if(url.last()!="?"){url+=((url.find("?"))?"&":"?")+complx;}
		else{url+=complx;}}
	return {url:url, params:opts.params}}


//-----------------------------------------------------------------------------------//

function treatError(xmlhttp)
	{var erro=xmlhttp.status;
	switch(erro)
		{case 0: erro="Erro indefinido de Javascript"; break;
         case 400: erro="Erro 400: Solicitação incompreensível"; break;
         case 403: case 404: erro="404: A página solicitada não foi encontrada"; break;
         case 405: erro="Erro 405: O servidor não suporta a requisição solicitada"; break;
         case 500: erro="Erro 500: Erro desconhecido do servidor"; break;
         case 503: erro="Erro 503: Servidor sobrecarregado"; break;
         default: erro="Erro "+erro; break;}
	alert(erro);}

function treatRequest(xmlhttp, opts)
	{opts.onreadystate(xmlhttp);
	if(xmlhttp.readyState==1)
		{opts.onloading(xmlhttp);}
	else if(xmlhttp.readyState==2)
		{opts.onloaded(xmlhttp);}
	else if(xmlhttp.readyState==3)
		{opts.oninteractive(xmlhttp);}
	else if(xmlhttp.readyState==4)
		{if(xmlhttp.status==200){opts.onsucess(xmlhttp);}
		else{opts.onfailure(xmlhttp);}

		opts.oncompleted(xmlhttp);}}

//-----------------------------------------------------------------------------------//

var Ajax = {
	get: getAjax,
	post: postAjax,
	request: requestAjax
}

//Desenvolvido por Bernardo Rufino, Developed by Bernardo Rufino

//-----------------------------------------------------------------------------------//

/*function Draggable(drag, down, opts)
	{var drag=makeAbsolute(drag);
	if(objDom(down) && isDom(objDom(down)))
		{var opts=this.setup(opts);
		var down=objDom(down);}
	else{var opts=this.setup(down); var down=drag;}
	var draghash={drag:drag,down:down,opts:opts,draggable:this,ok:true}
	Draggables.objects.push(drag);
	Draggables.drags.push(draghash);
	addEvent(down, "mousedown", function(e){
		var e=new Event(e); var pos=getPosition(drag);
		var extra=Size.getExtra(drag);
		draghash.offset={x:((e.x-pos.x)+extra.total.left),y:((e.y-pos.y)+extra.total.top)};
		Draggables.active=draghash;
		opts.oninitialize();
		Observables.oninitialize(e.event);
	}); this.drag=drag;	return drag;}

Draggable.prototype.setup=function(provided)
	{var opts={}; var provided=json(provided);
	opts.oninitialize=(provided.oninitialize)?provided.oninitialize:function(){};
	opts.ondrag=(provided.ondrag)?provided.ondrag:function(){};
	opts.ondrop=(provided.ondrop)?provided.ondrop:function(){};
	opts.dragzindex=(provided.dragzindex)?provided.dragzindex:false;
	opts.restorezindex=(provided.restorezindex)?provided.restorezindex:false;
	opts.dropon=(provided.dropon)?provided.dropon:false;
	opts.filters=this.setupFilters(provided.filters);
	this.opts=opts; return opts;}

Draggable.prototype.setupFilters=function(filters)
	{var thefilters={};
	if(filters)
		{var allow_filters=[
			"axis",
			"maxleft", "maxright",
			"maxtop", "maxbottom",
		];
		var allfilters=allow_filters.flatten();
		for(filter in filters)
			{var value=filters[filter];
			if(allfilters.find(filter.toLowerCase()))
				{thefilters[filter]=value;}}}
	return thefilters;}

Draggable.prototype.move=function(x, y, e)
	{var filters=this.opts.filters; var move={left:true,top:true};
	if((axis=filters.axis))
		{if(axis=="vertical"){move.left=false;}
		else if(axis=="horizontal"){move.top=false;}}
	if(filters.maxleft && !(x>filters.maxleft)){move.left=false;}
	if(filters.maxright && !(x+parseInt(this.drag.offsetWidth)<filters.maxright))
		{move.left=false;}
	if(filters.maxtop && !(y>filters.maxtop)){move.top=false;}
	if(filters.maxbottom && !(y+parseInt(this.drag.offsetHeight)<filters.maxbottom))
		{move.top=false;}
	if(move.top){this.drag.style.top=y+"px";};
	if(move.left){this.drag.style.left=x+"px";};}
*/
//-----------------------------------------------------------------------------------//

/*function makeAbsolute(id)
	{var alvo=objDom(id);
	if(css(alvo, "position")!="absolute")
		{var pos=getPosition(alvo);
		css(alvo, {
			margin: "0px", position: "absolute",
			left: pos.x+"px", top: pos.y+"px", zIndex: "0"
		});}
	setFirst(alvo, "z-index"); return alvo;}

document.onmousemove=function(e)
	{if(Draggables.active.ok)
		{var draghash=Draggables.active;
		var drag=draghash.drag;
		var e=new Event(e);
		draghash.opts.ondrag(e.event);
		Observables.ondrag(drag, e.event);
		Droppables.onhover(drag, e); //"e" não é o objeto do evento, mas o personalizado
		Droppables.onout(drag, e); //"e" não é o objeto do evento, mas o personalizado
		draghash.draggable.move((e.x-draghash.offset.x), (e.y-draghash.offset.y), e);}}

document.onmouseup=function(e)
	{if(Draggables.active.ok)
		{var e=new Event(e);
		var draghash=Draggables.active;
		var drag=draghash.drag;
		//if(drag.opts.restorezindex){setStyle(alvo, "z-index",alvo.getFirst("z-index"));}
		//if(drag.opts.dropon){css(alvo, {left: drag.opts.dropon.x+"px", top: drag.opts.dropon.y+"px"});}
		draghash.opts.ondrop(e.event);
		Observables.ondrop(drag, e.event);
		Droppables.ondrop(drag, e); //"e" não é o objeto do evento, mas o personalizado
		Draggables.inactivate();}}
*/
//-----------------------------------------------------------------------------------//
/*
var Observables = {

	observers: [],

	add: function(observer)
		{var observers=arguments;
		for(var i=0; observer=observers[i]; i++)
			{this.observers.push(this.setup(observer));}
		return this.observers;},

	setup: function(provided)
		{var observer={}; provided=json(provided);
		observer.oninitialize=(provided.oninitialize)?provided.oninitialize:function(){};
		observer.ondrag=(provided.ondrag)?provided.ondrag:function(){};
		observer.ondrop=(provided.ondrop)?provided.ondrop:function(){};
		return observer;},

	iterate: function(fnc)
		{if(this.observers.length>0)
			{this.observers.each(function(observer, index)
				{fnc(observer, index);});}},

	oninitialize: function(drag, e) //Just used inside the framework! Don't use it!
		{this.iterate(function(observer){observer.oninitialize(drag, e);});},

	ondrag: function(drag, e) //Just used inside the framework! Don't use it!
		{this.iterate(function(observer){observer.ondrag(drag, e);});},

	ondrop: function(drag, e) //Just used inside the framework! Don't use it!
		{this.iterate(function(observer){observer.ondrop(drag, e);});}

}
*/
//-----------------------------------------------------------------------------------//

/*var Droppables = {

	objects: [],

	drops: [],

	hover_buffer: null,

	add: function(drop, opts)
		{opts=this.setup(opts); drop=objDom(drop);
		var pos=getPosition(drop); var x={}; var y={};
		//Coordenadas do lado direito e esquerdo do objeto
		x.end=pos.x+parseInt(drop.offsetWidth); x.begin=pos.x;
		//Coordenadas do lado de baixo e de cima do objeto
		y.end=pos.y+parseInt(drop.offsetHeight); y.begin=pos.y;
		this.objects.push(drop);
		this.drops.push({drop:drop,opts:opts,coords:{x:x,y:y}});
		},

	setup: function(provided)
		{var opts={}; provided=json(provided);
		opts.onhover=(provided.onhover)?provided.onhover:function(){};
		opts.ondrop=(provided.ondrop)?provided.ondrop:function(){};
		opts.onout=(provided.onout)?provided.onout:function(){};
		return opts;},

	iterate: function(fnc)
		{if(this.drops.length>0)
			{this.drops.each(function(drop, index)
				{fnc(drop, index);});}},

	onhover: function(drag, e) //Just used inside the framework! Don't use it!
		{this.iterate(function(drop)
			{var x=drop.coords.x; var y=drop.coords.y;
			if(e.x > x.begin && e.x < x.end && e.y > y.begin && e.y < y.end)
				{drop.opts.onhover(drag, e.event); Droppables.hover_buffer=drop;}});},

	onout: function(drag, e) //Just used inside the framework! Don't use it!
		{if(this.hover_buffer)
			{var drop=this.hover_buffer;
			var x=drop.coords.x; var y=drop.coords.y;
			if(e.x < x.begin || e.x > x.end || e.y < y.begin || e.y > y.end)
					{drop.opts.onout(drag, e.event); Droppables.hover_buffer=null;}}},

	ondrop: function(drag, e) //Just used inside the framework! Don't use it!
		{this.iterate(function(drop)
			{var x=drop.coords.x; var y=drop.coords.y;
			if(e.x > x.begin && e.x < x.end && e.y > y.begin && e.y < y.end)
				{drop.opts.ondrop(drag, e.event);}});}

}

//-----------------------------------------------------------------------------------//

var Draggables = {

	objects: [],

	drags: [],

	active: {drag: null, offset: {x:0,y:0}, opts: {}, ok: false},

	inactivate: function()
		{this.active={drag: null, offset: {x:0,y:0}, opts: {}, ok: false};},

	add: function(drag, down, opts)
		{return new Draggable(drag, down, opts);}

}
*/
//-----------------------------------------------------------------------------------//


//-----------------------------------------------------------------------------------//
//     CC: jRuf |    A Javascript Library made by Bernardo Rufino
//-----------------------------------------------------------------------------------//


