﻿var TSV2 = {
  ver:202,
  base: '//ts.faz.net/ts/t.aspx?', 

  //Basistagging (PI)
  tag: function(o) {
    //payload ist entweder param, oder schon vorhandene payload oder nix. Wenn nix -> Ende
    o = o || this.payload || {};
    if (!o.id) return;
    //Speichern
    this.payload = o;
    delete this.payload.sbtn;

    //URL-Postclick ermitteln (fuer RSS und NWL)
    var gts;
    b=location.href.split('_gts=');
    if (b.length>1) {
      b=b[1].split('&');
      gts=b[0];
    }

    //Referrer ermitteln
    ref = document.referrer || '';
    ref = gts || ref;
    if (ref.length>0) ref='ref='+encodeURI(ref);

    //Alles zusammenpacken und abschicken
    a=[]; for(key in o) if (key!='id') a.push(key+"="+encodeURI(o[key]));
    a=['2|p',o.id,a.join(','),'|T||',Math.floor(Math.random() * 1000000000),ref];
    url = location.protocol+this.base+a.join('|');
    document.write ('<img src="'+url+'" width="1" height="1" alt="" /><br>\n');
  },
  
  //extended tag. Benutzt die gegebene payload, erweitert sie um die props in ext und sendet das ganze
  etag: function(ext){
    o = this.payload || {};
    for(key in ext) o[key] = ext[key];
    this.send(o);
  },

  clk: function(el){
    //Ermittle Button-Parameter (entweder parameter el, oder ein "faztag"-Attribut im Ausloeser)
    //Wenn btn parameter gefunden, objekt erweitern
    var btn, o = this.payload || {};
    try{
      btn = typeof(el)=="string"? el : el.attributes['faztag'].nodeValue; 
      btn = btn || ''; 
      if (btn.length>0) o.sbtn = btn;
    } catch (e) {}
    this.send(o);
  },

  //serialisiert das objekt zu einem url
  send: function(o,anchor){
    var a=[]; o = o || this.payload || {}; 
    if (!o.id) return '';

    for(key in o) if (key!='id') {
      var val = this.fi(o[key]);
      a.push(key+"="+encodeURI(val));
    }

    a=['2|p',o.id,a.join(','),'|T||',Math.floor(Math.random() * 1000000000)];    
    x=new Image();
    var retVal = true;
    if ( typeof(anchor) != "undefined" && anchor != null ){
        // workaround for safari/opera
        if ( jQuery.browser.opera || jQuery.browser.safari ){
            x.onload=function(){ TSV2.redirect(anchor)};
            x.onError=function(){ TSV2.redirect(anchor)};
            retVal = false;
        }
    }    
    x.src=location.protocol+this.base+a.join('|');
    return retVal;
  },

  redirect: function(anchor)
  {
    if ( anchor.target == "_top" && window.parent != null )
        window.parent.location = anchor.href;
    else if ( anchor.target == "_blank" )
        window.open( anchor.href );
    else
        window.location = anchor.href;    
  },
  
  fi: function(s){
    if(typeof(s)!='string') return s;
    s = s.replace(/[^a-zA-Z0-9äöüßÄÖÜ :.!?/~_\-]/gi, ' '); //limit
    s = s.replace(/\s+/gi, ' '); //multi-blanks -> single blanks
    s = s.replace(/^\s+/gi, ''); //trim left
    s = s.replace(/ +$/gi, '');  //trim right
    s = s.replace(/\s*\/\s*/gi, '/');  //slash trim
    return s;
  },

  addEvent: function ( obj, type, fn ){
     if (obj.addEventListener) {
        obj.addEventListener( type, fn, false );
     } else if (obj.attachEvent) {
        obj['e'+type+fn] = fn;
        obj[type+fn] = function() { obj['e'+type+fn]( window.event ); };
        obj.attachEvent( 'on'+type, obj[type+fn] );
     }
  },
  
  //Ermittelt die Koordinaten eines Elements und liefert x1,y1,x2,y2 als string
  gc: function(el){
    if (!el) return '';
    var w = parseInt(el.offsetWidth);
    var h = parseInt(el.offsetHeight);
    var l = 0; var t = 0;

		do {
			l += el.offsetLeft || 0;
			t += el.offsetTop || 0;
			el = el.offsetParent;
		} while (el);
    a=[l, t, l+w, t+h];
    return (a.join('/'));
  },

  wclk: function(ev){
    try{
      T=TSV2;
      ev = ev || window.event; if (!ev) return;
      el = ev.target? ev.target : ev.srcElement; if (!el) return;
      x = ev.pageX || ev.clientX + document.documentElement.scrollLeft;
      y = ev.pageY || ev.clientY + document.documentElement.scrollTop;
      s = x + '/' + y + '/' + T.gc(el);
      T.send({id:2,sclk:s});
    } catch (e) {}
  }

};
TSV2.addEvent(document, 'click', TSV2.wclk);

