//==================================================CORE==========================================================================

var Cms = { 
  //Aktualna pozycja myszy
  mousePositionX: 0,
  mousePositionY: 0,
  
  /*
   * Funkcja inicjujaca uruchamiana na dole skryptu
   */
  init: function(){
    document.onmousedown = Cms.captureMousePosition;
    document.onmousemove = Cms.captureMousePosition;
  },
  
  /*
   * Badanie wspolrzednych myszy
   */
  captureMousePosition: function(e){
    if (!e) var e = window.event;
    if (e.pageX || e.pageY)         {
      Cms.mousePositionX = e.pageX;
      Cms.mousePositionY = e.pageY;
    }
    else if (e.clientX || e.clientY)        {
      Cms.mousePositionX = e.clientX + document.body.scrollLeft
        + document.documentElement.scrollLeft;
      Cms.mousePositionY = e.clientY + document.body.scrollTop
        + document.documentElement.scrollTop;
    }
  },

  /*
   * pobranie parametru GET
   */
  getParam: function(name){
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    if( results == null )
      return 0;
    else
      return results[1];
  }

}

//==================================================MISC==========================================================================

Cms.misc = {

  /*
   * Otwiera nowe okienko o wymiarach w x h
   */
  popup: function(url, w, h){
    mywin=window.open(url,'win','width='+w+',height='+h);
    mywin.focus();
  },

  /*
   * Pauza
   */
  pause: function(numberMillis){
    var now = new Date();
    var exitTime = now.getTime() + numberMillis;
    while (true) {
      now = new Date();
      if (now.getTime() > exitTime)
      return;
    }
  },

  /*
   * Podmiana obrazka
   */
  flipImage: function(nazwa,url){
     document[nazwa].src = url; 
  },

  /*
   * Przetwarza dane z wielu checkboxow do jednej zmiennej
   */
  multiChecboxSplitter: function(frmObj, srcElementName, dstElementName){
    var elementArr = frmObj.elements;
    var checkedArr = new Array();
    for (var i = 0; i < elementArr.length; i++) {
      if (elementArr[i].name==srcElementName && elementArr[i].checked) {
        checkedArr.push(elementArr[i].value);
      }
    }
    frmObj.elements[dstElementName].value=checkedArr;
  },

  /*
   * Przetwarza dane z multiselecta do jednej zmiennej
   */
  multiSelectSplitter: function(frmObj, srcElementName, dstElementName){
    var selectObj = frmObj.elements[srcElementName];
    var checkedArr = new Array();
    for (var i = 0; i < selectObj.options.length; i++) {
      if (selectObj.options[ i ].selected) {
        checkedArr.push(selectObj.options[ i ].value);
      }
    }
    frmObj.elements[dstElementName].value=checkedArr;
  }

}

//==================================================LAYER=========================================================================

Cms.layer = {

  /*
   * Funkcja inicjujaca uruchamiana na dole skryptu
   */
  init: function(){
    //wymalowanie pustej ukrytej warstwy dla przyszlego tooltipa
    document.write('<div id="toolTipId" style="visibility:hidden; position:absolute;"></div>');
  },

  /*
   * pozycjonowanie layerka obok lub pod myszka
   */
  layerPositioning: function(popupId, layerPosition){
    var xOffset = 10;
    var yOffset = 10;
    var scrollSize = 15;
    if (document.all) { //IE
      var xp = document.body.scrollLeft + document.documentElement.scrollLeft;
      var xq = xp + document.documentElement.clientWidth - scrollSize;
      var yp = document.body.scrollTop + document.documentElement.scrollTop;
      var yq = yp + document.documentElement.clientHeight - scrollSize;
    }
    if (!document.all && document.getElementById) { //NS
      var xp = window.pageXOffset;
      var xq = xp + window.innerWidth - scrollSize;
      var yp = window.pageYOffset;
      var yq = yp + window.innerHeight - scrollSize;
    }

    var x = 0;
    if (layerPosition=="near") {
      if (Cms.mousePositionX + popupId.clientWidth + xOffset > xq)
        x = Cms.mousePositionX - popupId.clientWidth - xOffset; //prawa
      else
        x = Cms.mousePositionX + xOffset;                       //srodek
    }
    if (layerPosition=="center") {
      x = Cms.mousePositionX - popupId.clientWidth/2;
      if (x + popupId.clientWidth + xOffset > xq) x = xq - popupId.clientWidth - xOffset; //jesli zbyt w prawo
      if (x < xp) x = xp; //jesli zbyt w lewo
    }
    if (layerPosition=="pageCenter") {
      x = xp/2 + xq/2 - popupId.clientWidth/2;
    }

    var y = 0;
    if (layerPosition=="near") {
      if (Cms.mousePositionY + popupId.clientHeight + yOffset > yq)
        y = Cms.mousePositionY - popupId.clientHeight - yOffset; //dol
      else
        y = Cms.mousePositionY + yOffset;                        //srodek
    }
    if (layerPosition=="center") {
      y = Cms.mousePositionY - popupId.clientHeight/2;
      if (y + popupId.clientHeight - yOffset > yq) y = yq - popupId.clientHeight + yOffset; //jesli za nisko
      if (y < yp) y = yp; //jesli za wysoko
    }
    if (layerPosition=="pageCenter") {
      y = yp/2 + yq/2 - popupId.clientHeight/2;
    }

    popupId.style.left = x+"px";
    popupId.style.top = y+"px";
  },

  /*
   * prezentacja tooltipa
   */
  showToolTip: function(text){
    if (!Cms.mousePositionX && !Cms.mousePositionY) {
      return;
    }
    var toolTipId = document.getElementById("toolTipId");
    var tooltiptext = '<div class="tooltip">' + text + '</div>';
    toolTipId.innerHTML = tooltiptext;
    this.layerPositioning(toolTipId, 'near')
    toolTipId.style.visibility = 'visible';
  },

  /*
   * ukrycie tooltipa
   */
  hideToolTip: function(){
    var toolTipId = document.getElementById("toolTipId");
    toolTipId.style.visibility = 'hidden';
  }

}

//==================================================PAGE==========================================================================

Cms.page = {

  /*
   * Funkcja inicjujaca uruchamiana na dole skryptu
   */
  init: function(){
    //przesuniecie strony po zaladowaniu
    window.onload=function() {
      //przesuniecie strony
      var xoff = Cms.getParam("xoff");
      var yoff = Cms.getParam("yoff");
      window.scrollBy(xoff, yoff);
      //usuniecie parametrow xoff i yoff ze wszystkich linkow
      var object = document.getElementsByTagName('a');
      for (var i=0;i<object.length;i++) {
        object[i].href = object[i].href.replace(/&xoff=[0-9]*/, "");
        object[i].href = object[i].href.replace(/&yoff=[0-9]*/, "");
      }
    }
  },

  /*
   * doklejenie do linka informacji pozycjonujacych
   */
  addCoords: function(obj){
    if (document.all) { //IE
      var xp = document.body.scrollLeft + document.documentElement.scrollLeft;
      var yp = document.body.scrollTop + document.documentElement.scrollTop;
    }
    if (!document.all && document.getElementById) { //NS
      var xp = window.pageXOffset;
      var yp = window.pageYOffset;
    }
    obj.href = obj.href + "&xoff=" + xp + "&yoff=" + yp;
  }

}

//==================================================AJAX==========================================================================

Cms.ajax = {

  /*
   * Laduje do obszaru boxId zawartosc pobrana z urlString
   */
  get: function(boxId, urlString){
    AjaxRequest.get(
      {
      "url":urlString
      ,"onSuccess":function(req){ document.getElementById(boxId).innerHTML=req.responseText; }
      ,"onError":function(req){ document.getElementById(boxId).innerHTML=""; }
      }
    );
    
    return false;
  },

  /*
   * Laduje do popup'u boxId (jesli nie ma tworzy go) zawartosc pobrana z urlString a nastepnie pozycjonuje go w boxPosition
   */
  popup: function(boxId, urlString, boxPosition){
    var popupDiv = document.getElementById(boxId)
    if (!popupDiv) {
      var popupDiv = document.createElement('div');
      popupDiv.setAttribute('id',boxId);
      popupDiv.style.position = "absolute";
      popupDiv.style.visibility = "hidden";
      popupDiv.onclick = function (e) { popupDiv.style.visibility = "hidden"; };
      document.body.appendChild(popupDiv);
    }
    
    AjaxRequest.get(
      {
      "url":urlString
      ,"onSuccess":function(req){ 
          popupDiv.innerHTML=req.responseText; 
          if (boxPosition) { Cms.layer.layerPositioning(popupDiv, boxPosition); } 
          popupDiv.style.visibility = "visible"; 
        }
      ,"onError":function(req){ popupDiv.innerHTML=""; }
      }
    );

    return false;
  },

  /*
   * Wykonuje submit formularza formObject i przekazuje zawartosc do boxId
   */
  submit: function(formObject, boxId){
    var status = AjaxRequest.submit(
      formObject
      ,{
        'onSuccess':function(req){ document.getElementById(boxId).innerHTML = req.responseText; }
        ,"onError":function(req){ document.getElementById(boxId).innerHTML=""; }
      }
    );
    return status;
  }

}

//==================================================CALENDAR======================================================================

Cms.calendar = {
  ie: document.all,
  ns6: document.getElementById && !document.all,
  data: new Date(),
  amies: '',
  arok: '',
  adzien: '',
  frmpole: '',
  frmsuffix: '',
  // ilość dni w roku
  dni: new Array(31,28,31,30,31,30,31,31,30,31,30,31),
  // nazwy miesiecy
  miesiac: new Array('Stycze&#324;','Luty','Marzec','Kwiecie&#324;', 'Maj','Czerwiec','Lipiec','Sierpie&#324;','Wrzesie&#324;','Pa&#378;dziernik','Listopad','Grudzie&#324;'),
  // dane kolorow
  kol_0: '#FFFFFF', // kolor tla kalendarza, kolor tekstu wybranego dnia...
  kol_1: '#efe7ef', // kolor pol kalendarza - dni zwykłe
  kol_2: '#d7d7df', // kolor pol kalendarza - niedziele
  kol_3: '#848684', // kolor pola oznaczajacego aktualny dzien, kolor ramki, przycisku zamykajacego, tekstu
  kol_4: '#888888', // kolor pol okreslajacych dni tygodnia (pn,wt...)
  kol_5: '#fbfbfb', // kolor tekstu dni tygodnia (pn,wt...)
  // ile lat pokazywane w kalendarzu od aktualnej daty
  wstecz: 5, 
  wprzod: 1,

  /*
   * Funkcja inicjujaca uruchamiana na dole skryptu
   */
  init: function(){
    this.amies = this.data.getMonth();
    this.arok = this.data.getFullYear();
    this.adzien = this.data.getDate();
  
    //wymalowanie pustej ukrytej warstwy dla przyszlego kalendarza
    document.write('<div id="kalendarz" style="z-index:9;visibility:hidden;position:absolute;"></div>');
    document.write('<style type="text/css">');
    document.write('.dzien{font-size:11px;color:'+this.kol_3+';text-align:center;background-color:'+this.kol_1+';text-decoration:none}');
    document.write('.niedz{font-size:11px;color:'+this.kol_3+';text-align:center;background-color:'+this.kol_2+';text-decoration:none}');
    document.write('.aktday{color:'+this.kol_0+';font-weight:bold;text-align:center;background-color:'+this.kol_3+';text-decoration:none}');
    document.write('.dnityg{font-size:11px;color:'+this.kol_5+';text-align:center;font-weight:bold;background-color:'+this.kol_4+';}');
    document.write('.lista{font-size:11px;color:'+this.kol_3+';}</style>');
  },

  /*
   * ilosc dni w lutym = przeliczane po zmianie miesiaca lub roku
   */
  dniMies: function(){
     this.dni[1] = (rok % 4 == 0) ? 29 : 28;
  },

  /*
   * funkcja pokazujaca kalendarz pod kursorem myszy
   */
  showKalendar: function(fp, suffix){
      data = new Date(this.arok, this.amies, 1);
      mies = data.getMonth();
      rok = data.getFullYear();
      dzien = data.getDate();
      dzientyg = data.getDay()-1;
      if (dzientyg==-1) dzientyg=6; 
      
      this.dniMies();

      this.frmpole = fp;
      this.frmsuffix = suffix;
      pozx = Cms.mousePositionX;
      pozy = Cms.mousePositionY;

      this.rysujKal();		
      
      if(this.ns6 || this.ie)
      {
              document.getElementById('kalendarz').style.left = pozx+'px';
              document.getElementById('kalendarz').style.top = (pozy+10)+'px';
              document.getElementById('kalendarz').style.visibility = 'visible';
      }
  },

  /*
   * funkcja ukrywajaca kalendarz i wstawiajaca wybran&#261; dat&#281; do pola formularza
   */
  hideKal: function(){
      if(this.ns6 || this.ie)
              document.getElementById('kalendarz').style.visibility = 'hidden';

      // tutaj ustawia si&#281; format daty 		 
      // np:
      //	format = selectday + ' ' + this.miesiac[mies] + ' ' + rok;
      
      // inny format daty - z zerami poprzedzaj&#261;cymi
      mies++;
      if(mies < 10)
              mies = '0' + mies;
      if(selectday < 10)
              selectday = '0' + selectday;

      format = rok+'-'+mies+'-'+selectday	
                      
      this.frmpole.value = format + this.frmsuffix;
  },

  /*
   * ukrywanie kalendarza bez wstawiania daty
   */
  exitKal: function(){
     if(this.ns6 || this.ie) document.getElementById('kalendarz').style.visibility = 'hidden';
  },

  /*
   * ustawianie nowej daty po zmianie miesiaca lub roku
   */
  setData: function(){
      mies = document.forms['sdata'].elements['month'].value;
      rok = document.forms['sdata'].elements['year'].value;
      
      data = new Date(rok, mies, 1);
      mies = data.getMonth();
      rok = data.getFullYear();
      dzien = data.getDate();
      dzientyg = data.getDay()-1;
      if (dzientyg==-1) dzientyg=6; 
      this.dniMies();
      this.rysujKal();
  },

  /*
   * rysowanie kalendarza
   */
  rysujKal: function(){
      kaltxt = '<form name="sdata" onSubmit="return false;">';
      kaltxt += '<table border=0 cellpadding=0 cellspacing=2 style="border:'+this.kol_3+' 1px solid;background-color:'+this.kol_0+';">';
      kaltxt += '<tr class=dzien><td colspan=6 height=25><select name="month" class="lista" onChange="Cms.calendar.setData()">';		
      for(i=0;i<12;i++)
      {
              if(i==mies)
                      kaltxt += '<option value="'+i+'" selected>'+this.miesiac[i]+'</option>';
              else
                      kaltxt += '<option value="'+i+'">'+this.miesiac[i]+'</option>';
      }
      kaltxt += '</select>&nbsp;<select name="year" class="lista" onChange="Cms.calendar.setData()">';
      for(i=(rok-this.wstecz);i<=(rok+this.wprzod);i++)
      {
              if(i==rok)
                      kaltxt += '<option value="'+i+'" selected>'+i+'</option>';
              else
                      kaltxt += '<option value="'+i+'">'+i+'</option>';	
      }
      kaltxt += '</select>';
      kaltxt += '</td><td><a href="javascript:Cms.calendar.exitKal()"><span class="aktday">&nbsp;X&nbsp;</span></a></td></tr>';
      kaltxt += '<tr><td class=dnityg width=30>Pn</td><td class=dnityg width=30>Wt</td><td class=dnityg width=30>&#346;r</td>';
      kaltxt += '<td class=dnityg width=30>Czw</td><td class=dnityg width=30>Pt</td><td class=dnityg width=30>So</td><td class=dnityg width=30>Nd</td></tr><tr class=dzien>';

      j = 1;

      for(i=0;i<dzientyg+this.dni[mies];i++)
      {
              if(i>=dzientyg)
              {
                      if(j==this.adzien && rok==this.arok && mies==this.amies)
                              kaltxt += '<td class=aktday><a href="javascript:selectday='+j+';Cms.calendar.hideKal();" ><span class=aktday>'+j+'</span></a></td>';
                      else if((i+1)%7==0)
                              kaltxt += '<td class=niedz><a class=niedz href="javascript:selectday='+j+';Cms.calendar.hideKal();" >'+j+'</a></td>';
                      else
                              kaltxt += '<td><a class=dzien href="javascript:selectday='+j+';Cms.calendar.hideKal();" >'+j+'</a></td>';
                      j++;
                      if(i%7==6)
                              kaltxt += '</tr><tr class=dzien>';
              }
              else
                      kaltxt += '<td></td>';
      }

      kaltxt += '</tr></table></form>';
      
      document.getElementById("kalendarz").innerHTML = kaltxt;
  }

}

//==================================================INIT==========================================================================
  
Cms.init();
Cms.layer.init();
Cms.page.init();
Cms.calendar.init();
