$(function() {

	window.tweet = {};
	
	window.tweet.dateFormat = function( utcDate ) {
		var dt = new Date(Date.parse(utcDate.replace(" +", " UTC+")));
		var rs = "";
		rs += (String(dt.getDate()).length == 1) ? "0" + dt.getDate() : dt.getDate();
		rs += "-";
		rs += (String(dt.getMonth()+1).length == 1) ? "0" + (dt.getMonth()+1) : (dt.getMonth()+1);
		rs += "-";
		rs += dt.getFullYear();
		
		return rs;
	};
	
	window.tweet.load = function(tweets) {
		if (tweets.results.length) {
			for (var i = 0; i < tweets.results.length; i++) {
				var proto = $(".proto-tweet");
				var newTweet = proto.clone();
				
				newTweet.removeClass('proto-tweet');
				newTweet.addClass('tweet');
				// Wat termen...
				window.tweet.urlize($(".tweet-text", newTweet).text(tweets.results[i].text));
				$(".tweet-userlink", newTweet).attr('href', "http://twitter.com/#!/"+encodeURIComponent(tweets.results[i].from_user));
				$(".tweet-username", newTweet).text(tweets.results[i].from_user);
				$(".tweet-time", newTweet).text(window.tweet.dateFormat(tweets.results[i].created_at));
				$(".tweet-userimage", newTweet).attr("src", tweets.results[i].profile_image_url);	
				proto.parent().append(newTweet);			
			}
		}
		else {
			var newTweet = $("<li>").addClass("tweet-message").addClass('tweet').text("Geen recente tweets gevonden.");
			$(".proto-tweet").parent().append(newTweet);
		}
		
		$(".tweet-loading").remove();
	}
	window.tweet.urlize = function (els) {
	
		var _tweets = $.makeArray(els);
		
		for (var i = 0; i < _tweets.length; i++) {
			var tweet = _tweets[i].firstChild.data;
			
			// &lt; en &gt; fix.
			tweet = tweet.replace(/\&gt\;/g,">").replace(/\&lt\;/g,"<");
			
			var parts = cbSplit(tweet, /([\@\#]\S+|http(?:s)?\:\/\/[\S]+)/);
			
			var result = [];
			for (var j = 0; j < parts.length; j++) {
				if (j % 2 == 1) {
					var pushme = document.createElement("a");
					pushme.rel = "external";
					var lastchars;
					if (lastchars = parts[j].match(/[!?\]).,:]+$/)) {
						lastchars = lastchars.toString();
						parts[j] = parts[j].substr(0, parts[j].length - lastchars.length);
						(j == parts.length-1) ? parts.push(lastchars) : (parts[j + 1] = lastchars + parts[j + 1]);
					}					
					switch (parts[j].substr(0,1)) {
						case "#": pushme.href = "http://twitter.com/#!/search/"+encodeURIComponent(parts[j]); break; 
						case "@": pushme.href = "http://twitter.com/#!/"+encodeURIComponent(parts[j]); break;
						default: pushme.href = parts[j]; break;
					}
					pushme.appendChild(document.createTextNode(parts[j]));
					result.push(pushme);
				}
				else {
					result.push(document.createTextNode(parts[j]));
				}
			}
			var element;
			_tweets[i].removeChild(_tweets[i].firstChild);
			while (element = result.pop()) {
				_tweets[i].insertBefore(element, _tweets[i].firstChild);
			}
		}
	}
	
	var s = document.createElement("script");
	var username = 'from:agnesvanhaaften #amm';
	var tweetAmount = 4;
	
	s.src = 'http://search.twitter.com/search.json?q='+encodeURIComponent(username)+'&rpp='+tweetAmount+'&callback=window.tweet.load';
	document.body.appendChild(s);

});



/* Cross-Browser Split 1.0.1
(c) Steven Levithan <stevenlevithan.com>; MIT License
An ECMA-compliant, uniform cross-browser split method */

var cbSplit;

// avoid running twice, which would break `cbSplit._nativeSplit`'s reference to the native `split`
if (!cbSplit) {

cbSplit = function (str, separator, limit) {
    // if `separator` is not a regex, use the native `split`
    if (Object.prototype.toString.call(separator) !== "[object RegExp]") {
        return cbSplit._nativeSplit.call(str, separator, limit);
    }

    var output = [],
        lastLastIndex = 0,
        flags = (separator.ignoreCase ? "i" : "") +
                (separator.multiline  ? "m" : "") +
                (separator.sticky     ? "y" : ""),
        separator = RegExp(separator.source, flags + "g"), // make `global` and avoid `lastIndex` issues by working with a copy
        separator2, match, lastIndex, lastLength;

    str = str + ""; // type conversion
    if (!cbSplit._compliantExecNpcg) {
        separator2 = RegExp("^" + separator.source + "$(?!\\s)", flags); // doesn't need /g or /y, but they don't hurt
    }

    /* behavior for `limit`: if it's...
    - `undefined`: no limit.
    - `NaN` or zero: return an empty array.
    - a positive number: use `Math.floor(limit)`.
    - a negative number: no limit.
    - other: type-convert, then use the above rules. */
    if (limit === undefined || +limit < 0) {
        limit = Infinity;
    } else {
        limit = Math.floor(+limit);
        if (!limit) {
            return [];
        }
    }

    while (match = separator.exec(str)) {
        lastIndex = match.index + match[0].length; // `separator.lastIndex` is not reliable cross-browser

        if (lastIndex > lastLastIndex) {
            output.push(str.slice(lastLastIndex, match.index));

            // fix browsers whose `exec` methods don't consistently return `undefined` for nonparticipating capturing groups
            if (!cbSplit._compliantExecNpcg && match.length > 1) {
                match[0].replace(separator2, function () {
                    for (var i = 1; i < arguments.length - 2; i++) {
                        if (arguments[i] === undefined) {
                            match[i] = undefined;
                        }
                    }
                });
            }

            if (match.length > 1 && match.index < str.length) {
                Array.prototype.push.apply(output, match.slice(1));
            }

            lastLength = match[0].length;
            lastLastIndex = lastIndex;

            if (output.length >= limit) {
                break;
            }
        }

        if (separator.lastIndex === match.index) {
            separator.lastIndex++; // avoid an infinite loop
        }
    }

    if (lastLastIndex === str.length) {
        if (lastLength || !separator.test("")) {
            output.push("");
        }
    } else {
        output.push(str.slice(lastLastIndex));
    }

    return output.length > limit ? output.slice(0, limit) : output;
};

cbSplit._compliantExecNpcg = /()??/.exec("")[1] === undefined; // NPCG: nonparticipating capturing group
cbSplit._nativeSplit = String.prototype.split;

} // end `if (!cbSplit)`
