var msieo = false;
var msie6 = false;
var msie7 = false;
var msie8 = false;
if ($.browser.msie)
{
	var version = parseInt($.browser.version);
	msieo = version < 6;
	msie6 = version == 6;
	msie7 = version == 7;
	msie8 = version == 8;
}

var addthis_config = {
	username: 'instantrankmeter',
	services_exclude: 'print',
	services_compact: 'email,favorites,delicious,digg,'
		+ 'stumbleupon,technorati,slashdot,more',
	ui_click: true,
	ui_language: 'en',
	data_track_linkbacks: true,
	data_use_flash: false,
	data_use_cookies: true
};

var IMAGES = BASE_URL + 'images/';
var preload = [
	 IMAGES + 'report_shadow_bar.gif',
	 IMAGES + 'position_chart_display_right.png',
	 IMAGES + 'position_chart_display_left.png',
	 IMAGES + 'position_chart_display_right.gif',
	 IMAGES + 'position_chart_display_left.gif',
	 IMAGES + 'report_selector_current_right.gif',
	 IMAGES + 'report_selector_current_left.gif',
	 IMAGES + 'report_selector_hidden_right.gif',
	 IMAGES + 'report_selector_hidden_left.gif',
	 IMAGES + 'interval_scroller_bg.gif',
	 IMAGES + 'interval_scroller_handle_bg.gif',
	 IMAGES + 'report_pager_next.gif',
	 IMAGES + 'report_pager_prev.gif',
	 IMAGES + 'serp_results_display_right.png',
	 IMAGES + 'serp_results_display_left.png',
	 IMAGES + 'serp_results_display_right_over.png',
	 IMAGES + 'serp_results_display_left_over.png',
	 IMAGES + 'report_shadow_serp_right_over.gif',
	 IMAGES + 'report_shadow_serp_left_over.gif',
	 IMAGES + 'favicon_google.png',
	 IMAGES + 'favicon_bing.png',
	 IMAGES + 'favicon_yahoo.png',
	 IMAGES + 'description_plus.png',
	 IMAGES + 'description_minus.png',
	 IMAGES + 'message_display_right.gif',
	 IMAGES + 'message_display_left.gif',
	 IMAGES + 'message_arrow.gif'
];
var len = preload.length;
for (var i = 0; i < len; ++ i)
{
	var s = preload[i];
	preload[i] = new Image();
	preload[i].src = s;
}

$(window).load(function() {
	if (typeof addthis == 'object') addthis.button('#addthis_menu');
})

$(document).ready(function() {
	$('#footer > ul').each(function() {
		$(this).children('li').not(':first').prepend('<span>|</span> ');
	})

	quick_rankmeter_init();
	pre_offer_init();

	var click_timeout = null;
	$('a[href=#]').click(function() {
		if (click_timeout)
		{
			clearTimeout(click_timeout);
			message_destroy();
		}
		message_display($(this), 'Sorry, but this page is under development.');
		return false;
	}).mouseleave(function() {
		click_timeout = setTimeout(message_destroy, 500);
	});
})

function quick_rankmeter_init() {

	var samples = [
		'www.mycompany.com',
		'www.mycompetitor.com',
		'another.competitor.com',
		'my 1th keyword',
		'my 2nd phrase',
		'my 3rd search term'
	];
	var display_timeout = null;

	$('#quick_rankmeter')
		.submit(function() {
			message_destroy();

			var $el = $('#url');
			var val = $.trim($el.val());
			if (! val || $el.hasClass('sample'))
			{
				message_display($el, "Please enter your website's URL.");
				$el.focus();
				return false;
			}

			if (! url_is_valid(val))
			{
				message_display($el, 'Your website URL seems invalid.');
				$el.focus();
				return false;
			}

			var len = $('#competitors > input').length;
			for (var i = 0; i < len; ++ i)
			{
				var $el = $('#competitor_' + i);
				var val = $.trim($el.val());
				if (val && ! url_is_valid(val))
				{
					message_display($el,
						'Competitor website URL seems invalid.');
					$el.focus();
					return false;
				}
			}

			var filled = 0;
			$('#keywords > input').each(function() {
				if ($.trim($(this).val()) && ! $(this).hasClass('sample'))
					++ filled;
			});

			if (! filled)
			{
				$el = $('#keyword_0');
				message_display($el, 'Please enter at least one keyword.');
				$el.focus();
				return false;
			}

			$(this)
				.children('fieldset')
					.children('input:text').each(function(i) {
						if ($(this).hasClass('sample')) $(this).val('');
					})

			return true;
		})
		.children('fieldset')
			.children('input:text').each(function(i) {
				var val = samples[i];
				$(this)
					.focus(function() {remove_sample_value(this)})
					.blur(function() {add_sample_value(this, val)});
				add_sample_value(this, val);
			})
			.end()
			.children('label').each(function() {
				var $this = $(this);
				var title = $this.attr('title');
				$this
					.removeAttr('title')
					.mouseenter(function() {
						display_timeout = setTimeout(function() {
							message_destroy();
							message_display($this, title);
						}, 250);
					})
					.mouseleave(function() {
						if (display_timeout)
						{
							clearTimeout(display_timeout)
							message_destroy();
						}
					});
			});

	function add_sample_value(el, val)
	{
		var $el = $(el);
		if ($.trim($el.val()) == '')
		{
			$el.val(val);
			$el.addClass('sample');
		}
	}

	function remove_sample_value(el)
	{
		var $el = $(el);
		if ($el.hasClass('sample'))
		{
			$el.val('');
			$el.removeClass('sample');
		}
	}
}

function pre_offer_init()
{
	$('#pre_offer_form').submit(function() {
		message_destroy();

		var $el = $('#first_name');
		if ($.trim($el.val()) == '')
		{
			message_display($el, 'Please enter your first name.', true);
			$el.focus();
			return false;
		}

		var $el = $('#e_mail');
		if ($.trim($el.val()) == '')
		{
			message_display($el, 'Please enter your e-mail.', true);
			$el.focus();
			return false;
		}

		if (! e_mail_is_valid($.trim($el.val())))
		{
			message_display($el, 'Your e-mail address seems invalid.',
				true);
			$el.focus();
			return false;
		}

		var $el = $('#notify_me');
		if (! $el.attr('checked'))
		{
			message_display($el, 'Please check the notification checkbox.', true);
			$el.focus();
			return false;
		}

		var this_form = this;

		return true;
	})
}

var messages = [];
var message_xhtml =
	  '<div class="message_display">'
		+ '<div class="message"><span>%message%</span></div>'
		+ '<div class="arrow"></div>'
	+ '</div>';

function message_display($el, message)
{
	var $dummy = $('<span>').addClass('message_dummy').text(message).appendTo('body');
	text_width = $dummy.width();
	$dummy.remove();

	var xhtml = message_xhtml.split('%message%').join(message);

	var $display = $(xhtml).appendTo('body');

	var $message = $display.children('div.message');
	$message.width(text_width);

	$display.width($message.outerWidth());

	var offset = $el.offset();
	var top = offset.top - $display.height();
	var left = offset.left + ($el.outerWidth() - $display.outerWidth()) / 2;
	var top_start = top - 50;

	$display
		.css({
			opacity: .4,
			top: top_start + 'px',
			left: left + 'px'
		})
		.animate({
			opacity: 1,
			top: top + 'px'
		}, 'fast', 'swing');

	var width = $display.outerWidth();

	$display.children('div.arrow').each(function() {
		var $this = $(this);
		$this.css('margin-left', Math.round((width - $this.width()) / 2) + 'px');
	});

	if ($(window).scrollTop() > top)
		$(window).scrollTo(top_start, 250);

	messages.push($display);
}

function message_destroy()
{
	for(var i = 0; i < messages.length; ++ i)
		messages[i].fadeOut('fast');

	messages = [];
}

function in_bounds(el, x, y)
{
	var offset = $(el).offset();
	return x >= offset.left && x <= (offset.left + $(el).outerWidth())
			&& y >= offset.top && y <= (offset.top + $(el).outerHeight())
}

var E_MAIL_REG_EXP = null;
function e_mail_is_valid(e_mail)
{
	if (! E_MAIL_REG_EXP)
		E_MAIL_REG_EXP = /^[_a-z0-9-\'\+]+(\.[_a-z0-9-\'\+]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i;

	return e_mail.match(E_MAIL_REG_EXP);
}

var URL_REG_EXP = null;
function url_is_valid(url)
{
	if (! URL_REG_EXP)
		URL_REG_EXP = /^(http:\/\/)*([a-z0-9\-]+\.)+[a-z][a-z]+(\/.*)*$/i;

	return url.match(URL_REG_EXP);
}
