/**
 * WPJSlib v1.01.13-lite Copyright 2007-2011, Wirtualna Polska SA, http://www.wp.pl, Licensed under the MIT license, http://stg.wp.pl/wpjslib_license.html
 * Date: 2011-06-15 09:57:33 CEST
 */

// WPJSlib konfiguracja
if (typeof(wp_sn)=='undefined') wp_sn = 'SN';
if (typeof(wp_dot_type)=='undefined') wp_dot_type = false;
if (typeof(wp_dot_send)=='undefined') wp_dot_send = true;
if (typeof(wp_fba)=='undefined') wp_fba = Math.round(new Date().getTime()/1000);
if (typeof(wp_leap)=='undefined') wp_leap = 1;
if (typeof(wp_wyszukajwwp)=='undefined') wp_wyszukajwwp = 0;

if (typeof(wp_rekid)=='undefined') rekid = 0; else rekid = wp_rekid;
NPB = NJB = function() { return false };

/**
 * WP dla modułu statystyk - uproszczona definicja obiektu WP
 * @author Łukasz Węgrzyński-Ścibiorek <lwegrzynski@wp-sa.pl>
 */
var WP = {
ver:  '1.01.13-lite',
      UA:   navigator.userAgent.toLowerCase(),
      TS:   new Date(), // TimeStamp Entry - ustawiany przy ładowaniu WPJSlib
      SSL:  document.location.href.substr(4,1)=='s'?'s':'' //zwraca stringa 's' jezeli strona jest po https, pusty jeżeli jest po standardowym http
};
WP.isGecko = !!(navigator.product=='Gecko' && !/(compatible|webkit)/.test(WP.UA));
WP.isIE = !!(document.all&&!window.opera);
WP.IEver = WP.isIE?parseFloat(/MSIE ([0-9]{1,}[.0-9]{0,})/.exec(navigator.userAgent)[1]):false;

WP.event = {
set : function(o, t, f) {
        if (!o || typeof(o)!='object' || !t || !f) return;
        if (o.attachEvent) o.attachEvent(t,f); else if (o.addEventListener) o.addEventListener(t.substr(2),f,false);
      },
unset : function(o, t, f) {
          if (!o || typeof(o)!='object' || !t || !f) return;
          if (o.detachEvent) o.detachEvent(t,f); else if (o.removeEventListener) o.removeEventListener(t.substr(2),f,false);
        },
getNode: function(t){
           var n;
           t = typeof(t)!='undefined'?t:window.event;
           if (t.target) n = t.target;
           else if (t.srcElement) n = t.srcElement;
           if (n.nodeType == 3) n = targ.parentNode; //anty-bug Safari    
           return n;        
         }
};

WP.string = {
stripTags : function(s) {
              return s.replace(/<\/?[^>]+>/gi, '');
            }
};

/**
 * WP.stat - samodzielny moduł obsługi statystyk portalowych Wirtualnej Polski S.A.
 * @author Łukasz Węgrzyński-Ścibiorek <lwegrzynski@wp-sa.pl>
 * @author Michał Hermuła <mhermula@wp-sa.pl>

TODO:
- zbadanie możliwości rezygnacji z ENTRY_HIT
*/
WP.stat = {

  /**
   * dot - obsługa statystyk portalowych
   */
TIMER: 600,  // timer w sekundach dla timeDota, domyślnie 600
       VID:  Math.round(Math.random()*1E10),
       DOTS: [], // tablica wysłanych dotów {typ:'', src:''}

init: function(){
        // bez tego pod FF się nie odswieżaja statsy przy wcisnieciu back
        if (!WP.isGecko) window.onunload = function(){ return true };

        // jeżeli wybrany dot typu "click"
        WP.event.set(document, 'onclick', this._oc);
        WP.event.set(document, 'onmousedown', this._od);
      },

      //wysyłanie dota z określonym SN
dot : function(sn) {
        this._sendDot('top', sn);
      },

      //metoda wyszukująca ST-* (StatTaga) lub ID kontenera DIV dla dota typu click
_clickDotGetStatTag : function(n) {
                        if (!n) return;
                        var K = '',
                            o = n;
                        //przeszukiwanie rodziców w poszukiwaniu StatTaga
                        while ( o && ( !o.className || !/ST-/.test(o.className) ) ) o = o.parentNode; //przeszukuje drzewo rodziców w poszukiwaniu StatTaga
                        if ( o && o.className && /ST-/.test(o.className) ) {
                          var T = /(ST-[a-zA-Z0-9_-]*)/.exec(o.className);
                          if (T[1]) K = T[1];
                        }
                        if (K.length>0) return K; //jeżeli znaleziony StatTag to go zwróć

                        //jeżeli nie znaleziono StatTaga to poszukaj kontenera DIV z ID
                        o = n;
                        while (  o && ( o.tagName != 'DIV' || !o.id  ) ) o = o.parentNode;
                        if ( o && o.id ) K = o.id;
                        return K;
                      },
                      //dla typu click
_clickDot : function(n, clickType){
              window.WPdotTS = -1;
              var title = '';
              if (!n.title) {
                title = WP.string.stripTags(n.innerHTML);
                title!=''?title.substring(0,128):'notitle';
              } else {
                title = n.title;
              }

              var ST = this._clickDotGetStatTag(n); //pobranie StatTaga lub ID

              var D = new Date();
              var PG = new String(document.location);

              WP.stat._SEND('click', "clk.gif?xd="+wp_sn+"&yd="+escape(ST)+"&pg="+escape(PG.substring(0,250))+"&tg="+escape(n.href.substring(0,250))+"&dt="+(D-WP.TS)+"&tt="+escape(title)+"&btt="+clickType, n, clickType==1);

            },

            //whichButton, 1-lewy, 2-prawy, 3-środkowy
whichButton : function(e){
                if (!e) e = event;
                var b;
                if (e.which == null) { //IE
                  b = (e.button < 2)?1:((e.button == 4)?3:2);
                } else { //nonIE
                  b = (e.which < 2)?1:((e.which == 2)?3:2);
                }
                return b;
              },
_findLinkNode: function(e){
                 if (!e) e = event;
                 var n = WP.event.getNode(e);
                 if (n.nodeName!='A' && n.nodeName!='AREA') {
                   var o = n;
                   while ( o && o.nodeName!='A' ) o = o.parentNode; //jeżeli element kliknięty to nie jest A to szukaj w rodzicach
                   if ( o && o.nodeName!='A' ) return; //jeżeli żaden rodzic nie jest A
                   n = o;
                 }
                 if (!n || !n.href) return;
                 return n;
               },  
_oc: function(e){
       var n = WP.stat._findLinkNode(e);
       if (!n) return;

       //tu sprawdzamy kliknięcie lewym klawiszem na onclick (również przy wciśniętym klawiszu Ctrl i Shift)
       var j = 0;
       try { j = (!!e.ctrlKey || !!e.shiftKey || !!e.metaKey || e.button == 1) } catch(x){}; //wykrywanie wciśniętego Ctrl'a i Shift'a
       if (!j) j = (n.target == '_blank' || n.target == '_new'); //wykrywanie ustawionego target'a
       if (WP.stat.whichButton(e)==1) {
         if (!j) {
           //jeżeli klik lewym klawiszem i bez ctrl/shift i są warunki do niewysyłania click'a to wyjdź
           if ( n.onclick || n.href.indexOf('javascript:')==0 || n.href.substr(n.href.length-1)=='#' ) return;
           //blokuj wysyłanie statsów gdy link kieruje na ten sam widok ale z kotwicą
           var h = n.href.indexOf('#');
           if ( h>0 && location.href.substr(0, h)==n.href.substr(0, h) ) return;
         }
         WP.stat._clickDot(n, Number(j?5:1));

         var time = ( new Date() ).getTime();
         while (time + 500 > ( new Date() ).getTime());
       }
     },
_od: function(e){
       var n = WP.stat._findLinkNode(e);
       if (!n) return;     

       //if (n.nodeName!='A') return;
       // tu sprawdzamy tylko klawisze prawy i środkowy, bo ich nie da się w pełni przechycić onclik-iem
       var b = WP.stat.whichButton(e);
       if (b>1) WP.stat._clickDot(n, b); // 2-right, 3-middle
     },

__statDebug: function(typ, p) {
               var c = parent || window;
               if (typeof(p)=='object') {
                 var b = function (i){
                   if (typ=='getPlayerStatus') return "<b>"+ ["Url", "Action", "Time", "Name", "Mid", "Channel", "Tags", "Type", "Size", ""][i] + "</b>";
                   if (typ=='getPlayerIntervalStatus') return "<b>"+["Time", "Url", "Type", "Size"][i]+ "</b>";
                   return i;
                 };
                 var o = '';
                 for (var i in p) o += b(i) + '=' + p[i] + ' ';
                 p = o;
               };
               if (c && typeof(c.logStats)=='function') {
                 var T = new Date();
                 c.logStats(typ, p, T-WP.TS);
               }	
             },

             //// metody prywatne
_SEND: function(typ, r, node, lbtn){
         var c = WP.stat.DOTS.length;
         this.c = c;
         var id = 'WP_DOT_'+c;
         this.id = id;
         this.typ = typ;
         this.node = node;
         lbtn = !!lbtn;

         //obsługa zdarzenia jak przyjdzie obrazek z dota
         var finish = function(){

           WP.stat.__statDebug('dot '+typ, window[id].src);
           //to do debugowania
           /*
              if (parent && typeof(parent.logStats)=='function') {
              var T = new Date();
              parent.logStats('dot '+typ, window['WP_DOT'].src, T-WP.TS);
              }
              */
           WP.stat.DOTS[c].status = 1;

           //jak przyszedł obrazek z dota to natychmiast przekieruj pod URL linku
           if (typ=='click' && lbtn && typeof(node.href)=='string' && typeof(node.getAttribute('target'))!='string' ) {
             //if (WPDotTS != -1) clearTimeout(WPdotTS);
             //WPdotTS = -1;
             //WP.stat.navigate(node.href);
           }
           window[id] = null; //kasowanie handlera obrazka
         };

         window[id] = new Image(1,1);
         window[id].src = 'http'+WP.SSL+'://dot.orange.pl/r'+Math.round(Math.random()*1E10)+'/'+r+'&v=4';
         window[id].onload = finish;
         WP.stat.DOTS[this.c] = { "typ":typ, "src":window[id].src, "status":0 };

         if (typ=='click' && lbtn && typeof(node.href)=='string' && !node.target){
           //WPDotTS = -1;
           //WPDotTS = setTimeout("if(WPDotTS>-1)WP.stat.navigate('"+node.href+"')", 500);
         }
         return this;     
       },
       // navigate - przekierowuje pod podany w parametrze URL z zachowaniem pod IE referrer'a do statystyk
navigate : function(h){
             var a = document.createElement("a");
             if (typeof(a.click) == 'undefined') {
               location.href = h; //non IE
             } else {
               a.href = h;
               document.body.appendChild(a);
               if (window.detachEvent) document.detachEvent('onclick',this._oc); else if (removeEventListener) document.removeEventListener('click',this._oc,false); //juz nie potrzebujemy wysyłać
               a.click(); //IE z wysłaniem referer'a
             };
           },
_dotStd: function(){
           this._sendDot('top');
           WP.event.set(window,'onload', WP.stat._dotOnLoad);
           //this.setEvent(window,'onload',WP.stat._dotOnLoad);
         },
_sendDot: function(typ, sn){
            // typ - top. bottom, sn - alternatywny SN
            sn = !sn?wp_sn:sn;

            if (!WP.stat.VID && !typ) return;
            var EH = typeof(ENTRY_HIT)!='undefined'?ENTRY_HIT:'';
            var RF = new String(document.referrer);
            var PG = new String(document.location).substring(0,250); //pobranie 250 pierwszych znaków z aktualnego location
            if (typeof(wp_dot_params)=='string'){ //jeżeli ustawiony wp_dot_params
              PG += (PG.indexOf('?')==-1?'?':'&') + wp_dot_params.substring(0,999); //dodaj do PG
            }
            //timestampy czasu ladowania
            var DT = '';
            if (typ == 'bottom'){ DT = '&dt='+WP.stat._DL; }  
            // wyslanie dota
            var dot = new this._SEND(typ, 'dot.gif?SN='+sn+'&Pos='+typ+'&pg='+escape(PG.substring(0,999))+'&rf='+escape(RF.substring(0,250))+'&vid='+this.VID+DT+'&fba='+(wp_fba?wp_fba:'0')+EH);
          },

          // metoda sluzaca do generowania statystyk elementow dynamicznych serwisu (np. rozwiniecie dynamicznej listy ajaxowej)  
eventDot: function(n, p){ //p=param
            if (!wp_sn||!n) return;
            if (!p) p='';
            var D = new Date(), PG = new String(document.location);
            var dot = new this._SEND('eventDot', 'clk.gif?xd='+wp_sn+'&yd='+escape(n)+'&pg='+escape(PG.substring(0,250))+'&dt='+(D-WP.TS)+'&tt='+escape(p));
          },

          // do badań na rządanie - show.gif nie jest parsowane standardowo
eventShow: function(p){
             if (!p) p = 'srv=test';
             var PG = new String(document.location);
             var dot = new this._SEND('eventShow', 'show.gif?'+p+'&pg='+escape(PG.substring(0,250)));
           },

_dotOnLoad: function(){
              // jeżeli nie ma ENTRY_HIT to nie wysyłamy bottoma
              if (typeof(ENTRY_HIT)=='undefined') return false;
              // obliczanie ladowania strony
              var D = new Date();
              WP.stat._DL = D - WP.TS;
              WP.stat._sendDot('bottom');
            },
            /* onDomLoad */
_dotDLoad: function(){
             WP.stat._DD = new Date(); 
           },
_dotTime: function(){
            this._sendDot('time');
            setTimeout('WP.stat._dotTime()',this.TIMER*1000);
          },
_dotTimeEnd: function(){
               WP.stat._sendDot('timeend');
             }
};

// Zainicjowanie statystyk WP-dot.
if (wp_dot_send) WP.stat.init();

