﻿
var sorryText = "Sorry! No text found"
var texts = new Array("it's awesome","an unique design deserves a unique dummy text","tomorrow's design deserves today's dummy text","Lorem Ipsum is soo 1541","internet was really slow when lispum was written","lipsum is for printing, not for the web","you got tired of using lorem ipsum","it puts the 2.0 in your design","you look good today!","OM NOM NOM NOM","narwhals do it all the time","pressing f5 changes this message");
var htmlOutput = "";
var defP = 8;
function languageSelect(s){
	document.lipsumForm.language.disabled = false;
	document.lipsumForm.search.disabled = false;
	if(s== "delicious" || s == "digg" || s == "random" || s == "classic" || s == "reddit" || s == "last" || s == "friendfeed"){
		document.lipsumForm.language.disabled = true;
	}
	if(s == "random" || s == "classic"){
		document.lipsumForm.search.disabled = true;
		document.lipsumForm.search.value = "";
	}
}

function format(s){
	s = s.replace(/\[pic\]|\[pics\]|\[vid\]|\[image\]/ig,"");
	s = s.replace(/ \.|\.\./ig,".");
	s = s.replace(/_/ig," ");
	s = s.replace(/(@|♡|\*|\#|\»|www\.|♫|★||➔)/ig,"");
	s = s.replace(/!|!!|!!!|!!!!|!!!!!/ig,".");
	s = s.replace(/\-\-|\-\-\-/ig,"-");
	s = s.replace(/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?/ig,"");
	s = s.replace(/\?\?|http|\/\/|\:|\(|\)/ig,"");
	s = s.replace(/bit\.ly.*[^ ]|tinyurl\.com.*[^ ]|tumblr\.com.*[^ ]/ig,"");
	s = s.replace(/(\.\.|\.\.\.)/ig,".");
	//naughty words filter below, if you're under 18, please close your eyes
	s = s.replace(/(fuck|fucking|cock|cunt|sex|porn|xxx)/ig,"");
	return s;
}
function generate(c,l,s){
	s = encodeURIComponent(s);
	var output = '';
	if(c=="twitter"){twitter(l,s);}
	if(c=="digg"){digg(s);}
	if(c=="random"){random(l,s);}
	if(c=="classic"){classic();}
	if(c=="delicious"){delicious(s);}
	if(c=="reddit"){reddit(s);}
	if(c=="last"){last(s);}
	if(c=="friendfeed"){friendfeed(s);}
	return false;
}
function random(l,s){
	//just some random words
	var words = new Array("nouvelles ","remet","enquanto","mirar","ontwerp","weten","fresh","business","tres","fuera","sajam","sehr");
	s = words[Math.floor(Math.random()*words.length)];
 	var network = Math.floor(Math.random()*5);
 	if(network==0){twitter(l,s);}
 	if(network==1){digg(s);}
 	if(network==2){classic();}
 	if(network==3){delicious(s);}
 	if(network==4){reddit(s);}
}
function classic(){
	var output = '';
	$('#output').html('busy fetching data, one moment');
 	var url = "classic.txt";
	$.get(url, {}, function(data) {
		setOutput("Lorem Ipsum " + scramble(data));
   });
}
function twitter(l,s){
	var output = '';
	if(s=='')s='e';
	var t = 15;
	$('#output').html('busy fetching data, one moment');
 	var url = "http://search.twitter.com/search.json?q=" + s + "&callback=?&rpp=" + t + "&page=1&lang=" + l;
      $.getJSON(url,
       function(data){
		if(data.results){
			for(i=0;i<t && i<data.results.length;i++){
				var r = '';
				r += format(data.results[i].text);
				r = r.toUpperCase().substr(0,1) + r.toLowerCase().substr(1) + ' ';
				if(i%5 == 0 && i>0)r = '<br /><br />' + r;
				output += r;
			}
		}
		setOutput(format(output));
		if(output == ''){$('#output').html(sorryText)}
	});
}

function delicious(s){
	var output = '';
	if(s=='')s='e';
	var i = 0;
	$('#output').html('busy fetching data, one moment');
 	var url = "delicious.proxy.asp?s=" + s;
	$.get(url, {}, function(data) {
		$(data).find('description').each(function(){
			if(i>0){
				var r = '';
				r += format($(this).text());
				r = r.toUpperCase().substr(0,1) + r.toLowerCase().substr(1) + ' ';
				if(i%4 == 0 && i>0)r = '<br /><br />' + r;
				output += r;
			}
			i++;
		});
		if(output != ''){
			setOutput(format(output));
		} else {
         setOutput(sorryText);
		}
   });
}

function digg(s){
	var output = '';
	if(s=='')s='e';
	var i = 0;
	$('#output').html('busy fetching data, one moment');
 	var url = "digg.proxy.asp?s=" + s;
	$.get(url, {}, function(data) {
		$(data).find('description').each(function(){
				var r = '';
				r += format($(this).text());
				r = r.toUpperCase().substr(0,1) + r.toLowerCase().substr(1) + ' ';
				if(i%4 == 0 && i>0)r = '<br /><br />' + r;
				output += r;
				i++;
		});
		if(output != ''){
			setOutput(format(output));
		} else {
         setOutput(sorryText);
		}
   });
}
function reddit(s){
	var output = '';
	if(s=='')s='e';
	var i = 0;
	$('#output').html('busy fetching data, one moment');
 	var url = "reddit.proxy.asp?s=" + s;
	$.get(url, {}, function(data) {
		$(data).find('title').each(function(){
			if(i>1){
				var r = '';
				r += format($(this).text());
				r = r.toUpperCase().substr(0,1) + r.toLowerCase().substr(1) + ' ';
				if(i%8 == 0 && i>0)r = '<br /><br />' + r;
				output += r;
			}
			i++;
		});
		if(output != ''){
			setOutput(format(output));
		} else {
         setOutput(sorryText);
		}
   });
}
function last(s){
	var output = '';
	var t = '';
	if(s=='')s='love';
	var i = 0;
	$('#output').html('busy fetching data, one moment');
 	var url = "last.proxy.asp?s=" + s;
	$.get(url, {}, function(data) {
		$(data).find('track').each(function(){
				var r = '';
				if($(this).find('artist').text() == t){
					r += format($(this).find('name').text());				
				} else {
					t = $(this).find('artist').text();
					r += format($(this).find('artist').text() + ' ' + $(this).find('name').text());
				}
				r = r.toUpperCase().substr(0,1) + r.toLowerCase().substr(1) + ' ';
				if(i%10 == 0 && i>0)r = '.<br /><br />' + r;
				output += r;
				i++;
		});
		if(output != ''){
			setOutput(format(output + '.'));
		} else {
         setOutput(sorryText);
		}
   });
}
function friendfeed(s){
	var output = '';
	if(s=='')s='e';
	var i = 0;
	$('#output').html('busy fetching data, one moment');
 	var url = "friendfeed.proxy.asp?s=" + s;
	$.get(url, {}, function(data) {
		$(data).find('title').each(function(){
			if(i>0){
				var r = '';
				r += format($(this).text());
				r = r.toUpperCase().substr(0,1) + r.toLowerCase().substr(1) + ' ';
				if(i%8 == 0 && i>0)r = '<br /><br />' + r;
				output += r;
			}
			i++;
		});
		if(output != ''){
			setOutput(format(output));
		} else {
         setOutput(sorryText);
		}
   });
}

function formatOutput(formatting){
	if(formatting == "source" && !document.getElementById("sourceBox")){
		var txt = $('#innerOutput').html();
		txt = txt.replace(/\n/ig,'');
		txt = txt.replace(/<br \/><br \/>|<br><br>/ig,'\n<br /><br />\n');
		txt = txt.replace(/<\/h1>/ig,'<' + '/h1>\n');
		txt = txt.replace(/<\/h2>/ig,'<' + '/h2>\n');
		$('#innerOutput').html('<textarea id="sourceBox"><' + '/textarea>');
		document.getElementById('sourceBox').value = txt;
		document.getElementById('sourceBox').select();
	}
	if(formatting == "plain"){
		$('#innerOutput').html(htmlOutput);
	}
	if(formatting == "paragraphs"){
		if(document.getElementById("sourceBox")){formatOutput('plain');}
		t = $('#innerOutput').html();
		if(defP == 15){t = setParagraphs(t, 100);}
		else if(defP == 8){t = setParagraphs(t, 15);}	
		else if(defP == 100){t = setParagraphs(t, 8);}	
		$('#innerOutput').html(t);
	}
	if(formatting == "markup"){
		var t = htmlOutput;
		for(i=0;i<3;i++){
			var rnd = Math.floor(Math.random()*Math.floor(htmlOutput.length));
			var ts0 = t.substring(0, t.indexOf(' ',rnd) + 1);
			var ts2 = t.substring(t.indexOf(' ',ts0.length));
			var ts1 = t.substring(ts0.length,t.length - ts2.length);
			if(ts1.indexOf("href") == -1 && ts1.indexOf(">") == -1 && ts1.indexOf("<") == -1){
				t = ts0 + '<a href="#">' + ts1 + '<' + '/a>' + ts2;
			}
		}
		t = '<h1>Lorem Ipsum 2.0<' + '/h1>\n<h2>' + ts0.substr(0,ts0.indexOf(' ',30)) + '<' + '/h2>' + t;
		$('#innerOutput').html(t);
	}
	if(formatting == "scramble"){
		setOutput(scramble(htmlOutput));
	}
}

function setOutput(data){
	htmlOutput = data;
	var btn = '<div id="outputOptions" style="text-align:right;">';
	btn += '<a href="#" onclick="formatOutput(\'source\');">source<' + '/a> ';
	btn += '<a href="#" onclick="formatOutput(\'plain\');">plain<' + '/a> ';
	btn += '<a href="#" onclick="formatOutput(\'paragraphs\');">p<' + '/a> ';
	btn += '<a href="#" onclick="formatOutput(\'markup\');">add markup<' + '/a> ';
	btn += '<a href="#" onclick="formatOutput(\'scramble\');">stir it up!<' + '/a> <' + '/div>';
	$('#output').html(btn + '\n<div id="innerOutput">\n' + data + '<' + '/div>');
}
function shuffle(o){ //v1.0, code based on Fisher-Yates 
	for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
	return o;
};

function scramble(txt){
	txt = txt.toLowerCase().replace(/<br \/>|\.|\,|\;\:'"/ig,'');
	var a = txt.split(" ");
	txt = '';
	a = shuffle(a);
	cap = false;
	for(i=0;i<a.length;i++){
		if(parseInt(Math.random() * 10) == 0){
			a[i] += '.';
			if(a.length > i+1){
				a[i + 1] = a[i + 1].substr(0,1).toUpperCase() + a[i + 1].substr(1).toLowerCase();
			}
		}
		txt += a[i] + ' ';
	}
	txt = setParagraphs(txt,defP);
	return txt;
}

function setParagraphs(txt,lines){
	defP = lines;
	var a = txt.replace(/<br \/>|<br>/ig,'').split(".");
	txt = "";
	for(i=0;i<a.length;i++){
		txt += a[i] + ".";
		if(i%lines == 0 && i>0){txt += "<br /><br />"}
	}
	return txt.replace(/ \./ig,'.');
}
$(document).ready(function() {
	var s = window.location.href;
	if(s.indexOf('?') > 10){ 
		var defSearch = s.substring(s.lastIndexOf('?') + 1);
		if(defSearch.length > 2){
			document.lipsumForm.search.value = unescape(defSearch);
		}
	}
	generate(document.lipsumForm.community.value, document.lipsumForm.language.value, document.lipsumForm.search.value);
});