if (typeof ($) == 'undefined') alert('Vehix.UI.Ads.js requires the jquery framework');
if (typeof ($.cookies) == 'undefined') alert('Vehix.UI.Ads.js requires the jquery.cookies plug-in');
if (typeof (Vehix) == 'undefined') Vehix = new Object();
if (typeof (Vehix.UI) == 'undefined') Vehix.UI = new Object();
Vehix.UI.Ads = function () {
	this.items = new Array();
	this.parameters = new Array();
	this.parameters.exists = this.__parameter_exists;
	this.parameters.get = this.__parameter_get;
	this.parameters.set = this.__parameter_set;
	this._tagUrl = 'http://beta.vehix.com/tags/';
	this._disableAdvertisingKey = 'DisableAdvertising';
	this.segment = "";
}
Vehix.UI.Ads.prototype =
{
	__parameter_get: function (name)
	{
		var result = null;
		for (var index = 0; index < this.length; index++)
		{
			if (this[index].name == name)
			{
				result = this[index].value;
				break;
			}
		}
		return result;
	},
	__parameter_set: function (name, value)
	{
		var exists = false;
		for (var index = 0; index < this.length; index++)
		{
			if (exists = (this[index].name == name))
			{
				this[index].value = value;
				break;
			}
		}
		if (!exists)
		{
			this.push({ name: name, value: value });
		}
		$(this).trigger('parameter-set', [{ name: name, value: value}]);
	},
	__parameter_exists: function (name)
	{
		var result = false;
		for (var index = 0; index < this.length; index++)
		{
			if (result = (this[index].name == name)) break;
		}
		return result;
	},
	get_enabled: function ()
	{
		var result = window.location.search.match(this._disableAdvertisingKey + '=true');
		if (result) $.cookies.set(this._disableAdvertisingKey, 'true', {path:'/'});
		else result = ($.cookies.get(this._disableAdvertisingKey) == 'true');
		return !result;
	},
	rotate: function (rotationGroup)
	{
		if (typeof (rotationGroup) == 'undefined') rotationGroup = '';
		$(this).trigger('rotating', [rotationGroup]);
		if (this.get_enabled())
		{
			for (var bindingIndex = 0; bindingIndex < this.items.length; bindingIndex++)
			{
				var item = this.items[bindingIndex];
				if ((rotationGroup == '' || rotationGroup == item.rotationGroup) && $(item).is(':visible'))
				{
					var parameters = item.parameters;
					var url = this._tagUrl + item.tag + '?';
					for (var parameterIndex = 0; parameterIndex < parameters.length; parameterIndex++)
					{
						var parameter = parameters[parameterIndex];
						url += encodeURIComponent(parameter.name) + '=' + encodeURIComponent(parameter.value) + '&';
					}
					var parameters = this.parameters;
					for (var parameterIndex = 0; parameterIndex < parameters.length; parameterIndex++)
					{
						var parameter = parameters[parameterIndex];
						if (!item.parameters.exists(parameter.name)) url += encodeURIComponent(parameter.name) + '=' + encodeURIComponent(parameter.value) + '&';
					}
					$(Vehix.UI.Ads).trigger('loading', [(item.childNodes.length > 0) ? item.childNodes[0] : null]);
					$(item).html('<iframe src="' + url.substr(0, url.length - 1) + '" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" width="' + $(item).width() + '" height="' + $(item).height() + '"></iframe>');
					$(item.childNodes[0]).load(function ()
					{
						$(Vehix.UI.Ads).trigger('loaded', [this]);
					});
				}
			}
		}
		$(this).trigger('rotated', [rotationGroup]);
	},
	bindTo: function (selector, tag, rotationGroup)
	{
		var advertisement = $(selector).get(0);
		if (typeof (advertisement) == 'undefined') alert('Unable to find an element matching ' + selector);
		advertisement.tag = tag;
		advertisement.rotationGroup = rotationGroup;
		advertisement.parameters = new Array();
		advertisement.parameters.exists = this.__parameter_exists;
		advertisement.parameters.get = this.__parameter_get;
		advertisement.parameters.set = this.__parameter_set;
		$(this).trigger('binding', [advertisement]);
		this.items.push(advertisement);
		$(this).trigger('bound', [advertisement]);
		return advertisement;
	}
}
Vehix.UI.Ads = new Vehix.UI.Ads();

