// obejście dla IE4
if (!document.getElementById && document.all) {
  document.getElementById = new Function('id', 'return document.all[id]')
}

// Względna lub bezwzględna (zależy od przeglądarki) ścieżka do adresu aplikacji (głównego katalogu).
// Np.: "../" na stronie listings/ListingSearch.asp
function GetVirtDir()
{
  var scripts = document.getElementsByTagName('script'); 
  for(var i = 0; i < scripts.length; i++) {
    var elem = scripts[i];
    if(elem.nodeName && (elem.nodeName.toLowerCase() == 'script') && elem.src &&
       elem.src.match(/^(.*\/|)global_scripts\.js$/)){
      return RegExp.$1;
    }
  }
}

// zwraca tekst z usunietymi odstepami z lewa i prawa
function Trim( tekst ) {
    return tekst.replace( /^\s+|\s+$/g, "" );
}

// Usuwa początkowe i końcowe odstępy we wszystkich polach tekstowych formularza 
function TrimFormFields( form )
{
  for( var i = 0; i < form.elements.length; i++ ) {
    var f = form.elements[i];
    if(f.type == 'text') f.value = Trim( f.value )
  }
}

function isEmpty(text)
{
  if( text.search( /^ *$/ ) >= 0 ) return true
  else return false
}

function IsNumber(expr)
{ 
  return !isNaN(expr)
}

function Replace(str, from, to) {
 str = str.split(from)
 ret = ''
 for(x in str) {
  if(x > 0) ret = ret + to
  ret = ret + str[x]
 }
 return ret
}

// Obcina zawartość pola formularza do zadanej liczby znaków
// Trim jest potrzebny ze względu na dwuznakowy zapis końca linii
function TrimFieldLength(field, maxLen)
{
  if(field.value.length > maxLen){
    field.value = field.value.substr(0, maxLen);
	field.value = Trim(field.value);
  } 
}

// Czy to jest poprawny GUID w postaci tekstowej.
function IsValidGUID(str)
{
  return (str.match( /^\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}$/i ) != null);
}

// Kod (unicode) pierwszego znaku w tekście.
function CharCode(chr)
{
  return chr.charCodeAt(0);
}

// Zmienia zawartość (url) obrazka.
// img  - obiekt <img>
// file - nazwa pliku względem katalogu z obrazkami (normalnie images, ale dla karnacji inny)
function SetPict(img, file)
{
  img.src = ImagesVirtDir + '/' + file;
}

// Skraca, jeśli trzeba, tekst w taki sposób, aby miał do maxLen znaków i kończył się pełnym wyrazem.
// Jeśli trzeba skrócić, to dopisuje ellipsisMark.
function LongTextEllipsis(txt, maxLen, ellipsisMark)
{
  var i, ret;
  if(txt.length > maxLen){
    if(ellipsisMark != ""){
      maxLen = maxLen - ellipsisMark.length - 1;
    }

    ret = txt.substr(0, maxLen + 1);
    i = ret.lastIndexOf(" ");
    if(i > 0)
      ret = ret.substr(0, i);
    else
      ret = ret.substr(0, maxLen);
    if(ellipsisMark != "") ret += " " + ellipsisMark;
  }else{
    ret = txt;
  }
  return ret;
}

// Zamienia listę słów pooddzielanych przecinkami na "słownik", czyli obiekt,
// którego atrybutami są słowa, a wartościami liczba 1. Usuwa spacje ze słów
// i ignoruje puste.
function CommaStringListToObject(list, truncLen)
{
  var obj = new Object();
  var arr = list.split(',');
  for(i in arr) {
    var s = Trim(arr[i]);
    if(truncLen) s = s.substr(0, truncLen);
    if(s != '') obj[s] = 1;
  }
  return obj;
}

function ObjectPropertiesCount(obj)
{
  var i, cnt = 0;
  for(i in obj) cnt++;
  return cnt;
}

function ObjectFirstPropertyName(obj)
{
  var i;
  for(i in obj) return i;
}

// Tworzy obiekt klasy Date na podstawie daty w formacie YYYY-MM-DD.
// Miesiąc i dzień mogą być jednocyfrowe.
// Nie sprawdza poprawności daty.
function StringToDate(dateStr)
{
  var mat = dateStr.match( /^\s*([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})\s*$/ );
  var dzien = parseInt( mat[ 3 ], 10 );
  var miesiac = parseInt( mat[ 2 ], 10 );
  var rok = parseInt( mat[ 1 ], 10 );
  return new Date(rok, miesiac, dzien);
}

