var UA_VERSION;

var LANG_RU = "ru";
var LANG_EN = "en";
var LANG_FR = "fr";
var LANG_SV = "sv";
var LANG_ES = "es";
var LANG_DE = "de";
var LANG_PO = "po";
var LANG_IT = "it";
var LANG_UK = "uk";

// Global for brower version branching.
var NS = (navigator.appName == "Netscape");
var IE = document.all ? true : false;

var browserObj = new bw_check();

UA_VERSION = browserObj.ver;

var IE4 = browserObj.ie4;
var IE5 = browserObj.ie5;
var IE5_5 = browserObj.ie5_5;
var IE6 = browserObj.ie6;

var IE4up = (IE && UA_VERSION >= 4);
var IE5up = (IE && UA_VERSION >= 5);
var IE5_5up = (IE && UA_VERSION >= 5.5);
var IE6up = (IE && UA_VERSION >= 4);

var NS4 = browserObj.ns4;
var NS6 = browserObj.ns6;
var NS7 = (NS && UA_VERSION >= 7)

var NS4up = (NS && UA_VERSION >= 4);
var NS6up = (NS && UA_VERSION >= 6);
var NS7up = NS7;

function bw_check(){
  var is_major = parseInt(navigator.appVersion);
  this.ver=navigator.appVersion;
  this.agent=navigator.userAgent;
  this.dom=document.getElementById?1:0;
  this.opera=this.agent.indexOf("Opera")>-1;
  this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera)?1:0;
  this.ie5_5=(this.ver.indexOf("MSIE 5.5")>-1 && this.dom && !this.opera)?1:0;
  this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera)?1:0;
  this.ie4=(document.all && !this.dom && !this.opera)?1:0;
  this.ie=this.ie4||this.ie5||this.ie6;
  this.mac=this.agent.indexOf("Mac")>-1;
  this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0;
  this.ie3 = (this.ver.indexOf("MSIE") && (is_major < 4));
  this.hotjava = (this.agent.toLowerCase().indexOf('hotjava') != -1)? 1:0;
  this.ns4=(document.layers && !this.dom && !this.hotjava)?1:0;
  this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera);
  this.ver3 = (this.hotjava || this.ie3);return this;
}

/*** general ***/

function makeSpace(n) {
  var s = "";
  for (var i=0; i<n; i++)
    s += "&nbsp;";
  return s;
}

function fCenterWindow(_width, _height, options) {
  var _top = (screen.height-_height) / 2;
  var _left  = (screen.width-_width) / 2;
  return s + ",top=" + _top + ",left=" + _left + ",width=" + _width + ",height=" + _height;
}

function fInspect(o) {
  var s = '';
  for (var x in o) {
    s += x + "=" + eval("o."+x) + "\n";
  }
  alert(s);
}

function displayError(e) {
  var s = "CLIENT ERROR in " + location.pathname + "\n";
  if (typeof(e) == "object") {
    s += "\tname=" + e.name + "\n\tnumber=" + e.number + "\n\tmessage=" + e.message + "\n\tdescription=" + e.description;
  }
  else {
    s += e;
  }
  alert(s);
}

function exists(o) {
  return (o=="" || (""+o)=="undefined" || (""+o)=="null") ? false : true;
}

function cancelEvent() {
  window.event.returnValue = false;
}

// transform from absolute witdh to procent
function abs2rel(x) {
  x = parseInt(x) * 100 / parseInt(document.body.clientWidth);
  return x + "%";
}

// transform from procent witdh to absolute
function rel2abs(x) {
  x = ""+x;
  x = x.substring(0, x.length-1);
  x = parseInt(parseInt(document.body.clientWidth) * parseInt(x) / 100);
  return parseInt(x);
}

// date routines

function isCorrectDate(day,month,year)
{
  var today = new Date();
  year = ((!year) ? today.getYear() : year);
  month = ((!month) ? today.getMonth() : month-1);
  if (day=="" || (""+day=="undefined")) return false;
  var test = new Date(year,month,day);
  if ((test.getFullYear() == year) && (month == test.getMonth()) && (day == test.getDate()))
    return true;
  else
    return false;
}

function parseDate(val, sep)
{
  var d = _left_string(val, sep);
  var m = val.substring(val.indexOf(sep)+1, val.lastIndexOf(sep));
  var y = _right_back_string(val, sep);

  if (G_LANG == LANG_EN) { // day & month vice versa
    var temp = d; d = m; m = temp;
  } else if (G_LANG == LANG_SV) {
    var temp = d; d = y; y = temp;
  }

  return isCorrectDate(d, m, y) ? true : false;
}

function parseDateRange(val1, val2, sep) {

  if (parseDate(val1, sep) && parseDate(val2, sep)) {

    var d1 = _left_string(val1, sep);
    var m1 = val1.substring(val1.indexOf(sep)+1, val1.lastIndexOf(sep));
    var y1 = _right_back_string(val1, sep);

    var d2 = _left_string(val2, sep);
    var m2 = val2.substring(val2.indexOf(sep)+1, val2.lastIndexOf(sep));
    var y2 = _right_back_string(val2, sep);

    if (G_LANG == LANG_EN) { // day & month vice versa
      var temp = d1; d1 = m1; m1 = temp;
      temp = d2; d2 = m2; m2 = temp;
    } else if (G_LANG == LANG_SV) {
      var temp = d1; d1 = y1; y1 = temp;
      temp = d2; d2 = y2; y2 = temp;
    }

    var dt1 = new Date(y1, m1, d1);
    var dt2 = new Date(y2, m2, d2);

    return (dt2 >= dt1) ? true : false;
  }

  return false;
}

/*** validation routines ***/

function isNumber(inp) {
  var t = inp;
  var alphabet = "+-0123456789.";
  for (i=0; i<t.length; i++) {
    if (alphabet.indexOf(t.charAt(i)) == -1){
       return false;
    }
  }
  return true;
}

function isFloat(x) {
  if (isNumber(x) && !isNaN(parseFloat(x)))
    return true;
  else
    return false;
}

function isInteger(x) {
  if (isNumber(x) && !isNaN(parseInt(x)))
    return true;
  else
    return false;
}

// format
// name,salary:2:100-1000,birthday:3:.
function validateStuff(s, iForm) {

  if (""+iForm == "undefined") iForm = 0;

  var a = s.split(",");
  var f = document.forms[iForm];
  for (var i=0; i<a.length; i++) {
    var a1 = a[i].split(":");
    var n = a1[0];
    var type = 0;
    var range = "";

    var canBeNull = false;
    if (n.charAt(0) == "+")
    {
      n = n.substring(1, n.length);
      canBeNull = true;
    }

    if (a1.length > 1) {
      type = parseInt(a1[1]);
    }
    if (a1.length > 2) {
      range = a1[2];
      aRange = range.split("-");
      if (aRange.length>1) {
        min = parseFloat(aRange[0]);
        max = parseFloat(aRange[1]);
      }
      else {
        min = 0;
        max = parseFloat(aRange[0]);
        if (max == 0) max = "inf";
      }
    }

    if (""+f.elements[n]!="undefined") {
      if (""+f.elements[n].value!="undefined") {
        if (!canBeNull && trim(f.elements[n].value) == "")  {
          f.elements[n].focus();
          alert(ERR_FIELD_REQUIRED);
          return false;
        }
        switch (type) {
          case 1:
            if (!isInteger(f.elements[n].value)) {
              f.elements[n].focus();
              alert(ERR_EXPECTED_INT);
              return false;
            }
            break;
          case 2:
            if (!isFloat(f.elements[n].value)) {
              f.elements[n].focus();
              alert(ERR_EXPECTED_FLOAT);
              return false;
            }
            break;
          case 3:
            if (!parseDate(f.elements[n].value, G_CAL_SEP)) {
              f.elements[n].focus();
              alert(ERR_EXPECTED_DATE);
              return false;
            }
            break;
        }
        if (range != "")
        {
          if(max != "inf")
          {
            if (f.elements[n].value < min || f.elements[n].value > max) {
              alert(MSG_VALID_RANGE + min + "..." + max);
              f.elements[n].focus();
              return false;
            }
          }
          else
          {
            if (f.elements[n].value < min)
            {
              alert("Value must be greater than " + min);
              f.elements[n].focus();
              return false;
            }
          }
        }
      }
    }
    else {
      alert("No such field '" + n + "'");
      return false;
    }
  }

  return true;

}

function validateDateRange(nameForm, nameField1, nameField2) {
  var f = document.forms[nameForm];
  var field1 = eval('f.' + nameField1);
  var field2 = eval('f.' + nameField2);
  if (field1 && field2) {
    var b = parseDateRange(field1.value, field2.value, G_CAL_SEP);
    if (!b) {
      field1.focus();
      alert(ERR_INVALID_DATE_RANGE);
      return false;
    }
  }
  return true;
}

/*** select ***/

// add, remove, add all, remove all - между двумя select'aми
function selSwapOptions(lstSourceName, lstTargetName, mode) {

  var objFrm = document.forms[0];
  var objSource = objFrm.elements[lstSourceName];
  var objTarget = objFrm.elements[lstTargetName];

  for (var i = objSource.length - 1; i >= 0; i--) {
    if (objSource.options[i].selected || (exists(mode) && mode == 'all')) {
      objTarget.options[objTarget.length] = new Option(objSource.options[i].text, objSource.options[i].value, false, false);
      objSource.options[i] = null;
    }
  }
  for (var i = 0; i < objTarget.length; i++) {
    objTarget.options[i].selected = false;
  }
}

// highligh all options in the select
function selHighlightAll(id) {
  var obj = document.getElementById(id);
  if (!exists(obj)) {
    alert("invalid id=" + id)
  }
  if (!obj.options) {
    alert(id + " is not a 'select'")
  }
  for (var i=0; i<obj.options.length; i++) {
    obj.options[i].selected = true;
  }
}

/*** form routines ***/
function createFormField(f, n, v, t) {

  if (!exists(t)) t = "hidden";

  var fld = f.elements(n);
  if (!exists(fld)) {
    f.appendChild(document.createElement('<input type="'+t+'" name="'+n+'">'));
  }
  fld = f.elements(n);
  fld.value = v;
}

function ShowModalDialog(sURL, vArguments, sFeatures, returnFunc) {

  if (window.showModalDialog) {
    return window.showModalDialog(sURL, vArguments, sFeatures);
  }
  else if (NS6) {
    return showModalDialogNS(sURL, vArguments, sFeatures, returnFunc);
  }
  else {
    alert("Modal dialog not supported");
    return null;
  }
}

function fFormClear() {
  var f = document.forms[0];
  for (var i=0; i<f.elements.length; i++) {
    if (f.elements[i].type == "text" || f.elements[i].type == "textarea")
      f.elements[i].value = "";
  }
}

function getSelectedIndex(e) {

  if (e.length > 0) {
    if (e[0].type == "radio") {
      for (var i=0; i<e.length; i++)
        if (e[i].checked)
          return i;
    }
  }
  return -1;
}

function getSelectedValue(iForm, name) {
  var f = document.forms[iForm];
  var sel = eval("f."+name);
  if (""+sel == "undefined") return;
  if (sel.type == 'select-one') {
    if (sel.options.selectedIndex != -1)
      return sel.options[sel.options.selectedIndex].value;
    else
      return 'selectedIndex=-1';
  }
  return 'select-multiple';
}

function do_effect() {
  if (IE) {
    var o = document.all.stuff_zone;
    o.style.visibility = "hidden";
    o.filters[0].Apply();
    o.filters[0].Play();
    o.style.visibility = "visible";
  }
}

function round(x, n) {
  return parseInt(x * Math.pow(10, n)) / Math.pow(10, n);
}

function enable(obj) {
  if ((""+obj) != "undefined") {
    if (obj.disabled) {
      obj.disabled = false;
    }
  }
}

function disable(obj) {  
  if ((""+obj) != "undefined") {
    if (!obj.disabled) {
      obj.disabled = true;
    }
  }
}

