window.rbet = {
	
	
	
	debug: false,
	dictionary: new Object(),
	error_reporting: 'all',
	onrequest: [],
	onrequestcompleate: [],
	onload_fn: [],
	var_name: 'rbet',
		
	
	
	
	// ######################### //

	$: function(ids,fn){
		var elements = new Array();
		if(typeof(ids) == 'string')	ids = [ids];
		var c = ids.length;
		for(var i = 0; i < c ; i++){
			var element = ids[i];
			element = document.getElementById(element);
			if(element && typeof fn == 'function')
				fn(element);
			if(c == 1)
				return element;
			elements.push(element);
			}
		return elements;
		},
	
	// ######################### //
	
	$$: function(className, node, tag, fct, limit){
		node = node || document;
		returnElements = [];
		tag = tag || '*';
		var i = 0;
		var j = 0;
		var c = 0;
		var els;
		var e;
				
		if(document.getElementsByClassName){
			els = node.getElementsByClassName(className);
			if(fct || tag != '*' )
				for(i=0, c = els.length; i<c && (!limit || j < limit) ; i++ ){
					e = els[i];
					if(tag != '*') {
						if(e.nodeName.toLowerCase() == tag ){
							returnElements.push(e);
							if(fct)
								fct(e);
							j++;
							}
						}
					else{
						returnElements.push(e);
						if(fct)
							fct(e);
						j++;
						}
					}
			}
		else 
			if (document.evaluate) {
				className 				= "[contains(concat(' ', @class, ' '), ' " + className + " ')]";
				var classesToCheck 		= '';
				var xhtmlNamespace		= 'http://www.w3.org/1999/xhtml';
				var namespaceResolver	= (document.documentElement.namespaceURI === xhtmlNamespace) ? xhtmlNamespace : null;
				
				try	{
					els = document.evaluate('.//' + tag + className, node, namespaceResolver, 0, null);
				}
				catch (e) {
					els = document.evaluate('.//' + tag + className, node, null, 0, null);
				}
				
				while ((e = els.iterateNext() && (!limit || j < limit) )  ) {
					returnElements.push(e);
					if(fct)
						fct(e);
					j++;
					}
				}
			
			else {
				els = node.getElementsByTagName(tag);
				var pattern = new RegExp('(^|\\s)'+className+'(\\s|$)');
				for( i = 0, c = els.length ; i < c && (!limit || j < limit) ; i++){
					e = els[i];
					if (pattern.test(e.className)){
						returnElements.push(e);
						if(fct)
							fct(e);
						j++;
						}
					}
				
				return returnElements;
				
				}
		if(returnElements.length == 0)
			return false;
		else
			if(returnElements.length==1)
				return returnElements[0];
		},
	
	// ######################### //
	
	add_event: function(elm, evType, fn, useCapture){
		if(elm.add_eventListener){
			elm.add_eventListener(evType, fn, useCapture);
			return true;
			}
		else 
			if(elm.attachEvent){
				elm.attachEvent('on'+evType,fn);
				}
			else
				elm['on'+evType]=fn;
		},
	
	// ######################### //
	
	__: function(id){
		if(typeof this.dictionary[id] == 'string')
			return this.dictionary[id];
		return id;
		},
	
	// ######################### //
	
	add_to_dictionary: function(){
		
		var c = arguments.length;
		
		for(var i = 0; i < c ; i+=2){
			this.dictionary[arguments[i]] = arguments[i+1];
			}
		
		},
	
	// ######################### //
	
	array_isort: function(w,asc){
		var aux=new Array;
		var k=0;
		var t;var temp;
		var found;
		
		for(var i in w)
			if(i && typeof w[i]=='string'||typeof w[i]=='number'){
				found=false;
				t={'i':i,'v':w[i]};
				for(var j in aux)
					if(typeof aux[j]=='object')
						if( (!asc&&aux[j]['v']<w[i]) || (asc&&aux[j]['v']>w[i]) ){
							aux=aux.concat(aux.splice(parseInt(j),null,t));
							found=true;
							break;
							}
				if(!found)
					aux.push(t);
				
				}
		var w = new Array;
		for(var j in aux)
			w[aux[j]['i']]=aux[j]['v'];
		return w;
		},
	
	// ######################### //
	
	array_search: function(w,array){
		var c=array.length;
		for(var i=0;i<c;i++)
			if(array[i]==w)
				return i;
		return -1;
		},
	
	// ######################### //
	
	check_date: function check_date(month,day,year){
		var myDate = new Date();
		myDate.setFullYear(year, (month - 1), day);
		return (myDate.getMonth() + 1) == month;
		},
	
	// ######################### //
	
	check_document_ready: function(){
		if(document.readyState == 'loaded' || document.readyState == 'complete')
			rbet.onload();
		else
			setTimeout(rbet.check_document_ready,10);
		},
	
	// ######################### //
	
	init: function(){
		
		this.is_IE = this.is_IE6 = false;
		if(navigator.userAgent.indexOf('MSIE')!=-1)
			if(navigator.userAgent.indexOf('MSIE 7.')!=-1)		this.is_IE	= true;
			else												this.is_IE6 = true;
		this.is_moz = (navigator.userAgent.indexOf('Firefox')!=-1)?true:false;
		this.is_opera = (window.opera)?true:false;
		this.is_safari = (navigator.vendor&&navigator.vendor.indexOf('Apple')!=-1)?true:false;
			

		// Create DOM ready event listener
		if(document.add_eventListener)
			if(rbet.is_safari)		rbet.check_document_ready();
			else					document.add_eventListener('DOMContentLoaded',rbet.onload,false);
		else 
			if(document.all && !window.opera){
				document.write("<scr" + "ipt id='DOMReady' defer=true " + "src=//:></scr" + "ipt>");
				document.getElementById("DOMReady").onreadystatechange = function(){
					if(this.readyState == 'complete'){
						rbet.onload(window.event);
						}
					}
				}
			else
				rbet.add_event(window,'load',rbet.onload,false);
		
		},
	
	// ######################### //
	
	load: function(fn){
		if(rbet._window_loaded)
			fn();
		else
			rbet.onload_fn.push(fn);
		},
	
	// ######################### //
	
	load_js: function(url,fn){
		var script = document.createElement('script');
		script.src = url;
		script.type = 'text/javascript';
		if(fn)
			script.onload = fn;
		document.getElementsByTagName('head').item(0).appendChild(script);
		},
	
	// ######################### //
	
	object2html: function(obj,props,q){
		for(var prop in props){
			switch(prop){
				case 'style':	
					obj[prop].cssText=props[prop];
					break;
				default:
					if(prop=='onclick'||prop=='onmousedown'||prop=='onmouseup'||prop=='onmousemove'||prop=='onmouseover'||prop=='onmouseout'||prop=='onload'||prop=='ondblclick'||prop=='onfocus'||prop=='onblur')
						obj[prop] = new Function('ev',props[prop]);
					else
						obj[prop] = props[prop];
					break;
				}
			}
		},
	
	// ######################### //
	
	obj_merge: function(){
		var re = {};
		var c = arguments.length;
		for (var i = 0; i < c; i++)
			for(var j in arguments[i])
				re[j] = arguments[i][j];
		return re;
		},
	
	// ######################### //
	
	onload: function(ev){
		ev = ev||window.event;
		var c = rbet.onload_fn.length;
		for(var i = 0 ; i < c ; i++){
			rbet.onload_fn[i](ev);
			}
		rbet._window_loaded = true;
		},
	
	// ######################### //
	
	png_bg: function(item,url,repeat){
		if(item)
			if(rbet.is_IE6)
				if(url)
					item.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + url + '\',sizingMethod=' + ( repeat ? 'scale' : 'crop') + ');';
				else
					item.style.filter = '';
			else
				if(url)
					item.style.background = 'url(' + url + ')' + ( repeat ? '' : ' no-repeat');
				else
					item.style.background = '';
		},
	
	// ######################### //
	
	round: function(val,precision){
		var precision = precision ? precision : 0;
		return Math.round(val * Math.pow(10, precision)) / Math.pow(10, precision);
		},
	
	// ######################### //
	
	serialize: function(inp){
	    // http://kevin.vanzonneveld.net
	    // +   original by: Arpad Ray (mailto:arpad@php.net)
	    var getType = function(inp){
	        var type = typeof inp,match;
	        if(type == 'object' && !inp){
	            return 'null';
				}
	        if(type == 'object'){
	            if(!inp.constructor){
					return 'object';
					}
	            var cons = inp.constructor.toString();
	            if(match = cons.match(/(\w+)\(/)){
					cons = match[1].toLowerCase();
					}
	            var types = ['boolean', 'number', 'string', 'array'];
	            for(key in types){
					if(cons == types[key]){
						type = types[key];
						break;
						}
					}
				}
				return type;
			};
	 
	    var type = getType(inp);
	    var val;
	    switch(type){
	        case 'undefined':
				val = 'N';
				break;
			case 'boolean':
				val = 'b:' + ( inp ? '1' : '0' );
				break;
			case 'number':
				val = ( Math.round(inp) == inp ? 'i' : 'd') + ':' + inp;
				break;
			case 'string':
				val = 's:' + inp.length + ':"' + inp + '"';
				break;
			case 'array':
				val = 'a';
			case 'object':
				if (type == 'object'){
					var objname = inp.constructor.toString().match(/(\w+)\(\)/);
					if (objname == undefined){
						return;
						}
					objname[1] = serialize(objname[1]);
					val = 'O' + objname[1].substring(1,objname[1].length - 1);
					}
				var count = 0;
				var vals = '';
				var okey;
				for(key in inp){
					okey = (key.match(/^[0-9]+$/) ? parseInt(key) : key);
					vals += serialize(okey) + serialize(inp[key]);
					count++;
					}
				val += ':' + count + ':{' + vals + '}';
				break;
			}
		if (type != 'object' && type != 'array') val += ';';
		return val;
		},
	
	// ######################### //
	
	strip_tags: function(w){
		
		return w.replace(/<\/?[^>]+>/gi, '');
		
		}
	
	// ######################### //
		
	
	};

	
	
rbet.init();	



	
rbet.ajax = {
	
	parse_post_param: function(w,q){
		if(typeof w == 'string')	return w;
		else {
			var para = '';
			if(!q)	q = '';
			for(var i in w)
				if( typeof w[i] == 'string' || typeof w[i] == 'number' )
					para += ( q ? ( q + '[' + i + ']' ) : i ) + '=' + encodeURIComponent(w[i]) + '&';
				else
					if( typeof w[i] != 'function' )
						para += this.parse_post_param( w[i], q ? ( q + '[' + i + ']' ) : i );
			return para;
			}
		},

	// ######################### //
	
	rwequest: function(url, parameters, callback){
		url = rbet.RBET_URL + rbet.RBET_ENGINE + '?type=json&lang=' + rbet.RBET_LANG + '&' + url;
		var method = 'get';
		if(parameters)	method = 'post';
		
		if(!parameters)		parameters = null;
		else				parameters = rbet.ajax.parse_post_param(parameters);
		
		var connection = new rbet.ajax.connection();
		
		if(typeof callback != 'function')	return false;
		
		connection.url = url;
		connection.parameters = parameters;
		connection.callback = callback;
		connection.method = method;
		connection.http_request.open(method,url,true);
		connection.http_request.setRequestHeader('Content-type','application/x-www-form-urlencoded');
		connection.http_request.setRequestHeader('Connection', 'close');
		
		if(parameters)	connection.http_request.setRequestHeader('Content-length', parameters.length);
		connection.http_request.onreadystatechange = function(){
				if(rbet.ajax.state_change(connection))
					callback(connection);
				}
		
		var c = rbet.onrequest.length;
		for(var i = 0; i < c; i++)
			rbet.onrequest[i](connection);
		
		connection.http_request.send(parameters);
		},
	
	
	// ######################### //
	
	state_change: function(connection){
		var request = connection.http_request;
		if(request.readyState==4){
			if(request.status!=200)
				rbet.status(rbet.__('there_was_a_problem_with') + rbet.ajax.generate_request_link(request) + '.<br/>' + rbet.__('http_error_code') + ': ' + request.status, 'error');
			else{
				
				var response = {};
				
				if(request.responseText){
					try{
						response = eval('(' + request.responseText + ')');
						}
					catch(e){
						rbet.status({
							'content': 
								rbet.__('message') + ': ' + e.message + '<br/>' +
								rbet.__('line') + ': ' + e.lineNumber + '<br/>' + 
								rbet.__('file') + ': ' + e.fileName +
								'<div class="holder margin_top_bottom" style="height:70px;overflow:auto;">' + request.responseText + '</div>',
							'title': rbet.__('response_error')
							},'error');
							
						};
					}
				
				connection.response = response;
				
				var c = rbet.onrequestcompleate.length;
				for(var i = 0; i < c; i++)
					rbet.onrequestcompleate[i](connection);
				
				if(connection.cancel){
					rbet.status(rbet.__('connection_canceled') + ' ' + rbet.ajax.generate_request_link(request),'info');
					return false;
					}
				
				return true;
				}
			}
		}
	
	};

	


rbet.ajax.connection = function(){
	this.http_request = false;
	if(window.XMLHttpRequest) 
		this.http_request = new XMLHttpRequest();
	else
		if(window.ActiveXObject){
			try {this.http_request = new ActiveXObject('Msxml2.XMLHTTP');}
			catch (e){
				try {this.http_request = new ActiveXObject('Microsoft.XMLHTTP');}
				catch (e) {rbet.status(rbet.__('no_ajax_support'));}
				}
			}
	if(!this.http_request)	return false;
	}


	
	
rbet.cookie = {
	
	// ######################### //
	
	get: function(cookiename){
		var cookiestring = String(document.cookie);
		
		var index1 = cookiestring.indexOf(cookiename);
		
		if (index1==-1 || cookiename=='') return '';
		
		var index2 = cookiestring.indexOf(';',index1);
		
		if (index2==-1) index2 = cookiestring.length;
		
		return unescape(cookiestring.substring(index1 + cookiename.length + 1, index2));
		},
	
	// ######################### //
	
	'delete': function(cookiename){
		
		document.cookie = cookiename + '=' + ';EXPIRES=' + rbet.cookie.get_expire_date(-1);
		
		},
	
	// ######################### //
	
	get_expire_date:function(nodays){
		var UTCstring;
		var Today = new Date();
		var nomilli=Date.parse(Today);
		Today.setTime(nomilli + nodays * 24 * 60 * 60 * 1000);
		UTCstring = Today.toUTCString();
		return UTCstring;
		},
	
	// ######################### //
	
	set: function(name, value, duration){
		duration = duration || 30;
		document.cookie = name + '=' + escape(value) + ';EXPIRES=' + rbet.cookie.get_expire_date(duration);

		}

	}


	

rbet.css = {
	
	add_class: function(item, className){
		if(!item.className || item.className == '')
			item.className = className;
		else{
			var classNames = item.className.split(' ');
			var c = classNames.length;
			for(var i = 0; i < c; i++)
				if(classNames[i] == className)
					return true;
			classNames.push(className);
			item.className = classNames.join(' ');
			}
		},
	
	// ######################### //
	
	add_shadow: function(item){
		if(item)
			if(!rbet.is_safari)
				if(typeof item != 'string'){
					item.className += ' shadow_text_h'
					item.innerHTML = '<div class="shadow_text">' + item.innerHTML + '</div><div class="normal_text">' + item.innerHTML + '</div>';
					}
				else
					return '<div class="shadow_text_h"><div class="shadow_text">' +item + '</div><div class="normal_text">' + item + '</div></div>';
		},
	
	// ######################### //
	
	fix_ie_limit: function(obj, tag){
		if(rbet.is_IE||rbet.is_IE6){
			obj=obj||document;
			tag=tag||'img';
			rbet.$$('limit',obj,tag,function(item){
				var t;
				if(t=rbet.css.get(item,'max-height')){
					t=parseInt(t);
					if(item.offsetHeight>t){
						if(item.nodeName=='IMG')
							item.style.width=parseInt(item.offsetWidth-(((item.offsetHeight-t)/item.offsetHeight)*item.offsetWidth))+'px';
						item.style.height=t+'px';
						}
					}
				if(t=rbet.css.get(item,'max-width')){
					t=parseInt(t);
					if(item.offsetWidth>t){
						if(item.nodeName=='IMG')
							item.style.height=parseInt(item.offsetHeight-(((item.offsetWidth-t)/item.offsetWidth)*item.offsetHeight))+'px';
						item.style.width=t+'px';
						}
					}
				if(t=rbet.css.get(item,'min-height')){
					t=parseInt(t);
					if(item.offsetHeight<t){
						if(item.nodeName=='IMG')
							item.style.width=parseInt(item.offsetWidth+(((t-item.offsetHeight)/item.offsetHeight)*item.offsetWidth))+'px';
						item.style.height=t+'px';
						}
					}
				if(t=rbet.css.get(item,'max-width')){
					t=parseInt(t);
					if(item.offsetWidth<t){
						if(item.nodeName=='IMG')
							item.style.height=parseInt(item.offsetHeight+(((t-item.offsetWidth)/item.offsetWidth)*item.offsetHeight))+'px';
						item.style.width=t+'px';
						}
					}
				
				});
			}
		},
	
	// ######################### //
	
	get: function(x, styleProp){
		if(x && styleProp){
			if (x.currentStyle){
				styleProp = styleProp.split('-');
				var c = styleProp.length;
				for(var i = 0 ; i < c; i++)
					if(i != 0 && typeof styleProp[i] == 'string')
						styleProp[i] = styleProp[i].charAt(0).toUpperCase() + styleProp[i].substr(1);
				return x.currentStyle[styleProp.join('')];
				}
			else 
				if (window.getComputedStyle){
					var elstyle = window.getComputedStyle(x, '');
					return elstyle.getPropertyValue(styleProp);
					}
			}
		return false;
		},
	
	// ######################### //
	
	has_class: function(item, searchClass){
		var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
		return pattern.test(item.className)
		},
	
	// ######################### //
	
	load: function(url, fn){
		switch(typeof url){
			case 'string':
				var link = document.createElement('link')
				link.setAttribute('rel','stylesheet');
				link.setAttribute('type', 'text/css');
				link.setAttribute('href', url);
				document.getElementsByTagName('head').item(0).appendChild(link);
				if(fn)
					fn(url);
				break;
			case 'object':
				if(url.length)
					for(var i=0; i<url.length; i++)
						rbet.css.load(url[i]);
				else
					for(var i in url)
						rbet.css.load(url[i]);
				break;
			default:
				rbet.status( rbet.__('unable_to_load_css') ,'error');
				break;
			}
		},
	
	// ######################### //
	
	remove_class: function(item, className){
		if(item.className)
			if(item.className==className)
				item.className='';
			else{
				var classNames = item.className.split(' ');
				var c = classNames.length;
				for(var i=0;i<c;i++)
					if(classNames[i]==className){
						delete classNames[i];
						break;
						}
				item.className = classNames.join(' ');
				}
		},
	
	// ######################### //
	
	set_opacity: function(item, value){
		item.style.opacity = value/100;
		item.style.filter = 'alpha(opacity='+ value +')';
		}
	
	// ######################### //
	
	};
	


	
rbet.position = {
	
	// ######################### //
	
	mouse_coords: function(ev){
		if(ev.pageX || ev.pageY)
			return {
				x: ev.pageX,
				y: ev.pageY
				};
		else
			return {
				x: ev.clientX + document.body.scrollLeft - document.body.clientLeft,
				y: ev.clientY + document.body.scrollTop - document.body.clientTop
				};
		},
	
	// ######################### //
	
	get_mouse_offset: function(target, ev){
		
		ev = ev || window.event;
		
		var docPos = this.get_position(target);
		var mousePos = this.mouse_coords(ev);
		
		return {
			x: mousePos.x - docPos.x,
			y: mousePos.y - docPos.y
			};
		},
	
	// ######################### //
	
	get_position: function(e, parent){
		var left = 0;
		var top = 0;
		while (e.offsetParent){
			if(e == parent)
				return {
					x: left,
					y: top
					};
			left += e.offsetLeft + parseInt(rbet.css.get(e, 'padding-left'));
			top += e.offsetTop + parseInt(rbet.css.get(e, 'padding-top'));
			e = e.offsetParent;
			}

		left += e.offsetLeft;
		top += e.offsetTop;
		
		return {
			x: left,
			y: top
			};
		}
	
	// ######################### //
	}
	


	
rbet.remove_event = function(elm, evType, fn, useCapture){
	if(elm.remove_eventListener){
		elm.remove_eventListener(evType,fn,useCapture);
		return true;
		}
	else 
		if(elm.detachEvent){
			elm.detachEvent('on'+evType,fn);
			}
		else
			delete elm['on'+evType];
	};
	
	
	
	
rbet.status = function(w,type){
	
	alert(w);
	
	}