function monta(arr, id)
{
	var html = '';
	var line = document.getElementById(id).innerHTML;
	var maximo = parseInt(document.forms['form1'].elements['max_' + id].value);
	var m = 0;
	
	var re = new RegExp(/\*\w+\*/gi);
	var ocorrencias = new Array();
	ocorrencias = line.match(re);

	for(i=0; i<arr.length; i++)
	{
		line = document.getElementById(id).innerHTML;
		m = 0;
		for(r=0; r<ocorrencias.length; r++)
		{
			if(ocorrencias[r] == '*up*')
			{
				if(i+1 > 1)
					line = line.replace(ocorrencias[r], 'td_colorida_escura');
				else
					line = line.replace(ocorrencias[r], 'hidden');
			}					
			else if(ocorrencias[r] == '*down*')
			{
				if(i+1 < arr.length)
					line = line.replace(ocorrencias[r], 'td_colorida_escura');
				else
					line = line.replace(ocorrencias[r], 'hidden');
			}					
			else if(ocorrencias[r] == '*add*')
			{
				if(arr.length != maximo)
					line = line.replace(ocorrencias[r], 'td_colorida_escura');
				else
					line = line.replace(ocorrencias[r], 'hidden');
			}				
			else if(ocorrencias[r] == '*del*')
			{
				if(arr.length > 1)
					line = line.replace(ocorrencias[r], 'td_colorida_escura');
				else
					line = line.replace(ocorrencias[r], 'hidden');
			}
			else if(ocorrencias[r] == '*id*')
			{
				line = line.replace(ocorrencias[r], i+1);
			}				
			else
			{
				if(line.indexOf(ocorrencias[r] + ' ') >= 0)
					line = line.replace(ocorrencias[r] + ' ', arr[i].split('#;#')[m]);
				else
					line = line.replace(ocorrencias[r], arr[i].split('#;#')[m]);
				m++;
			}
		}
				
		html += line;
	}
	
	return html;
}

function findFields(txt)
{
	var re = new RegExp(/\*\w+\*/gi);
	var ocorrencias = new Array();
	ocorrencias = txt.match(re);
	ocorrencias = ocorrencias.toString().replace(/\*id\*/gi, '').replace(/,+/gi, ',').split(",");
	ocorrencias = ocorrencias.toString().replace(/\*up\*/gi, '').replace(/,+/gi, ',').split(",");
	ocorrencias = ocorrencias.toString().replace(/\*add\*/gi, '').replace(/,+/gi, ',').split(",");
	ocorrencias = ocorrencias.toString().replace(/\*down\*/gi, '').replace(/,+/gi, ',').split(",");
	ocorrencias = ocorrencias.toString().replace(/\*del\*/gi, '').replace(/,+/gi, ',').split(",");
	ocorrencias = ocorrencias.toString().replace(/\*+/gi, '').split(",");
	
	if(ocorrencias[0] == '')
		ocorrencias.shift();
	if(ocorrencias[ocorrencias.length-1] == '')
		ocorrencias.pop();
	
	return ocorrencias;
}

function add(pos, id, populate_function, filter)
{
	var temp = new Array();
	var temp1 = '';
	var fields = new Array();
	var num = parseInt(document.forms['form1'].elements['num_' + id].value);
	
	fields = findFields(document.getElementById(id).innerHTML);
	
	if(num > 0)
	{
		for(j=0; j<num; j++)
		{
			temp[j] = '';
			for(k=0; k<fields.length; k++)
			{
				temp[j] += document.forms['form1'].elements[fields[k] + '_' + (j+1)].value + '#;#';
			}
		}
	}
	
	for(k=0; k<fields.length-1; k++)
		temp1 += '#;#';
	
	temp.splice(pos-1, 0, temp1);
	
	document.forms['form1'].elements['num_' + id].value = num + 1;
	document.getElementById('div_' + id).innerHTML = monta(temp, id);
	set_values(temp, fields, populate_function, filter);
}

function del(pos, id, populate_function, filter)
{
	var temp = new Array();
	var fields = new Array();
	var num = parseInt(document.forms['form1'].elements['num_' + id].value);
	
	fields = findFields(document.getElementById(id).innerHTML);
	
	for(j=0; j<num; j++)
	{
		temp[j] = '';
		for(k=0; k<fields.length; k++)
		{
			temp[j] += document.forms['form1'].elements[fields[k] + '_' + (j+1)].value + '#;#';
		}
	}

	temp.splice(pos-1, 1);
	
	document.forms['form1'].elements['num_' + id].value = num - 1;
	document.getElementById('div_' + id).innerHTML = monta(temp, id);
	set_values(temp, fields, populate_function, filter);
}

function up(pos, id, populate_function, filter)
{
	var temp = new Array();
	var swap = new Array();
	var fields = new Array();
	var num = parseInt(document.forms['form1'].elements['num_' + id].value);
	
	fields = findFields(document.getElementById(id).innerHTML);
	
	for(j=0; j<num; j++)
	{
		temp[j] = '';
		for(k=0; k<fields.length; k++)
		{
			temp[j] += document.forms['form1'].elements[fields[k] + '_' + (j+1)].value + '#;#';
		}
	}
	
	swap = temp[pos-1];
	temp[pos-1] = temp[pos-2];
	temp[pos-2] = swap;
	
	document.getElementById('div_' + id).innerHTML = monta(temp, id);
	set_values(temp, fields, populate_function, filter);
}

function down(pos, id, populate_function, filter)
{
	var type;
	var temp = new Array();
	var swap = new Array();
	var fields = new Array();
	var num = parseInt(document.forms['form1'].elements['num_' + id].value);
	
	fields = findFields(document.getElementById(id).innerHTML);
	
	for(j=0; j<num; j++)
	{
		temp[j] = '';
		for(k=0; k<fields.length; k++)
		{
			temp[j] += document.forms['form1'].elements[fields[k] + '_' + (j+1)].value + '#;#';
		}
	}
	
	swap = temp[pos-1];
	temp[pos-1] = temp[pos];
	temp[pos] = swap;
	
	document.getElementById('div_' + id).innerHTML = monta(temp, id);
	set_values(temp, fields, populate_function, filter);
}

function set_values(arr, fields, populate_function, filter)
{
	for(j=0; j<arr.length; j++)
	{
		for(k=0; k<fields.length; k++)
		{
			if(document.getElementById(fields[k] + '_' + (j+1)).type == 'select-one')
			{
				eval("populate_" + populate_function + "(fields[k] + '_' + (j+1), [['', ' -- selecione -- ']], arr[j].split('#;#')[k]" + (filter != undefined ? (", " + filter) : "") + ")");
			}
			if( (document.getElementById(fields[k] + '_' + (j+1)).tagName.toLowerCase() == 'img') && (document.forms['form1'].elements[fields[k] + '_' + (j+1)].value != '') )
			{
				if(populate_function != undefined)
					eval(populate_function + "(fields[k] + '_' + (j+1), '' + arr[j].split('#;#')[k] + '')");
				document.getElementById(fields[k] + '_' + (j+1)).src = document.getElementById(fields[k] + '_' + (j+1)).src.replace('__off', '__on');
			}
		}
	}
}

