function Application()
{
	this.rootPath = 'http://www.socialmediacheck.nl/';
	this.searchObject = false;
	this.controller = false;
	this.action = false;
	this.doubleEmail = false;

	this.viewportWidth = $(window).width();
	this.viewportHeight = $(window).height();

	this.initialize = function()
	{
		// Preloading....
		this.preLoading();
	}
	
	this.run = function(controller, action)
	{
		this.resizeApp();
		this.controller = controller;
		this.action = action;

		var self = this;
		// Run depending on action
		switch(action)
		{
			case 'index' :
				this.searchObject = new Search();
				if(this.getQueryVariable('query'))
				{
					if(self.searchObject.isNewQuery(self.getQueryVariable('query'))) {
						$('body').html('<div id="loaderContainer"><h1>Een ogenblik geduld graag, de zoekresultaten worden opgehaald...</h1><br /><br /><img src="images/loader_indicator.gif" width="128" height="15" border="0" /></div>');
						$.get(self.rootPath+'index.php?controller=Content&action=caching', { q: encodeURI(self.getQueryVariable('query')) }, function(data)
						{
							var q = escape(self.getQueryVariable('query'));
							document.location.href='index.php?controller=Content&action=search&q='+q;
						});
					}
				}
				else
				{
					$("#q").keypress(function (e)
					{
						if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13))
						{
							var query = $("#q").val();
							if(query.length > 0 && query != 'Vind jouw merknaam binnen de nederlandse sociale media')
							{
								if(self.searchObject.isNewQuery(query)) {
									$('body').html('<div id="loaderContainer"><h1>Een ogenblik geduld graag, de zoekresultaten worden opgehaald...</h1><br /><br /><img src="images/loader_indicator.gif" width="128" height="15" border="0" /></div>');
									$.get(self.rootPath+'index.php?controller=Content&action=caching', { q: encodeURI(query) }, function(data)
									{
										var q = escape(query);
										document.location.href='index.php?controller=Content&action=search&q='+q;
									});
								}
							}
							else
							{
								$.prompt('Vul een merknaam in.');
							}
							return false;
						}
						else
						{
							return true;  
						}
					});
					$("#search_button").click(function (e)
					{
						var query = $("#q").val();
						if(query.length > 0 && query != 'Vind jouw merknaam binnen de nederlandse sociale media')
						{
							if(self.searchObject.isNewQuery(query)) {
								$('body').html('<div id="loaderContainer"><h1>Een ogenblik geduld graag, de zoekresultaten worden opgehaald...</h1><br /><br /><img src="images/loader_indicator.gif" width="128" height="15" border="0" /></div>');
								$.get(self.rootPath+'index.php?controller=Content&action=caching', { q: encodeURI(query) }, function(data)
								{
									var q = escape(query);
									document.location.href='index.php?controller=Content&action=search&q='+q;
								});
							}
						}
						else
						{
							alert('Vul een merknaam in.');
						}
					});
					this.autoClear();
				}
				break;
			case 'search' :
				this.searchObject = new Search();
				this.searchObject.search(0);
				$("#q").keypress(function (e)
				{
					if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13))
					{
						var query = $("#q").val();
						if(query.length > 0 && query != 'Vind jouw merknaam binnen de nederlandse sociale media')
						{
							if(self.searchObject.isNewQuery(query)) {
								$('body').html('<div id="loaderContainer"><h1>Een ogenblik geduld graag, de zoekresultaten worden opgehaald...</h1><br /><br /><img src="images/loader_indicator.gif" width="128" height="15" border="0" /></div>');
								$.get(self.rootPath+'index.php?controller=Content&action=caching', { q: encodeURI(query) }, function(data)
								{
									var q = escape(query);
									document.location.href='index.php?controller=Content&action=search&q='+q;
								});
							} else {
								$("#searchPager").pager({ pagenumber: 1, pagecount: self.searchObject.searchPageCount, buttonClickCallback: searchPageClick });
								self.searchObject.search((1 * 15) - 15);
								$('html, body').animate({scrollTop:0}, 'slow');
							}
						}
						else
						{
							alert('Vul een merknaam in.');
						}
						return false;
					}
					else
					{
						return true;  
					}
				});
				$("#search_button").click(function (e)
				{
					var query = $("#q").val();
					if(query.length > 0 && query != 'Vind jouw merknaam binnen de nederlandse sociale media')
					{
						if(self.searchObject.isNewQuery(query)) {
							$('body').html('<div id="loaderContainer"><h1>Een ogenblik geduld graag, de zoekresultaten worden opgehaald...</h1><br /><br /><img src="images/loader_indicator.gif" width="128" height="15" border="0" /></div>');
							$.get(self.rootPath+'index.php?controller=Content&action=caching', { q: encodeURI(query) }, function(data)
							{
								var q = escape(query);
								document.location.href='index.php?controller=Content&action=search&q='+q;
							});
						} else {
							$("#searchPager").pager({ pagenumber: 1, pagecount: self.searchObject.searchPageCount, buttonClickCallback: searchPageClick });
							self.searchObject.search((1 * 15) - 15);
							$('html, body').animate({scrollTop:0}, 'slow');
						}
					}
					else
					{
						alert('Vul een merknaam in.');
					}
				});
				this.autoClear();
				break;
			case 'customsearch' :
				this.searchObject = new Search();
				this.searchObject.customSearch(0, this.getQueryVariable('site'));
				break;
			case 'subscribe' :
				this.searchObject = new Search();
				break;
		}

		// i.e. png fix
		if(jQuery.browser.msie && jQuery.browser.version < 7) { DD_belatedPNG.fix('.png_bg'); }
	}

	this.destroy = function() {}

	this.require = function(src)
	{
		// add the required script
		var scriptElem = document.createElement('script');
		scriptElem.setAttribute('src',src);
		scriptElem.setAttribute('type', 'text/javascript');
		document.getElementsByTagName('head')[0].appendChild(scriptElem);
	}

	this.getQueryVariable = function(variable)
	{
		var query = window.location.search.substring(1);
		var vars = query.split("&");
		for (var i=0;i<vars.length;i++)
		{
			var pair = vars[i].split("=");
			if (pair[0] == variable) {
				return pair[1];
			}
		}
		return false;
	}
	
	this.preLoading = function()
	{
		try { document.execCommand("BackgroundImageCache", false, true); } catch(err) {}
		if (!$('#preload')) return
	    
		var preload = $('#preload');
		var preloadImages = new Array();
		var sHtml = '';

		for(i=0; i<preloadImages.length; i++)
		{
			sHtml += '<img src="images/' + preloadImages[i] + '" />'
		}
		
		preload.html(sHtml);
		preload.hide();
	}
	
	this.createCookie = function(name, value, days)
	{
		if (days)
		{
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else
		{
			var expires = "";
		}
		document.cookie = name+"="+value+expires+"; path=/";
	}

	this.readCookie = function (name)
	{
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++)
		{
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return false;
	}

	this.randomNumberRange = function(minVal, maxVal, floatVal)
	{
		var randVal = minVal+(Math.random()*(maxVal-minVal));
		return typeof floatVal=='undefined'?Math.round(randVal):randVal.toFixed(floatVal);
	}
	
	this.inArray = function(needle, haystack, argStrict)
	{
		var key = '', strict = !!argStrict;
		if (strict)
		{
			for (key in haystack) {
				if (haystack[key] === needle) { return true; }
			}
		} else {
			for (key in haystack) {
				if (haystack[key] == needle) { return true; }
			}
		}
		return false;
	}
	
	this.resizeApp = function()
	{
		var window_height = this.getWindowHeight();
		if(window_height > 593)
		{
			var diff_height = window_height - 593;
			$('#pagecontainer').css({ top: (diff_height / 2) + 'px' });
		}
	}

	this.getWindowHeight = function()
	{
		if (self.innerHeight) { return self.innerHeight; }
		if (document.documentElement && document.documentElement.clientHeight) {
			return document.documentElement.clientHeight;
		}
		if (document.body) { return document.body.clientHeight; }
		return 0;
	}

	this.breakWordsString = function(strsrc, len)
	{
		if(strsrc.length < len)
		{
			return strsrc;
		}
		var words = strsrc.split(' ');
		var str = '';
		for ( var j in words )
		{
			var totalLength = str+' '+String(words[j]);
			if(totalLength.length > len)
			{
				str = str + '...';
				return str;
			}
			if(j > 0) { str = str + ' '; }
			str = str + words[j];
		}
		str = str + '...';
		return str;
	}
	
	this.autoClear = function ()
	{
		var inp = document.getElementsByTagName('input');
		for(var i = 0; i < inp.length; i++)
		{
			if(inp[i].type == 'text')
			{
				inp[i].setAttribute('rel',inp[i].defaultValue)
				inp[i].onfocus = function()
				{
					if(this.value == this.getAttribute('rel')) { this.value = ''; } else { return false; }
				}
				inp[i].onblur = function()
				{
					if(this.value == '') { this.value = this.getAttribute('rel'); } else { return false; }
				}
				inp[i].ondblclick = function() { this.value = this.getAttribute('rel') }
			}
		}
	}
}
