//jax OBJECT
jax = new Object();
//jax.c OBJECT (CLASSES)
jax.c = new Object ();
//jax CLASSES

//jax timer class
jax.c.timer = function ( name,type,interval ) {
 this.name = name;
 this.type = type;
 this.interval = interval;
 this.status = "disabled";
 
 this.enable = function () {
  var j_t_name = this.name;
  if ( jax.timer[ j_t_name ].func != false && this.status != "enabled" ) { jax.timer[ j_t_name ].timer = window.setInterval ( 'jax.timer["' + j_t_name + '"].func()', jax.timer[ j_t_name ].interval ); this.status = "enabled"; }
  else {} //alert ("no function set for timer: " + j_t_name );
 };
 
 this.disable = function () {
  var j_t_name = this.name;
  if ( jax.timer[ j_t_name ].func != false && this.status != "disabled" ) { window.clearTimeout ( jax.timer[ j_t_name ].timer ); this.status = "disabled"; }
  else {}  //alert ("no function set for timer: " + j_t_name );
 };
}
//jax module class
jax.c.module = function  ( id, name, path ) {
 this.id = id;
 this.name = name;
 this.path = path;
 this.ready = false;
}
//jax ajax class
jax.c.ajax = function ( name, type, uri ) {
 this.name = name;
 this.type = type;
 this.uri = uri;
 
 this.enable = function () {
   // Firefox, Opera 8.0+, Safari
 try { this.xmlHttp=new XMLHttpRequest(); }
 catch (e)
 {
  // Internet Explorer
  try { this.xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }
  catch (e) { try { this.xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("Your browser does not support AJAX!"); return false; } }
 }
  
  this.xmlHttp.p = this;
  this.xmlHttp.onreadystatechange=function()
  {
   if(this.readyState==4)
   {
    
	if ( this.p.func != false )
	{
	 this.p.data = this.responseText;
	 this.p.func();
	}
	else 
	{
	 //alert ( this.responseText );
	}

   }
  };
  
   this.xmlHttp.open("GET", this.uri , true);
   this.xmlHttp.send(null);
 
 };
}




//jax VARS
jax.log = "";
jax.path = "";
jax.module = [];
//TEST
jax.module.path = "jax/modules/";
//jax FUNCTIONS
//hello world function
jax.hello = function () { alert ("hello world");  }
//moduleLoad function



jax.time = new Object();
jax.time.unix = function () {
var foo = new Date; // Generic JS date object
var unixtime_ms = foo.getTime(); // Returns milliseconds since the epoch
return unixtime_ms / 1000;
}
jax.time.elapsed = 0;


jax.module.load = function ( j_m_name ) 
{
 if ( jax.time.elapsed == 0 ) { jax.time.elapsed = jax.time.unix(); }
 for ( var i in jax.module ) { if ( jax.module[i].name == j_m_name ) { return false; } } 
 if ( j_m_name == "load" ) { return false; }
 var j_m_length = jax.module.length;
 jax.module[ j_m_length ] = new jax.c.module( j_m_length, j_m_name, jax.module.path );
 //jax.jsLoad ( j_m_name );
 
 jax.ajax.create ( "init_module_" + j_m_name, 0, jax.module.path + j_m_name + ".js" ).func = function ()
 {
  var data = jax.ajax["init_module_" + j_m_name].data;
  var id = jax.arrayFindIdByName ( jax.module, j_m_name );
  var id_ = parseInt ( id ) + 1;
  eval ( data );
  jax.dom.set ( "output", "<img src='jax/images/loading.gif' border='0'> Parsing Module <b>" + j_m_name + "</b>" );
  jax.module[id].ready = true;
  jax.log = jax.log + "Parsing Module [" + id_ + " of " + jax.module.length + "] <b>" + j_m_name + "</b><br>";
 }

 jax.ajax["init_module_" + j_m_name].enable();

}


//ajax object
jax.ajax = [];
//jax.init.ajax
jax.ajax.create = function ( j_a_name, j_a_type, j_a_uri )
{
 if ( j_a_name == "create" ) { return false; }
 jax.ajax[ j_a_name ] = new jax.c.ajax ( j_a_name, j_a_type, j_a_uri );
 jax.ajax[ j_a_name ].func = false;
 return jax.ajax[ j_a_name ];
}

jax.arrayFindIdByName = function ( array, name )
{
 var id = false;
 for ( var i in array ) { if ( array[i].name == name ) { id = i; } } 
 return id;
}

jax.arrayFind = function ( array, name )
{
 var found = false;
 for ( var i in array ) { if ( array[i].name == name ) { found = true; } } 
 return found;
}


//timer OBJECT
jax.timer = [];
//timer FUNCTIONS
//timerInit function
jax.timer.create = function ( j_t_name, j_t_type, j_t_interval )
{
  if ( j_t_name == "create" ) { return false; }
  if ( typeof jax.timer[j_t_name] == "object"  ) { return false; }
  jax.timer[ j_t_name ] = new jax.c.timer ( j_t_name, j_t_type, j_t_interval );
  jax.timer[ j_t_name ].func = false;
  return jax.timer[ j_t_name ];
  
}


jax.timer.create("modules",0,100).func = function () 
{ 
 var moduleReady = 0;
 for ( var i in jax.module )
 {
  if ( jax.module[i].ready == true && eval ( "jax." + jax.module[i].name + ".initiated" ) != true ) 
  { 
   moduleReady++; 
   if ( eval ( "jax." + jax.module[i].name + ".onload" ) != undefined && eval ( "jax." + jax.module[i].name + ".initiated" ) != true ) { eval ( "jax." + jax.module[i].name + ".onload(); jax." + jax.module[i].name + ".initiated = true;" ); }
  }
 }
 //alert ( jax.module.length + " - " + moduleReady );
 if ( jax.module.length == moduleReady )
 {
  jax.timer["modules"].disable();
  jax.onload();
  jax.dom.set( "time_area","JAX loaded in " + ( jax.time.unix() - jax.time.elapsed ) + " second(s)" );
 }
}





//dom OBJECT
jax.dom = new Object();
//dom FUNCTIONS

jax.dom.get = function ( id ) {
 var el = document.getElementById(id);
 if ( el.value == undefined ) { data = el.innerHTML; }
 else { data = el.value; } 
 return data;
} 

jax.dom.set = function ( id, data ) {
 var el = document.getElementById(id);
 switch ( el )
 {
  case null:
  if ( jax.timer["dom_set_"+id] == undefined )
  {  
   jax.timer.create ( "dom_set_"+id, 0, 100 ).func = function ()
   {
    jax.dom.set ( id, data );  
   }
   jax.timer["dom_set_"+id].enable();
  }  
  break;
  
  default:  
  if ( jax.timer["dom_set_"+id] != undefined ){ jax.timer["dom_set_"+id].disable(); jax.timer["dom_set_"+id] = null; }
  if ( el.value == undefined ) { el.innerHTML = data; }
  else { el.value = data; }
  
 }
 
 //NULL 
 
 //var el = document.getElementById(id);
 //el.innerHTML = data;
}

jax.dom.create = function ( id, type , data, target ) {
jax.dom.set ( id, data );
if ( document.getElementById(id) != undefined ) { return false; }
 var el = document.getElementById(target);
 var el_new = document.createElement(type);
 el_new.setAttribute( "id", id );
 el.appendChild (el_new);
}

jax.dom.o = function ( id ) {
//if ( document.getElementById(id) != undefined ) { return false; }
var el = document.getElementById(id);
return el;
}

//var el = document.getElementsByTagName("body")[0];
//var el_div = document.createElement("div");
//el_div.setAttribute( "id", "content2" );
//el.appendChild (el_div);

jax.string = new Object();
jax.string.encodeurl = function (str) { return escape(str).replace('+', '%2B').replace('%20', '+').replace('*', '%2A').replace('/', '%2F').replace('@', '%40'); }
jax.string.decodeurl = function (str) { return unescape(str.replace('+', ' ') ); }
jax.string.striphtml = function (str) { return stripped = str.replace(/(<([^>]+)>)/ig,""); }
jax.string.stripslash = function (str) { return str.replace(/\\/g, ''); } 



window.onload = function()
{
 jax.timer["modules"].enable();
}


  