
(function($) {
	var DEBUG = false;
	var _liveSite = 'www.bransontourismcenter.com';
	var gAnalyticsTracker;
	var linkCachePages = new Array();
	var linkCacheHits = new Array();
	var _self = {};
	var baseLink = '/tracker/';

	$.fn.autoAnalytics = function(googleTracker, page) {
		if( page === undefined || page.length == 0 ) {
			_self = parse_url(location.href);
			if( _self.page.match(/[a-zA-Z0-9.\-]+[.][a-z]+\//) != null ) {
				_self.domain = _self.page;
				_self.page = 'homepage';
			}
			if(DEBUG && console.log) {
				console.info(_self);
			}
			page = _self.page.replace(/[^a-zA-Z0-9\-]/g, '-');
			if( page.charAt(page.length-1) == '-' ) {
				page = page.substr(0, page.length-1);
			}
		}
		baseLink += page +'/';
		gAnalyticsTracker = googleTracker;

		build_position_element();

		$('a').each(function(i, element) {
			if($(element).hasClass('ignore-auto-analytics')) {
				return;
			}

			page = parse_url($(element).attr('href')).page;

			index = check_page_in_cache(page);
			if( index == -1 ) {
				index = linkCachePages.length;
				linkCachePages[index] = page;
				num = num_cache_page(index);
				$(element).attr('rel', num);
			} else {
				$(element).attr('rel', num_cache_page(index, true));
			}
			$(element).click(execute_analytics);
			//$(element).mouseover(display_page_on_dev);
		});

		$("#_dev-analytics-position").mouseout(function(){
			$(this).text('');
			$(this).hide();
		});
	};

	function execute_analytics() {
		page = get_link_page($(this).attr('href'), $(this).attr('rel'));
		if( page != '' ) {
			gAnalyticsTracker._trackPageview(page);
		}
	}

	function display_page_on_dev() {
		if(DEBUG && console.log) {
			console.debug(_self.domain, _liveSite);
		}
		if( _self.domain != _liveSite ) {
			pos = $(this).offset();
			element_left = 0;
			element_top = 0;
			page = get_link_page($(this).attr('href'), $(this).attr('rel'));
			$("#_dev-analytics-position").text(page).show().css("left", element_left).css('top', element_top);
		}
	}

	function build_position_element() {
		if(DEBUG && console.log) {
			console.debug(_self.domain, _liveSite);
		}
		if( _self.domain != _liveSite ) {
			$('body').append('<div id="_dev-analytics-position" style="display:none; position: fixed; top: 0; left; 0; background-color: #fff;color: #333; font-size: 10px; border: 2px solid #993333;"></div>');
		}
	}

	function get_link_page(link, num) {
		if( link.length > 0 && link != '#' ) {
			page = parse_url(link).page.replace(/[^a-zA-Z0-9\-]/g, '-') +'-'+num;
			if( page.charAt(0) == '-' ) {
				page = page.substr(1);
			}
			return baseLink+page;
		}
		return '';
	}

	function check_page_in_cache(page) {
		if( linkCachePages.indexOf ) {
			return linkCachePages.indexOf(page);
		}

		for(i in linkCachePages) {
			if( linkCachePages[i] == page ) {
				return i;
			}
		}
		return -1;
	}

	function num_cache_page(index, increment) {
		if( increment === undefined ) {
			increment = false;
		} else if( increment == true ) {
			increment = true;
		} else {
			increment = false;
		}

		if( linkCacheHits[index] === undefined ) {
			linkCacheHits[index] = 0;
		} else if( increment == true ) {
			++linkCacheHits[index];
		}
		return linkCacheHits[index];
	}

	function parse_url(link) {
		if( link == null || link == undefined || link.match("javascript:") ) {
			if(DEBUG && console.log) {
				console.debug(link);
			}
			return {"domain": '', "page": ''};
		}
		link = link.replace("http://", "").replace("https://", "");
		url = link.match(/([a-zA-Z0-9.\-]+[.][a-z]+)?\/?(.+)/);

		if( url.length == 3 ) {
			domain = url[1] || '';
			page = url[2];
			pos = page.search(/\?/);
			if( pos != -1 ) {
				page = page.substr(0, pos);
			}
			page = page.replace(".htm", "").replace(".html", "");
			return {"domain": domain, "page": page};
		} else {
			return {"domain": '', "page": url.toString()};
		}
	}

})(jQuery);

