function generateNumber(inicio,fin)
{
  return (Math.round(Math.random()*(fin-inicio))+inicio); 
}

function Number(inicio,fin)
{
  return generateNumber(inicio,fin);
}

// genera un nombre masculino
function MaleName()
{
  return nombres_masculinos[generateNumber(0,149)];
}

// genera un nombre femenino
function FemaleName()
{
  return nombres_femeninos[generateNumber(0,149)];
}

// genera un nombre masculino o femenino al azar
function Name()
{
  var random = generateNumber(0,11);
  if(random < 6)
  {
    return MaleName();
  }
  else
  {
    return FemaleName();
  }
}

// genera un apellido
function Surname()
{
  return apellidos[generateNumber(0,149)];
}

// genera un nombre masculino con apellido
function MaleNameSurname()
{
  return MaleName()+' '+Surname();
}

// genera un nombre femenino con apellido
function FemaleNameSurname()
{
  return FemaleName()+' '+Surname();
}

// genera un nombre masculino o femenino con apellido al azar
function NameSurname()
{
  var random = generateNumber(0,11);
  if(random < 6)
  {
    return MaleNameSurname();
  }
  else
  {
    return FemaleNameSurname();
  }
}

// genera un nombre, la inicial de un nombre y un apellido
function NameInitialSurname()
{
  var name = Name();
  inicial = name.substr(0,1);
  return Name()+' '+inicial+'. '+Surname();
  
}

// genera un apellido, un nombre y la inicial de un nombre 
function SurnameNameInitial()
{
  var name = Name();
  inicial = name.substr(0,1);
  return Surname()+', '+Name()+' '+inicial+'.'; 
}

// genera un numero de celular
function CellPhone()
{
  return generateNumber(70000000,99000000); 
}

// genera un numero fijo
function Phone(length)
{
  length = typeof(length) != 'undefined' ? length : 7;
  if(length == 7)
  {
    return generateNumber(1000000,9900000);
  }
  else
  {
    return generateNumber(100000,990000);
  } 
}

// genera un mail
function Email()
{
  var nombre = NameSurname();
  var mail_server = mail[generateNumber(0,6)];
  nombre = nombre.toLowerCase();
  if(mail_server == '@gmail.com')
  {
  	nombre = nombre.split(' ').join('.');
  }
  else
  {
  	nombre = nombre.split(' ').join('_');
  }
  
  nombre = nombre.replace('&aacute;','a');
  nombre = nombre.replace('&acute;','e');
  nombre = nombre.replace('&iacute;','i');
  nombre = nombre.replace('&oacute;','o');
  nombre = nombre.replace('&uacute;','u');
  nombre = nombre.replace('&ntilde;','n');
  return nombre+mail_server;
}

// genera una pagina web
function WebPage()
{
  var nombre = NameSurname();
  nombre = nombre.toLowerCase();
  nombre = nombre.split(' ').join('');
  nombre = nombre.replace('á','a');
  nombre = nombre.replace('é','e');
  nombre = nombre.replace('í','i');
  nombre = nombre.replace('ó','o');
  nombre = nombre.replace('ú','u');
  nombre = nombre.replace('ñ','n');
  if(Math.round(Math.random())==1)
  {
  	return 'http://www.'+nombre+tld[generateNumber(0,6)];
  }
  else
  {
  	return 'http://'+nombre+tld[generateNumber(0,6)];
  }
}

function StreetAddress()
{
  return calles[generateNumber(0,229)]+' '+generateNumber(0,9999);
}

// genera un codigo postal
function PostalCode()
{
  return generateNumber(100000,990000);
}

function Rut()
{
  var num = generateNumber(5000000,25000000);
  return num+'-'+$.Rut.getDigito(num+"");
}
  	

function Word(start_with_lorem, length, length_max)
{
  start_with_lorem = typeof(start_with_lorem) != 'undefined' ? start_with_lorem : false;
  length = typeof(length) != 'undefined' ? length : generateNumber(0,1027);
  length_max = typeof(length_max) != 'undefined' ? length_max : null;

  var lorem_ipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi nisl. Quisque eros felis, dictum nec, luctus vitae, tristique in, lectus. Nunc ullamcorper feugiat nisl. Cras tempor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec vestibulum dignissim nibh. Phasellus pharetra libero nec nulla. Maecenas at enim. Donec vel arcu quis risus dictum luctus. Ut at lectus rutrum erat vulputate luctus. Nulla enim felis, suscipit sit amet, lacinia nec, egestas non, dolor. Nam dignissim blandit tortor. Proin nisi. Sed enim est, facilisis cursus, porttitor a, pretium id, nulla. Nullam id eros sed dolor fermentum fermentum. Vivamus magna. Duis et nulla. Curabitur facilisis sapien at dui. Praesent nec orci non mi condimentum accumsan.";
  lorem_ipsum += "Etiam facilisis eros id nunc. Maecenas purus lectus, porta sit amet, semper vitae, posuere et, dolor. Fusce eget odio non odio aliquam porta. Cras elit nisi, pharetra et, auctor ut, ultrices in, pede. Cras lacinia faucibus elit. Integer quis sem et magna viverra venenatis. Vestibulum vitae est vitae magna ultrices feugiat. Curabitur laoreet, urna ac porttitor molestie, risus arcu egestas ipsum, ut tristique lacus sem quis quam. Cras aliquam, libero eget gravida egestas, nibh lacus interdum lectus, eget vulputate pede ipsum vitae nunc. Duis non dui sed eros semper bibendum.";
  lorem_ipsum += "Integer mattis vestibulum massa. Cras eu libero et dolor elementum faucibus. Nam et sapien a elit consequat tincidunt. Quisque vitae arcu. Vivamus sed est. Quisque vestibulum iaculis nunc. Proin elementum massa sed risus. Morbi nec mi. Duis tortor. Aliquam erat volutpat. Duis in eros non turpis convallis vestibulum. Nulla sed urna. Suspendisse potenti. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.";
  lorem_ipsum += "Sed lorem tellus, vehicula auctor, ultrices lacinia, porttitor in, dolor. Cras lorem. Integer velit eros, placerat non, mattis in, dapibus in, leo. Donec lacinia. Nullam dolor. Vestibulum lobortis arcu quis elit. Sed imperdiet eros sit amet metus. Curabitur tempor sapien ut risus. Nunc dictum eros id ante. Nam fringilla turpis sed mauris. Aliquam a urna. Pellentesque quis diam in lorem pellentesque faucibus. Suspendisse pharetra. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec lacinia purus nec nulla.";
  lorem_ipsum += "In dolor justo, interdum vitae, blandit vitae, sollicitudin et, libero. Aliquam nunc leo, sagittis id, egestas ut, semper ut, risus. Maecenas adipiscing, dui in lacinia convallis, mauris nisi congue quam, a varius nisl nisi vel diam. Pellentesque dui tortor, consequat laoreet, congue eget, adipiscing quis, sapien. Curabitur vel lectus hendrerit metus sagittis mattis. Nulla pede eros, varius quis, tristique sed, placerat ac, lacus. Praesent porta purus eget risus. Sed sagittis, sapien eu sollicitudin pretium, neque tortor ultrices quam, vel imperdiet velit neque non diam. Duis posuere vestibulum pede. Praesent vestibulum felis. Nunc mattis ipsum. Suspendisse commodo tortor.";
  lorem_ipsum += "Mauris dolor urna, porttitor rutrum, dignissim eu, pulvinar non, neque. Aenean arcu turpis, ultricies in, pharetra sed, commodo in, velit. Suspendisse quis velit. Sed lobortis, lorem in placerat gravida, dui ante dictum arcu, vel consequat quam dolor quis magna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam viverra porttitor pede. Sed mattis sem sit amet ante. Fusce semper neque sed nulla. Morbi ut quam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean odio lacus, sodales id, interdum ac, facilisis at, erat. Donec ullamcorper, sapien ac varius ultricies, elit sem scelerisque quam, sed commodo pede enim vitae orci. In posuere. Quisque congue nisi sit amet pede.";
  lorem_ipsum += "Phasellus varius nisl volutpat mi vestibulum interdum. Mauris auctor risus at nibh. Sed auctor turpis sit amet erat pulvinar rhoncus. Vivamus nec leo sed velit malesuada lobortis. Nullam congue, nunc volutpat pellentesque malesuada, sem erat mollis mauris, in tristique leo leo in diam. Integer non metus sed massa tempor fermentum. Integer consectetur, augue euismod convallis mattis, neque dui feugiat lectus, eu rutrum erat risus in eros. Suspendisse consectetur, neque vel condimentum lacinia, nisi sapien bibendum leo, vitae viverra augue mi sed quam. Suspendisse eu pede. Etiam tristique pede vel nisi. Proin erat libero, aliquam vehicula, placerat quis, consectetur sed, velit. Morbi iaculis lobortis ligula.";
  lorem_ipsum += "Mauris aliquam facilisis massa. In semper quam. Integer consectetur pede sit amet ipsum. Sed sit amet nisi. Nunc quis nunc sed orci eleifend sodales. Etiam convallis magna a orci tempor vestibulum. Aenean non lorem. Aenean dictum aliquam nunc. Ut euismod aliquam turpis. Quisque sollicitudin, nisl a adipiscing mollis, nibh justo porta ligula, nec luctus elit ipsum ac mi. Aliquam congue vehicula orci.";
  lorem_ipsum += "In nunc pede, adipiscing eget, tincidunt id, feugiat non, ligula. Ut sed diam nec libero mattis pharetra. Fusce est. Suspendisse pharetra placerat nunc. Vivamus elit. Integer sed nulla. Duis turpis libero, malesuada et, auctor sed, hendrerit at, nibh. Suspendisse ut massa. Proin metus nunc, elementum vel, faucibus id, dignissim nec, neque. Donec quis velit sit amet lacus posuere rutrum. Vivamus nec dui id lectus pellentesque molestie. Nunc hendrerit tellus id felis. Aliquam non tellus. Suspendisse nisl lacus, auctor blandit, lacinia sed, scelerisque nec, dolor. Sed nisi eros, scelerisque sed, gravida sit amet, feugiat eu, nulla. Praesent faucibus ante mattis magna. Donec id tortor eget nisl dignissim imperdiet.";
  lorem_ipsum += "Integer massa. Ut arcu nisl, porta ornare, interdum ac, dictum sit amet, ligula. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque interdum iaculis lectus. Praesent bibendum blandit odio. Donec tincidunt, mauris sed ultrices egestas, mi sem convallis odio, et dapibus tortor sapien at velit. Nulla facilisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus orci nunc, egestas eu, dictum at, fringilla nec, magna. Nam neque. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam at justo. Duis ipsum. Integer elementum. Vestibulum magna. Suspendisse malesuada tortor feugiat diam.";
  lorem_ipsum += "Curabitur mollis lectus id metus. Pellentesque pede. Etiam pede. Suspendisse potenti. Donec nisi ligula, feugiat eu, pulvinar ac, pharetra vitae, ligula. Integer lacinia mauris. Maecenas pellentesque dictum enim. Donec mauris lectus, eleifend quis, dapibus et, tempor sit amet, velit. Phasellus accumsan. Curabitur elit massa, malesuada sit amet, faucibus venenatis, condimentum nec, sapien. Mauris ac diam. Praesent eget orci eu erat semper rutrum. Curabitur tortor. Etiam feugiat. Sed urna leo, volutpat vitae, laoreet at, rutrum scelerisque, arcu. Vivamus augue. Aliquam lacinia, purus at feugiat semper, nisl justo congue enim, quis elementum orci nulla nec ipsum. Quisque hendrerit odio eget elit. Pellentesque sed turpis ut tellus scelerisque suscipit."; 
  var inicio = start_with_lorem ? 0 : generateNumber(0,1027-length);
  var arr_lorem_ipsum = lorem_ipsum.split(' ');
  var cantidad_de_palabras = length_max != null ? generateNumber(length,length_max) : length;
  arr_lorem_ipsum = arr_lorem_ipsum.splice(inicio,cantidad_de_palabras);
  return arr_lorem_ipsum.join(" ");
}



  /***********************************************************************************************/

  function generatefp_sleep()
  {
  	$('span#fp_button').html('<img src="images/working.gif" border="0" />');
  	setTimeout("generatefp()",1000);
  }

  function generatefp()
  {
	var cant_datos = parseInt($('#cantidad_datos').val());
	var cant_campos = parseInt($('#cantidad_filas').val());
	var url = "";

	url += "javascript:(function(){";
    for(var j=0;j<cant_campos;j++)
	{
	    var nombre = $('#name'+j).val();
	    var tipo = $('#type'+j).val();
	    if(tipo == 'Name'){
	    	tipo = $('#type'+j).parent().next().children().val();
	    }

	    if(nombre != '' && tipo != ''){
	    if(tipo != 'Number' && tipo != 'CustomList')
		{
			url += nombre+'=new Array();';
			for(var i=0;i<cant_datos;i++)
			{
			  if(tipo == 'Name')
			  {
			  	url += nombre+'['+i+']=\''+Name()+'\';';
			  }
			  else if(tipo == 'Surname')
			  {
			  	url += nombre+'['+i+']=\''+Surname()+'\';';
			  }
			  else if(tipo == 'MaleName')
			  {
			  	url += nombre+'['+i+']=\''+MaleName()+'\';';
			  }
			  else if(tipo == 'FemaleName')
			  {
			  	url += nombre+'['+i+']=\''+FemaleName()+'\';';
			  }
			  else if(tipo == 'MaleNameSurname')
			  {
			  	url += nombre+'['+i+']=\''+MaleNameSurname()+'\';';
			  }
			  else if(tipo == 'FemaleNameSurname')
			  {
			  	url += nombre+'['+i+']=\''+FemaleNameSurname()+'\';';
			  }
			  else if(tipo == 'NameSurname')
			  {
			  	url += nombre+'['+i+']=\''+NameSurname()+'\';';
			  }
			  else if(tipo == 'NameInitialSurname')
			  {
			  	url += nombre+'['+i+']=\''+NameInitialSurname()+'\';';
			  }
			  else if(tipo == 'SurnameNameInitial')
			  {
			  	url += nombre+'['+i+']=\''+SurnameNameInitial()+'\';';
			  }
			  else if(tipo == 'CellPhone')
			  {
			  	url += nombre+'['+i+']=\''+CellPhone()+'\';';
			  }
			  else if(tipo == 'Phone')
			  {
			  	url += nombre+'['+i+']=\''+Phone()+'\';';
			  }
			  else if(tipo == 'Email')
			  {
			  	url += nombre+'['+i+']=\''+Email()+'\';';
			  }
			  else if(tipo == 'StreetAddress')
			  {
			  	url += nombre+'['+i+']=\''+StreetAddress()+'\';';
			  }
			  else if(tipo == 'PostalCode')
			  {
			  	url += nombre+'['+i+']=\''+PostalCode()+'\';';
			  }
			  else if(tipo == 'WebPage')
			  {
			  	url += nombre+'['+i+']=\''+WebPage()+'\';';
			  }
			  else if(tipo == 'Rut')
			  {
			  	url += nombre+'['+i+']=\''+Rut()+'\';';
			  }
			  else if(tipo == 'Date')
			  {
			    var init_time = strtotime($('#init_date'+j).val().split('/').reverse().join('-'));
			    var end_time = strtotime($('#end_date'+j).val().split('/').reverse().join('-'));
			  	url += nombre+'['+i+']=\''+date('d-m-Y',generateNumber(init_time,end_time))+'\';';
			  }
			  else if(tipo == 'FixedNumberWords')
			  {
			  	url += nombre+'['+i+']=\''+Word(false,parseInt($('#numberwords'+j).val()))+'\';';
			  }
			  else if(tipo == 'RandomNumberWords')
			  {
			  	url += nombre+'['+i+']=\''+Word($('#swli_numberwords'+j).attr('checked'),parseInt($('#inumberwords'+j).val()),parseInt($('#fnumberwords'+j).val()))+'\';';
			  }			  	  
			}
			url += "item=document.getElementById('"+nombre+"');item.value="+nombre+"[Math.round(Math.random()*("+nombre+".length-1))];";
		}
		else if(tipo == 'Number')
		{
			var inicio = $('#inumber'+j).val();
			var fin = $('#fnumber'+j).val();
			url += "item=document.getElementById('"+nombre+"');item.value=Math.round(Math.random()*("+fin+"-"+inicio+"))+"+inicio+";";
		}
		else if(tipo == 'CustomList')
		{
			url += nombre+'=new Array();';
			var valores = $('#customlist'+j).val().split('|');
			for(x=0;x<valores.length;x++){
				url += nombre+'['+x+']=\''+valores[x]+'\';';		
			}
			url += "item=document.getElementById('"+nombre+"');item.value="+nombre+"[Math.round(Math.random()*("+nombre+".length-1))];";
		}
	}}
	url += "a=document.getElementsByTagName('input');for(i=0;i<a.length;i++){item=a.item(i);if(item.type=='radio'){radios=document.getElementsByName(item.name);radio=radios.item(Math.round(Math.random()*(radios.length-1)));radio.checked=true;}if(item.type=='checkbox'){if(Math.round(Math.random())==1){item.checked=true;}else{item.checked=false;}}}a=document.getElementsByTagName('select');for(i=0;i<a.length;i++){item=a.item(i);item.options.item(Math.round(Math.random()*(item.options.length-1))).selected=true;}";
	url += "})()";
	$('span#fp_button').html('<a href="'+url+'"><img src="images/sonrisa.gif" title="fp" border="0" /></a>');
  }

  function addRow()
  {
    var numero = parseInt($('#cantidad_filas').val());
    var estilo = numero%2==0 ? 'odd' : '';
  	var fila = "<tr class='"+estilo+"'><td style='width:20%;'><input type='text' id='name"+numero+"' name='name"+numero+"' /></td><td style='width:30%;'><select id='type"+numero+"' onchange='option(this);'><option value=''>Seleccionar...</option><option value='Name'>Nombre</option><option value='Phone'>Telefono</option><option value='CellPhone'>Celular</option><option value='StreetAddress'>DirecciÃ³n</option><option value='PostalCode'>CÃ³digo Postal</option><option value='Email'>Email</option><option value='WebPage'>PÃ¡gina Web</option><option value='Number'>NÃºmero</option><option value='FixedNumberWords'>NÃºmero de palabras fijo</option><option value='RandomNumberWords'>NÃºmero de palabras aleatorio</option><option value='CustomList'>Custom list</option><option value='Rut'>Rut chileno</option><option value='Date'>Fecha</option></select></td><td style='width:25%;'></td><td style='width:25%;'></td></tr>";
  	$('table#table_generator').append(fila);
  	$('#cantidad_filas').val(numero+1);
  }

  function option(select)
  {
    var tipo = $(select).val();
    var numero = $(select).attr('id').replace('type', '');
    if(tipo == 'Name')
	{
		var nombres_select = "<select id='name"+numero+"' onchange='example(this);'><option value=''>Seleccionar...</option><option value='MaleName'>Nombre masc</option><option value='FemaleName'>Nombre fem</option><option value='Name'>Nombre</option><option value='Surname'>Apellido</option><option value='MaleNameSurname'>Nombre masc + apellido</option><option value='FemaleNameSurname'>Nombre fem + apellido</option><option value='NameSurname'>Nombre + apellido</option><option value='NameInitialSurname'>Nombre + inicial y apellido</option><option value='SurnameNameInitial'>Apellido + nombre + inicial</option></select>";
		$(select).parent().next().html(nombres_select);
	}
	else if(tipo == 'Number')
	{
		$(select).parent().next().html("Entre <input type='text' id='inumber"+numero+"' name='inumber"+numero+"' style='width: 30px;'/> y <input type='text' id='fnumber"+numero+"' name='fnumber"+numero+"' style='width: 30px;'/>").next().html('Sin ejemplos');
	}
	else if(tipo == 'RandomNumberWords')
	{
		$(select).parent().next().html("<input type='checkbox' id='swli_numberwords"+numero+"' name='swli_numberwords"+numero+"' />Empezar con Lorem ipsum...<br />Entre <input type='text' id='inumberwords"+numero+"' name='inumberwords"+numero+"' style='width: 30px;'/> y <input type='text' id='fnumberwords"+numero+"' name='fnumberwords"+numero+"' style='width: 30px;'/> palabras").next().html('Sin ejemplos');
	}
	else if(tipo == 'FixedNumberWords')
	{
		$(select).parent().next().html("Generar <input type='text' id='numberwords"+numero+"' name='numberwords"+numero+"' style='width: 30px;'/> palabras").next().html('Sin ejemplos');
	}
	else if(tipo == 'CustomList')
	{
		$(select).parent().next().html("Valores separados por |<br /><input type='text' id='customlist"+numero+"' name='customlist"+numero+"' style='width: 200px;'/>").next().html('valor1|valor2|valor3|valor4');
	}
	else if(tipo == 'CellPhone')
	{
		$(select).parent().next().html('Sin opciones').next().html(''+CellPhone());
	}
	else if(tipo == 'Phone')
	{
		$(select).parent().next().html('Sin opciones').next().html(''+Phone());
	}
	else if(tipo == 'Email')
	{
		$(select).parent().next().html('Sin opciones').next().html(Email());
	}
	else if(tipo == 'StreetAddress')
	{
		$(select).parent().next().html('Sin opciones').next().html(StreetAddress());
	}
	else if(tipo == 'PostalCode')
	{
		$(select).parent().next().html('Sin opciones').next().html(''+PostalCode());
	}
	else if(tipo == 'WebPage')
	{
		$(select).parent().next().html('Sin opciones').next().html(WebPage());
	}
	else if(tipo == 'Rut')
	{
		$(select).parent().next().html('Sin opciones').next().html(Rut());
	}
	else if(tipo == 'Date')
	{
		$(select).parent().next().html('Entre <input type="text" id="init_date'+numero+'" style="width: 66px;"/> y <input type="text" id="end_date'+numero+'" style="width: 66px;"/><br /><a href="http://cl.php.net/date"><acronym title="el mismo de la funcion php date()">formato</acronym></a>: <input type="text" id="format_date'+numero+'" style="width: 100px;"/>').next().html('<select onchange="$(\'#format_date'+numero+'\').val(this.value)"><option value="">Seleccionar...</option><option value="d.m.y">25.03.06</option><option value="d-m-y">25-03-06</option><option value="d/m/y">25/03/06</option><option value="d/m/Y">25/03/2006</option><option value="m.d.y">03.25.06</option><option value="m-d-y">03-25-06</option><option value="m/d/y">03/25/06</option><option value="m/d/Y">03/25/2006</option><option value="Y-m-d H:i:s">MySQL datetime</option><option value="U">UNIX timestamp</option><option value="c">ISO 8601 date</option><option value="r">RFC 2822 formatted date</option><option value="T">A timezone</option></select>');
		$('input#init_date'+numero).datepick();
		$('input#end_date'+numero).datepick();
	}
  }

  // ejemplos para los nombres
  function example(select)
  {
    var tipo = $(select).val();
	if(tipo == 'Name')
	{
		$(select).parent().next().html(Name());
	}
	else if(tipo == 'Surname')
	{
		$(select).parent().next().html(Surname());
	}
	else if(tipo == 'MaleName')
	{
		$(select).parent().next().html(MaleName());
	}
	else if(tipo == 'FemaleName')
	{
		$(select).parent().next().html(FemaleName());
	}
	else if(tipo == 'MaleNameSurname')
	{
		$(select).parent().next().html(MaleNameSurname());
	}
	else if(tipo == 'FemaleNameSurname')
	{
		$(select).parent().next().html(FemaleNameSurname());
	}
	else if(tipo == 'NameSurname')
	{
		$(select).parent().next().html(NameSurname());
	}
	else if(tipo == 'NameInitialSurname')
	{
		$(select).parent().next().html(NameInitialSurname());
	}
	else if(tipo == 'SurnameNameInitial')
	{
		$(select).parent().next().html(SurnameNameInitial());
	}
  }

