var linkTrackR = {
    iSiteID : 3,
    sLinkClass : 'link, a.blink',
    sEncrypted : '',
    sKeyword : '',
    sTrackr : '',
    aAllLinks : new Array(),
    sM4NMatch : 'm4n.nl',
    sM4NPrefix : '%264dsid%3D3%264dkn%3D',
    sDaisyconMatch : 'ds1.nl',
    sDaisyConPrefix : '&ws=',
	sTradeDoublerMatch : 'tradedoubler.com',
	sTradeDoublerPrefix : '&epi=',
    sAjaxUrl : 'http://trackr.yonego.nl/encript',
    sLinkAjaxUrl : 'http://trackr.yonego.nl/click',
    sSitename : 'naam',
    aNetwork : new Array(),
    iDaysCookieLast : 30,

 init : function(siteID, linkClass){
        // Set variables
        this.iSiteID = siteID;
        this.sLinkClass = linkClass;

        var sUrlParameters = this.fetchUrlParams();
        if(sUrlParameters['keyword'] != undefined && sUrlParameters['trackr']){
            // The right parameters are set proceed
            this.sKeyword = sUrlParameters['keyword'];
            this.sTrackr = sUrlParameters['trackr'];

            // Get Date
            var exdate = new Date();
            exdate.setDate(exdate.getDate()+this.iDaysCookieLast);

            if(this.getCookie('sKeyword') != '' && this.getCookie('sTrackr') != '' && this.getCookie('sKeyword') == this.sKeyword){
                // Cookie is allready here
                var url = this.sAjaxUrl+'?jsoncallback=?&keyword='+this.sKeyword+'&trackR='+this.sTrackr+'&siteId='+this.iSiteID;
                  $.getJSON(url, function(data){
                     linkTrackR.ajaxDone(data);
                  });
            }else{
                // First time add parameter to ajax
                var url = this.sAjaxUrl+'?jsoncallback=?&keyword='+this.sKeyword+'&trackR='+this.sTrackr+'&first=true&siteId='+this.iSiteID;
                  $.getJSON(url, function(data){
                     linkTrackR.ajaxDone(data);
                  });
            }

            // Create cookie
            document.cookie = "sKeyword="+this.sKeyword+";expires="+exdate.toUTCString()+";path=/";
            document.cookie = "sTrackr="+this.sTrackr+";expires="+exdate.toUTCString()+";path=/";


        }else if(this.getCookie('sKeyword') != '' && this.getCookie('sTrackr') != ''){
            this.sKeyword = this.getCookie('sKeyword');
            this.sTrackr = this.getCookie('sTrackr');

            var url = this.sAjaxUrl+'?jsoncallback=?&keyword='+this.sKeyword+'&trackR='+this.sTrackr+'&siteId='+this.iSiteID;
              $.getJSON(url, function(data){
                 linkTrackR.ajaxDone(data);
              });
        }
    },

    getCookie : function(c_name)
    {
    if (document.cookie.length>0)
      {
      c_start=document.cookie.indexOf(c_name + "=");
      if (c_start!=-1)
        {
        c_start=c_start + c_name.length+1;
        c_end=document.cookie.indexOf(";",c_start);
        if (c_end==-1) c_end=document.cookie.length;
        return unescape(document.cookie.substring(c_start,c_end));
        }
      }
    return "";
    },

    ajaxDone : function(oJson){
        // See id the querystring is right
        var aResult = eval(oJson);

        if(aResult.error == undefined && aResult.encrypted != undefined){
            // Fetch all links with the className
            this.sEncrypted = aResult.encrypted;
            this.aAllLinks = $('a');

            // Parse links
            this.parseLinks();
        }
    },

    parseLinks : function(){
       for(var i=0; i < this.aAllLinks.length; i++){

           var sHrefOld = this.aAllLinks[i].href;

           // Fetch the Network for query parameter
           var aNetwork = this.getNetwork(sHrefOld);


           if(aNetwork[0] != undefined){

                // Replace url
               this.aAllLinks[i].href = (sHrefOld + aNetwork[1] + this.sEncrypted);
			   $(this.aAllLinks[i]).attr('target', '_blank');

               // Function to track
			   $(this.aAllLinks[i]).click(function(){
                        setTimeout("linkTrackR.doAjax('"+this.href+"')", 1000);
               });
           }
       }
    },

    doAjax : function(sUrl){		
       var aNetwork = linkTrackR.getNetwork(sUrl);
       var url = linkTrackR.sLinkAjaxUrl+'?jsoncallback=?&keyword='+linkTrackR.sKeyword+'&trackR='+linkTrackR.sTrackr+'&network='+aNetwork[0]+'&siteId='+linkTrackR.iSiteID;
	   
	   $.getJSON(url, function(data){
            // Do nothing
         });
    },

    /**
     * This function strips the querystring and formats into an array
     */
    fetchUrlParams : function(){
        var qsParm = new Array();
        var query = window.location.search.substring(1);
        var parms = query.split('&');
        for (var i=0; i<parms.length; i++) {
            var pos = parms[i].indexOf('=');
            if (pos > 0) {
                var key = parms[i].substring(0,pos);
                var val = parms[i].substring(pos+1);
                qsParm[key] = val;
            }
        }

        return qsParm;
    },

    getNetwork : function(sUrl){
        var $aNetwork = new Array();

        // Check for the different Networks
        if(sUrl.indexOf(this.sM4NMatch) != -1){
            $aNetwork[0] = 'M4N';
            $aNetwork[1] = this.sM4NPrefix;
        }else if(sUrl.indexOf(this.sDaisyconMatch) != -1){
            $aNetwork[0] = 'DaisyCon';
            $aNetwork[1] = this.sDaisyConPrefix;
        }else if (sUrl.indexOf(this.sTradeDoublerMatch) != -1){
			$aNetwork[0] = 'TradeDoubler';
            $aNetwork[1] = this.sTradeDoublerPrefix;
		}
		
        return $aNetwork;
    },

    setSiteId : function(id){
        this.iSiteID = id;
    },

    getSiteId : function(){
        return this.iSiteId;
    },

    setSiteName : function(name){
        this.sSitename = name;
    },

    getSiteName : function(){
      return this.sSitename;
    },

    openLink : function(sHref){
        window.open(sHref);
    }
}

/**
 * Initiate
 */
$(document).ready(function(){
    linkTrackR.setSiteId(3);
    linkTrackR.setSiteName('Name');
    linkTrackR.init(3, 'classForLink');

});


