Element.implement({
	setClass: function(novaClasse) {
		return this.setProperty('class',novaClasse);
	},
	getInnerElements: function() {
		var args = arguments;
		var Tags = new Array('div','a','p');
		var Result = {};
		$each(Tags, function(item,index) { 
			var TempResult = this.getElementsByTagName(item);
			$each(TempResult, function(item2,index2) { 
				var Ok = true;
				if (args.length > 0) {	
					Ok = false;
					for (var i = 0; i < Math.floor(args.length/2); i = i+2) {
						if (item2.get(args[i]) == args[i+1]) Ok = true;
					}
				} 
				if (Ok == true) {
					Result[item2.get('name')] = item2;
					Result[item2.get('id')] = item2;
				}
			}.bind(this));			
		}.bind(this));
		return Result;
	},
	addHtml: function(text) {
		var Atual = this.get('html');
		this.set('html',Atual+text);
	},
	addHeight: function(value) {
		if ($type(this) == 'element') {
			var Hnow = this.getStyle('height').toInt();
			var Hnew = Hnow + value;
			this.setStyle('height',Hnew);
		}
	},
	toggleDisplay: function() {
		var disp = this.getStyle('display');
		var newdisp = (disp == 'block') ? 'none' : 'block';
		this.setStyle('display',newdisp);
	},
	getIndex: function(value) {
		if (!value) value = this.get('value');
		var text;
		$each(this.options,function(item,index) {
			if (item.value == value) text = item.text;
		});
		return text;
	},
	getIndex1: function(value) {
		if (!value) value = this.get('value');
		var text;
		$each(this.options,function(item,index) {
			if (item.value == value) text = item.text;
		});
		return text.split(' - ')[0];
	},
	getIndex2: function(value) {
		if (!value) value = this.get('value');
		var text;
		$each(this.options,function(item,index) {
			if (item.value == value) text = item.text;
		});
		return text.split(' - ')[1];
	},
	cleanOpts: function() {
		var tag = this.get('tag'); if (tag != 'select') return 0;
		while (this.options.length > 0) this.options[0].dispose();
		return this;
	},
	sortThis: function() {
		var tag = this.get('tag'); if (tag != 'select') return 0;
		var nOpts = new Array();		
		for(var i = 0; i < this.options.length; i++) nOpts.push(this.options[i].text);
		nOpts.sort();	
		for(var i = 0; i < this.options.length; i++) this.getOptByText(nOpts[i]).inject(this);
	},
	getOptByText: function(text) {
		var tag = this.get('tag'); if (tag != 'select') return 0;
		var Opt;
		$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;
		$each(this.options,function(item,index) {if (item.value == value) Opt = item; });
		return Opt;		
	},
	getValues: function() {
		var tag = this.get('tag'); if (tag != 'select') return 0;
		var Txt = '';
		$each(this.options,function(item,index) { Txt += item.value + ','; });
		return (Txt != '') ? Txt.substring2(-1) : '';
	},
	addZ: function(value) {
		if (!value) value = 1;
		var zNow = this.getStyle('z-Index').toInt();
		this.setStyle('z-Index',zNow+value);
	}
});

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({
	size: function(Tipo) {
		var Tipos = new Array();
		Tipos[1] = this.innerWidth;
		Tipos[2] = this.innerHeight;
		return Tipos[Tipo];
	}
});

Document.implement({
	getSize: function() {
		var Tipos = new Array();
		this.largura = this.window.innerWidth;
		this.altura = this.window.innerHeight;
	}
});

Array.implement({
	existe: function(valor){
		var pos = -1;
		for (var i = 0, l = this.length; i < l; i++) {
			var campo = this[i].toString();
			campo = campo.replace("'","");		
			if (valor == campo) pos = i;
		}
		return pos;
	},
	possui: function(valor) {
		return (this.existe(valor) >= 0) ? true : false;
	},
	remove: function(myItem) {
		var newArray = new Array();
		$each(this,function(item,index) { if (item != myItem) newArray.push(item); });
		return newArray;
	},
	toTexto: function() {
		var Word = '';
		var myVetor = this;
		for (var i = 0; i < myVetor.length; i++) Word += myVetor[i];
		return Word;
	}
});

String.implement({
	contem: function(){
		var Ok = false;
		var Texto = this;
		$each(arguments, function(item,index) {
			if (Texto.match(item)) Ok = true;
		});
		return Ok;
	},
	in: function() {
		var Ok = false;
		var Word = this;
		$each(arguments, function(item,index) {
			if (Word == item) Ok = true;
		});
		return Ok;
	},
	between: function(arg1,arg2) {
		var Texto = this;
		var Ok = false;
		if (Texto >= arg1 && Texto <= arg2) Ok = true;
		return Ok;
	},
	substring2: function() {
		if (arguments[0] >= 0) return this.subtring(arguments);
		else return this.substring(0,this.length+arguments[0]);
	},
	toArray: function() {
		var Word = this;
		var myVetor = new Array();
		for (var i = 0; i < Word.length; i++) myVetor.push(Word[i]);
		return myVetor;
	},
	setParam: function(myArray) {
		var Word = this;
		$each(myArray, function(myArg,index) {
			var myParam = '{'+(index+1)+'}';
			Word = Word.replace(myParam,myArg);
		});
		return Word;		
	},
	isthen: function(origem,destino) {
		var Word = this;
		if (Word == origem) Word = destino;
		return Word;
	},
	left: function(arg1) {
		if (!arg1) arg1 = 1;
		var len = this.length;
		return this.substring(len-arg1,len);
	},
	right: function(arg1) {
		if (!arg1) arg1 = 1;
		return this.substring(0,arg1);
	},
	convert: function(tipo) {
		var value = this;
		if (tipo == 'sql2date') {
			var Pts = value.split(' ');
			var Pts = Pts[0].split('-');
			value = Pts[2]+'/'+Pts[1]+'/'+Pts[0];
		}
		if (tipo == 'sql2time') {
			var Pts = value.split(' ');
			value = Pts[1];
		}
		if (tipo == 'date2sql') {
			var Pts = value.split(' ');
			var Pts = Pts[0].split('/');
			value = Pts[2]+'-'+Pts[1]+'-'+Pts[0]+' 00:00:00';
		}
		return value;
	}
});

Hash.implement({
	toSql: function() {
		var Campos = this;
		var Txt = '';
		$each(Campos,function(item,index) { Txt += index+'='+item+'&'; });
		return Txt.substring2(-1);
	},
	toSetValue: function() {
		var Campos = this;
		var Txt = '';
		$each(Campos,function(item,index) { Txt += 'this.'+index+'.set("value",this.Atr["'+item+'"]);'; });
		return Txt;
	}
});

