﻿var	addEvent = function( obj, type, fn ) {
	if (obj.addEventListener)
			obj.addEventListener(type, fn, false);
	else if (obj.attachEvent)
			obj.attachEvent('on' + type, function() { return fn.apply(obj, new Array(window.event));});
}

$(function() {
	{	// Private functions
		var highlightActiveMenuItem, checkInputField, getQueryVariable;
		var initOnLoad;
		var initSearchBox, searchSubmit, initLoginBox;
		var initFormValidation;

		/* Disable enters - dotnet*/
		addEvent(document, "keydown", function(e) {
			if (!e) e = window.event;
			if (e.keyCode == 13) {
				return false;
			}
		});

		initSearchBox = function() {

			var el = document.getElementById('txtContentSearch');
			addEvent(el, "keydown", function(e) {
				if (!e) e = window.event;
				if (e.keyCode == 13) {
					searchSubmit();
				}
			});
			var el = document.getElementById('btnContentSearch');
			addEvent(el, "click", searchSubmit);

		}
		$(".cycle").cycle({
			fx: 'fade',
			timeout: 3000,
			//delay: -3000,
			speed: 0
		});

		$(".tweets_overzicht").tweet({
			avatar_size: 56,
			count: 3
		}).bind("empty", function() { $(this).append("Geen tweets gevonden"); });

		$(".tweets").tweet({
			avatar_size: 75,
			count: 3
		}).bind("empty", function() { $(this).append("Geen tweets gevonden"); });

		/* -- */
		searchSubmit = function() {
			searchTerm = encodeURIComponent(document.getElementById('txtContentSearch').value);
			var currentLocation = window.location.href;
			if (searchTerm.length > 1) {

				document.forms[0].onsubmit = function() { return false }
				var searchUrl = '/cms/showpage.aspx?id=14&search=';

				if (document.body.className == 'ledennet') {
					searchUrl = '/cms/showpage.aspx?id=xxx&search=';
				}
				searchUrl += searchTerm;
				window.location.href = searchUrl;
				return false;
			} else {

				alert('Voer een zoekterm van minstens twee tekens in');
				window.location.href = currentLocation;
			}
		}

		checkInputField = function(id, value) {
			if (!document.getElementById(id))
				return;
			var el = document.getElementById(id).getElementsByTagName("input")[0];
			if (el.value == '') el.value = value;

			addEvent(el, "focus", function() {
				if (this.value == value) {
					this.value = '';
					this.className = "active";
				}
			});
			addEvent(el, "blur", function() {
				if (this.value == '') {
					this.value = value;
					this.className = "";
				}
			});
		}
		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;
		}

		highlightActiveMenuItem = function(id) {
			var pageId;
			if (!document.getElementById(id))
				return;

			pageId = getQueryVariable('id');

			var menu = document.getElementById(id).getElementsByTagName("a");

			for (var i = 0, j = menu.length; i < j; i++) {
				if (menu[i].href.match(/id=(\d+)/)[1] == pageId) {
					menu[i].className = "active";
					if (menu[i].parentNode.parentNode.parentNode.tagName == "LI") {
						menu[i].parentNode.parentNode.parentNode.className = "childactive";
					}
					break;
				}
			}
		}

		showGotoMyProfile = function(id) {
			if (!document.getElementById(id))
				return;
			var el = document.getElementById(id);
			el.innerHTML = '<a id="text_loggedin_vervanging" href="\/cms\/showpage.aspx?id=58">Naar het Ledennet</a>';
			el.style.visibility = "visible";
        }
        showGotoMyProfile('text_loggedin');

        $("#login_form_container:has('#text_loggedin')").addClass("ingelogd");

		initOnLoad = function() {
			highlightActiveMenuItem("subnavigatie");
			// document.forms[0].reset();
			checkInputField("zoek", "Zoek");
			//initSearchBox();
			showGotoMyProfile('text_loggedin');
			checkInputField("input_container_username", "Gebruikersnaam");
			checkInputField("input_container_password", "WACHTWOORD");


		}
	}
	{	// Public functions
		return ({
			onLoad: function() {
				addEvent(window, "load", initOnLoad);
			}
			,
			submitFormToSendmail: function(fn) {
				var submitFormHasErrors = false;

				if (typeof fn == 'function') {
					submitFormHasErrors = fn();
				}
				if (submitFormHasErrors == false) {

				}
			}
		});
	}
});


function getElementbyContainerId( element )
{
	if (!document.getElementById(element)) return;
	
	return document.getElementById(element).getElementsByTagName('input')[0];
}

$.fn.tweet = function(o) {
	var s = {
		username: ["nvtg"],                // [string]   required, unless you want to display our tweets. :) it can be an array, just do ["username1","username2","etc"]

		list: null,                               // [string]   optional name of list belonging to username
		avatar_size: 30,                        // [integer]  height and width of avatar if displayed (48px max)
		count: 300,                                 // [integer]  how many tweets to display?
		intro_text: null,                         // [string]   do you want text BEFORE your your tweets?
		outro_text: null,                         // [string]   do you want text AFTER your tweets?
		join_text: "auto",                         // [string]   optional text in between date and tweet, try setting to "auto"
		auto_join_text_default: "",        // [string]   auto text for non verb: "i said" bullocks
		auto_join_text_ed: "",                   // [string]   auto text for past tense: "i" surfed
		auto_join_text_ing: "",               // [string]   auto tense for present tense: "i was" surfing
		auto_join_text_reply: "",     // [string]   auto tense for replies: "i replied to" @someone "with"
		auto_join_text_url: "",   // [string]   auto tense for urls: "i was looking at" http:...
		loading_text: "Tweets laden...",                       // [string]   optional loading text, displayed while tweets load
		query: null,                              // [string]   optional search query
		tag: "",
		refresh_interval: null,                  // [integer]  optional number of seconds after which to reload tweets
		twitter_url: "twitter.com",               // [string]   custom twitter url, if any (apigee, etc.)
		twitter_api_url: "api.twitter.com",       // [string]   custom twitter api url, if any (apigee, etc.)
		twitter_search_url: "search.twitter.com"  // [string]   custom twitter search url, if any (apigee, etc.)
	};

	if (o) $.extend(s, o);

	$.fn.extend({
		linkUrl: function() {
			var returning = [];
			var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
			this.each(function() {
				returning.push(this.replace(regexp, "<a href=\"$1\">$1</a>"));
			});
			return $(returning);
		},
		linkUser: function() {
			var returning = [];
			var regexp = /[\@]+([A-Za-z0-9-_]+)/gi;
			this.each(function() {
				returning.push(this.replace(regexp, "<a href=\"http://" + s.twitter_url + "/$1\">@$1</a>"));
			});
			return $(returning);
		},
		linkHash: function() {
			var returning = [];
			var regexp = /(?:^| )[\#]+([A-Za-z0-9-_]+)/gi;
			this.each(function() {
				returning.push(this.replace(regexp, ' <a href="http://' + s.twitter_search_url + '/search?q=&tag=$1&lang=all&from=' + s.username.join("%2BOR%2B") + '">#$1</a>'));
			});
			return $(returning);
		},
		capAwesome: function() {
			var returning = [];
			this.each(function() {
				returning.push(this.replace(/\b(awesome)\b/gi, '<span class="awesome">$1</span>'));
			});
			return $(returning);
		},
		capEpic: function() {
			var returning = [];
			this.each(function() {
				returning.push(this.replace(/\b(epic)\b/gi, '<span class="epic">$1</span>'));
			});
			return $(returning);
		},
		makeHeart: function() {
			var returning = [];
			this.each(function() {
				returning.push(this.replace(/(&lt;)+[3]/gi, "<tt class='heart'>&#x2665;</tt>"));
			});
			return $(returning);
		}
	});

	function parse_date(date_str) {
		// The non-search twitter APIs return inconsistently-formatted dates, which Date.parse
		// cannot handle in IE. We therefore perform the following transformation:
		// "Wed Apr 29 08:53:31 +0000 2009" => "Wed, Apr 29 2009 08:53:31 +0000"
		return Date.parse(date_str.replace(/^([a-z]{3})( [a-z]{3} \d\d?)(.*)( \d{4})$/i, '$1,$2$4$3'));
	}

	function relative_time(time_value) {
		var parsed_date = parse_date(time_value);
		var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
		var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
		var r = '';
		if (delta < 60) {
			r = delta + ' seconden geleden';
		} else if (delta < 120) {
			r = 'een minuut geleden';
		} else if (delta < (45 * 60)) {
			r = (parseInt(delta / 60, 10)).toString() + ' minuten geleden';
		} else if (delta < (2 * 60 * 60)) {
			r = 'een uur geleden';
		} else if (delta < (24 * 60 * 60)) {
			r = '' + (parseInt(delta / 3600, 10)).toString() + ' uur geleden';
		} else if (delta < (48 * 60 * 60)) {
			r = 'een dag geleden';
		} else {
			r = (parseInt(delta / 86400, 10)).toString() + ' dagen geleden';
		}
		return 'ongeveer ' + r;
	}

	function build_url() {
		var proto = ('https:' == document.location.protocol ? 'https:' : 'http:');

		var query = ('from:' + s.username.join(' OR from:'));
		return proto + '//' + s.twitter_search_url + '/search.json?tag=' + s.tag + '&q=' + query + '&rpp=' + s.count + '&callback=?';
	}


	return this.each(function(i, widget) {
		var list = $('<ul class="tweet_list">').appendTo(widget);
		var intro = '<p class="tweet_intro">' + s.intro_text + '</p>';
		var outro = '<p class="tweet_outro">' + s.outro_text + '</p>';
		var loading = $('<p class="loading">' + s.loading_text + '</p>');

		if (typeof (s.username) == "string") {
			s.username = [s.username];
		}

		if (s.loading_text) $(widget).append(loading);
		$(widget).bind("load", function() {
			$.getJSON(build_url(), function(data) {
				if (s.loading_text) loading.remove();
				if (s.intro_text) list.before(intro);
				list.empty();
				var tweets = (data.results || data);
				$.each(tweets, function(i, item) {
					// auto join text based on verb tense and content
					if (s.join_text == "auto") {
						if (item.text.match(/^(@([A-Za-z0-9-_]+)) .*/i)) {
							var join_text = s.auto_join_text_reply;
						} else if (item.text.match(/(^\w+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+) .*/i)) {
							var join_text = s.auto_join_text_url;
						} else if (item.text.match(/^((\w+ed)|just) .*/im)) {
							var join_text = s.auto_join_text_ed;
						} else if (item.text.match(/^(\w*ing) .*/i)) {
							var join_text = s.auto_join_text_ing;
						} else {
							var join_text = s.auto_join_text_default;
						}
					} else {
						var join_text = s.join_text;
					};

					var from_user = item.from_user || item.user.screen_name;
					var profile_image_url = item.profile_image_url || item.user.profile_image_url;
					var join_template = '<span class="tweet_join"> ' + join_text + ' </span>';
					var join = ((s.join_text) ? join_template : ' ');
					var avatar_template = '<a class="tweet_avatar" target="_blank" href="http://' + s.twitter_url + '/' + from_user + '"><img src="' + profile_image_url + '" height="' + s.avatar_size + '" width="' + s.avatar_size + '" alt="' + from_user + '\'s avatar" title="' + from_user + '\'s avatar" border="0"/></a><a href="http://' + s.twitter_url + '/' + from_user + '" target="_blank" class="gebruiker">' + from_user + '</a>';
					var avatar = (s.avatar_size ? avatar_template : '');
					var date = '<span class="tweet_time"><a href="http://' + s.twitter_url + '/' + from_user + '/statuses/' + item.id_str + '" target="_blank" title="view tweet on twitter">' + relative_time(item.created_at) + '</a></span>';
					var text = '<span class="tweet_text">' + $([item.text]).linkUrl().linkUser().linkHash().makeHeart().capAwesome().capEpic()[0] + '</span>';

					// until we create a template option, arrange the items below to alter a tweet's display.
					list.append('<li>' + avatar + join + text + date + '</li>');

					list.children('li:first').addClass('tweet_first');
					list.children('li:odd').addClass('tweet_even');
					list.children('li:even').addClass('tweet_odd');
				});
				if (s.outro_text) list.after(outro);
				$(widget).trigger("loaded").trigger((tweets.length == 0 ? "empty" : "full"));
				if (s.refresh_interval) {
					window.setTimeout(function() { $(widget).trigger("load"); }, 1000 * s.refresh_interval);
				};
			});
		}).trigger("load");
	});
};


