Element.extend({

	setText: function(value){
		if (typeof this.innerText !='undefined')
			{this.innerText = value;}
		else if (typeof this.textContent != 'undefined')
			{this.textContent = value;}
		else 
			{this.text = value;}
		return this;
	},
	
	getText: function(){
		return (this.innerText || this.textContent || this.text);
	},
	
	getParentById: function(id){
		var parent=this;
		do {
			if (parent.id==id) 
				{return $(parent);}
			parent=parent.parentNode;
			} while (parent!=null);
		return false;	
	},
	
	getParentByTag: function(tagName) {
		var parent=this;
		do {
			if (parent.tagName==tagName) 
				{return $(parent);}
			parent=parent.parentNode;
			} while (parent!=null);
		return false;
	},
	
	getOption: function() {
		return this.options[this.selectedIndex];
	},

	evaluate: function(){
		var e=arguments[0] ? arguments[0] : this;
		return eval('(' + e + ')');
	}	
});

Number.extend({
	
	mod: function(x) {
		return (this - Math.floor(this/x)*this);
	},
	
	numberFormat: function(decimals){
		var isCurrency=arguments[1] ? arguments[1] : false;
		var string=this+'';
		return string.numberFormat(decimals,isCurrency);
	},
	
	checkRange: function(min,max) {
		min=parseFloat(min);
		max=parseFloat(max);
		return (this>=min && this<=max);
	},
	
	fill: function(number,character) {
		var string=this+'';
		return string.fill(number,character);
	},
	
	roundUp: function(division) {
		var tmpValue=0;
		tmpValue=parseInt(this/division);
		if (division==1)
			{
			if (this!=parseInt(this))	
				{tmpValue=tmpValue+1;}
			}
		else
			{
			if ((this*100).mod(division*100)=!0)
				{tmpValue=tmpValue+1}
			tmpValue=tmpValue*division;
			}
		return tmpValue;
	}
	
});

String.extend({
 	
	indexOfR: function(value) {
	  var s=this.reverse();
		return (this.length-s.indexOf(value));
	},
	
	reverse: function() {
    var s = '';
    var i = this.length;
    while (i>0) {
        s += this.substring(i-1,i);
        i--;
    }
    return s;	
	},
	
	fill: function(number,character) {
		var right=arguments[2] ? arguments[2] : false;
		var s=this;
		var l=number-s.length;
		for(var i=0;i<l;i++)
			{s=(right==true ? s+character: character+s);}
		return s;
	},

	timeSerial: function() {
		var sep=':';
		var i=this.indexOf(sep);
		return {'hour': parseInt(this.substr(0,i)),'minute': parseInt(this.substr(i+1))};
	},
	
	dateSerial: function() {
		var sep='-';
		var i1=this.indexOf(sep);
		var day=parseInt(this.substr(0,i1),10);
		var i2=this.indexOf(sep,i1+1);
		var month=parseInt(this.substr(i1+1,i2-i1-1),10);
		var year=parseInt(this.substr(i2+1),10);
		return {'year': year, 'month': month, 'day': day};
		},
		
	dateSerialToday: function() {
		var tmpDate=new Date();
		return {'year': tmpDate.getFullYear(), 'month': tmpDate.getMonth()+1, 'day': tmpDate.getDate()};
		},
		
	dateValid: function() {
		var d=this.dateSerial();
		var check=new Date();
		check.setFullYear(d.year,d.month-1,d.day);
		return (check.getMonth()==d.month-1);
	},

	timeValid: function() {
		var t=this.timeSerial();
		return (t.hour.checkRange(0,23) && t.minute.checkRange(0,59));
	},

	dateFormat: function() {
	  var sep='-';
		var d=arguments[0] ? arguments[0] : this.dateSerial();
		if (parseInt(d.year,10)<20)
			{year='20'+d.year.fill(2,0);}
		else if (parseInt(d.year,10)<99)
			{year='19'+d.year;}
		else
			{year=d.year;}
		return d.day.fill(2,0)+sep+d.month.fill(2,0)+sep+year.fill(4,0,true);
	},
	
	timeFormat: function() {
		var sep=':';
		var t=this.timeSerial();	
		return t.hour.fill(2,0)+sep+t.minute.fill(2,0);
	},
	
	numberFormat: function(decimals) {
		var isCurrency=arguments[1] ? arguments[1] : false;
		if (decimals==0)
			{return parseInt(this);}
		else
			{
			var num = this.toString().replace(/\$|\,/g,'');
			if(isNaN(num))
				{num = "0";}
			var sign = (num == (num = Math.abs(num)));
			num = Math.floor(num*Math.pow(10,decimals)+0.50000000001);
			var cents = num%Math.pow(10,decimals);
			cents=cents.fill(decimals,0);
			num = Math.floor(num/Math.pow(10,decimals)).toString();
			return (isCurrency==true ? '\u0026\u0065\u0075\u0072\u006f\u003b ' : '')+(((sign)?'':'-') + '' + num + '.' + cents);
			}
	},
	
	evaluate: function(){
		var e=arguments[0] ? arguments[0] : this;
		return eval('(' + e + ')');
	}
	
});
