/*
Script Name: 	Step Wizard (http://jastegg.it/eggs/stepwizard/ )
Author:			Diego La Monica 
version: 		1.2 beta
version date:	2008-07-20
Plugin for:		JAST ( http://jastegg.it )
--------------------------------

Change log:
1.2 (2008-07-20): 
	aggiunto metodo che preleva dal primo nodo figlio il titolo dello step nel caso in cui
	l'elemento che fa da container per lo step wizard non disponga di un suo titolo (attributo title)

--------------------------------
*/
JASTEggIt.extend('StepWizard', {
	options: {
		formId:						'',
		startFrom:					0,
		nextButton: 				true,
		prevButton: 				true,
		replaceSubmit: 				true,
		stepListClassName:			'step-list',
		stepListCurrentClassName:	'current',
		buttonContainerClassName: 	'',
		buttonClassName: 			'',
		buttonPreviousClassName:	'',
		buttonPreviousText:			'Previous',
		buttonNextClassName:		'',
		buttonNextText:				'Next',
		isStepClickable:			false
	},
	_checkArrow: function(event,id, i){
		if(event==null) event = window.event;
		
		var f = JASTEggIt._id(id);
		var o = f.options;
		
		var keynum = JASTEggIt.kbd.getKeyPressed(event);
		if(keynum==37 && i>0) JASTEggIt.StepWizard.goTo(id, i-1);
		if(keynum==39 && i< o._elementsId.length-1) JASTEggIt.StepWizard.goTo(id, i+1);
		
	},
	setup: function(elementsId, options ){
		options = JASTEggIt.mergeOptions(options, this.options);
		//Disegna prima del primo elemento l'elenco puntato
		var ul = JASTEggIt.DOM.createOnDocument('ol', elementsId[0], null);
		options._ulId = ul.id;
		options._elementsId = elementsId;
		JASTEggIt.DOM.appendClass(ul, options.stepListClassName);

		for(var i=0; i<elementsId.length; i++){
			// Crea gli elementi dell'elenco puntato
			var e = JASTEggIt._id(elementsId[i]);
			if(options.startFrom==null && (('#'+elementsId[i]) == window.location.hash)) options.startFrom = i; 
			var t = e.title;
			
			if(t == '' || t==null) 
				for(var j=0; j<e.childNodes.length; j++)
					if(e.childNodes[j].innerHTML!=null){
						t = '<nobr>' + e.childNodes[j].innerHTML +'</nobr>';
						break;
					};

			var li = JASTEggIt.DOM.createChild('li', ul);
			if(options.isStepClickable){
				JASTEggIt.Events.add(li, 'click', 'JASTEggIt.StepWizard.goTo(\'' + options.formId + '\', ' + i + '); ');
				JASTEggIt.Events.add(li, 'keyup', 'JASTEggIt.StepWizard._checkArrow(event, \'' + options.formId + '\', ' + i + ');');
				li.innerHTML = t;
				li.tabIndex=-1;
				// li.innerHTML = '<a href="javascript:JASTEggIt.StepWizard.goTo(\'' + options.formId + '\', ' + i + ');">' + t + '</a>';
			}else{
				li.innerHTML = t;
			}
			
			// nasconde tutti gli step tranne quello attuale
			if(i!=options.startFrom){
				JASTEggIt.DOM.setStyle(e, {
					display: 'none'
				});
			}else{
				JASTEggIt.DOM.appendClass(li, options.stepListCurrentClassName);
				li.tabIndex = 0;
			}
		}
		
		// Disegna il next e il prev dopo l'ultimo elemento della lista
		
		var last = elementsId[elementsId.length-1];
		var div = JASTEggIt.DOM.createOnDocument('div', null, last);

		if(options.buttonContainerClassName!=''){
			JASTEggIt.DOM.appendClass(div, options.buttonContainerClassName);
		}
		var linkPrev = JASTEggIt.DOM.createChild('a', div);
		var linkNext = JASTEggIt.DOM.createChild('a', div);
		if(options.buttonClassName!=''){
			JASTEggIt.DOM.appendClass(linkPrev, options.buttonClassName);
			JASTEggIt.DOM.appendClass(linkNext, options.buttonClassName);
		}
		if(options.buttonPreviousClassName!=''){
			JASTEggIt.DOM.appendClass(linkPrev, options.buttonPreviousClassName);
		}
		if(options.buttonNextClassName!=''){
			JASTEggIt.DOM.appendClass(linkNext, options.buttonNextClassName);
		}
		
		linkPrev.href= 'javascript:JASTEggIt.StepWizard.goPrevious("' + options.formId + '")';
		linkNext.href= 'javascript:JASTEggIt.StepWizard.goNext("' + options.formId + '")';
		linkPrev.innerHTML = options.buttonPreviousText;
		linkNext.innerHTML = options.buttonNextText;
		var f = JASTEggIt._id(options.formId);
		if(options.replaceSubmit){
			var inputs = JASTEggIt._name('input', f);
			
			for(var i=0; i<inputs.length; i++){
				if(inputs[i].type=='submit'){
					JASTEggIt.DOM.setStyle(inputs[i], {
						display: 'none'
						
					});
					inputs[i].onclick= function(){return false;}
				}
				
			}
		
		}
		f.options = options;
		
	},
	goTo: function(formId, index){
		 var f = JASTEggIt._id(formId);
		 var o = f.options;

		 var ul = JASTEggIt._id(o._ulId);
		 var li = JASTEggIt._name('li', ul);
		 JASTEggIt.DOM.removeClass(li[o.startFrom], o.stepListCurrentClassName );
		 JASTEggIt.DOM.setStyle(o._elementsId[o.startFrom], {display: 'none'});
		 li[o.startFrom].tabIndex=-1;
		 o.startFrom= index;
		 JASTEggIt.DOM.appendClass(li[o.startFrom], o.stepListCurrentClassName );
		 JASTEggIt.DOM.setStyle(o._elementsId[o.startFrom], {display: 'block'});
		 li[o.startFrom].focus();
		 li[o.startFrom].tabIndex=0;
		 
	},
	goNext: function(formId){
		 var f = JASTEggIt._id(formId);
		 var o = f.options;

		if(o.startFrom==o._elementsId.length-1 && o.replaceSubmit){
			if(f.onsubmit==null || f.onsubmit!=null && f.onsubmit()) f.submit();
		}else{
			 var ul = JASTEggIt._id(o._ulId);
			 var li = JASTEggIt._name('li', ul);
			 JASTEggIt.DOM.removeClass(li[o.startFrom], o.stepListCurrentClassName );
			 JASTEggIt.DOM.setStyle(o._elementsId[o.startFrom], {display: 'none'});
			 o.startFrom+=1;
			 JASTEggIt.DOM.appendClass(li[o.startFrom], o.stepListCurrentClassName );
			 JASTEggIt.DOM.setStyle(o._elementsId[o.startFrom], {display: 'block'});
		}
		
	},
	goPrevious: function(formId){
		 var f = JASTEggIt._id(formId);
		 var o = f.options;
		 if(o.startFrom != 0){
			var ul = JASTEggIt._id(o._ulId);
			var li = JASTEggIt._name('li', ul);
			JASTEggIt.DOM.removeClass(li[o.startFrom], o.stepListCurrentClassName );
			JASTEggIt.DOM.setStyle(o._elementsId[o.startFrom], {display: 'none'});
			o.startFrom-=1;
			JASTEggIt.DOM.appendClass(li[o.startFrom], o.stepListCurrentClassName );
			JASTEggIt.DOM.setStyle(o._elementsId[o.startFrom], {display: 'block'});
		 }
	}
})
