/**
  * (EWEJS) Evolver's Web Engine JavaScript
  *   implements: core functions, designed for work with different browsers
  */

var __Core =4.00;

/**
  * Working with different browsers
  */
var browsers =Array(
/* [name], [identificator], [appversion identificator], [version search string] */
  Array( "Firefox", "Firefox", "", "Firefox"),
  Array( "IE", "MSIE", "", "MSIE"),
  Array( "Opera", "Opera", "", "Opera"),
  Array( "Netscape", "Netscape", "", "Netscape")
);
// returns browser version
function v4_GetBrowser() {
/* debug
 alert( "Agent: " + navigator.userAgent);
 alert( "Version: " + navigator.appVersion);
*/
  var agent =navigator.userAgent;
  var version =navigator.appVersion;
  var browser =-1;
  for( var i =0; i <browsers.length; i++) {
    var index =agent.indexOf( browsers[i][1]);
    if( index ==-1) continue;
    index =version.indexOf( browsers[i][2]);
    if( index ==-1) continue;
    browser =i;
    break;
  }
  var ret =new Array();
  if( browser ==-1) {
    ret["name"] ="unknown";
    ret["version"] =0;
  } else {
    ret["name"] =browsers[browser][0];
    var ver =-1;
    if( browsers[browser][3].length >0) {
      var index =agent.indexOf( browsers[browser][3]);
      if( index !=-1) {
        index +=browsers[browser][3].length;
        ver =parseFloat( agent.substring( index +1));
      }
    }
    ret["version"] =ver;
  }
  return ret;
}

// global browser information
var browser =v4_GetBrowser();

// resolves object using it's id
function v4_Resolve( id) {
  switch( browser.name) {
    case "IE": return document.getElementById( id); break;
    case "Opera": return document.getElementById( id); break;
    case "Firefox": return document.getElementById( id); break;
  }
  return null;
}
// resolves all objects with given tag in given object
function v4_ResolveObjects( id, tag) {
  obj =v4_Resolve( id);
  if( !obj) return new Array();
  return obj.getElementsByTagName( tag);
}
// resolves frame by it's name
function v4_ResolveFrame( name) {
  var obj =null;
  switch( browser.name) {
    case "IE": obj =document.frames[name]; break;
    case "Opera": obj =document.frames[name]; break;
    case "Firefox": obj =document.all[name]; break;
  }
  return obj;
}
// resolves frame document
function v4_ResolveFrameDocument( frm) {
  switch( browser.name) {
    case "IE": return frm.document; break;
    case "Firefox": return frm.contentWindow.document; break;
    case "Opera": return frm.document; break;
  }
  return null;
}
// resolves form by it's name
function v4_ResolveForm( name) {
  var obj =null;
  switch( browser.name) {
    case "IE": obj =document.forms[name]; break;
    case "Opera": obj =document.forms[name]; break;
    case "Firefox": obj =document.forms[name]; break;
  }
  return obj;
}
// resolves form by document and form name
function v4_ResolveFormByDocument( doc, name) {
  var obj =null;
  switch( browser.name) {
    case "IE": obj =doc.forms[name]; break;
    case "Opera": obj =doc.forms[name]; break;
    case "Firefox": obj =doc.forms[name]; break;
  }
  return obj;
}
// checks whether the given object is valid
function v4_IsObjectValid( obj) {
 if( typeof( obj) !="object") return false;
 if( obj &&( obj != null)) return true;
 return false;
}
// pauses javascript execution for a specified time
function v4_Pause( milisec) {
  window.setTimeout( "", milisec);
}
// regexp matching perform
function v4_RegexpMatch( reg, str) {
  return str.match( reg);
}
// test if str is a string reg
function v4_TestRegexp( reg, str) {
  var arr =str.match( reg);
  return (arr != null && arr.length >0);
}
// default parameter assignation
function v4_Default( val, defval) {
  if( typeof val =="undefined")
    val =defval;
  return val;
}
// conditional return
function v4_Condition( bool_cond, trueval, falseval) {
 if( bool_cond)
  return trueval;
 else return falseval;
}
// generate new object id
function v4_GenerateID( obj_current_id) {
 var obj =v4_Resolve( obj_current_id);
 if( !obj) return false;
 obj.id =Math.random();
 obj.id =obj.id.toString().replace( ".", "");
 return obj.id;
}
// implicitly assign element width according to resize of the element
function v4_ImplicitWidth( obj_id) {
 var obj =v4_Resolve( obj_id);
 if( !obj) return false;
 obj.style.width =obj.scrollWidth;
 alert( obj.offsetWidth);
 obj.onresize =function() {
  setTimeout( 1, 'v4_Resolve( "' +obj_id +'").style.width =v4_Resolve( "' +obj_id +'").offsetWidth;');
 }
 return true;
}