// dir - direct
// tssem - SEM
// org - organic (not excluded)
// exc - excluded
// red - redirect (from ts)

var email_maps = new Array();
email_maps["danny"] = new Array();
email_maps["danny"]["dir"] = "dtarlow cs toronto edu";
email_maps["danny"]["tssem"] = "dannytarlow gmail com";
email_maps["danny"]["org"] = "dannytarlow -at- gmail -dot- com";
email_maps["danny"]["exc"] = "dtarlow -at- cs -dot- toronto -dot- edu";
email_maps["danny"]["red"] = "dannytarlow gmail com";



var danny_home_number = "123-123-1234";
var danny_work_number = "523-523-5234";
var danny_tracking_home_number = "1234";
var danny_tracking_work_number = "5678";

var edelson_tigard = "503-692-8700";
var edelson_vancouver = "360-213-2996";
var edelson_tracking_tigard = "503-928-7386";
var edelson_tracking_vancouver = "360-566-2697";

var tarlow_mesa = "(480) 483-0393";
var tarlow_tracking_mesa = "(480) 374-5764";


var phone_numbers = new Array();
phone_numbers["danny"] = new Array();
phone_numbers["danny"][danny_work_number] = "work";
phone_numbers["danny"][danny_home_number] = "home";

phone_numbers["edelson"] = new Array();
phone_numbers["edelson"][edelson_tigard] = "tigard";
phone_numbers["edelson"][edelson_vancouver] = "vancouver";

phone_numbers["tarlow"] = new Array();
phone_numbers["tarlow"][tarlow_mesa] = "mesa";



var phone_maps = new Array();
phone_maps["danny"] = new Array();
phone_maps["danny"]["home"] = new Array();
phone_maps["danny"]["work"] = new Array();

phone_maps["danny"]["work"]["tssem"] = danny_tracking_work_number;
phone_maps["danny"]["work"]["org"] = danny_tracking_work_number;
phone_maps["danny"]["work"]["exc"] = danny_work_number;
phone_maps["danny"]["work"]["red"] = danny_tracking_work_number;
phone_maps["danny"]["work"]["dir"] = danny_tracking_work_number;

phone_maps["danny"]["home"]["tssem"] = danny_tracking_home_number;
phone_maps["danny"]["home"]["org"] = danny_tracking_home_number;
phone_maps["danny"]["home"]["exc"] = danny_tracking_home_number;
phone_maps["danny"]["home"]["red"] = danny_tracking_home_number;
phone_maps["danny"]["home"]["dir"] = danny_tracking_home_number;


phone_maps["edelson"] = new Array();
phone_maps["edelson"]["vancouver"] = new Array();
phone_maps["edelson"]["tigard"] = new Array();

phone_maps["edelson"]["tigard"]["tssem"] = edelson_tracking_tigard;
phone_maps["edelson"]["tigard"]["org"] = edelson_tracking_tigard;
phone_maps["edelson"]["tigard"]["exc"] = edelson_tigard;
phone_maps["edelson"]["tigard"]["red"] = edelson_tracking_tigard;
phone_maps["edelson"]["tigard"]["dir"] = edelson_tigard;

phone_maps["edelson"]["vancouver"]["tssem"] = edelson_tracking_vancouver;
phone_maps["edelson"]["vancouver"]["org"] = edelson_tracking_vancouver;
phone_maps["edelson"]["vancouver"]["exc"] = edelson_vancouver;
phone_maps["edelson"]["vancouver"]["red"] = edelson_tracking_vancouver;
phone_maps["edelson"]["vancouver"]["dir"] = edelson_vancouver;


phone_maps["tarlow"] = new Array();
phone_maps["tarlow"]["mesa"] = new Array();

phone_maps["tarlow"]["mesa"]["tssem"] = tarlow_tracking_mesa;
phone_maps["tarlow"]["mesa"]["org"] = tarlow_tracking_mesa;
phone_maps["tarlow"]["mesa"]["exc"] = tarlow_mesa;
phone_maps["tarlow"]["mesa"]["red"] = tarlow_tracking_mesa;
phone_maps["tarlow"]["mesa"]["dir"] = tarlow_mesa;



var excluded_keywords = new Array();
excluded_keywords["danny"] = new Array();
excluded_keywords["danny"].push("danny tarlow");

excluded_keywords["edelson"] = new Array();
excluded_keywords["edelson"].push("edelson");
excluded_keywords["edelson"].push("greenleaf");
excluded_keywords["edelson"].push("murphy");
excluded_keywords["edelson"].push("kennedy");
excluded_keywords["edelson"].push("north");
excluded_keywords["edelson"].push("sports medicine");

excluded_keywords["tarlow"] = new Array();
excluded_keywords["tarlow"].push("tarlow");
excluded_keywords["tarlow"].push("advanced knee");

excluded_keywords["wagner"] = new Array();
excluded_keywords["wagner"].push("wagner");
excluded_keywords["wagner"].push("hip arthroscopy");
excluded_keywords["wagner"].push("hip resurfacing");




var Tracking = {
  cookiePrefix: '__ts_',
  
  source : null,

  init: function() {
  
    // Read the domain so we can set the cookie options.
    if (document.domain == 'localhost') {
      this.cookieDomain = '';
    } else {
      var dcs = document.domain.split('.');
      var sdomain = dcs[dcs.length - 1];
      if (dcs.length >= 2) {
		sdomain = dcs[dcs.length - 2] + '.' + sdomain;
      }
      this.superDomain = sdomain;
      if (dcs.length > 2) {
	this.cookieDomain = '.' + sdomain;
      } else {
	this.cookieDomain = sdomain;
      }
    }

    this.options = { 
    	expires: 30,
		path: '/', 
		domain: this.cookieDomain
		};
	
    // Actually do the tracking now.
    //this.readSource();

    visit_type = this.classifyVisit();
    this.updateCookie("src", visit_type);

  },
  

  readSource: function() {
    var urlSource = this.getParam("rf");
    var cookieSource = this.get("src");
    var source = "";

    /**
     * If there is a URL source and a cookie source, the URL source takes
     * precedence and wipes out whatever is in the src cookie.  Otherwise,
     * read from the cookie.
     **/
    if (urlSource != null) {
      source = urlSource;
      this.updateCookie("src", urlSource);
    } else if (cookieSource != null) {
      source = this.get("src");
    }

    this.source = source;
  },
  

  replace : function() {
    var replacing_is_active = true;
    
    if (_tsacct == "danny") {
      replacing_is_active = true;
    }

    if (replacing_is_active) {
      this.replaceTags();
    }
  },


  classifyVisit : function() {
    /*
     * Choices are "org", "dir", "exc", "red", "tssem"
     */
    var excluded_visit = false;

    if (this.source == null) {
      this.readSource();
    }

    var keywords = this.keywordsFromQueryString();
    if (this.isOrganicReferral()) {
      for (var i = 0; i < excluded_keywords[_tsacct].length; i++) {
	excluded_keyword = excluded_keywords[_tsacct][i];
	if (keywords.indexOf(excluded_keyword) > -1) {
	  excluded_visit = true;
	}
      }

      if (excluded_visit) {
	return "exc";
      } else {
	return "org";
      }

    //  If it's not organic, look to the cookie source or the 
    } else {
      if (this.source == "") {
	return "dir";
      } else {
	return this.source;
      }
    }   
  },
  

  replaceTags: function() {

    var visit_type = this.classifyVisit();
    var keywords = this.keywordsFromQueryString();

    // Don't touch anything if it's a direct visit
    //if (visit_type == "dir") {
    //  return; 
    //}

    var email_tags = document.getElementsByName("email"); 
    for( var i = 0; i < email_tags.length; i++ ) { 
      //if (visit_type in email_maps[_tsacct]) {
      //email_tags[i].innerHTML = email_maps[_tsacct][visit_type];
      //}
    }

    var phone_tags = document.getElementsByName("phonenumber"); 
    for( var i = 0; i < phone_tags.length; i++ ) { 
      initial_value = phone_tags[i].innerHTML;
      if (initial_value in phone_numbers[_tsacct]) {
	number_type = phone_numbers[_tsacct][initial_value];
	if (number_type in phone_maps[_tsacct]) {
	  if (visit_type in phone_maps[_tsacct][number_type]) {
	    phone_tags[i].innerHTML =
	      phone_maps[_tsacct][number_type][visit_type];
	  }
	} 
      } 
    }
  },


  isOrganicReferral: function() {
    try {
      ref = document.referrer.toUpperCase();
      if (ref.indexOf('GOOGLE.COM/SEARCH') > 0 ||
	  ref.indexOf('YAHOO.COM/SEARCH') > 0) { 
	return true;
      }
    }
    catch (exception) {}
    return false;
  },


  getParam: function(name) {
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    
    if( results == null ) {
      return null;
    } else {
      return results[1];
    }
  },
  

  get: function(c_name) {
    c_name = this.cookiePrefix + 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 "";
  },
  

  setCookie: function(c_name, value, expiredays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie = c_name + "=" + escape(value) +
				      ((expiredays==null) ? "" : ";expires=" + exdate.toGMTString()) + "; path=/";
  },


  updateCookie: function(name, value) {
    var prefix = this.cookiePrefix + name;
    var options = this.options;
    this.setCookie(prefix, '' + value, options["expires"]);
  },


  keywordsFromQueryString: function() {
    var query_var = "";
    var ref = "";

    try {
      ref = document.referrer.toUpperCase();
      if (ref.indexOf('GOOGLE.COM') > 0) { 
	query_var = 'Q'; 
      }
      if (ref.indexOf('YAHOO.COM') > 0) { 
	query_var = 'P'; 
      }
    }
    catch (exception) {}


    var keywords = "";
    if (query_var == "") {
      return keywords;
    }

    //var ref = document.referrer;
    var pair;
    var qIndex = 0;
    var qs;
    var prm;

    try {
    
      qIndex = ref.indexOf('?');
      
      if (qIndex < 1) { 
	return keywords; 
      }
     
      ref = this.KeyWordReplace(ref,'%22','');
      //alert("ref:" + ref); 
      
      qs = ref.substring(qIndex + 1, ref.length);
      
      prm = qs.split('&');
      
      for (i = 0; i < prm.length; i++) {
	pair = prm[i].split('=');
	temp = unescape(pair[0]).split('+');
	name = temp.join(' ');
	
	if (name != query_var) { 
	  continue; 
	}

	var values = unescape(pair[1]).split('+');
	keywords = values.join(' ').toLowerCase();

	//keywords = name; //this.KeyWordReplace(unescape(pair[1]), '\\+', ' ');
	
	/*
	 *  temp = unescape(pair[1]).split('+');        
	 *  for (k = 0; k < temp.length; k++) {
	 *  keywords.push(temp[k].toLowerCase());
	 * }
	 */
      }
    }
    catch (exception) {}

    return keywords;
  },


  KeyWordReplace: function(OrgVal,SearchVal,ReplaceVal) {
    var Val;
    var RegExp = eval("/" + SearchVal + "/g");
    if (OrgVal.indexOf(SearchVal) <1) {  return OrgVal; }
    Val = OrgVal.replace(RegExp,ReplaceVal);
    return Val;
  }

};

