var AdServer = {
  tile: 1,
	mock: false,
  ord: 	(Math.random() + "") * 1000000000000000000 + '?',

  defaults: {
    server:   document.location.protocol + '//ad.doubleclick.net',
    sitename: 'site264.tmus',
    zone:     '',
    site:     'be',
    adtype:   'adj'
  },

  parseParameters: function(string) {
    var pairs = string.split(';');
    var options = {};

    for(var i = 0, length = pairs.length; i < length; i++) {
      var pair = pairs[i].split('=');
      if (pair.length == 2) {
        options[pair[0]] = pair[1];
      }
    }

    return options;
  },

  generateHTML: function(options) {
    try {
      var href   = this.generateURL($.extend({}, options, {adtype:'jump'}));
      var src    = href.replace("/jump/", '/ad/');
      var size   = options.sz.split('x');
      var width  = size[0];
      var height = size[1];
      return '<a href="'+href+'"><img src="'+src+'" border="0" width="'+width+'" height="'+height+'" alt="Click Here" /></a>';
    } catch(error) {
      return null;
    }
  },

  generateURL: function(options) {
    // merge in defaults
    if (options == null) {
      options = {};
    } else {
      if (options.constructor == String) {
        options = this.parseParameters(options);
      }
    }

    options = $.extend({}, AdServer.defaults, options);
    options.tile = this.tile++;

    var zone     = options.zone     ; delete options.zone;
    var sitename = options.sitename ; delete options.sitename;
    var server   = options.server   ; delete options.server;
    var adtype   = options.adtype   ; delete options.adtype;
    var ord      = this.ord;
    var params   = [];
    
    // this allows for params to be passed in as a string for convenience
    if (options._params) {
      params.push(options._params);
      delete options._params;
    }

		// convert tag=a,b,c into an array for processsing
		// we have to do this because the keys are not unique
		if (options.hasOwnProperty('tag') && options.tag != null) {
      if (!jQuery.isArray(options.tag)) {
        options.tag = options.tag.split(',')
      }
		}

    // turn options object into an array of key=value strings
    for(var key in options) {
			var value = options[key];
			if (value != null) {
				if (jQuery.isArray(value)) {
					for(var i = 0; i < value.length; i++) {
						params.push('tag=' + encodeURIComponent(value[i]));
					}
				} else {
					params.push(key + '=' + encodeURIComponent(value));
				}
			}
    }

    params.push('ord=' + ord);
    
    var url = server + '/' + adtype + '/' + sitename;
	  if (zone) url += '/' + zone;
	  url += ';' + params.join(';');
    return url;
  },

	mockAd: function(options) {
    options = $.extend({}, AdServer.defaults, options);

		var url        = this.generateURL(options);
		var dimensions = options.sz.split('x');
	  var template   = 
			'<div class="mockAd" title="'+url+'" + style="font-size:12px;text-align:left;overflow-y:auto;background:#ff0;color:#000;width:' + dimensions[0] + 'px;height:' + dimensions[1] + 'px;">' +
        '<span style="padding:10px 10px 0;display:block;"><strong>PLACEHOLDER</strong><br />' +
				  url.replace(/;/g, ', ').replace(options.server + '/', '') + '<br/>Complete Url: ' + url +
				'</span>' + 
		  '</div>';

		return template;
	},

  placeAd: function(options) {
	  if(document.location.href.match("mockAd=true")){
		  document.write(this.mockAd(options));
	  }
		//if (this.mock) {
//			document.write(this.mockAd(options));
//		} 
		else {
      var url = this.generateURL(options);
			document.write('<scr'+'ipt type="text/javascript" src="' + url + '"><\/scr'+'ipt>');
		}
  }
};

