var Cms;
if (!Cms) Cms = {};

/**
 * Skrypt ten nalezy zaimportowac do dokumentu (tag <script>)
 * przed zaimportowainem skryptow, ktore z niego korzystaja.
 * Stad warto umiescic go na gorze, zaraz po dolaczonych 
 * standardowych bibliotekach.
 * 
 * @author BS
 */

/**
 * Zwraca unikalne id zaczynajace sie od sBase.
 *
 * W calym dokumencie moze byc tylko jeden element
 * o danym id. Ta funkcja pozwala na uzyskanie
 * takiego unikalnego w skali dokumentu id.
 *
 * Gdy nie ma elementu o  
 *
 * @param   sBase string  Poczatek id
 * @return  string        sBase gdy nie ma elementu o id sBase,
 *                        sBase + N gdzie N jest liczba calkowita
 *                        w przeciwnym wypadku
 *
 * @uses Cms._uniqueId
 *
 */ 
Cms.getUniqueId = function(sBase) {
  var rval = sBase;
  var index = 0;
  while (document.getElementById(rval)) {
    rval = sBase + index;
    index++;
  }
  //alert("getUniqueId: " + rval + " (unique? " + (document.getElementById(rval) == null) + ")");
  return "" + rval;
}


/**
 * Tylko elementy spelniajace ten selektor beda
 * wykorzystywane przez skrypty.
 */ 
Cms.JS_ALLOWED_SELECTOR = '.JS';

/**
 * Elementy spelniajace ten selektor beda IGNOROWANE
 * przez skrypty.
 */ 
Cms.JS_FORBIDDEN_SELECTOR = '.NoJS';

/**
 * 
 * @param sSel string Selektor bazowy
 * @return string 
 */
Cms.jsSelector = function(sSel) {
  if (!sSel) {
    return sSel;
  }
  var sels = sSel.split(/\s*,\s*/);
  var rval = '';

  var allowedSel = Cms.JS_ALLOWED_SELECTOR || '';
  var forbiddenSel = Cms.JS_FORBIDDEN_SELECTOR ? ':not(' + Cms.JS_FORBIDDEN_SELECTOR + ')' : '';

  for (var i = 0; i < sels.length; i++) {
    var sel = sels[i];
    if (i > 0) {
      rval += ', ';
    }
    rval += sel + allowedSel + forbiddenSel;
  }
  return rval;
}

Cms.autoApply = function(cClass, sSelector, fApply) {
  var selector = Cms.jsSelector(sSelector);
  cClass.applyToDocument = function(sel) {
    if (typeof sel != 'string') {
      sel = selector;
    }
    $j(sel).each(fApply || function(i, el) {
        var instance = new cClass(el);
      }
    )
  }
  $j().ready(cClass.applyToDocument);
}

