/*
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'});
		 }
	}
})