var path = '/';


var pozzo = {
	info    : 'msgPozzo',
	counter : 'counter',
	init : function() {
		if (!$(pozzo.info)) 	return;
		if (!$(pozzo.counter))  return;
		pozzo.info = $(pozzo.info);
		pozzo.counter = $(pozzo.counter);
		$$('a.addPozzo').each(function(elem) { Event.observe(elem, 'click', pozzo.add);});
	},
	
	add : function(e) {
		var a  = Event.findElement(e, 'a');
		new Ajax.Request(path + "ajax.php", {
			method: 'post',
			postBody: 'obj=pozzo&action=add&prod='+ a.id,
			onCreate: function() {
				pozzo.resetStatus();
				pozzo.info.addClassName('loading');
			},
			onSuccess: function(r) {
				pozzo.resetStatus();
				var jsoned   = r.responseText.evalJSON(true);
				if (jsoned.ok) {
					pozzo.info.addClassName('ok');
					pozzo.info.innerHTML = 'prodotto aggiunto';
					pozzo.counter.innerHTML = ' ('+ jsoned.ok + ')';
					pozzo.counter.pulsate();
					setTimeout("pozzo.resetStatus()",2000); 
				}
			},
			onFailure: function(r) {
				pozzo.resetStatus();
				pozzo.info.addClassName('err');
				pozzo.info.innerHTML = 'prodotto non aggiunto';
				setTimeout("pozzo.resetStatus()",4000); 
			}	
		});	
	},
	
	resetStatus : function() {
		pozzo.info.removeClassName('loading');
		pozzo.info.removeClassName('err');
		pozzo.info.removeClassName('ok');
		pozzo.info.innerHTML = '&nbsp;';
	}
}


var ordine = {
	tab    : 'listaPozzo',
	update : 'updateOrder',
	preview: 'previewOrder',
	form   : 'order',
	info   : 'orderMsg',
	cont   : 'contentPozzo',
	mod	   : 'modifyOrder',
	conf   : 'sendOrder',
	
	init1 : function() {
		if (!$(ordine.update)) return;
		ordine.tab    = $(ordine.tab);
		ordine.update = $(ordine.update);
		ordine.form   = $(ordine.form);
		ordine.info   = $(ordine.info);
		ordine.cont   = $(ordine.cont);
		ordine.preview= $(ordine.preview);
		
		Event.observe(ordine.update, 'click', ordine.prepareUpdate);
		Event.observe(ordine.preview, 'click', ordine.previewOrder);
		$$('.deleteItem').each(function(elem){ Event.observe(elem, 'click', ordine.deleteItem);	});
	},
	
	init2 : function() {
		if (!$(ordine.conf)) return;
		ordine.mod    = $(ordine.mod);
		ordine.conf   = $(ordine.conf);
		ordine.info   = $(ordine.info);
		ordine.cont   = $(ordine.cont);
		Event.observe(ordine.mod, 'click', function(){ window.location.reload()});
		Event.observe(ordine.conf, 'click', ordine.sendOrder);
	},
	
	sendOrder : function() {
		new Ajax.Request(path + "ajax.php", {
			method: 'post',
			postBody: 'obj=ordine&action=send&k='+ $('ck').value,
			onCreate: function() {
				ordine.info.addClassName('loading');
			},
			onSuccess: function(r) {
				var jsoned = r.responseText.evalJSON(true);
				if (jsoned.ok) {
					$('contentPozzo').up('div').innerHTML = jsoned.ok;
				}
				else if (jsoned.err) {
					ordine.info.removeClassName('loading');
					ordine.info.addClassName('err');
					ordine.info.innerHTML = jsoned.err;		
				}
			},
			onFailure: function(r) {
				ordine.info.removeClassName('loading');
				ordine.info.addClassName('err');
				ordine.info.innerHTML = 'L\'ordine non pu&ograve; essere inviato. Ci scusiamo per l\'inconveniente e la invitiamo a contattarci.';		
			}	
		});
		
	},
	
	previewOrder : function() {
		new Ajax.Request(path + "ajax.php", {
			method: 'post',
			postBody: 'obj=ordine&action=preview&k='+ $('ck').value,
			onCreate: function() {
				ordine.form.disable();
				ordine.info.addClassName('loading');
			},
			onSuccess: function(r) {
				var jsoned = r.responseText.evalJSON(true);
				if (jsoned.ok) {
					ordine.cont.up('div').innerHTML = jsoned.ok;
					ordine.init2();//ordine.form.remove();
				}
			},
			onFailure: function(r) {
				ordine.info.removeClassName('loading');
				ordine.info.addClassName('err');
				ordine.info.innerHTML = 'L\'ordine non pu&ograve; essere processato. Ci scusiamo per l\'inconveniente e la invitiamo a contattarci se l\'errore dovesse ripetersi.';
			}	
		});
	},
	
	deleteItem : function(e) {
		var img  = $(Event.findElement(e, 'img'));
		var qs = '&action=delete&prod=';
		if (!confirm('rimuovere il prodotto?')) return;
		qs += img.up('tr').id;
		ordine.execUpdate(qs);
	},
	
	prepareUpdate : function() {
		var rows = ordine.form.getInputs('text');
		var qs = '&action=update&details=';
		var err = false;
		rows.each(function(row) {
			qs += row.name.substr(1) + ':' + row.value + '|';
			if (parseInt(row.value) != row.value) {
				err = true;
				alert('Inserire un numero');
				row.focus();
				return;
			}
		});
		
		if (err) return;
		qs = qs.substr(0,qs.length-1);
		ordine.execUpdate(qs);
	},
	
	execUpdate : function(qs) {	
		new Ajax.Request(path + "ajax.php", {
			method: 'post',
			postBody: 'obj=ordine'+ qs,
			onCreate: function() {
				ordine.resetStatus();
				ordine.info.addClassName('loading');
			},
			onSuccess: function(r) {
				ordine.info.removeClassName('loading');
				var jsoned = r.responseText.evalJSON(true);
				if (jsoned.ok) {
					if (jsoned.ok == 'vuoto') {
						$('contentPozzo').innerHTML = '<p class="normal spaced">Il tuo carrello &egrave; vuoto</p>';
						ordine.form.remove();
					}
					else {
						$(ordine.tab).update(jsoned.ok);
						$$('.deleteItem').each(function(elem){ Event.observe(elem, 'click', ordine.deleteItem);	});
						ordine.info.addClassName('ok');
						ordine.info.innerHTML = 'ordine aggiornato';
						setTimeout("ordine.resetStatus()",2000); 
					}
				}
				else if (jsoned.err) {
					ordine.info.addClassName('err');
					ordine.info.innerHTML = jsoned.err;
					setTimeout("ordine.resetStatus()",2000);
				}
			},
			onFailure: function(r) {
				ordine.info.removeClassName('loading');
				ordine.info.addClassName('err');
				ordine.info.innerHTML = 'L\'ordine non pu&ograve; essere aggiornato. Ci scusiamo per l\'inconveniente.';		
				setTimeout("ordine.resetStatus()",4000); 
			}	
		});
	},
	
	resetStatus : function() {
		ordine.info.removeClassName('err');
		ordine.info.removeClassName('ok');
		ordine.info.innerHTML = '&nbsp;';
	}	
}




var mform = {
	fid   : null,
	btn   : null,
	msgId : null,
	msgDiv: null,
	
	init : function(fid, fbtn) {
		if (!$(fid) || !$(fbtn)) return;
		mform.fid = fid;
		mform.btn = fbtn;
		mform.msgId = 'msg' + fid;		
		Event.observe($(mform.btn), 'click', mform.check);
		
	},
	buildMsgDiv : function() {
		if ($(mform.msgId)) $(mform.msgId).remove();
		mform.msgDiv 	= document.createElement('div');
		mform.msgDiv.id = mform.msgId;
		
	},
	check : function(e) {
		mform.buildMsgDiv();
		var input  = Event.findElement(e, 'input');
		
		var elems   = $A(Form.getElements($(mform.fid)));
		var err     = false;	
		var errMsg  = false;	
		
		switch(input.id) {
			case 'btnAct' : 
				if (err = elems.any(function(elem) { return elem.value.strip().blank()})) {
					errMsg = 'Compilare tutti i campi';
					break;
				}
				
				if (err = !$('actUser').value.match(/[\w]{3,}/)) {	
					$('actUser').focus();
					errMsg = 'Sono ammessi solo caratteri alfanumerici (almeno 3 caratteri)';
					break;
				}
				
				if (err = $('actPass').value.length < 8) {	
					$('actPass').focus();
					errMsg = 'La password &egrave; troppo breve';
					break;
				}
				if (err = $('actPass').value != $('actPass2').value) {	
					$('actPass2').focus();
					errMsg = 'La password di conferma non coincide';
					break;
				}
			break;
			
			case 'btnModpwd' : 
				if (err = elems.any(function(elem) { return elem.value.strip().blank()})){
					errMsg = 'Compilare tutti i campi';
					break;
				}
				if (err = $('newPass').value.length < 8){	
					$('newPass').focus();
					errMsg = 'La password &egrave; troppo breve';
					break;
				}
				if (err = $('newPass').value != $('newPass2').value) {	
					$('newPass2').focus();
					errMsg = 'La password di conferma non coincide';
					break;
				}
		}
		if (err) {
			mform.msgDiv.innerHTML = errMsg;
			mform.msgDiv.className = 'verticalFormErr';
			$(mform.fid).appendChild(mform.msgDiv);
			setTimeout("mform.resetStatus()",4000);
			return;
		}
		
		enconded = new Hash();
		elems.each(function(el) { enconded.set(el.name , el.value)  });
		
		switch(input.id) {
			case 'btnAct' : 
				$(mform.fid).submit();
			break;
			
			case 'btnModpwd' :
				new Ajax.Request(path + "ajax.php", {
					method: 'post',
					postBody: 'obj=info&action=pwd&' + '&' + enconded.toQueryString(), //+ $(mform.fid).serialize(),
					onSuccess: function(r) {
						var jsoned = r.responseText.evalJSON(true);
						if (jsoned.ok) {
							mform.msgDiv.innerHTML = jsoned.ok;
							mform.msgDiv.className = 'verticalFormOk';
							$(mform.fid).appendChild(mform.msgDiv);
							$(mform.fid).reset();
							setTimeout("mform.resetStatus()",4000);			
						}
						else if (jsoned.err) {
							mform.msgDiv.innerHTML = jsoned.err;
							mform.msgDiv.className = 'verticalFormErr';
							$(mform.fid).appendChild(mform.msgDiv);
							setTimeout("mform.resetStatus()",4000);
						}
					},
					onFailure: function(r) {
						mform.msgDiv.innerHTML = 'Impossibile comunicare con il server, provare di nuovo.';
						mform.msgDiv.className = 'verticalFormErr';
						$(mform.fid).appendChild(mform.msgDiv);
						setTimeout("mform.resetStatus()",4000);
					}	
				});				
		}	
	},
	resetStatus : function() {
		if ($(mform.msgId)) $(mform.msgId).remove();
	}
}



var mdata = {
	fid   : null,
	btn   : null,
	msgId : null,
	msgDiv: null,
	file  : null,
	
	init : function(fid, fbtn) {
		if (!$(fid) || !$(fbtn)) return;
		mdata.fid = fid;
		mdata.btn = fbtn;
		mdata.msgId = 'msg' + fid;
		mdata.file = fid == 'newreg' ? 'pub_ajax.php' : 'ajax.php';
		Event.observe($(mdata.btn), 'click', mdata.check);
	},
	
	buildMsgDiv : function() {
		if ($(mdata.msgId)) $(mdata.msgId).remove();
		mdata.msgDiv 	= document.createElement('div');
		mdata.msgDiv.id = mdata.msgId;
	},
	
	check : function(e) {
		mdata.buildMsgDiv();
		var input  = Event.findElement(e, 'input');
		var elems   = $A(Form.getElements($(mdata.fid)));
		var err     = false;	
		var errMsg  = false;	
		
		if (err = elems.any(function(elem) { return (elem.lang =='rq' && elem.value.strip().blank()) })) {
			errMsg = 'I campi con l\'asterisco sono obbligatori';
		}
		
		else if ($('cap') && (err =! $('cap').value.match(/^[0-9]{3,8}$/))) {	
			$('cap').focus();
			errMsg = 'Per il CAP sono ammessi solo caratteri numerici';
		}
		
		else if  ($('partita_iva') && (err =! $('partita_iva').value.match(/^[0-9]{7,15}$/))) {	
			$('partita_iva').focus();
			errMsg = 'Per la partita iva sono ammessi solo caratteri numerici';
		}
		
		
		if (err) {
			mdata.msgDiv.innerHTML = errMsg;
			mdata.msgDiv.className = 'verticalFormErr';
			$(mdata.fid).appendChild(mdata.msgDiv);
			setTimeout("mdata.resetStatus()",4000);
			return;
		}
		enconded = new Hash();
		elems.each(function(el) { enconded.set(el.name , el.value)  });
		//post = 'obj=info&action=' + mdata.fid + '&'+ enconded.toQueryString(); //$(mdata.fid).serialize(),
		
		new Ajax.Request(path + mdata.file, {
			method: 'post',
			postBody: 'obj=info&action=' + mdata.fid + '&'+ enconded.toQueryString(),
			onSuccess: function(r) {
				var jsoned = r.responseText.evalJSON(true);
				if (jsoned.ok) {
					mdata.msgDiv.innerHTML = jsoned.ok;
					mdata.msgDiv.className = 'verticalFormOk';
					$(mdata.fid).appendChild(mdata.msgDiv);
					setTimeout("mdata.resetStatus()",4000);
				}
				else if (jsoned.err) {
					mdata.msgDiv.innerHTML = jsoned.err;
					mdata.msgDiv.className = 'verticalFormErr';
					$(mdata.fid).appendChild(mdata.msgDiv);
					setTimeout("mdata.resetStatus()",4000);
				}
				else if (jsoned.newreg) {
					$('contentDyn').innerHTML = '';
					var h3 	= new Element('h5', { 'class': 'titleStory', 'style' : 'color:#339900'}).update("Registrazione effettuata");
					var p 	= new Element('p', { 'class': 'normal'}).update("Grazie per esserti registrato! Non appena un nostro responsabile verificher&agrave; la correttezza dei dati inseriti riceverai una mail con le istruzioni da seguire per poter usufruire di tutte le sezioni del sito. A presto!");
					$('contentDyn').appendChild(h3);
					$('contentDyn').appendChild(p);
				}
			},
			onFailure: function(r) {
				mdata.msgDiv.innerHTML = 'Impossibile comunicare con il server, provare di nuovo.';
				mdata.msgDiv.className = 'verticalFormErr';
				$(mdata.fid).appendChild(mdata.msgDiv);
				setTimeout("mdata.resetStatus()",4000);
			}	
		});	

	},
	resetStatus : function() {
		if ($(mdata.msgId)) $(mdata.msgId).remove();
	}	
}

var fade = {
	container 	  : null,
	timer         : null,
	imgList       : null,
	imgDir        : path + 'images/azienda/heading/',
	init		  : function(c, t) {
		if (!$(c)) return;
		if ($('contentCorp') && $('contentCorp').down('h6'))
			fade.contest = $('contentCorp').down('h6').innerHTML;
		else
			fade.contest = 'benvenuti';
		fade.container = $(c);
		fade.timer = t;
		new Ajax.Request(path + "pub_ajax.php", {
			method: 'post',
			postBody: 'obj=retrieveHeaderImages&contest=' + encodeURIComponent(fade.contest),
			onSuccess: function(r) {
				var jsoned = r.responseText.evalJSON(true);
				fade.imgList = jsoned.toArray();
				fade.container.firstDescendant().src = fade.imgDir + fade.imgList[Math.floor(Math.random()*fade.imgList.length)];
				if (fade.imgList.length>1)
					new PeriodicalExecuter(fade.alternate, t);
			}
		});	
	},
	alternate : function() {
		current = fade.container.firstDescendant().src.substr(fade.container.firstDescendant().src.lastIndexOf('/')+1);
		var elems = fade.imgList.clone().without(current);
		randomEnteringImg = elems[Math.floor(Math.random()*elems.length)];
		new Effect.Opacity(fade.container.firstDescendant(), { from: 1, to: 0, duration: 0.5 });
		new PeriodicalExecuter(function(pe) {
			fade.container.firstDescendant().src = fade.imgDir + randomEnteringImg;
			new Effect.Opacity(fade.container.firstDescendant(), { from: 0, to: 1, duration: 0.5 });
			pe.stop();
		}, 0.5);
	}
	
}


var carousel = {
	imgdiv  	: null,
	wrapper 	: null,
	timer		: 1000,
	interval	: null,
	moving		: false,
	elemwidth	: 100,
	displacement: 100,
	viewableelems	: 5,
	
	init : function(id, t) {
		if (!$(id) || !$(id + 'Wrapper')) return;
		carousel.imgdiv = id;
		carousel.timer = t;
		carousel.wrapper = id + 'Wrapper';
		if ((carousel.viewableelems+1) > $$('#' + carousel.imgdiv + ' img').size()) return;
		carousel.interval = setInterval("carousel.move()", carousel.timer);
		Event.observe($(carousel.imgdiv), 'mouseover', carousel.block);
		Event.observe($(carousel.imgdiv), 'mouseout', carousel.restart);
	},
	
	logging : function(s) {
		$('logging').innerHTML += s + '<br />';
	},
	
	move : function(e) {
		carousel.moving = true;
		new Effect.Move(carousel.imgdiv, {
		  x: - carousel.displacement/2, y: 0, mode: 'relative',
		  transition: Effect.Transitions.linear
		});
		var howmany = parseInt($(carousel.imgdiv).style.left);
		var imgs 	= $$('#' + carousel.imgdiv + ' img');
		endIndex 	= (isNaN(howmany)) ? carousel.displacement : Math.abs(howmany) + carousel.displacement;
		endIndex	= Math.ceil(endIndex/carousel.elemwidth);
		startIndex  = carousel.displacement/carousel.elemwidth;
		startIndex	= (endIndex - startIndex <0) ? 0 : endIndex - startIndex;
		elemsToEnd  = imgs.slice(startIndex, endIndex);
		elemsToEnd.each(function(elem) { 
			if (elem.readAttribute('copied')) return;
			elem.writeAttribute('copied', true);
			var i = new Element('img', { 'src' : elem.src, 'style' : elem.style, 'title' : elem.title, 'alt' : elem.alt });
			$(carousel.imgdiv).appendChild(i);
			$(carousel.imgdiv).setStyle({ 'width' : $(carousel.imgdiv).getWidth() + carousel.elemwidth + 'px'});
		});
	},
	
	restart : function(e) {
		carousel.interval = setInterval("carousel.move()", carousel.timer);
	},
	
	block : function(e) {
		clearInterval(carousel.interval);
		carousel.moving = false;
	}
	
}



Event.observe(window, 'load', function() {
	mdata.init('moddata', 'btnModdata');
	mform.init('modpwd', 'btnModpwd');
	mdata.init('newreg', 'btnNewreg');
	mform.init('act', 'btnAct');
	pozzo.init();
	ordine.init1();
	ordine.init2();
	fade.init('mainImage', 10);
	carousel.init('movable', 1000);
	
	//mform.init('newreg', 'btnNewreg');
	
});	








