function loremIpsumGenerate() {
	var lorem = [];

	switch( document.getElementById('lorem_type').value ) {
		case "latin": // more than 800 word sequence, 56 sentences
			lorem[0] = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.";
			lorem[1] = "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.";
			lorem[2] = "Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.";
			lorem[3] = "Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.";
			lorem[4] = "In cui facilisi hendrerit reprobo quod jugis neque probo ex. Nisl uxor os suscipere, veniam metuo venio ideo humo vereor, suscipit pala immitto elit. Quidem delenit nimis si delenit te feugiat, reprobo dignissim vereor velit decet vel. Pneum, commodo gilvus lobortis quidem foras neque, probo consequat ludus ventosus verto abico dignissim consequat. Nisl pagus wisi nisl nulla vel hendrerit luptatum.";
			lorem[5] = "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.";
			lorem[6] = "Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus.";    			
			lorem[7] = "Quis sudo multo vel jus duis, illum occuro et suscipere. Natu, praemitto ibidem vulpes defui, pecus. Iriure nisl nulla ludus olim, ibidem praesent, suscipit nonummy sed decet, meus. Sudo pneum dolor validus commodo demoveo velit tation ratis odio sed commodo turpis. Brevitas, loquor vicis singularis suscipere ratis tincidunt causa vindico augue feugiat praesent odio. Importunus typicus modo pecus transverbero in sudo, exerci sed eros delenit.";
			lorem[8] = "Nobis odio suscipere, in, tego enim, fere, iaceo qui voco ut accumsan venio. Exerci facilisis vicis et, velit ex nisl accumsan decet, exerci pagus amet, tego. Luptatum oppeto paulatim velit, neque mauris nulla qui neo. Tego sagaciter pneum fatua amet fere iriure. Proprius ullamcorper inhibeo ut ex quia augue persto, refero. Ex quae bis sed minim, pagus delenit sino praesent. Blandit luptatum vel vel nisl quidne lucidus quibus, ex tamen facilisis commodo sed feugiat. Lucidus ad illum autem blandit autem humo feugiat adsum loquor.";
			lorem[9] = "Tation eros nulla inhibeo odio abluo feugait dolore autem neque ex lucidus feugiat letalis. Magna, iustum usitas eros paratus proprius autem demoveo molior euismod hendrerit, velit odio nutus. Mauris tamen, quis enim iusto os augue exputo caecus zelus qui singularis sudo.";
			break;
		case "advertising": // more than 400 words, 42 sentences
			lorem[0] = "Say goodbye pleasure smells seeing like savor pay one but on. In generous, are however big stains youthful feel zesty oily. Look any, handcrafted much less worthwhile pennies just trust pay. Stains ever full sparkling outstanding gigantic calories.";
			lorem[1] = "Plus cholesterol escape juicy vibrant outside than racy each disposable original pleasing. Whopping, your clean takes ocean know picky sold can quick golden double.";
			lorem[2] = "Does go why, coming deserve lifetime yummy classic simulated silky double extra miracle out. Have, rosy racy flexible announcing tough offer peppy credit-card genuine roasted. Clean polished simply any affordable bonus.";
			lorem[3] = "Messy disposable supreme messy well smart classic, effervescent intense kids. Latest sparkling spend newer discount low-cost tropical, postage challenge know super tough genuine when dual. Exclusive full-bodied market flip newest believe luxury blend youthful juicy thought pure, rated, handling awesome.";
			lorem[4] = "Class money roasted excellent dry, citrus odor mouthwatering. Thought style, advantage opportunity spring expensive remarkable save snappy, agree squeezable. Gentle supreme traditional polished lifetime, exotic wealth sparkling but register opportunity. Relaxing powerful appearance youthful, try sold excellent on extravaganza. Jumbo smells market, a distinct exotic crunchy outside incredible artificial durable. Available wave lather win, herbal money now waxy dry sharpest outlasts oily huggable luxury limited.";
			lorem[5] = "Too today valuable that flavored ever longer spectacular. Flexible challenge can $19.95, terrific ocean anything cause. Revolutionary full effervescent sold invigorate stimulates why goodbye quenches convenient care dual removable, by. Deeply all-over love really rosy tasty register natural settle. Yours affordable so can't mothers best, seeing, tasty register like removable. Touch delivers more want amazing today incredible however double magically way $19.95. Settle multi-purpose generous can't, really challenge and love. Any jumbo very crystals effective how brighter senses crispy new too.";
			lorem[6] = "Hit gentle is jumbo asked choosy to action spicey, style youthful 100% keen vast. Simply seeing whiter appearance high-tech if ocean tasty outside compare grand clean now don't humongous. Choice warranty, low-cost big disposable permanent enjoy. Advertising secret goodness cheap fun accomodations choosy if.";
			lorem[7] = "Huggable cool superior a today listen every latest spring worthwhile. By juicy admire thin, offer money-back, spend advertising mega longer bonus, not, artificial awesome.";
			lorem[8] = "High, challenge anything asked tough spacious discover go exclusive, better. Blend power to, newest cause drink. Grab action cheap expensive, believe soothing outlasts in. Zippy humongous believe thick racy, every catch monster remarkable chance the below excites. Roasted sensational sparkling the rated $19.95. Included bold also picky can't sale effervescent, challenge whiter, yourself mega power. Ever, mouthwatering wholesome, expensive, warm, brings spring. Settle sparkling simply try fat-free citrus traditional grab flip find inside whopping.";
			break;
		case "science": // more than 400 words, 38 sentences
			lorem[0] = "Boolean deviation scalar resistor phase potentiometer sampling transmission proxy, gigabyte controller high. Transistorized, for device broadband adaptive procedural, sequential element plasma reflective messaging scalar. Debugged development, reflective, or recognition feedback log partitioned software infrared hyperlinked scalar. Messaging pulse broadband processor or metafile sampling software encapsulated plasma element scan, includes. Transmission development feedback analog plasma remote silicon bypass, prompt resistor logarithmic. Encapsulated, logistically, development, services logarithmic recursive video scan deviation capacitance high. Network audio with supporting recognition or scalar messaging transponder phaselock. Ethernet port system distributed internet developer integral debugged logistically.";
			lorem[1] = "Internet services, kilohertz computer, digital encapsulated generator cache, record audio logistically interface converter coordinated. Device mainframe boolean, phase in generator coordinated converter. Interface transmission audio remote fragmentation hyperlinked video in backbone, gigabyte cascading inversion computer dithering procedural. Transistorized logistically read-only proxy deviation pulse boolean transistorized or, fragmentation internet. Controller pulse interface distributed audio distributed data. Hyperlinked for prompt converter, recursive dithering potentiometer potentiometer, read-only.";
			lorem[2] = "Phaselock processor bypass potentiometer plasma distributed adaptive fragmentation scalar, coordinated, ethernet. Gigabyte, reflective remote hyperlinked transmission with development. Sequential video frequency anomoly converter digital floating-point read-only phaselock transponder pulse technician overflow system. Inversion supporting with messaging scan development converter debugged anomoly cascading ethernet distributed, internet infrared. Hyperlinked, bus, processor silicon bus, feedback internet dithering digital cascading log transponder harmonic gigabyte. Plasma, array pc element gigabyte internet proxy data recognition video boolean arrray, procedural capacitance led.";
			lorem[3] = "Partitioned audio resistor data patch encapsulated transponder sequential, capacitance, led extended computer metafile echo converter.";
			lorem[4] = "Ethernet computer metafile transponder audio port. Services pc bypass led converter pulse scalar broadband capacitance, transistorized ethernet digital, ethernet internet. Prompt computer inversion hyperlinked reflective cache scan harmonic, logistically high system remote. Arrray prompt or analog servicing anomoly proxy remote, high read-only phase, gigabyte computer transistorized deviation.";
			lorem[5] = "Solution data, data encapsulated connectivity data. Technician, anomoly recursive partitioned encapsulated bypass interface boolean logarithmic broadband led reducer bus. Floating-point recognition reducer, read-only network bridgeware frequency prompt prompt broadband, phase. Coordinated development read-only, phase ethernet audio development metafile or floating-point logarithmic read-only.";
			lorem[6] = "High deviation partitioned mainframe interface potentiometer proxy read-only network.";
			lorem[7] = "Scan element femtosecond ethernet developer logarithmic encapsulated plasma, internet, extended connectivity. Femtosecond echo cascading controller debugged video proxy internet coordinated infrared record. LED generator reducer proxy for proxy with, connectivity resistor, data, gigabyte reducer, procedural adaptive indeterminate. Element metafile resistor analog gigabyte floating-point resistor development. Logistically analog bypass arrray bus servicing cascading feedback integer includes, gigabyte, boolean.";
			lorem[8] = "Computer element transistorized bus or, in array prototype capacitance. N-tier reflective in in prototype ethernet extended kilohertz. System system in pulse anomaly mainframe extended, supporting inversion cable integer anomaly.";
			break;
		case "kernel": // more than 3000 characters, around 39 sentences
			lorem[0] = "%0x0% D0X012 00XX0X SPF-30, MSFTX KERNEL, 1001001, HS700 IVirq10 (0.0) function(), 100100HX. Xref, data2 TYPE(PM-RAM), ADODB {2$T@ (0x017fff) 1001001 101101000 X1X 1001001 xref A^2+B^2 (0.0). End(0x000241) TYPE(RPG), 94u AX0X01 END(0x000241) A^2+B^2 data2 00XX0X else-if, TYPE(PM-RAM) 101101000 $##.##, {#-#}. Adsp-219x ADSP-219x SPF-30 XX0X function() [n]INPUT XX0X THX1138.";
			lorem[1] = "{2$t@ ADSP-219x &0,0, TYPE(RPG) 6^1.01E A^2+B^2, --// @#0XX01 100100HX @#0XX01 %00!/# 100100HX --//. 100100hx, xref X1X !(AB(X)) START(0x000242) E-.001 X1X 11101 94u.";
			lorem[2] = "!(x-y)+1 @#0XX01 KERNEL !(X-Y)+1 11101, XX0X data2 E-.001 START(0x000242) !(AB(X)) [00]1\) 56789:CFGAX KERNEL 94u, 11101. !(x-y)+1 /00# %00!/# 0001000H, 10111 !(AB(X)) 94u HS700. D0x012 !(AB(X)) !(AB(X)) 100100HX 100100HX length[X]-ipSwitch ADSP-219x !(X-Y)+1 !(AB(X)) Init() &0,0 END(0X000241). Type(pm-ram) (0x017fff) GOOGO 94u %00!/# AX0X01, xref function() (0x017fff) A^2+B^2 END(0X000241) !(X-Y)+1 xref XX0X. 0001000h 6^1.01E 100100HX TYPE(PM-RAM) data2 TYPE(RPG) 11101 /00# 00XX0X 56789:CDEFG TYPE(RPG) 100100HX 6^1.01E (0x017fff). {2$t@ IVirq10 94u, length[X]-ipSwitch A^2+B^2 ADODB IVirq10 6^1.01E KERNEL, 6^1.01E //-- 6^1.01E TYPE(PM-RAM) END(0X000241). 1001001 ADSP-219x END(0x000241) {#-#} D0X012 10111 0001000H X1X SPF-30 data2, {#-#}.";
			lorem[3] = "Ar.$ E-.001 A^2+B^2 START(0x000242) function() XX0X 100100HX 100100HX, ADSP-219x, [n]INPUT.";
			lorem[4] = "(0.0) 0001000H KERNEL data2 ADSP-219x KERNEL Init() 6^1.01E &0,0 length[X]-ipSwitch THX1138 !(X-Y)+1 SPF-30, (0x017fff) 56789:CDEFG. Hs700 %0X0% IVirq10 Init(), aR.$ 0001000H !(AB(X)). Xx0x 101101000 [00]1\) 101101000 //-- Init() length[X]-ipSwitch. (0x017fff) 10111 11101 /00# !(AB(X)) SPF-30 (0.0) !(X-Y)+1 D0X012 SPF-30. End(0x000241) XX0X --// IVirq10 94u !(AB(X)) !(AB(X)) function() 1001001 1001001 //-- 101101000, --// START(0x000242). Hs700 X1X 0001000H /00#, {#-#} {#-#} START(0x000242) AX0X01 TYPE(PM-RAM) 00XX0X ADSP-219x !(AB(X)) KERNEL. (0.0) 56789:CDEFG %00!/# AX0X01 X1X //--, 100100HX A^2+B^2 IVirq10, END(0x000241) [00]1\) {#-#} else-if. Type(pm-ram) @#0XX01 TYPE(PM-RAM) [00]1\) aR.$ &0,0 AX0X01 [n]INPUT XX0X TYPE(SD-RAM) 6^1.01E E-.001 94u data2.";
			lorem[5] = "Function() 00XX0X [00]1\) AX0X01 /00# data2. (0x017fff) TYPE(PM-RAM) !(X-Y)+1 AX0X01 HS700 ADSP-219x !(X-Y)+1. 11101 TYPE(RPG), {#-#} D0X012 --// /00# E-.001 X1X 94u ADODB THX1138 56789:CDEFG. Start(0x000242), 0001000H ADSP-219x AX0X01 TYPE(PM-RAM) @#0XX01 SPF-30, [n]INPUT /00# //-- 10111, ADODB 56789:CDEFG ADODB.";
			lorem[6] = "D0x012, A^2+B^2 [00]1\) END(0xFF0241), 00XX0X 11101, ADSP-219x length[X]-ipSwitch START(0x000242) function() Init() [n]INPUT /00#. X1x TYPE(PM-RAM) END(0X000241) (0x017fff), KERNAL, //-- TYPE(PM-RAM) 101101000. Kernal IVirq10, 11101 {#-#} LEADTK (0.0) @#0XX01 101101000, %00!/#, TYPE(RPG) else-if /00#. Kernel, SPF-30 (0x017fff) IVirq10 /00# %0X0%. 94u TYPE(PM-RAM) /00# 10111 X1X START(0x000242) !(AB(X)) TYPE(PM-RAM) !(X-Y)+1, (0x017fff) 11101.";
			lorem[7] = "MSFTX, E-.001, 00XX0X 11101 /00# ADSP-219x --// 6^1.01E $##.## %0X0% 101101000 !(AB(X)). {#-#} 56789:CDEFG &0,0 TYPE(PM-RAM), KERNAL 6^1.01E 10111. D0x012 A^2+B^2 @#0XX01 E-.001 D0X012 TYPE(PM-RAM), !(AB(X)). {#-#} !(AB(X)) !(X-Y)+1 TYPE(RPG) 56789:CDEFG TYPE(RPG) A^2+B^2 else-if START(0x000242) ADODB 56789:CDEFG KERNEL XX0X THX1138.";
			lorem[8] = "Data2 {#-#} 00XX0X HS700 //--, 00XX0X (0x017fff) @#0XX01 101101000. Thx1138 100100HX KERNEL HS700 aR.$ 00XX0X HS700, END(0X000241), TYPE(RPG) !(AB(X)) A^2+B^2 %0X0% aR.$. !(x-y)+1, %00!/# aR.$ AX0X01 aR.$ D0X012 function() XX0X KERNAL AX0X01 10111 (0.0). %00!/# {2$T@ !(X-Y)+1 &0,0 10111 AX0X01 A^2+B^2 END(0X000241) data2 [00]1\) HS700 $##.##. End(0x000241) else-if E-.001 HS700 SPF-30, 10111 @#0XX01 KERNEL --// 56789:CDEFG, [n]INPUT @#0XX01 $##.##, 94u !(X-Y)+1.";
			break;
	}

	var num = parseInt(document.getElementById('lorem_number').value);
	switch(document.getElementById('lorem_number_type').value) {
		case "characters":
			var outputString = '';
			var tempString = lorem.join( "\n\n" );
			while ( outputString.length < num ) outputString += tempString;
			document.getElementById('lorem_output').value = outputString.substring(0, num);
			break;
		case "words":
			var list = new Array();
			var wordList = new Array();
			wordList = lorem[ 0 ].split( ' ' );
			var iParagraphCount = 0;
			var iWordCount = 0;
			
			while( list.length < num ) {
				if( iWordCount > wordList.length )	{
					iWordCount = 0;
					iParagraphCount++;
					if( iParagraphCount + 1 > lorem.length ) iParagraphCount = 0;
					wordList = lorem[ iParagraphCount ].split( ' ' );
					wordList[ 0 ] = "\n\n" + wordList[ 0 ];
				}
				list.push( wordList[ iWordCount ] );
				iWordCount++;
			}
			document.getElementById('lorem_output').value = list.join(' ');
			break;
		case "paragraphs":
			var list = new Array();
			var iParagraphCount = 0;
			
			while( list.length < num ) {
				if( iParagraphCount +1 > lorem.length )	{
					iParagraphCount = 0;
				}
				 
				list.push( lorem[ iParagraphCount ] );
				iParagraphCount++;
			}
			document.getElementById('lorem_output').value = list.join( "\n\n" );
			break;
		default:
			break;
	}
}

function copypaste() {
	document.forms[0].output.focus();
	document.forms[0].output.select();
	therange=document.forms[0].output.createTextRange();
	therange.execCommand("Copy");
}