var STLpo = {
    matchReferrer : function(url){
        return url.match(/lpo\.php/);
    },
    getUrlVars : function(url){
        var vars = [];
        var hash = [];
        var hashes = url.slice(url.indexOf('?') + 1).split('&'); 
        for(var i = 0; i < hashes.length; i++) { 
            hash = hashes[i].split('='); 
            vars.push(hash[0]); 
            vars[hash[0]] = hash[1]; 
        }
        return vars;
    },
    getLpoUrl : function( query, params, url ){
        var url = url || 'http://static.optiido.com/lpo.php?';
        var browserInfo = {
          host      : location.host,
          host_name : location.hostname,
          port      : location.port,
          request   : location.pathname,
          code      : navigator.appCodeName,
          browser   : navigator.appName,
          version   : navigator.appVersion,
          lang      : navigator.language,
          platform  : navigator.platform,
          useragent : navigator.userAgent,
          referer   : document.referrer,
          domain    : document.domain,
          screen_w  : screen.width,
          screen_h  : screen.height
        };
        if( query.q != undefined ){
            url += 'keyword='+encodeURIComponent(query.q);
        }else if(query.p != undefined){
            url += 'keyword='+encodeURIComponent(query.p);
        }else if(query.search != undefined){
            url += 'keyword='+encodeURIComponent(query.search);
        }else if(query.wd != undefined){
            url += 'keyword='+encodeURIComponent(query.wd);
        }
        
        for( var i in browserInfo ){
            url += '&browser['+i+']='+encodeURIComponent(browserInfo[i]);
        }
        for( var i in params ){
            url += '&'+i+'='+encodeURIComponent(params[i]);
        }
        return url;
    },

    request : function( params ){
        var params = params || {};
        var query  = this.getUrlVars( document.referrer );
        var baseUrl = 'http://static.optiido.com/lpo.php?';
        var url = this.getLpoUrl( query, params );
        document.write('<script type="text/javascript" src="'+url+'" ></script>');
    },

    tracking : function( params ){
        var params = params || {};
        var query  = this.getUrlVars( document.referrer );
        var baseUrl = 'http://static.optiido.com/tracking.php?';
        var url = this.getLpoUrl( query, params, baseUrl );
        document.write('<script type="text/javascript" src="'+url+'"></script>');
    },

    conversion : function( params ){
        var url = this.getConversionUrl( params );
        document.write('<script type="text/javascript" src="'+url+'"></script>');
    },

    getConversionUrl : function( params ){
        var params = params || {};
        var query  = this.getUrlVars( document.referrer );
        params.type = 'conversion';
        var baseUrl = 'http://static.optiido.com/tracking.php?';
        var url = this.getLpoUrl( query, params, baseUrl );
        return url;
    },

    clickTracking : function( params ){
        var url = this.getClickTrackingUrl( params );
        document.write('<script type="text/javascript" src="'+url+'"></script>');
    },

    getClickTrackingUrl : function( params ){
        var params = params || {};
        var query  = this.getUrlVars( document.referrer );
        params.type = 'click';
        var baseUrl = 'http://static.optiido.com/tracking.php?';
        var url = this.getLpoUrl( query, params, baseUrl );
        return url;
    },

    _addEvent : null,
    addEvent  : function(elem, eventType, listener, capture){
        if( this._addEvent == null) {
            if (elem.addEventListener) {
                this._addEvent = function(_elem, _eventType, _listener, _capture) {
                    _elem.addEventListener(_eventType, _listener, _capture);
                };
            }
            else if(elem.attachEvent) {
                this._addEvent = function(_elem, _eventType, _listener, _capture) {
                    _elem.attachEvent('on' + _eventType, function() {
                        _listener.call(_elem, window.event);
                    });
                };
            }
        }else{
            
        }
        this._addEvent(elem, eventType, listener, capture);
        
    }
};
