var js = {
	context: this,
	versioninig: false,
	server_url: false
}

//Basic needed functions

function trim() 
{
	return arguments[0].toString().replace(/^\s+|\s+$/g, '')
}

String.prototype.trim = function()
{
	return this.replace(/^\s+|\s+$/g, '');
}

function inArray(arr, val)
{
	for(var i=0; i<arr.length; i++)
	{
		if(arr[i]==val)
			return i;
	}

	return -1;
}

function $(element) {
  if (arguments.length > 1) {
    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($(arguments[i]));
    return elements;
  }
  if (typeof element == 'string')
    element = document.getElementById(element);
  return element;
}

function getval(el)
{
	if(!$(el)) return null;
	
	if($(el).tagName.toLowerCase() == 'input' || $(el).tagName.toLowerCase() == 'select' || $(el).tagName.toLowerCase() == 'textarea' || $(el).tagName.toLowerCase() == 'option')
	{
		if($(el).type == 'checkbox' || $(el).type == 'radio')
			return $(el).checked ? 1:0;
			
		return $(el).value;
	}
	
	return $(el).innerHTML;
}

function $$(el, value)
{
	if(value==undefined) return getval(el);

	var e = $(el);
	if(!e) return;
	
	if(e.tagName.toLowerCase() == 'input' || e.tagName.toLowerCase() == 'select' || e.tagName.toLowerCase() == 'textarea')
	{
		if(e.type == 'checkbox' || e.type == 'radio')
		{
			e.checked = (value==true || value==1 || value=='true' || value=='1');
			return;
		}

		e.value = value;
		return;
	}

	e.innerHTML = value;
}

function getAttr(el, attr)
{
	return $(el) ? $(el).getAttribute(attr) : null; 
}

function $A(el, attr, value)
{
	if(value == undefined) return getAttr(el, attr);
	
	if(!$(el))
		return;
	
	$(el).setAttribute(attr, value); 
}

function $P(val)
{
	return escape(encodeURI(val)).replace(/\+/g, '#plus#').replace(/\-/g, '#minus#');
}

function $D(el, disabled)
{
	$(el).disabled = !disabled ? '' : 'disabled'; 
}

js.getXHTTPTransport = function() {
	var result = false;
	var actions = [
      function() {return new XMLHttpRequest();},
      function() {return new ActiveXObject('Msxml2.XMLHTTP');},
      function() {return new ActiveXObject('Microsoft.XMLHTTP');}
    ];
    for(var i = 0; i < actions.length; i++) {
    	try{
    		result = actions[i]();
    		break;
    	} catch (e) {}	
    }
    return result;
 }

js.evalPath = function(path, context, value, forceSet) {
	context = context || js.context;
	var pos = path.indexOf('.');
	if(pos == -1) {
		return js.evalProperty(context, path, value, forceSet);
	} else {
		var name = path.substring(0, pos);
		var path = path.substring(pos + 1);
		var obj = js.evalProperty(context, name, value);
		return js.evalPath(path, obj, value, forceSet);
	}
}

js.evalProperty = function(object, name, value, forceSet) {
	if(object) {
		if(!object[name] || forceSet) object[name] = value || true;
		return object[name];
	}
	return null;
}

js.getAjaxPath = function(file){
	return '/ajax.php?ajax=' + file;
}
 
js.loadedModules = {};

js.module = function(path, version) {
	version = version || 1.0;
	js.loadedModules[path] = js.loadedModules[path] ? Math.max(js.loadedModules[path], version) : version;
	return js.evalPath(path, null, {});
}

js.htmlspecialchars = function(string) {
    string = string.toString();
    
    // Always encode
    string = string.replace(/&/g, '&amp;');
    string = string.replace(/</g, '&lt;');
    string = string.replace(/>/g, '&gt;');
    
    // Encode depending on quote_style
    string = string.replace(/"/g, '&quot;');
    string = string.replace(/'/g, '&#039;');
    
    return string;
}

js.walk = function(arr, func)
{
	if(!arr) return;
	
	for(var n in arr)
	{
		try
		{
			func(arr[n]);
		}
		catch (e) {
		}
	}	
}

js.strings = {	wait : '' };