/*
 * jqAcordion - Carrega formulários stilo com jQuery
 *
 * Autor: ldmotta@visie.com.br
 * http://www.visie.com.br
 * 
 * Versão:        1.0 12/04/2009
 * Requerimento:  jQuery 1.2.1
 */

 /*
 * Inicialize a biblioteca jqAcordion.js
 * <script language="javascript" src="js/jqAcordion.js" type="text/javascript"></script>
 *
 * Defina as opções titles(opcional) e files(obrigatória)
 *   Options ={
       titles: Array("Passo 1","Passo 2"),
       files: Array(
         "files/reserva-passo-1.php",
         "files/reserva-passo-2.php"
       )
     };
 *
 * Chamar o método initForms(opções)
     initForms(Options)
 *
 * Insira o seu formulário na página com id = 'acordion'
 *   <form id="acordion" method="post" action="jqAcordion.php"></form>
 *
 * Metodos
 * [titles] Array - Recebe um array que serão os titulos de cada passo. Caso a quantidade de títulos passados seja 
 *									inferior a quantidade de arquivos, o sistema irá atribuir títulos sequenciais.
 * [files]        Array - Recebe um array com as urls dos arquivos que serão carregados
 * [complete]     Function - Uma função chamada quando a requisição é finalizada
 * [titles]       Array - recebe array com os títulos de cada passo
 * [files]        Array - recebe array com as urls dos arquivos quer serão solicitados
 * [complete]     Function - Uma função chamada quando a requisição é finalizada
 * [type]         String - define o método de envio de dados (GET/POST)
 * [async]        Boolean - define o método de requisição síncrono ou assíncrono
 * [cache]        Boolean - solicita a última versão do arquivo ou o arquivo em cache
 * [dataType]     String - tipo de dados retornado
 * [data]         Object, String - recebe um array de dados que serão enviados pro servidor
 * [processData]  Boolean - retorna dados como objeto
 * [error]        Function - caso haja erro na requisição dos arquivos
 * [link]         String - nome da classe dos objetos links dos títulos
 * [continer]     String - nome da classe dos objetos conteúdo dos formulários
 *
 */

function initForms(frmOptions){
	$.fn.defaults = {
		titles: new Array(),					//recebe array com os títulos de cada passo
		files: new Array(),						//recebe array com as urls dos arquivos quer serão solicitados
    complete: function(){},       //Uma função chamada quando a requisição é finalizada
		type: "POST",								  //define o método de envio de dados
		async: false,									//define o método de requisição síncrono ou assíncrono
		cache: false,									//solicita a última versão do arquivo ou o arquivo em cache
		dataType: "html",							//tipo de dados retornado
		data: {foo:['bar1']},					//recebe um array de dados que serão enviados pro servidor
		processData: true,
		error: function(){},          //caso haja erro na requisição dos arquivos
		link: "passo-title-link",		  //classe dos objetos links dos títulos
		continer: "form-continer"	    //classe dos objetos conteúdo dos formulários
	}
	//define as novas propriedades em options para defaults
	jQuery.extend($().defaults, frmOptions);
}

$(document).ready(function(){
	var _o=$().defaults

	//var continer = $.defaults
	$('#acordion').append("<div class="+_o.link+"></div>")
	$('#acordion').append("<div class="+_o.continer+"></div>")

	//após criar as divs, define o css das mesmas
	var cssContiner = ({
		display: 'none',
		width: 'auto',
		margin: 'auto'
	});
	$('.'+_o.continer).css(cssContiner)
	var cssTitle = ({
		cursor: 'pointer',
		border: '0.1em solid #999999',
		padding: '4px 0 4px 10px',
		font: 'normal 11px "Lucida Grande",Verdana,Arial,"Bitstream Vera"',
		color: '#6D6D6D',
		'background-color': '#DDDDDD',
		'font-weight': 'bold'
	});
	$('.'+_o.link).css(cssTitle)

	//clona as divs que irão conter os link e os conteúdos com a quantidade 
	//igual a quantidade de arquivos definidos para carregamento
	for (var i=0; i < _o.files.length-1; i++ )	{
		$('.'+_o.link+':first').clone(true).insertAfter($('.'+_o.link+':first'));
		$('.'+_o.continer+':first').clone(true).insertAfter($('.'+_o.link+':first'));
	}

  //atribuo os títulos às divs que serão os títulos de cada passo
	$(_o.files).each(function(i){
			var item = $('.'+_o.link).get(i)
			if (_o.titles.length-1<i)
			{
				_o.titles[i] = "Passo " + (i+1)
			}
			$(item).html(_o.titles[i])
	})

	//percorre todas as divs de formulários para carregar os mesmos
	$('.'+_o.continer).each(function(i){
		var item = $('.'+_o.continer).get(i)
		//busca o formulário no servidor e armazena o seu conteúdo na variável html
		var html = $.ajax({
			url: _o.files[i],
			type: _o.type,
			async: _o.async,
      complete: _o.complete,
      error: _o.error,
			cache: _o.cache,
			dataType: _o.dataType,
			data: _o.data,
			processData: _o.processData,
      link: _o.link,
      continer:   _o.continer,
      success: function(html){
				$(item).append(html)
			}
		}).responseText; //formulário carregado

		//se for o primeiro, mostra aberto
		if (i==0){
			$(item).append('<div class="botao"><input type="button" class="passo" value="Prosseguir" /></div>')
			$(item).css({display: 'block'})
		//se for o último, insere botão concluir
		}else if (i==$('.'+_o.continer).length-1){
			$(item).append('<div class="botao"><input type="submit" class="concluir" value="Concluir" /></div>')
		//todos os outros terão botão continuar
		}else{
			$(item).append('<div class="botao"><input type="button" class="passo" value="Prosseguir" /></div>')
		}
	})

	//ao clicar nos botões, passa para o outro formulário obedecendo alguns critérios
	$('.passo').click(function(){
		var curr = $(this).parent().parent()
		curr.hide('slow')
		curr.next().next().show('slow')
		curr.next().attr('class','passo-title')
		curr.prev().attr('class','passo-title')
		$('.passo-title').css({color:'#FFF'})
		$('.passo-title').click(function(){
			$('.passo-title').attr('class', _o.link)
			$(this).attr('class', 'passo-title')
			$('.'+_o.link).next().hide('slow')
			$(this).next().show('slow')
		})
	})
});