/// <reference path="jquery.intellisense.js" />

/*
 * Setup event-bindings and other common pageload operations.
 */
function onLoad()
{
	Togglers.setup();
	KeepAlive.setup();
	setupBackgroundImageIE6Fix();
	setupGlobalEvents();
	setupForm();
	setupSearchForm();
    setupDatePicker();

	$("#popup").bgiframe();
}
$(document).ready(onLoad);

/*
 * Adds CSS-hover capability for the navigation in IE6 and textimage capability for all browsers.
 */
function setupBackgroundImageIE6Fix()
{
	if ($.browser.msie && !window.XMLHttpRequest)	// Only IE6
	{
		try { document.execCommand("BackgroundImageCache",false,true); } catch (e) {}
		addHover($("#main-nav ul,#sub-nav ul").children("li"));
	}
}

/*
 * Adds CSS-hover capability for specific elements.
 */
function addHover(elems)
{
	if (elems == null || typeof elems.length === "undefined" || elems.length == 0)
		return;

	for (var i = 0; i < elems.length; i++)
	{
		elems[i].onmouseover =
			function() { this.className += " sfhover"; }
		elems[i].onmouseout =
			function() { this.className = this.className.replace(new RegExp(" sfhover\\b"), ""); }
	}
}

/*
 * Setup other events, like print buttons.
 */
function setupGlobalEvents()
{
	$("#btn-print").bind("click", function(){ window.print(); });
}

/*
 * Binds an anchor link to submit the form in which it is contained.
 */
function setupForm()
{
	if ($("#wizardstart").length == 1)
		window.location.hash = "start";

	bindSubmitActions();
	bindAbortActions();
}

function bindSubmitActions()
{
	var hrefSubmit = $("form a.submit");
	hrefSubmit.each(function()
	{
		var elem = $(this);
		var form = elem.parents("form");
		if (form.length == 0) return;

		elem.bind("click", function() {
			$(form[0]).submit();
			return false;
		});
	});
}

function bindAbortActions()
{
	var abort = document.getElementById("btn-abort");
	if (abort)
	{
		$(abort).bind("click", function() {
			$("#continue").val("0");
			$("#solutionform").submit();
		});
	}
}

/*
 * Binds the selectors (e.g. sorting and grouping) in a searchform to
 * submit the form they are on when the value is changed.
 */
function setupSearchForm()
{
	var selectors =  $("#pagesize-selector, #result-grouping, , #result-sorting, #company-selector");
	selectors.each(function() {		
		var form = $(this).parents("form");
		if (form.length == 0)
			return;

		$(this).bind("change", function() {
			$(form[0]).submit();
			return false;
		});
	});
}

function setupDatePicker()
{
    if ($.fn.datePicker != undefined)
    {
        Date.format = "dd-mm-yyyy";
        $("input.datepicker").each(function(){
            var value = this.value;
            $(this).datePicker({
                startDate: value,
                horizontalOffset: -174,
                verticalOffset: 20
            });
        });
    }
}

function addBookmark(elem)
{
    var url = $(elem).attr("href");
    if (0 < url.length)
        $.get(url, function() { 
            $(elem).addClass("hide");
        });
    return false;
}

function openPopup()
{
	scrollToTop();
    Popup.open();
    return false;
}

function scrollToTop()
{
	if (document.body.scrollTop)
        document.body.scrollTop = 0;
    if (document.documentElement && document.documentElement.scrollTop)
        document.documentElement.scrollTop = 0;
}

function Subscription() { }

Subscription.agreeToTerms = function(url)
{
	$("#agree-to-terms").attr("href", url);
	return openPopup();
}

String.prototype.trim = function(expression)
{
	if (expression == null) expression = "\\s";
	var re = new RegExp("^[" + expression + "]*([\\s\\S]*?)[" + expression + "]*$");
	return this.replace(re, "$1");
}
String.prototype.format = function()
{
	var arrArguments = (arguments.length == 1 && arguments[0] && isArray(arguments[0])) ? arguments[0] : arguments;

	function applyPadding(string, count, character, direction) /**/
	{
		var string = '' + string;
		var diff = count - string.length;
		var output = new String();
		while (output.length < diff)
			output += character;

		return (direction == 2 ? string + output : output + string);
	}
	function applyFormat() /**/
	{
		try
		{
			var strValue = new String(arrArguments[arguments[1]]);
		}
		catch (e) { strValue = ""; }

		if (arguments[2] != "" && arguments[3] != "")
		{
			var direction = arguments[4] == "+" ? 2 : 1;
			strValue = applyPadding(strValue, arguments[3], arguments[2] == "#" ? "0" : " ", direction);
		}
		return strValue;
	}
	return (this.replace(/\{(\d+)([$#])?(\d+)?([+-])?\}/g, applyFormat));
}
String.prototype.padLeft = function(length, padChar)
{
	if (padChar == undefined)
		padChar = " ";

	var string = this.toString();
	while (string.length < length)
		string = padChar + string;
	return string;
};
String.prototype.padRight = function(length, padChar)
{
	if (padChar == undefined)
		padChar = " ";

	var string = this.toString();
	while (string.length < length)
		string = string + padChar;
	return string;
};

function isArray(object)
{
	return isObject(object) && object.constructor == Array;
}
function isBoolean(object)
{
	return typeof object == 'boolean';
}
function isFunction(object)
{
	return typeof object == 'function';
}
function isAlien(object)
{
	return isObject(object) && typeof object.constructor != 'function';
}
function isNull(object)
{
	return typeof object == 'object' && !object;
}
function isNumber(object)
{
	return typeof object == 'number' && isFinite(object);
}
function isObject(object)
{
	return (object &&
		typeof object == 'object' &&
		object.constructor != String &&
		object.constructor != Number) || isFunction(object); /**/
}
function isString(object)
{
	return (typeof object == 'string') || (object != null && object.constructor == String);
}
function isUndefined(object)
{
	return typeof object == 'undefined';
}
function openPdf() {
	var url = window.location.toString().split('?');
	window.location = (url.length > 1) ? url[0] + '.pdf?' + url[1] : url[0] + '.pdf';
	return true;
}

function Togglers() { }

Togglers.setup = function()
{
	var togglers = $(".toggler");
	if (togglers.length != 0)
	{
		for (var i = 0; i < togglers.length; i++)
		{
			$(togglers[i]).bind("click", Togglers.toggle_onclick);
		}
	}
}

Togglers.toggle_onclick = function()
{
	if (this.id.match(/toggle_(.*)/))
	{
		var targetID = RegExp.$1;

		var targetElem = document.getElementById(targetID);
		var parentElem = this.parentNode;
		if (targetElem != null)
		{
			if (targetElem.offsetHeight)
			{
				$(targetElem).hide();
				$(parentElem).removeClass("open");
			}
			else
			{
				$(targetElem).show();
				$(parentElem).addClass("open");
			}
		}
		return false;
	}
	return true;
}

function KeepAlive() { }

KeepAlive.tick = function() {
	$.get(KeepAlive.url);
}

KeepAlive.url = '/account/keepalive';
KeepAlive.intervalMinutes = 5;
KeepAlive.setup = function() {
	setInterval(KeepAlive.tick, KeepAlive.intervalMinutes * 60 * 1000);
};