 Element.implement({
	allPage: function(Tipo) {
		if (Tipo) this.setStyle(Tipo,'99.9%');
		else {
			this.setStyles({'width':'100%','height':'100%'});
			document.overflow('hide');
		}
		return this;
	},
	centerMe: function() {
		document.getSize();
		var myW = this.getStyle('width').toInt();
		var myH = this.getStyle('height').toInt();
		var winW = document.Outer.width.toInt();
		var winH = document.Inner.height.toInt();
		this.setStyle('left',(winW/2)-(myW/2));
		this.setStyle('top',(winH/2)-(myH/2));
		return this;
	},
	getOptByText: function(text) {
		var tag = this.get('tag'); if (tag != 'select') return 0;
		var Opt;
		Array.each(this.options,function(item,index) {if (item.text == text) Opt = item; });
		return Opt;		
	},
	getOptByValue: function(value) {
		var tag = this.get('tag'); if (tag != 'select') return 0;
		var Opt;
		Array.each(this.options,function(item,index) {if (item.value == value) Opt = item; });
		return Opt;		
	},
	addHeight: function(value) {
		if ($type(this) == 'element') {
			var Hnow = this.getStyle('height').toInt();
			var Hnew = Hnow + value;
			this.setStyle('height',Hnew);
		}
	},	
	atualizaAltura: function() {
		var Alt_Atual = this.getStyle('height').toInt();				
		var Alt_Real = this.getScrollSize()['y'];
		if (Alt_Real > Alt_Atual) { 
			/*
			var myFx = new Fx.Morph(this, {duration: 300, transition: Fx.Transitions.Linear});
			myFx.start({ 'height': [Alt_Atual, Alt_Real+10] });
			*/
			this.setStyle('height',Alt_Real+10);
		}
		return this;
	},
	
	disableSelection: function() {
		if (typeof this.style.MozUserSelect != "undefined") { 
			this.style.MozUserSelect="none";
		} else {
			this.onmousedown = function() { return false }
		}
		return this;
	},
	bold: function() {
		this.setStyle('font-weight','bold');
	},
	toggleInput: function(params) {
		var opts = new Hash({'valor':'','classe':'login_campo_waiting','tipo':'text'}); 
		var tag = this.get('tag');
		opts.extend(params);
		this.addEvent('focus',function() {
			if (this.get('class').contains(opts.classe,' ')) {
				this.removeClass(opts.classe);
				this.set('value','');
				if (tag == 'input') this.set('type',opts.tipo);
			}		
		});
		this.addEvent('blur',function() {
			if (!this.get('class').contains(opts.classe,' ') && this.get('value').clean() == '') {
				this.addClass(opts.classe);
				this.set('value',opts.valor);
			}
		});
		this.fireEvent('blur');
	},
	
	flash: function() {
		this.setStyle('opacity',0).fadeFast(1);
	},
	fadeFast: function(valor) {
		var myFx = new Fx.Tween(this,{'duration':250});
		myFx.start('opacity',valor);
		return this;
	},

	fadispose: function (tempo) {
		if (!tempo) tempo = 500;
		this.fade(0);
		this.dispose.delay(tempo,this);
	},
	
	setStyleIn: function(atr,valor,tempo) {
		this.setStyle.delay(tempo,this,[atr,valor]);
	},
	
	addEffect: function(effect,first,second,ank) {
		if (!ank) ank = this;
		if (effect == 'mouse') {			
			if (!first) first = {'background':'#E5E5E5'};
			if (!second) second = {'background':'white'};
			this.addEvent('mouseover',function() { ank.setStyles(first); });
			this.addEvent('mouseout',function() { ank.setStyles(second); });
		}
		return this;
	},
	
	visible: function() {
		return (this.getStyle('display') == 'block') ? true : false;
	},
	
	disable: function(valor) {
		this.oldvalue = this.get('value');
		this.set('disabled',true);
		this.set('value',valor);
		this.blur();
	},	
	enable: function(valor) {
		if (!valor) if (this.oldvalue) valor = this.oldvalue;
		this.set('disabled',false).blur();
		if (valor) this.set('value',valor);		
	},
	
	addHtml: function(html) {
		this.set('html',this.get('html')+html);
		return this;
	},
	
	setClass: function(nome) {
		this.set('class',nome);
		return this;
	}
});


Date.implement({
	make: function(arg1) {
		var year = this.getFullYear();
		var month = ('0'+(this.getMonth()+1)).left(2);
		var day = ('0'+(this.getDate())).left(2);
		var hour = ('0'+(this.getHours())).left(2);
		var minute = ('0'+(this.getMinutes())).left(2);
		var second = ('0'+(this.getSeconds())).left(2);
		if (arg1 == 'sql') return year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;
		if (arg1 == 'date') return day+'/'+month+'/'+year+' '+hour+':'+minute+':'+second;
		if (arg1 == 'time') return hour+':'+minute+':'+second;
	},
	getAll: function(div) {
		if (!div) div = 1; var total = 0; var mult = 1;
		var seconds = this.getSeconds();total += seconds * mult; mult *= 60;
		var minute = this.getMinutes(); total += minute * mult; mult *= 60;
		var hour = this.getHours();		total += hour * mult;
		return total/div;
	},
	createFrom: function(arg1) {
		var Pts = arg1.split(' ');
		var Data = Pts[0].split('-');
		var Hora = Pts[1].split(':');
		this.setDate(Data[2]);
		this.setMonth(Data[1].toInt() - 1);
		this.setFullYear(Data[0]);		
		this.setHours(Hora[0]);
		this.setMinutes(Hora[1]);
		this.setSeconds(Hora[2]);
		return this;
	},
	createFromDiff: function(arg1,arg2) {
		this.setDate(arg2.getDate() - arg1.getDate());
		this.setMonth(arg2.getMonth() - arg1.getMonth());
		this.setFullYear(arg2.getFullYear() - arg1.getFullYear());		
		this.setHours(arg2.getHours() - arg1.getHours());
		this.setMinutes(arg2.getMinutes() - arg1.getMinutes());
		this.setSeconds(arg2.getSeconds() - arg1.getSeconds());
		return this;
	}
});

Window.implement({
});

Array.implement({
	somewhat: function(campo,valor) {
		return this.some(function(itemArray) { return itemArray[campo] == valor; });
	},
	filterFirst: function(opts) {
		var ft = this.filter(function(itemArray) { 
			if (opts.options) return itemArray.options[opts.campo] == opts.valor; 
			return itemArray[opts.campo] == opts.valor; 
		});
		return ft[0];
	}
});

Document.implement({
	getSize: function() {
		this.Inner = {
			'width': this.window.innerWidth,
			'height': this.window.innerHeight
		};
		this.Outer = {
			'width': this.window.outerWidth,
			'height': this.window.outerHeight
		};
		return this;
	},
	overflow: function(Tipo) {
		if (Tipo == 'hide') document.body.setStyles({'overflow-x':'hidden','overflow-y':'hidden'});
		if (Tipo == 'show') document.body.setStyles({'overflow-x':'auto','overflow-y':'auto'});
	},
	loadExtra: function(tipo,nome) {
		if (tipo == 'js') new Element('script',{'type':'text/javascript','charset':'utf-8','src':nome}).inject(document.body);
		if (tipo == 'css') new Element('link',{'rel':'stylesheet','type':'text/css','href':nome}).inject(document.head);
	},
	refresh: function() {
		window.location.reload();
	}
});

document.getSize();

String.implement({
	right: function(arg1) {
		if (!arg1) arg1 = 1;
		var len = this.length;
		return this.substring(len-arg1,len);
	},
	left: function(arg1) {
		if (!arg1) arg1 = 1;
		if (arg1 >= 1) return this.substring(0,arg1);
		else {
			var len = this.length;
			return this.substring(0,len+arg1);
		}
	},
	in: function() {
		var args = arguments;
		var value = this;
		var existe = false;
		Array.each(args,function(item,index) { if (value == item) existe = true; });
		return existe;
	},
	is: function(tipo) {
		if (tipo == 'number') return this.in('1','2','3','4','5','6','7','8','9','0');
	},
	convert: function(tipo,format) {
		if (!format) format = 'date';
		var value = this;
		if (tipo == 'sql2date') {
			var Pts = value.split(' ');
			var Mes = Pts[0]; var Dia = Pts[1];	
			var Pts = Mes.split('-'); var Mes = Pts[2]+'/'+Pts[1]+'/'+Pts[0];	
			var Pts = Dia.split(':'); var Dia = Pts[0]+':'+Pts[1];	
			if (format == 'date') value = Mes;
			if (format == 'time') value = Dia;
			if (format == 'datetime') value = Mes+' '+Dia;
		}
		if (tipo == 'sql2time') {
			var Pts = value.split(' ');
			value = Pts[1];
		}
		if (tipo == 'date2sql') {
			var Pts = value.split(' ');
			var Mes = Pts[0]; var Dia = Pts[1];						
			var Pts = Mes.split('/'); var Mes = Pts[2]+'-'+Pts[1]+'-'+Pts[0];	
			var Pts = Dia.split(':'); var Dia = Pts[0]+':'+Pts[1]+':00';
			if (format == 'date') value = Mes;
			if (format == 'time') value = Dia;
			if (format == 'datetime') value = Mes+' '+Dia;
		}
		return value;
	},
	between: function(arg1,arg2) {
		var Texto = this;
		var Ok = false;
		if (Texto >= arg1 && Texto <= arg2) Ok = true;
		return Ok;
	},
	setParam: function(myArray) {
		var Word = this;
		$each(myArray, function(myArg,index) {
			var myParam = '{'+(index+1)+'}';
			Word = Word.replace(myParam,myArg);
		});
		return Word;		
	},
	replaceAll: function(de, para) {
		var str = this;
		var pos = str.indexOf(de);
		while (pos > -1){
			str = str.replace(de, para);
			pos = str.indexOf(de);
		}
		return (str);
	},	
	interpreta: function(info){			
		return this.replace(/\\?\{([^{}]+)\}/g, function(match, name) { 
			if (match.charAt(0) == '\\') return match.slice(1);
			eval('var x = info.'+name); 
			return x;
		});			
	}
});

Number.implement({
	between: function(v1,v2) {
		return (this >= v1 && this <= v2);
	}
});

Request.implement({
	addLog: function() {
		this.addEvent('request',function() { Log.add('<br/>request',1,1); });
		this.addEvent('failure',function(txt) { Log.add('failure<br/>'+txt,1,1); });
		this.addEvent('success',function(feed,txt) { Log.add('SUCCESS<br/>'+txt,1,1); });
		return this;
	}
});

var fioTip = new Class({
	initialize: function(Obj,Html,Extra) {
		this.Obj = Obj;
		this.Html = Html;
		this.Div;
		this.Extra = Extra;
		this.padx = 10;
		this.pady = 10;
		this.create();
	},
	create: function() {
		this.Div = new Element('div').set('html',this.Html).inject(document.body);
		this.Obj.setStyle('cursor','pointer');
		var style = '';
		style += 'border:1px solid white; ';
		style += '-moz-border-radius:5px; border-radius:5px;';
		style += 'font-family:Verdana; ';
		style += 'position:absolute; ';
		style += 'padding:8px; ';
		style += 'font-size:12px; ';
		style += 'color:white; ';
		style += 'display:none; ';
		style += 'text-align:justify;';
		style += 'text-align:justify; ';
		style += 'z-Index:9999; ';
		style += 'background-color:black';
		// style += 'background:url(../../v3/imagens/sitelayout/header/header_background.gif);';
		this.Div.set('style',style);
		if (this.Extra) this.Div.setStyles(this.Extra);
		this.enable();
	},
	disable: function() {
		this.Obj.removeEvents('mousemove');
	},
	enable: function() {
		this.Obj.addEvent('mousemove', function(e) { 
			if (this.Html == '') return 0;
			this.Div.set('html',this.Html);
			if (this.enable) this.Div.setStyles({'display':'block', 'left':e.page.x + this.padx, 'top':e.page.y + this.pady }); e.stop(); 
		}.bind(this));
		this.Obj.addEvent('mouseout', function(e) { this.Div.setStyle('display','none'); }.bind(this));
	}
});



var classe_headerLog = new Class({
	initialize: function() {
		var Style = 
			'position:fixed; top:-2px; left:-1px; border:1px solid white; z-Index:99999; padding:10px; font-family:Courier New; color:white;'+
			'font-size:12px; background:black; overflow-y:scroll';
		this.Div = new Element('div').set('style',Style).inject(document.body);
		this.DivIco = new Element('div',{'style':'float:left'}).inject(this.Div);
		this.Cancel = new Element('div',{'style':'cursor:pointer; float:right; width:20px; height:20px; margin-right:20px; background:url(../../imagens/layout/header_cancel.gif)'}).inject(this.Div);
		this.Cancel.addEvent('click',function() { this.esconde(); }.bind(this));
		this.DivTxt = new Element('div',{'style':'padding-left:20px; width:90%'}).inject(this.Div);
		this.Div.allPage('width');
		this.Fx = new Fx.Slide(this.Div);
		this.Fx.hide();
		this.delayTime;
		this.locked = false;
		this.Time = 2000;
	},
	go: function(Obj,F,infinity) {
		clearTimeout(this.delayTime);
		if (this.locked) return 0;
		if (F) this.Fx.show();
		else if (!this.Fx.open) this.Fx.toggle();		
		if (Obj == undefined) Obj = 'undefined';
		
		var Txt = this.getString(Obj);	
		
		this.DivIco.set('text','/>');
		this.DivTxt.set('html',Txt);
		
		/**/
		this.Div.setStyle('height','auto');
		var Off = this.Div.offsetHeight;
		if (Off == 37) this.Div.setStyles({'height':17});
		if (Off > 300) this.DivTxt.setStyles({'height':300,'overflow-y':'scroll'});
		
		
		//this.DivTxt.setStyle('width','95%');
		
		if (!infinity) {
			this.delayTime = this.esconde.delay(this.Time,this);
		}
		return this;
	},
	lock: function(Txt) {
		this.locked = true;
		this.go(Txt,1,1);
	},
	getString: function(Obj,Dash) {
		var Diretos = new Array('string','number','float');
		var Txt = '';
		if (!Dash) Dash = '';
		var Tipo = typeOf(Obj);		
		if (Diretos.contains(Tipo)) Txt = Obj;
		else {
			Array.each(Obj,function(myObj,myCampo) {
				var myTipo = typeOf(myObj);
				if (Diretos.contains(myTipo)) Txt += Dash + myCampo+': '+myObj+',<br/>';
				else {
					Txt += Dash + myCampo +' {<br/>';
					Txt += this.getString(myObj,Dash+'&nbsp;&nbsp;');
					Txt += Dash + '} <br/>';
				}
			}.bind(this));
		}	
		return Txt;
	},
	esconde: function() {
		clearTimeout(this.delayTime);
		if (!this.locked) this.Fx.slideOut();
	},
	some: function() {
		clearTimeout(this.delayTime);
		this.Fx.hide();
	},
	add: function(Txt,F,infinity) {
		var nTxt = this.DivTxt.get('html') + ' ' + Txt;
		return this.go(nTxt,F,infinity);	
	},
	setTime: function(valor) {
		if (!valor) valor = 2000;
		this.Time = valor;
		return this;
	}
});

function newLog() {
	return new classe_headerLog();
}

function jen(what) {
	return JSON.encode(what).replaceAll(',"',', "');
}
