/**
* biUtils.js
* utilitiy class used for various js utils
* dependencies: ns.js, prototype
* TODO: refactor addAsISImg and addAsISImgEveryClick to use new Image() and to both use cache kill.  reduce to a single method.
*/


// Create namespace for the class
if (typeof(createNamespace) == "function") {
    createNamespace('ATC.utils');
} else if (typeof(ATC.createNamespace) == "function") {
    ATC.createNamespace('ATC.utils');
}

ATC.utils.BIUtils ={
   frmCreated:false,
   frmRef:null,
   biDebug:true,
   eventQ:"",

  //you should be able to pass a mis code or asis and get the value to come through the logs
  addAsISImg:function(asisURL){
    var asisImg = new Image(1,1);
    asisImg.src = asisURL;
  },
  addAsISImgEveryClick:function(asisURL){
      var now = new Date();
      var asisImg = document.createElement("img");
      var delimiter = "?";
      if (asisURL.indexOf("?") > 0){
          delimiter = "&";
      }
        asisImg.setAttribute("src",asisURL+delimiter+"cache_killer="+ now.getTime());// Math.floor(Math.random()*1000000));
        asisImg.width = asisImg.height = 1;
        document.body.appendChild(asisImg);
  },
  inject:function(el, func){
    func();
    window.setTimeout(function(){ATC.utils.BIUtils.navigate($(el).href);}, 100);
    return false;
  },

  navigate:function(url){
    document.location.href = url;
   },

 attachListener:function(el, func){
    Event.observe(el, "click", function(){ATC.utils.BIUtils.inject(el, func);});
  },

 getBIEvent:function(what) {
    var biEvent = "";
    var delimiter = "?";
    var thisTag = null;
    var thisHref = "";
    if ((biEvents[what] !== undefined) && (biEvents[what] !== "")) {
        var parts = biEvents[what].split("|");
        if (parts.length == 2) {
            var biType = parts[0];
            biEvent = parts[1];
            if ((biType == "rdpage") || (biType == "mis")) {
                biEvent = biType + "=" + biEvent;
            }
            if (arguments.length > 1) {
                for (var i=1; i<arguments.length; i++) {
                    var arg = arguments[i];
                    if (typeof arg == "object") {
                        if ((arg.href != undefined) && (arg.href != "")) {
                            thisTag = arg;
                            thisHref = thisTag.href;
                            if (thisHref.indexOf("?") > 0) {
                                delimiter = "&";
                            } else {
                                delimiter = "?";
                            }
                            if ((biType == "rdpage") || (biType == "mis") || (biType == "param")) {
                                if ((biType != "param") || ((biEvent.toLowerCase().indexOf("mis=")>=0) || (biEvent.toLowerCase().indexOf("rdpage=")>=0))) {
                                    if ((thisHref.toLowerCase().indexOf("rdpage=")<0) && (thisHref.toLowerCase().indexOf("mis=")<0)) {
                                        thisHref = "/redirect/redirector_link.jsp?to_url=" + encodeURIComponent(thisHref);
                                    }
                                }
                            }
                        }
                    } else {
                        if (arg == "&") {
                            delimiter = "&";
                        } else {
                            parts = arg.split(":");
                            if (parts.length == 2) {
                                var name = parts[0];
                                var value = parts[1];
                                biEvent = biEvent.replace("@@"+name+"@@",value);
                            }
                        }
                    }
                }
            }
            if (biType == "aivs") {
                this.addAsISImgEveryClick("/no_cache/vs/" + biEvent);
                return "";
            } else if (biType == "aiac") {
                this.addAsISImgEveryClick("/no_cache/ac/" + biEvent);
                return "";
            } else if (biType == "mis") {
                if (thisHref != "") {
                    if ((thisHref.toLowerCase().indexOf("javascript")<0) && (thisHref.toLowerCase().indexOf("mis=")<0)) {
                        thisTag.href = thisHref + delimiter + biEvent;
                    }
                    return true;
                }
                return biEvent;
            } else if (biType == "rdpage") {
                if (thisHref != "") {
                    if ((thisHref.toLowerCase().indexOf("javascript")<0) && (thisHref.toLowerCase().indexOf("rdpage=")<0)) {
                        thisTag.href = thisHref + delimiter + biEvent;
                    }
                    return true;
                }
                return biEvent;
            } else if (biType == "param") {
                if (thisHref != "") {
                    if (thisHref.toLowerCase().indexOf("javascript")<0) {
                        if (((biEvent.toLowerCase().indexOf("mis=")<0) || (thisHref.toLowerCase().indexOf("mis=")<0)) &&
                            ((biEvent.toLowerCase().indexOf("rdpage=")<0) || (thisHref.toLowerCase().indexOf("rdpage=")<0))) {
                            thisTag.href = thisHref + delimiter + biEvent;
                        }
                    }
                    return true;
                }
                return delimiter + biEvent;
            } else if (biType == "redir") {
                return "http://www.autotrader.com/redirect/redirector_link.jsp?" + biEvent;
            } else {
                return biEvent;
            }
        } else {
            return biEvents[what];
        }
    }
    return "";
 },
 addQ:function() {
    if (arguments.length > 0) {
        var found = false;
        for (var i=0; i<arguments.length; i++) {
            var arg = arguments[i];
            if (arg != null) {
                var ix = this.eventQ.indexOf(arg+",");
                if (ix < 0) {
                    this.eventQ += arg + ",";
                }
            }
        }
    }
 },
 delQ:function() {
    if (arguments.length > 0) {
        var found = false;
        for (var i=0; i<arguments.length; i++) {
            var arg = arguments[i];
            if (this.eventQ != "") {
                var ix = this.eventQ.indexOf(arg+",");
                if (ix >= 0) {
                    this.eventQ = this.eventQ.replace(arg+",","");
                }
            }
        }
    }
 },
 fireBIQ:function() {
    var biEvent = "";
    var biType = "";
    var biParams = "";
    var events = this.eventQ.split(",");
    for (var i=0; i<events.length; i++) {
        var theEvent = events[i];
        if (theEvent != "") {
            var parts = theEvent.split(":");
            if (parts.length == 2) {
               theEvent = parts[0];
               biParams = parts[1];
        }
            if (biEvents[theEvent] !== "") {
                parts = biEvents[theEvent].split("|");
                if (parts.length == 2) {
                    biType = parts[0];
                    biEvent = parts[1];
                    if (arguments.length > 0) {
                        for (var j=0; j<arguments.length; j++) {
                            var arg = arguments[j];
                            if (typeof arg != "object") {
                                parts = arg.split(":");
                                if (parts.length == 2) {
                                    var name = parts[0]; // name=svn2, biParams=2, biEvent=@@svn#@@
                                    var value = parts[1];
                                    if (biEvent.indexOf("@@"+name+"@@") >=0) {
                                        biEvent = biEvent.replace("@@"+name+"@@",value);
                                    }
                                    if (biParams != "") {
                                        var pName = name.replace(biParams,"#"); // svn2 -> svn#
                                        if (biEvent.indexOf("@@"+pName+"@@") >=0) {
                                            biEvent = biEvent.replace("@@"+pName+"@@",value);
                                        }
                                    }
                                }
                            }
                        }
                        if (this.biDebug) { // according to BI it is ok to leave on in production to help debug
                            if (biEvent.indexOf("?") > 0) {
                                biEvent += "&";
                            } else {
                                biEvent += "?";
                            }
                            biEvent += "bi="+events[i];
                        }
                        if (biEvent.indexOf("@@") >=0) {
                        } else {
                            if (biType == "aivs") {
                                this.addAsISImgEveryClick("/no_cache/vs/" + biEvent);
                            } else if (biType == "aiac") {
                                this.addAsISImgEveryClick("/no_cache/ac/" + biEvent);
                            }
                            this.delQ(events[i]);
                        }
                    }
                }
            }
        }
    }




 }
};