onload = function() {invoke('init');}

function invoke() {
  var hook = arguments[0];
  var args = [];
  for (var n = 1; n < arguments.length; n++) {
    args[n - 1] = 'arguments[' + n + ']';
  }
  for (var n = 0; n < plugins.length; n++) {
    if (function_exists(plugins[n] + '_' + hook)) {
      call_user_func_array(plugins[n] + '_' + hook, args);
    }
  }
}

function function_exists(name) {
  return eval('typeof(' + name + ')') == 'function'
}

function call_user_func() {
  var args = [];
  for (var n = 1; n < arguments.length; n++) {
    args[n - 1] = arguments[n];
  }
  return call_user_func_array(arguments[0], args);
}

function call_user_func_array(name, args) {
  var func_args = [];
  for (var n = 0; n < args.length; n++) {
    func_args[n] = 'args[' + n + ']';
  }
  func_args = func_args.join(',');
  return eval(name + '(' + func_args + ')');
}


function url(args) {
  var url = cur_host
  if (cfg_clean_urls) {
    path = [];
    qs = [];
    for (var n in args) {
      if (n == 'page' || typeof(args[n]) == 'array' || typeof(args[n]) == 'object') qs[n] = args[n];
      else path.push(args[n]);
    }
    return cur_host + path.join('/') + '?template=false&' + obj2post(qs);
  }
  else {
    args['template'] = 'false';
    for (var n in args) {
      args[n] = n + '=' + encodeURI(args[n]);
    }
    return cur_host + '?' + args.join('&');
  }
}

function ajax_a(get_data, post_data, callback) {
  var ajax = ajax_obj();
  method = 'GET';
  if (post_data) {
    var post_data = obj2post(post_data);
    method = 'POST';
  }
  ajax.onreadystatechange=function () {ajax_a_rsc(ajax, callback);};
  ajax.open(method, url(get_data), true);
  if (post_data) {
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    ajax.setRequestHeader("Content-length", post_data.length);
  }
  if (document.cookie) ajax.setRequestHeader("Cookie", document.cookie);
  ajax.setRequestHeader("Connection", "close");
  if (post_data) ajax.send(post_data);
  else ajax.send(null);
}
	
function ajax_a_rsc(ajax, callback) {
  if (ajax.readyState == 4) {
    if (typeof(callback) != "undefined") {
      if (ajax.status==200) callback(ajax);
      else callback(false);
    }
  }
}

function ajax_obj() {
  if (window.XMLHttpRequest) var ajax=new XMLHttpRequest();
  else if (window.ActiveXObject) var ajax=new ActiveXObject("Microsoft.XMLHTTP");
  else var ajax = null;
  return ajax;
}

function obj2post(obj,path,new_path) {
  if (typeof(path) == 'undefined') var path=[];
  if (typeof(new_path) != 'undefined') path.push(new_path);
  var post_str = [];
  if (typeof(obj) == 'array' || typeof(obj) == 'object') for (var n in obj) post_str.push(obj2post(obj[n],path,n));
  else if (typeof(obj) != 'function') {
    var base = path.shift();
    post_str.push(base + (path.length > 0 ? '[' + path.join('][') + ']' : '') + '=' + encodeURI(obj));
    path.unshift(base);
  }
  path.pop();
  return post_str.join('&');
}