// Core functionality
//  Author: Evolver (ninzya@inbox.lv)

var core ={};
core.browser =null;
core.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")
);

// generate id
core.generateId =function() {
 return Math.random().toString().replace( ".", "");
}
// generates random element id and returns it
core.regenerateId =function( currentId) {
 var obj =document.getElementById( currentId);
 if( !obj) return null;
 obj.id =Math.random();
 obj.id =obj.id.toString().replace( ".", "");
 return obj.id;
}
// browser detection
core.detectBrowser =function() {
 var agent =navigator.userAgent;
 var version =navigator.appVersion;
 var browser =-1;
 for( var i =0; i < core.browsers.length; i++) {
  var index =agent.indexOf( core.browsers[i][1]);
  if( index ==-1) continue;
  index =version.indexOf( core.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"] =core.browsers[browser][0];
  var ver =-1;
  if( core.browsers[browser][3].length >0) {
   var index =agent.indexOf( core.browsers[browser][3]);
   if( index !=-1) {
    index +=core.browsers[browser][3].length;
    ver =parseFloat( agent.substring( index +1));
   }
  }
  ret["version"] =ver;
 }
 return ret;
}

// resolve object by id
core.resolve =function( objectId) {
 return document.getElementById( objectId);
}
// resolve frame by name
core.resolveFrame =function( frameName) {
 switch( core.browser.name) {
  case "IE": return document.frames[frameName];
  case "Opera": return document.frames[frameName];
  case "Firefox": return document.all[frameName];
 }
 return document.frames[frameName];
}
// resolve frame doc
core.resolveFrameDoc =function( frm) {
 switch( core.browser.name) {
  case "IE": return frm.document;
  case "Firefox": return frm.contentWindow.document;
  case "Opera": return frm.document;
 }
 return frm.document;
}
// resolve frame doc by name
core.resolveFrameDocByName =function( frameName) {
 var frm =core.resolveFrame( frameName);
 if( !frm) return null;
 return core.resolveFrameDoc( frm);
}
// resolve form by it's name
core.resolveForm =function( formName) {
  switch( core.browser.name) {
    case "IE": return document.forms[formName];
    case "Opera": return document.forms[formName];
    case "Firefox": return document.forms[formName];
  }
  return document.forms[formName];
}
// delete object by id
core.delElementById =function( elemId) {
 var obj =core.resolve( elemId);
 if( !obj) return false;
 if( !obj.parentNode) return false;
 obj.parentNode.removeChild( obj);
 return true;
}

// resolve browser
core.browser =core.detectBrowser();

// test string against reg. expression
core.regexpMatch =function( reg, str) {
 return str.match( reg);
}
// check whether string matches regexp
core.testRegexp =function( reg, str) {
  var arr =str.match( reg);
  return (arr != null && arr.length >0);
}

// navigation code
// read current input variables
core.read_args =function() {
  var url =window.location.search.substr( 1);
  if( url =="")
    return {};
  var retn ={};
  var vars =url.split( "&");
  for( i =0; i < vars.length; ++i) {
    var arg =vars[ i];
    if( arg.indexOf( "=") ==-1)
      retn[ arg] =null;
    else {
      var argdata =arg.split( "=");
      retn[ argdata[0]] =unescape( argdata[1]);
    }
  }
  return retn;
}
// make argument string
core.make_args =function( args) {
  var retn =new Array();
  for( k in args) {
    retn.push( k + "=" +escape( args[ k]));
  }
  return retn.join( "&");
}
// go to specified url
core.go =function( url) {
  window.location.href =url;
}
// navigate to url with imploded arguments
core.go_imploded =function( url, args) {
  url =url +"?";
  for( k in args) {
    url =url +escape( k) +"=" +escape( args[ k]);
  }
  core.go( url);
}
// navigate to current url, with replacement of parameters
core.go_arg =function( args) {
  var cur_args =core.read_args();
  for( k in args) {
    cur_args[ k] =args[ k];
  }
  core.go( window.location.pathname +"?" +core.make_args( cur_args));
}
// submit form
core.submit =function( form_name) {
  core.resolveForm( form_name).submit();
}
// show object
core.show =function( obj_id) {
  var obj =core.resolve( obj_id);
  if( !obj) return false;
  if( !obj.getAttribute( "_display")) {
    obj.style.display ="";
  } else {
    obj.style.display =obj.getAttribute( "_display");
  }
  return true;
}
// hide object
core.hide =function( obj_id) {
  var obj =core.resolve( obj_id);
  if( !obj) return false;
  obj.setAttribute( "_display", obj.style.display);
  obj.style.display ="none";
  return true;
}
// check checkbox or other element
core.check_element =function( obj_id, checked) {
  var obj =core.resolve( obj_id);
  if( !obj) return false;
  obj.checked =checked;
  return true;
}
// set element value
core.set_value =function( obj_id, value) {
  var obj =core.resolve( obj_id);
  if( !obj) return false;
  obj.value =value;
  return true;
}