//
function is_def (obj)
{
  return (typeof (obj) != "undefined");
}

//
function get_obj (id)
{
  return document.getElementById (id);
}

//
function str_list (str, add, separator)
{
  return str + ((str != "") ? (separator) : ("")) + add;
}

//
function trace_x (id, msg)
{
  get_obj (id).innerHTML += msg + "<br/>";
}

//
function find_pos (obj)
{
  var curleft = 0;
  var curtop = 0;

  if (obj.offsetParent)
    do
    {
      curleft += obj.offsetLeft;
      curtop += obj.offsetTop;

      obj = obj.offsetParent
    } 
    while (obj);

  return [curleft, curtop];
}

//
function embed_flash (id, file_name, width, height, background, wmode, vars)
{
  document.write ('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="' + width + '" height="' + height + '" id="' + id + '" align="middle" />');
  document.write ('<param name="allowScriptAccess" value="sameDomain" />');
  document.write ('<param name="movie" value="' + file_name + '" />');
  document.write ('<param name="FlashVars" value="' + vars + '" />');
  document.write ('<param name="quality" value="high" />');
  document.write ('<param name="bgcolor" value="' + background + '" />');
  document.write ('<param name="menu" value="false" />');
  document.write ('<param name="wmode" value="' + wmode + '" />');
  document.write ('<embed src="' + file_name + '" FlashVars="' + vars + '" width="' + width + '" height="' + height + '" align="middle" quality="high" bgcolor="' + background + '" menu="false" wmode="' + wmode + '" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />');
  document.write ('</embed>');
  document.write ('</object>');
}



// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// HIBA- ES EGYEB UZENETEK FV-EI.
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------



// Az uzenetek a hivo altal atadott html id-ju message boxokban jelennek
// meg. Az egy mbox-ban megjelenitendo szovegek a MESSAGES[mbox] tombben
// gyulekeznek, ahova vagy js irja fel oket, miutan hibat eszlelt, vagy
// maga az oldal eleve ugy jon le, hogy MESSAGES tartalmaz sztringeket,
// mert a php akar valamit uzenni. MInden message box-on mint objektumon
// rogzitve vannak azok a css class-ok, amik az uzenetek formazasakor kellenek.
// Ezeket a classokat minden uzenet felirasanal egyedileg felul is lehet
// biralni.


// Az uzenetek lehetseges fajtai
var MESSAGE_ERROR = 1;
var MESSAGE_FEEDBACK = 2;
var MESSAGE_ALL = 100;


// A message box div-jenek letrejotte utan fel kell irni ra, mint
// objektumra az uzenetek formazasahoz szukseges class-okat.
// (on_class) Igy nez ki a mbox, mikor megjelenik, es uzeneteket tartalmaz.
// (off_class) Igy nez ki a mbox, mikor epp nem lethato a kepernyon.
// (text_class) Uzenetek szovegenek a class-a.
// (over_class) Uzenetek szovegenek a class-a, mikor eger van felette.
// (ids_class) Az uzenetekhez tartozo form elemek kiemelesere szolgalo class.
// Default nincs, ha default class-okat hasznalunk, azokat is at kell adni.
function message_box_register_meta_data (mbox, on_class, off_class, text_class, over_class, ids_class)
{
  var box = get_obj (mbox);

  box.classes = new Object ();
  box.classes.on = on_class;
  box.classes.off = off_class;
  box.classes.text = text_class;
  box.classes.over = over_class;
  box.classes.ids = ids_class;
}

// Constructor a message_line classnak, ami tarolja:
// (type) Az uzenet tipusat: fent a konstansok.
// (msg) Az uzenet szovege.
// (ids) Azoknak a form elemeknek vagy elemnek az id-ja, amikre
//       vonatkozik. Ennek egy js array-nak kell lennie, az id-kkal.
// (..._class) Az uzeneteket felepito elemek css class-jai. Ezek lehetnek
//             ures sztringek is, olyankor az uz. kiirasanal az uz.-t
//             tartalmazo mbox-on rogzitett class-t hasznaljuk. Ha itt a
//             class nem ures, az felulbiralja az mbox class-jait.
// (tag) Opcionalis tag.
function message_line (type, msg, ids, text_class, over_class, ids_class, tag)
{
  var n, i;

  this.type = type;
  this.msg = msg;
  this.ids = new Array ();
  for (n = ids.length, i = 0; i < n; i++)
    this.ids.push (ids[i]);
  this.classes = new Object ();
  this.classes.text = text_class;
  this.classes.over = over_class;
  this.classes.ids = ids_class;
  this.tag = tag;
}

// Az mbox message boxhoz tartozo type tipusu uzenteket torli, az
// uzenetek altal esetleg erintett form elemek eredeti class-at
// visszaallitja kiemelesrol, de magat a mbox-ot nem tunteti el.
function remove_messages (mbox, type)
{
  for (i in MESSAGES[mbox])
  {
    var line = MESSAGES[mbox][i];
    if (type != MESSAGE_ALL && line.type != type) continue;

    for (id in line.ids)
    {
      var elem = get_obj (line.ids[id]);
      if (typeof (elem.old_className) != "undefined")
        elem.className = elem.old_className;
    }
  }

  MESSAGES[mbox] = new Array ();
}

// Felvisz egy uj uzenetet.
// (mbox) Melyik message box-re irjuk fel az uzenetet. Ez azert kell, hogy
//        a MESSAGES js tomb mbox elemebe irhassuk fel az uzenetet majd.
// (type) Lasd fent a konstansokat.
// (msg) A szoveg.
// (ids) Azoknak a form elemeknek vagy elemnek a html id-ja, amikre az uzenet
//       vonatkozik. Ennek array-nak kell lennie, az id-kkal.
// (text_class) A szoveg.
// (over_class) A szoveg az egerrel felette.
// (ids_class) Az erintett form elem(ek) mellett megjeleno hibaszam.
// (tag) Opcionalis, nem hasznaljuk semmire.
// A classok lehetnek ures sztringek is, olyankor a kiirasnal a kerdeses
// mbox-on tarolt class-ok kapnak szerepet.
function add_to_messages (mbox, type, msg, ids, text_class, over_class, ids_class, tag)
{
  var box = get_obj (mbox);

  MESSAGES[mbox].push (new message_line (type, msg, ids, text_class, over_class, ids_class, tag));
}

// Az mbox message boxhoz tartozo type tipusu uzenteket torli, az
// uzenetek altal esetleg erintett form elemek eredeti class-at
// visszaallitja kiemelesrol, a mbox-ot pedig eltunteti.
function clear_messages (mbox, type)
{
  remove_messages (mbox, type);

  box.innerHTML = txt;
  box.className = box.classes.off;
}

// Megjeleniti az mbox message boxhoz tartozo osszes type tipusu uzenetet
// magaval a message box-szal egyutt.
function display_messages (mbox, type)
{
  var box = get_obj (mbox);
  var txt = "";

  for (i in MESSAGES[mbox])
  {
    var line = MESSAGES[mbox][i];

    // Ha nem a megfelelo tipus, nem irjuk ki.
    if (type != MESSAGE_ALL && line.type != type) continue;

    // Ha az adott uzent valamelyik (vagy mindegyik) class-a ures sztring,
    // akkor azok hianyzo class-ait az mbox-on rogzitettekkel potoljuk.
    // Az mbox-on mindig vannak ervenyes class-ok rogzitve!
    var text_class = ((line.classes.text == "") ? (box.classes.text) : (line.classes.text));
    var over_class = ((line.classes.over == "") ? (box.classes.over) : (line.classes.over));
    var ids_class = ((line.classes.ids == "") ? (box.classes.ids) : (line.classes.ids));

    // Megyunk vegig az uzenet altal erintett form elemeken (line.ids tomb),
    // es alkalmazzuk rajuk a kiemeles class-t. Elotte azonba elmentjuk az
    // eredeti class-ukat, hogy ha a kiemeles megszunik, vissza lehessen
    // allitani majd.
    for (id in line.ids)
    {
      var elem = get_obj (line.ids[id]);
      if (typeof (elem.old_className) == "undefined")
        elem.old_className = elem.className;
      elem.className = ids_class;
    }

    // Eloallitjuk az uzenet divjet.
    txt += 
      '<div class="' + text_class + '"' +
           'onmouseover="this.className = \'' + over_class + '\'"' +
           'onmouseout="this.className = \'' + text_class + '\'"';
    if (line.ids.length > 0)
      txt += 
           'onclick="get_obj (\'' + line.ids[0] + '\').focus ();';
    txt += 
        '">' + line.msg + 
      '</div>';
  }

  // A kesz uzenet div-ek mehetnek a mbox innerHTML-jebe, utana pedig a
  // boxon alkalmazzuk azt a class-t, ami megjeleniti ot, de csak akkor, ha
  // legalabb egy uzenet felkerult a boxba. 
  box.innerHTML = txt;
  if (MESSAGES[mbox].length > 0)
    box.className = box.classes.on;
}

// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// FORM SUBMIT ES ADATELLENORZES
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------

//
function input_defaults_on_enter (event, target_id)
{
  var obj;
  var keynum;

  if (window.event) // IE
    keynum = event.keyCode;
  else
    if (event.which) // Netscape/Firefox/Opera
      keynum = event.which;

  if (keynum == 13)
    switch ((obj = get_obj (target_id)).type)
    {
      case "text": case "password":
        obj.focus ();
        break;
      case "button":
        obj.onclick ();
        break;
      default:
        obj.focus ();
        break;
    }
}

//
function form_submit (inc, form, action, action_tag1, action_tag2)
{
  var frm = get_obj (form);

  frm.inc.value = inc;
  frm.action.value = action;
  frm.action_tag1.value = action_tag1;
  frm.action_tag2.value = action_tag2;

  frm.submit ();
}

// Itt jonnek a kulonbozo adatellenorzesek fv.-ei.

//
function form_validate_empty (id)
{
  var field = get_obj (id);

  if (field.value == null) return false;

  return field.value.length > 0;
}

//
function form_validate_float_only (id)
{
  var field = get_obj (id);

  return isFinite (field.value);
}

//
function form_validate_int_only (id)
{
  var field = get_obj (id);
  
  return parseInt (field.value) == parseFloat (field.value);
}

//
function form_validate_interval (id, min, max)
{
  var field = get_obj (id);

  var num = parseFloat (field.value);

  return (num >= min && num <= max);
}


