/*
 * Package
 */
var stratos = (function (base) {
	return base;
})( stratos || {} );


/*
 * textGenerator closure
 */
stratos.textGenerator = (function ($) {
	
	/**
	 * Public interface (methods will be added below)
	 */
	var publicInterface = {};
	
	/**
	 * Private variables
	 */
	var useSpaces = true;
	var spaceWord = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
	
	var paragraphs = [];

	paragraphs.push("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus odio dui, pharetra et imperdiet eget, ultrices a odio. Curabitur et justo turpis, ac rhoncus velit. In condimentum, tellus sit amet euismod commodo, lectus justo tincidunt eros, at malesuada mi diam lacinia odio. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Fusce pellentesque placerat sapien id faucibus. Nullam tincidunt, metus sagittis tincidunt tempor, metus lorem pellentesque lorem, at dignissim leo purus nec nibh. Vestibulum enim velit, malesuada sit amet pharetra in, vehicula accumsan lectus. Mauris pulvinar tellus sed odio porta sed tempor nisl ullamcorper. Nullam massa odio, gravida ac rhoncus in, suscipit vel metus. Ut urna purus, faucibus in pulvinar vel, sollicitudin sagittis massa. Vivamus at elementum metus. Nullam ac aliquet ante.");
	paragraphs.push("In accumsan pellentesque ornare. Vivamus fringilla, ligula eget fermentum pellentesque, massa tellus pharetra nisl, et vulputate nibh mauris sed libero. Ut magna justo, blandit sit amet eleifend vel, sagittis ut justo. Proin ac risus quis sapien hendrerit blandit. Donec in nisl tortor. Nunc sagittis sapien nisl. Sed varius rhoncus pretium. Cras ipsum quam, lobortis nec volutpat vel, facilisis ut odio. Nullam iaculis, nibh quis consectetur pretium, ante metus rutrum neque, sed consequat quam arcu eu arcu. In lacinia tincidunt est sit amet vulputate. Etiam gravida, purus in dapibus pharetra, tortor nisl suscipit massa, vitae posuere mi purus a nunc. Donec sem ipsum, tincidunt eget pharetra vel, elementum vitae nulla. Sed vel pulvinar magna. Sed vestibulum dolor eu ante lobortis non tincidunt sapien adipiscing.");
	paragraphs.push("In ullamcorper, elit congue blandit egestas, enim mauris pellentesque purus, at bibendum lorem augue eu arcu. Donec ultrices, eros non tristique semper, erat nulla porta felis, et fermentum risus nunc in orci. Integer ultricies nisl eu felis convallis tristique. Sed at velit vitae diam cursus blandit sit amet et ante. Sed ut justo metus, ac gravida ligula. Nulla facilisis augue et enim gravida aliquam ut vitae arcu. Maecenas porta dapibus dictum. Proin eleifend tincidunt metus sit amet gravida. Praesent facilisis mollis dignissim. Vivamus suscipit, sapien bibendum condimentum varius, metus turpis suscipit nisi, quis commodo massa mauris in tellus. Aenean ut sem elit, nec varius quam. Nullam in orci ut ante interdum vestibulum nec et quam. Nunc quis adipiscing nisi. Etiam sed est libero, a sagittis mauris. Donec vestibulum volutpat porttitor.");
	paragraphs.push("Praesent accumsan risus sit amet diam accumsan quis congue enim gravida. Suspendisse potenti. Sed et consequat magna. Proin erat magna, ullamcorper ut interdum sit amet, vestibulum et mi. Mauris vel sapien sit amet erat vehicula luctus. Aliquam erat volutpat. Proin nec elit vitae lacus fringilla consequat sit amet quis massa. Nullam a dui turpis. In hac habitasse platea dictumst. Nulla massa urna, ultricies ut ultricies in, tristique sed eros. Pellentesque eu varius eros. Sed mattis mauris nec tellus porta eleifend. Morbi hendrerit aliquam purus, a rutrum leo fermentum sit amet.");
	paragraphs.push("Mauris ultrices lectus dui, ac congue odio. Nam ultrices gravida consequat. Duis fringilla ornare purus, quis eleifend tellus tristique lobortis. Cras mollis dui dignissim mauris consectetur aliquam. Fusce vel elit nibh. Praesent posuere purus at nibh bibendum placerat eget in est. Nam tempor felis sit amet metus euismod elementum. In hac habitasse platea dictumst. Cras rutrum urna nec nunc rhoncus vitae semper lacus ullamcorper. Fusce sed nunc lacus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut adipiscing, felis sed tempus euismod, ipsum orci egestas magna, ut aliquet lectus magna eget tortor. Morbi id turpis tortor, sit amet iaculis nunc.");
	paragraphs.push("Fusce in lectus vestibulum felis posuere aliquam. Nullam porta luctus velit vel dictum. Nullam tempor tortor ac libero ullamcorper vitae lacinia urna hendrerit. Praesent quam ligula, mattis ut accumsan nec, faucibus vel mi. Nullam ullamcorper tempus quam, eu ornare eros pulvinar vitae. Curabitur erat lacus, imperdiet eu fermentum ac, ullamcorper in arcu. Aliquam leo libero, iaculis at semper eget, imperdiet euismod mi. In massa orci, blandit sed facilisis non, consectetur nec libero. Nunc a dictum arcu. Fusce mi ante, convallis id semper vitae, ullamcorper a augue. Curabitur a dolor sed neque lobortis gravida. Praesent nulla lacus, scelerisque laoreet gravida sit amet, consequat eu libero. Donec ornare placerat rhoncus.");
	paragraphs.push("Curabitur aliquet hendrerit tempor. In posuere ante at mi placerat laoreet. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut nunc sem, accumsan non tempus eget, placerat vitae libero. Suspendisse semper porta convallis. Vivamus pharetra, erat ut pharetra tristique, velit lectus varius diam, sit amet tempus erat metus non arcu. Proin quis augue orci. Sed accumsan augue at dui facilisis consectetur. Fusce in felis nunc. Aliquam tincidunt molestie auctor. Ut lorem massa, consequat a condimentum a, tempor ac ante. Proin enim elit, sagittis adipiscing pulvinar in, dignissim eget lectus. Donec accumsan vehicula nisi, vel elementum velit congue vitae. Vivamus quam ligula, feugiat eu tincidunt ut, porttitor vitae lacus. Aliquam erat volutpat. Nam sagittis posuere tortor vel imperdiet.");
	paragraphs.push("Aliquam erat volutpat. Ut suscipit tempor sem, volutpat auctor lacus bibendum et. Suspendisse adipiscing posuere mauris, nec pretium ante sodales a. Curabitur mollis ornare mauris in volutpat. Donec at nibh erat, ac venenatis risus. Sed eget arcu sed nisi eleifend tempus. Morbi eu sem nisi, eu fringilla ligula. Fusce erat orci, dignissim et scelerisque vel, accumsan vel elit. Curabitur congue, felis vel commodo cursus, massa justo fringilla arcu, et volutpat orci leo id velit. Praesent dapibus semper erat nec bibendum. Vestibulum vehicula imperdiet erat, ultrices malesuada massa eleifend sit amet. Donec eu nisl eget ligula viverra elementum vitae vel tellus. Fusce pellentesque porta leo sit amet malesuada. Mauris elementum feugiat libero nec feugiat.");
	paragraphs.push("Vestibulum luctus magna sit amet odio rhoncus mollis. Vivamus eget libero vitae tortor malesuada ultrices. Quisque sit amet urna eros, quis pulvinar augue. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec semper sagittis mauris vitae eleifend. Donec id neque vel lacus porttitor suscipit. Suspendisse dui massa, dictum vitae laoreet in, auctor nec est. Donec porta erat eu elit accumsan auctor. Duis pharetra blandit iaculis. Mauris sollicitudin enim nec neque posuere facilisis. Sed venenatis, lectus quis pellentesque luctus, purus sem ultricies orci, ut tempor libero ipsum vel odio. Etiam vitae eros ligula. Donec ante erat, ornare ac luctus eu, ultricies ac lectus. Etiam molestie tempor nibh ut dictum. Aliquam vestibulum sem eget tortor fermentum commodo. Sed ac massa turpis. Aliquam a est eros. Etiam eu neque dolor, a mollis massa. Pellentesque cursus erat vel lacus blandit lacinia.");
	paragraphs.push("Phasellus laoreet massa et elit dignissim facilisis. Donec ac nibh eget massa pharetra luctus nec nec libero. Suspendisse potenti. Vestibulum velit lacus, fermentum at ultricies sit amet, blandit ut mi. Sed nec nulla lorem, sit amet mollis felis. Integer augue nibh, porttitor id mollis vitae, interdum et metus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus sollicitudin facilisis nulla, quis scelerisque libero ultrices eget. Praesent a posuere lectus. Sed malesuada, ligula vel commodo congue, leo odio aliquet nisl, et interdum justo dui quis ligula.");
	paragraphs.push("Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum nec erat vitae quam tincidunt sagittis. Suspendisse eros urna, porta eu eleifend vitae, dictum non nisl. Fusce porta lectus vitae dolor pharetra tempus. Vivamus varius ligula quis eros luctus vel fringilla mauris vestibulum. Fusce molestie urna at sem consequat id iaculis lacus tempus. Pellentesque sit amet mi id arcu rutrum euismod. Nam aliquet lorem sit amet enim tincidunt facilisis convallis mauris blandit. Etiam accumsan, ipsum in rutrum fringilla, felis nulla mattis lorem, et eleifend tortor nisi tincidunt ipsum. Etiam ac bibendum justo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Quisque purus mauris, accumsan a lobortis eu, congue quis mauris. Aliquam bibendum dui eget mi ultricies ullamcorper. Curabitur mauris turpis, consequat sit amet semper a, tristique ac felis. Ut sodales felis nec tortor pellentesque tincidunt. In tincidunt gravida lobortis. Integer dui tortor, iaculis sed ornare quis, rutrum id nibh. Nulla facilisi.");
	
	
	var words = [];
	
	function extractWords() {
		var allWords = paragraphs.join(" ").toLowerCase().replace(/[\.,]/g, "").split(" ");
		for (var i = allWords.length-1; i>=0; i--) {
			var word = allWords[i];
			if (word && word.length>1 && $.inArray(word, words)===-1) {
				words.push(word);
			}
		}
	}
	
	function replaceWordsWithSpaces() {
		for (var i = paragraphs.length-1; i>=0; i--) {
			paragraphs[i] = paragraphs[i].replace(/[a-z\.,]/gi, "&nbsp;");
		}
	}
	
	if (useSpaces) {
		replaceWordsWithSpaces();
	} else {
		extractWords();
	}
	
	
	/**
	 * Public method:
	 * Get a number of paragraphs
	 */
	publicInterface.generateParagraphs = function ( paragraphCount, variation ) {
		
		if (variation === undefined) variation = 0;
		paragraphCount += Math.floor(Math.random() * (variation + 1)) - variation;
		
		var indexes = [];
		for (var i = 0; i < paragraphs.length; i++) {
			indexes.push(i);
		}
		
		var generatedParagraphs = [];
		while (--paragraphCount>=0) {
			var index = indexes.splice( Math.floor(Math.random() * indexes.length), 1 )[0];
			generatedParagraphs.push(paragraphs[index]);
		}
		
		return generatedParagraphs;
	};
	
	
	/**
	 * Public method:
	 * Get a sentence with a defined number of words
	 */
	publicInterface.generateSentence = function ( wordCount, variation, includeDot ) {
		
		if (variation === undefined) variation = 0;
		wordCount += Math.floor(Math.random() * (variation + 1)) - variation;
		
		var generatedSentence = "";
		var firstRun = true;
		while (wordCount>0) {
			
			var word;
			
			if (useSpaces) {
				word = spaceWord;
				if (!firstRun) {
					generatedSentence += " ";
				}
			} else {
				var index = Math.floor(Math.random() * words.length);
				word = words[index];
				if (firstRun) {
					word = word.substr(0,1).toUpperCase() + word.substr(1);
					firstRun = false;
				} else {
					generatedSentence += " ";
				}
			}

			
			generatedSentence += word;
			wordCount--;
		}
		
		if (!useSpaces && includeDot) generatedSentence += ".";
		
		return generatedSentence;
	};
	
	return publicInterface;
	
})(jQuery);

