Object.extend = function(dst, src){
	for(var i in src){
		dst[i]=src[i]	
	} return dst;
}

Object.extend(String.prototype,{
	stripTags: function() {
		return this.replace(/<\/?[^>]+>/gi, '');
	},
	include: function(pattern) {
		return this.indexOf(pattern) > -1;
	},
	camelize: function() {
		var parts = this.split('-'), len = parts.length;
		if (len == 1) return parts[0];
		
		var camelized = this.charAt(0) == '-'
		  ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
		  : parts[0];
		
		for (var i = 1; i < len; i++)
		  camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
		
		return camelized;
	},
	getStyle: function(element, style) {
		element = $(element);
		style = style == 'float' ? 'cssFloat' : style.camelize();
		var value = element.style[style];
		if (!value) {
		  var css = document.defaultView.getComputedStyle(element, null);
		  value = css ? css[style] : null;
		}
		if (style == 'opacity') return value ? parseFloat(value) : 1.0;
		return value == 'auto' ? null : value;
	},
	getOpacity: function(element) {
		return $(element).getStyle('opacity');
	},
	readAttribute: function(element, name) {
		element = $(element);
		if (Prototype.Browser.IE) {
		  var t = Element._attributeTranslations.read;
		  if (t.values[name]) return t.values[name](element, name);
		  if (t.names[name]) name = t.names[name];
		  if (name.include(':')) {
			return (!element.attributes || !element.attributes[name]) ? null :
			 element.attributes[name].value;
		  }
		}
		return element.getAttribute(name);
	},
	setStyle: function(element, styles) {
		element = $(element);
		var elementStyle = element.style, match;
		if (Object.isString(styles)) {
		element.style.cssText += ';' + styles;
		return styles.include('opacity') ?
		element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
		}
		for (var property in styles)
		if (property == 'opacity') element.setOpacity(styles[property]);
		else
		elementStyle[(property == 'float' || property == 'cssFloat') ?
		  (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
			property] = styles[property];
		
		return element;
	},
	getDimensions: function(element) {
		element = $(element);
		var display = $(element).getStyle('display');
		if (display != 'none' && display != null) // Safari bug
		  return {width: element.offsetWidth, height: element.offsetHeight};
		
		// All *Width and *Height properties give 0 on elements with display none,
		// so enable the element temporarily
		var els = element.style;
		var originalVisibility = els.visibility;
		var originalPosition = els.position;
		var originalDisplay = els.display;
		els.visibility = 'hidden';
		els.position = 'absolute';
		els.display = 'block';
		var originalWidth = element.clientWidth;
		var originalHeight = element.clientHeight;
		els.display = originalDisplay;
		els.position = originalPosition;
		els.visibility = originalVisibility;
		return {width: originalWidth, height: originalHeight};
	},
	Trim: function(){
		return this.replace(new RegExp("^[\\s]+", "g"),"").replace(new RegExp("[\\s]+$", "g"),"");
	},
	isEmail: function(){
		chk = new RegExp(/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([_a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]{2,200}\.[a-zA-Z]{2,6}$/).test(this);
		if(!chk && this=='admin@localhost') return true;
		return chk;
	},
	isDate: function(){
		if( !new RegExp(/^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})$/).test(this) ) {return false;}
		var dt = this.split('/');
		var d = parseInt(dt[0]);
		if( d < 0 || d > 31 ){ return false; }
		var m = parseInt(dt[1]);
		if( m < 0 || m > 12 ){ return false; }
		var y = parseInt(dt[2]);
		if( y < 1000 ){ return false; }
		if( d > 28 && m == 2 && !dbisiesto(y) ){ return false; }
		return true;
	},
	isImage: function(){
		return new RegExp(/(\.jpg|\.jpeg|\.gif|\.png)$/).test(this.toLowerCase());
	},
	empty: function(){
		return this.Trim(this) == "";
	}
});

Object.extend(Object, {
	isElement: function(object) {
		return object && object.nodeType == 1;
	},
	isArray: function(object) {
		return object && object.constructor === Array;
	},
	isHash: function(object) {
		return object instanceof Hash;
	},
	isFunction: function(object) {
		return typeof object == "function";
	},
	isString: function(object) {
		return typeof object == "string";
	},
	isNumber: function(object) {
		return typeof object == "number";
	},
	isUndefined: function(object) {
		return typeof object == "undefined";
	}
});


var Nav = {
    IE:     !!(window.attachEvent && !window.opera),
    Opera:  !!window.opera,
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
};

function dbisiesto(year){ 
	return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) ? 1 : 0;
};

function $nf(number, decs, thsep, decsep){ var number, decs, thsep, decsep;
	var cd = new String(number);
	cd = cd.replace(/([^0-9|\.]+)/gi,'');
	var dc = decs ? decs : 0;
	if(dc>0 && !decsep && typeof(decsep)!== 'string' ){ decsep = '.'; }
	if(!thsep && typeof(thsep)!== 'string' ) thsep = ',';
	
	var dcs = '00';
	if( cd.indexOf('.') > -1 && cd.indexOf('.')<cd.length ){ dcs = cd.substring( cd.indexOf('.')+1, cd.length); cd = cd.substring(0,cd.indexOf('.')); }
	for(var i=cd.length, ns=[];i>0;i-=3){
		ns.unshift(cd.substring(i-3, cd.length));
		cd = cd.substring(0,cd.length-3);
	} if(dc>0){ dcs=dcs.substring(0,dc); if(dcs.length<dc){ dcs+=$str_repeat('0',dc-dcs.length-1); } dcs='.'+dcs; } else { dcs = ''; }
	return (ns.join(thsep)+dcs);
}

function $move(e,l,t){ var e,l,t;
	$(e).style.left = l + 'px';
	$(e).style.top = t + 'px';
	return;
}

function $hide(){
	for(var i=0;i<arguments.length;i++){
		$(arguments[i]).style.display='none';
	}
}

function $in_array(s,r){
	for(var i=0;i<r.length;i++){
		try{ if(r[i]==s){ return true; } }catch(e){}
	} return false;
}

function $show(){
	for(var i=0;i<arguments.length;i++){
		$(arguments[i]).style.display='block';
	}
}

function $switch_show(){
	for(var i=0;i<arguments.length;i++){
		$(arguments[i]).style.display=($(arguments[i]).style.display=='none'?'block':'none');
	}
}

function $hideandshow(){ var action = 'none';
	for(var i=0;i<arguments.length;i++){
		if( Object.isString(arguments[i]) && arguments[i]=='|'){ action='block'; continue; }
		$(arguments[i]).style.display=action;
	}
}

function $showandhidewReg(show,parent,type,reg){ var show,parent,type,reg;
	var els = $(parent).getElementsByTagName(type); var regx = new RegExp(eval("/"+reg+"/"));
	for(var i =0;i<els.length;i++){
		if(regx.test(els[i].getAttribute('id'))){
			$hide(els[i]);
		}
	}	$show(show);
}

function $str_repeat(s,x){ var rx="";
	for(var i=0;i<=x;i++) rx+= s;
	return rx;
}

function $only_numbers(e,t,f){ var e, t, f;
	var invalid_keys = [13,8,16,17,27,46,33,34,35,36,37,38,39,40,112,113,114,115,116,117,118,119,120,121,122,123];
	var e = e||window.event;
	var k = e.keyCode||e.which;
	if($in_array(k,invalid_keys)){return true;}else {
		if((!new RegExp(/([0-9])/).test(String.fromCharCode(k))&&f==false) || (!new RegExp(/([0-9|,|.])/).test(String.fromCharCode(k))&&f==true)){
			e.handled = true;
			return false;
		}
	}
	return true;
}

function $(element) {
  if (arguments.length > 1) {
    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($(arguments[i]));
    return elements;
  }
  if (Object.isString(element))
    element = document.getElementById(element);
  return element;
}

/* 
	options 
*/

function addOption(sel,value,text,checkE){ var sel, value, text, checkE = ( checkE ? true : false ), sel =$(sel);
		if( checkE ){
			for( var i =0; i < sel.options.length; i++ ){
				if( sel.options[i].value == value ){
					return false;
				}
			}
		}
		var nEl = document.createElement("option");
		nEl.setAttribute('value',value );
		var srd = document.createTextNode(text);
		nEl.appendChild(srd);	sel.appendChild(nEl);
		return true;
}

function eraseOptions(sel,replaces_sel){ var sel, replaces_sel;
	var replaces_sel = replaces_sel ? true : false;
	var sel = $(sel), dlt = [];
	if(replaces_sel){
		$("options_"+sel.getAttribute('id')).innerHTML = '';
	}
	for( var i =0; i < sel.options.length; i++ ){
		dlt.unshift(sel.options[i]);
	}
	if( dlt.length == 0 ){
		return false;
	}
	for( var i =0; i < dlt.length; i++ ){
		sel.removeChild(dlt[i]);
	}
	return true;
}


function wsonload(){
	var to_eval = new Array();
	wsonload.prototype.add = function(Item){ var Item;
		if(!Object.isArray(Item)){Item=[Item];}
		for(var i=0;i<Item.length;i++){
			to_eval.unshift(Item[i]);
		}
	}
	wsonload.prototype.eval = function(){
		for(var i=0;i<to_eval.length;i++){eval(to_eval[i]);}	
	}
}

var $wload = new wsonload();
window.onload = function(){
	$wload.eval();
}

function window_resize(){
	var to_eval = new Array();
	window_resize.prototype.add = function(Item){ var Item;
		if(!Object.isArray(Item)){Item=[Item];}
		for(var i=0;i<Item.length;i++){
			to_eval.unshift(Item[i]);
		}
	}
	window_resize.prototype.eval = function(){
		for(var i=0;i<to_eval.length;i++){eval(to_eval[i]);}	
	}
}

var $wresize = new window_resize();
window.onresize = function(){
	$wresize.eval();
}

function $showhideselects(t){ var t;
	var sls = document.getElementsByTagName('select');
	for(var i =0;i < sls.length; i++){
		if(t==true){sls[i].style.visibility='visible';}else{sls[i].style.visibility='hidden';}
	}
}


function $load_images(){
	var imgs = [];
	for(var i = 0; i <arguments.length; i++){
		imgs[i] = new Image();
		imgs[i].src = arguments[i];
	}
}

var INCLUDED_JS_MAIN = true;










