// Ajax Tabs Content script v2.0- © Dynamic Drive DHTML code library (http://www.dynamicdrive.com)
// Updated Oct 21st, 07 to version 2.0. Contains numerous improvements
// Updated Feb 18th, 08 to version 2.1: Adds a public "tabinstance.cycleit(dir)" method to cycle forward or backward between tabs dynamically. Only .js file changed from v2.0.
// Updated April 8th, 08 to version 2.2:
// -Adds support for expanding a tab using a URL parameter (ie: http://mysite.com/tabcontent.htm?tabinterfaceid=0) 
// -Modified Ajax routine so testing the script out locally in IE7 now works 

function m() {
  if (window.$ && window.Element && window.Element.getWidth) {
    mdiv = $('img_section');
    if (mdiv) {
      var w = Element.getWidth(mdiv);
      if (w > 40) {
        $('p_info').style.width = (w - 35) + "px";
        $('p_info_bg').style.width = (w - 15) + "px";
      }
    }
  }
}

var tabTimers = new Array();

var ddajaxtabssettings = {};

ddajaxtabssettings.bustcachevar = 0;
// bust potential caching of external pages after initial request? (1=yes, 0=no)
var loading_text = 'Pobieranie';
if (window.location.href.match(/\/en\/?/)) {
  loading_text = 'Loading';                      
}
ddajaxtabssettings.loadstatustext = "";

// //NO NEED TO EDIT BELOW////////////////////////

function ddajaxtabs(tabinterfaceid, contentdivid) {
  this.tabinterfaceid = tabinterfaceid; // ID of Tab Menu main container
  this.tabs = document.getElementById(tabinterfaceid).getElementsByTagName("a"); // Get
  // all
  // tab
  // links
  // within
  // container
  this.enabletabpersistence = true;
  this.hottabspositions = []; // Array to store position of tabs that have a
                              // "rel" attr defined,
  // relative to all tab links, within container
  this.currentTabIndex = 0; // Index of currently selected hot tab (tab with sub
  // content) within hottabspositions[] array
  this.contentdivid = contentdivid;
  this.defaultHTML = "";
  this.defaultIframe = '<iframe src="about:blank" marginwidth="0" marginheight="0" frameborder="0" vspace="0" hspace="0" class="tabcontentiframe" style="width:100%; height:auto; min-height: 100px"></iframe>';
  this.defaultIframe = this.defaultIframe.replace(/<iframe/i, '<iframe name="'
      + "_ddajaxtabsiframe-" + contentdivid + '" ');
  this.revcontentids = []; // Array to store ids of arbitrary contents to
                            // expand/contact as well
  // ("rev" attr values)
  this.selectedClassTarget = "link"; // keyword to indicate which target
  // element
  // to assign "selected" CSS class
  // ("linkparent" or "link")
}

ddajaxtabs.connect = function(pageurl, tabinstance, target) {
  var page_request = false;
  var bustcacheparameter = "";

  if (window.ActiveXObject) { // Test for support for ActiveXObject in IE first
                              // (as XMLHttpRequest in IE7
    // is broken)

    try {
      page_request = new ActiveXObject("Msxml2.XMLHTTP");
    }

    catch (e) {
      try {
        page_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
      }
    }
  } else if (window.XMLHttpRequest) // if Mozilla, Safari etc
    page_request = new XMLHttpRequest();
  else
    return false;

  var ajaxfriendlyurl = pageurl.replace(/^http:\/\/[^\/]+\//i, "http://"
      + window.location.hostname + "/");
  page_request.onreadystatechange = function() {
    ddajaxtabs.loadpage(page_request, pageurl, tabinstance, target);
  };

  if (ddajaxtabssettings.bustcachevar) // if bust caching of external page
    bustcacheparameter = (ajaxfriendlyurl.indexOf("?") != -1) ? "&"
        + new Date().getTime() : "?" + new Date().getTime();
  // a2s - dorobiliem wlasne cachowanie
  // bustcacheparameter=(ajaxfriendlyurl.indexOf("?")!=-1)? "": ""

  page_request.open('GET', ajaxfriendlyurl + bustcacheparameter, true);
  page_request.send(null);

};

ddajaxtabs.loadpage = function(page_request, pageurl, tabinstance, target) {
  var divId = tabinstance.contentdivid;
  if (typeof target != 'undefined' && target != '') {
    divId = target;
  }
  
  if (document.getElementById(divId)) {
    var container = $('#category_container');
    
    if(window.mask)
      mask(container);

    if (page_request.readyState == 4
        && (page_request.status == 200 || window.location.href.indexOf("http") == -1)) {
      document.getElementById(divId).innerHTML = page_request.responseText;
      
      if(container.length && container.unmask) container.unmask();
      
      ddajaxtabs.ajaxpageloadaction(pageurl, tabinstance);

      if (typeof window.categoryListSetup != 'undefined') {
        categoryListSetup();
      }
    }
  }
};

ddajaxtabs.ajaxpageloadaction = function(pageurl, tabinstance) {
  tabinstance.onajaxpageload(pageurl); // call user customized onajaxpageload()
  // function when an ajax page is fetched/
  // loaded

};

ddajaxtabs.getCookie = function(Name) {
  var re = new RegExp(Name + "=[^;]+", "i"); // construct RE to search for
  // target name/value pair
  if (document.cookie.match(re)) // if cookie found
    return document.cookie.match(re)[0].split("=")[1] // return its value
  return ""
}

ddajaxtabs.setCookie = function(name, value) {
  document.cookie = name + "=" + value + ";path=/" // cookie value is domain
  // wide (path=/)
}

ddajaxtabs.prototype = {

  expandit : function(tabid_or_position) { // PUBLIC function to select a tab
    // either by its ID or position(int)
    // within its peers
    this.cancelautorun() // stop auto cycling of tabs (if running)
    var tabref = ""
    try {
      if (typeof tabid_or_position == "string"
          && document.getElementById(tabid_or_position).getAttribute("rel")) // if
        // specified
        // tab
        // contains
        // "rel"
        // attr
        tabref = document.getElementById(tabid_or_position)
      else if (parseInt(tabid_or_position) != NaN
          && this.tabs[tabid_or_position].getAttribute("rel")) // if specified
        // tab contains
        // "rel" attr
        tabref = this.tabs[tabid_or_position]
    } catch (err) {
      alert("Invalid Tab ID or position entered!")
    }
    if (tabref != "") // if a valid tab is found based on function parameter
      this.expandtab(tabref) // expand this tab
    if (window.categoryListSetup) {
      categoryListSetup();
    }
    m();
  },

  cycleit : function(dir, autorun) { // PUBLIC function to move foward or
    // backwards through each hot tab
    // (tabinstance.cycleit('foward/back') )

    if (dir == "next") {
      var currentTabIndex = (this.currentTabIndex < this.hottabspositions.length - 1) ? this.currentTabIndex + 1
          : 0;
    }

    else if (dir == "prev") {
      var currentTabIndex = (this.currentTabIndex > 0) ? this.currentTabIndex - 1
          : this.hottabspositions.length - 1
    }
    if (typeof autorun == "undefined") // if cycleit() is being called by user,
      // versus autorun() function
      this.cancelautorun() // stop auto cycling of tabs (if running)
    this.expandtab(this.tabs[this.hottabspositions[currentTabIndex]])
  },

  setpersist : function(bool) { // PUBLIC function to toggle persistence feature
    this.enabletabpersistence = bool
  },

  loadajaxpage : function(pageurl, target) { // PUBLIC function to fetch a page
    // via Ajax and display it within
    // the Tab Content instance's
    // container
    if (window.categoryListSetup) {
      categoryListSetup();
    }
    m();
    ddajaxtabs.connect(pageurl, this, target);
  },

  loadiframepage : function(pageurl) { // PUBLIC function to fetch a page and
    // load it into the IFRAME of the Tab
    // Content instance's container
    if (window.categoryListSetup) {
      categoryListSetup();
    }
    m();
    this.iframedisplay(pageurl, this.contentdivid)
  },

  setselectedClassTarget : function(objstr) { // PUBLIC function to set which
    // target element to assign
    // "selected" CSS class
    // ("linkparent" or "link")
    this.selectedClassTarget = objstr || "link"
  },

  getselectedClassTarget : function(tabref) { // Returns target element to
    // assign "selected" CSS class to
    return (this.selectedClassTarget == ("linkparent".toLowerCase())) ? tabref.parentNode
        : tabref
  },

  urlparamselect : function(tabinterfaceid) {
    var result = window.location.search.match(new RegExp(tabinterfaceid
        + "=(\\d+)", "i")) // check for "?tabinterfaceid=2" in URL
    return (result == null) ? null : parseInt(RegExp.$1) // returns null or
    // index, where index
    // (int) is the
    // selected tab's
    // index
  },

  onajaxpageload : function(pageurl) { // PUBLIC Event handler that can invoke
    // custom code whenever an Ajax page has
    // been fetched and displayed
    // do nothing by default
    if (window.categoryListSetup) {
      categoryListSetup();
    }
    m();
  },

  expandtab : function(tabref) {
    var relattrvalue = tabref.getAttribute("rel");
    // Get "rev" attr as a string of IDs in the format ",john,george,trey,etc,"
    // to easy searching through
    var associatedrevids = (tabref.getAttribute("rev")) ? ","
        + tabref.getAttribute("rev").replace(/\s+/, "") + "," : "";

 //   if (relattrvalue == "#default") {
  //    if (document.getElementById(this.contentdivid)) {
  //      document.getElementById(this.contentdivid).innerHTML = this.defaultHTML;
  //    }
  //  } else if (relattrvalue == "#iframe") {
  //    this.iframedisplay(tabref.getAttribute("href"), this.contentdivid);
   // } else {

      if (relattrvalue == "#default") {
        if (document.getElementById(this.contentdivid)) {
          document.getElementById(this.contentdivid).innerHTML = this.defaultHTML;
        }
      } else if (relattrvalue == "#iframe") {
        this.iframedisplay(tabref.getAttribute("href"), this.contentdivid);
      } else {
        ddajaxtabs.connect(tabref.getAttribute("href"), this);
      }
      
  //  }

    this.expandrevcontent(associatedrevids)
    for ( var i = 0; i < this.tabs.length; i++) { // Loop through all tabs, and
                                                  // assign only the selected
                                                  // tab the CSS class
      // "selected"
      this.getselectedClassTarget(this.tabs[i]).className = (this.tabs[i]
          .getAttribute("href") == tabref.getAttribute("href")) ? "selected"
          : ""
    }
    if (this.enabletabpersistence) // if persistence enabled, save selected tab
      // position(int) relative to its peers
      ddajaxtabs.setCookie(this.tabinterfaceid, tabref.tabposition)
    this.setcurrenttabindex(tabref.tabposition) // remember position of selected
    // tab within hottabspositions[]
    // array
    if (window.categoryListSetup) {
      categoryListSetup();
    }
    m();
  },

  iframedisplay : function(pageurl, contentdivid) {
    if (typeof window.frames["_ddajaxtabsiframe-" + contentdivid] != "undefined") {
      try {
        delete window.frames["_ddajaxtabsiframe-" + contentdivid]
      } // delete iframe within Tab content container if it exists (due to bug
        // in
      // Firefox)
      catch (err) {
      }
    }
    document.getElementById(contentdivid).innerHTML = this.defaultIframe
    window.frames["_ddajaxtabsiframe-" + contentdivid].location
        .replace(pageurl) // load
    // desired
    // page
    // into
    // iframe
    if (window.categoryListSetup) {
      categoryListSetup();
    }
    m();
  },

  expandrevcontent : function(associatedrevids) {
    var allrevids = this.revcontentids
    for ( var i = 0; i < allrevids.length; i++) { // Loop through rev attributes
                                                  // for all tabs in this tab
                                                  // interface
      // if any values stored within associatedrevids matches one within
      // allrevids, expand that DIV, otherwise, contract it
      document.getElementById(allrevids[i]).style.visibility = (associatedrevids
          .indexOf("," + allrevids[i] + ",") != -1) ? "visible" : "hidden"
    }
    if (window.categoryListSetup) {
      categoryListSetup();
    }
    m();
  },

  setcurrenttabindex : function(tabposition) { // store current position of tab
    // (within hottabspositions[]
    // array)
    for ( var i = 0; i < this.hottabspositions.length; i++) {
      if (tabposition == this.hottabspositions[i]) {
        this.currentTabIndex = i
        break
      }
    }
  },

  autorun : function() { // function to auto cycle through and select tabs
    // based on a set interval
    this.cycleit('next', true)
  },

  cancelautorun : function() {
    if (typeof this.autoruntimer != "undefined")
      clearInterval(this.autoruntimer)
  },

  init : function(automodeperiod) {
    var persistedtab = ddajaxtabs.getCookie(this.tabinterfaceid) // get
    // position of
    // persisted
    // tab
    // (applicable
    // if
    // persistence
    // is enabled)
    var selectedtab = -1 // Currently selected tab index (-1 meaning none)
    var selectedtabfromurl = this.urlparamselect(this.tabinterfaceid) // returns
    // null or
    // index
    // from:
    // tabcontent.htm?tabinterfaceid=index
    this.automodeperiod = automodeperiod || 0
    this.defaultHTML = document.getElementById(this.contentdivid) ? document
        .getElementById(this.contentdivid).innerHTML : '';
    for ( var i = 0; i < this.tabs.length; i++) {
      this.tabs[i].tabposition = i // remember position of tab relative to its
      // peers
      if (this.tabs[i].getAttribute("rel")) {
        var tabinstance = this
        this.hottabspositions[this.hottabspositions.length] = i; // store
                                                                  // position
        // of "hot" tab
        // ("rel" attr
        // defined)
        // relative to its
        // peers
        // Micha³ Kluczka
        this.tabs[i].onclick = function() {
          var caller = this;
          if (caller.className != 'selected') {
            tabinstance.expandtab(caller);
            tabinstance.cancelautorun();
          }
          ;
          if (tabTimers[i]) {
            clearTimeout(tabTimers[i]);
          }

          return false;
        };

        this.tabs[i].onmouseover = function() {
          var caller = this;
          tabTimers[i] = setTimeout(function() {
            if (caller.className != 'selected') {
              tabinstance.expandtab(caller);
              tabinstance.cancelautorun();
            }
            ;
          }, 1000);
        };
        this.tabs[i].onmouseout = function() {
          clearTimeout(tabTimers[i]);
        };
        /*
         * this.tabs[i].onmouseover = function(){ if(this.className !=
         * 'selected') { tabinstance.expandtab(this) tabinstance.cancelautorun()
         * //stop auto cycling of tabs (if running) }
         * 
         * return false }
         */
        if (this.tabs[i].getAttribute("rev")) { // if "rev" attr defined, store
                                                // each value within "rev" as an
                                                // array
          // element
          this.revcontentids = this.revcontentids.concat(this.tabs[i]
              .getAttribute("rev").split(/\s*,\s*/))
        }
        if (selectedtabfromurl == i
            || this.enabletabpersistence
            && selectedtab == -1
            && parseInt(persistedtab) == i
            || !this.enabletabpersistence
            && selectedtab == -1
            && this.getselectedClassTarget(this.tabs[i]).className == "selected") {
          selectedtab = i // Selected tab index, if found
        }
      }
    } // END for loop
    if (selectedtab != -1) // if a valid default selected tab index is found
      this.expandtab(this.tabs[selectedtab]) // expand selected tab (either
                                              // from
      // URL parameter, persistent
      // feature, or class="selected"
      // class)
    else
      // if no valid default selected index found
      this.expandtab(this.tabs[this.hottabspositions[0]]) // Just select first
                                                          // tab
      // that contains a "rel"
      // attr

      // a2s - wylaczam opzoznienie zaladowania

      /*
       * if (parseInt(this.automodeperiod)>5000 &&
       * this.hottabspositions.length>1){
       * this.autoruntimer=setInterval(function(){tabinstance.autorun()},
       * this.automodeperiod) }
       */

  } // END int() function

} // END Prototype assignment

