var jsQuestions = {

	dlgConfirm : "", // Elemento per tenere traccia del dijit.Dialog
	emptyQuestion : {'identifier':'itemId','label':'titleQuestion','items':[]}, // Questionario vuoto
	
	/*
	question : {'identifier':'itemId','label':'titleQuestion','items':[
					{'itemId':'integer','titleQuestion':'string','typeQuestion':'string','typeQuestionId':'integer','itemOptions':'string','itemIsRequired':'boolean','addOtherOption':'boolean',
			'itemOrdering':'integer'}]
			}
	*/
	
	ordering : 0, // Indice di ordinamento
	index : 1, // Indice... boh!
	exitingHref : "", // FORSE........ link precedente???
	isEditing : 0, // Se siamo in modifica Questionario, alcune operazioni sono negate
	
	
	/* DELETE QUESTION :: Chiede conferma per l'eliminazione di un Questionario dalla ViewList :: */
	deleteQuestion : function(questionId, questionTitle)
	{
		this.dlgConfirm = new dijit.Dialog();
		this.dlgConfirm.attr("content","Vuoi eliminare il questionario <strong>" + questionTitle + "</strong>?<br />" +
		"<div style='text-align:center;'><button dojoType='dijit.form.Button' onClick='jsQuestions.confirmDeleteQuestion(" + questionId + ")'>Si, elimina!</button> " + 
		"<button dojoType='dijit.form.Button' onClick='dlgConfirm.destroy()'>No!</button></div>");
		this.dlgConfirm.attr("title", "Rimuovi questionario");
		this.dlgConfirm.show();
	},
	
	
	/* CONFIRM DELETE QUESTION :: Una volta accettato (DELETE QUESTION), elimina il Questionario */ 
	confirmDeleteQuestion : function(questionId, dlg)
	{
		this.dlgConfirm.hide();
		this.dlgConfirm="";
		var dlgMsg = new dijit.Dialog({title:"Eliminazione Questionario"});
		
		var elements = {"dojoAction":"deleteQuestion","questionId":questionId};
		
		var xhrArgs = {
			url: basePathURL + "dojo",
			postData:dojo.toJson(elements),
			handleAs:"json-comment-filtered",
			load:function(data)
			{
				if(data.error==false)
				{
					this.dlgMsg.attr("onHide",function(){ document.location.href="<?php echo base_url(); ?>index.php/surveys/questions"; });
					this.dlgMsg.attr("content","Questionario eliminato correttamente.");
				}
				else
					this.dlgMsg.attr("content","Si sono verificati errori: " + data.errorMsg);
				
				this.dlgMsg.show();
			}
		};
		var deferred = dojo.xhrPost(xhrArgs);
	},
	
	
	
	/* CHECK EXIT PAGE :: Funzione che DOVREBBE controllare se il Questionario Creato è stato salvato o meno */
	checkExitPage : function()
	{
		var dlgExit = new dijit.Dialog();
		dlgExit.attr("title","Creazione Questionario");
		dlgExit.attr("content","Sicuro di voler abbandonare questa pagina?<br /><button dojoType='dijit.form.Button' onClick='return true;'><strong>Si, certo!</button> <button " + 
		"dojoType='dijit.form.Button' onClick='return false;'>No, affatto.</button>");
		dlgExit.show();
		return false;
	},
	
	
	
	/* UPDATE TYPE QUESTION :: Aggiorna il tipo di question */
	updateTypeQuestion : function(comboBox)
	{
		if(comboBox.item == null)
			comboBox.reset();
		else
			dojo.byId('typeQuestionId').value = comboBox.item.value;
	},
	
	
	
	/* REMOVE ITEM QUESTION :: Elimina la domanda */
	removeItemQuestion : function(iId)
	{
		var removeItem = function(items,request)
		{
			for(i=0;i<items.length;i++)
			{
				questionItems.deleteItem(items[i]);
				questionItems.save();
			}
		};
		var itemsTable = questionItems.fetch({query:{itemId:iId}, onComplete:removeItem});
		var update = reorderingItems();
		this.showTableItems();
	},
	
	
	showQuestionItems : function()
	{
		var questionId = parseInt(dojo.byId('questionId').value);
		var elementItems = {"dojoAction":"getQuestionItems","questionId":questionId};
		var xhrArgs = {
			url: basePathURL + "dojo",
			postData:dojo.toJson(elementItems),
			handleAs:"json-comment-filtered",
			load:function(data)
			{
				if(data.error == false)
				{
					dojo.forEach(data.items, function(it,i)
					{
						element = {
							'itemId':it.itemId,
							'titleQuestion':it.titleQuestion,
							'typeQuestion':it.typeQuestion,
							'typeQuestionId':it.typeQuestionId,
							'itemOptions':it.itemOptions,
							'itemIsRequired':it.isRequired,
							'addOtherOption':it.otherOption,
							'itemOrdering':it.ordering
						};
						questionItems.newItem(element);
					});
					jsQuestions.showTableItems();
				}
				else
					alert("Error");
			}
		};
		var deferred = dojo.xhrPost(xhrArgs);
	},
	
	/* ADD QUESTIO ITEM :: Aggiunge una nuova domanda al Questionario */
	addQuestionItem : function()
	{
		var titleQuestion = dijit.byId('titleQuestion').value;
		var typeQuestion = dijit.byId('typeQuestion').value;
		var typeQuestionId = parseInt(dojo.byId('typeQuestionId').value);
		var itemOptions = dijit.byId('itemOptions').value;
		var itemIsRequired = (dijit.byId('isRequired').checked ? 1 : 0);
		var addOtherOption = (dijit.byId('addOtherOption').checked ? 1 : 0);
		
		var errorMsg="";
		var error=0;
		
		if(dojo.trim(titleQuestion) == "")
		{
			error++;
			errorMsg += "Inserire una domanda.<br />";
		}
		
		if(isNaN(typeQuestionId))
		{
			error++;
			errorMsg += "Selezionare un tipo di risposta.<br />";
		}
		
		if(error>0)
		{
			var dlgError = new dijit.Dialog({"title":"Aggiungi Elemento","content":errorMsg});
			dlgError.show();
			dojo.connect("dlgError","onhide",function()
			{
				dlgError.destroy();
			});
			return false;
		}
		
		element = {
			'itemId':this.index,
			'titleQuestion':titleQuestion.toString(),
			'typeQuestion':typeQuestion.toString(),
			'typeQuestionId':parseInt(typeQuestionId),
			'itemOptions':itemOptions.toString(),
			'itemIsRequired':parseInt(itemIsRequired),
			'addOtherOption':parseInt(addOtherOption),
			'itemOrdering':parseInt(this.ordering)
		};
		
		questionItems.newItem(element);
		this.ordering++;
		this.index++;

		dijit.byId('titleQuestion').reset();
		dijit.byId('titleQuestion').focus();
		dijit.byId('typeQuestion').reset();
		dijit.byId('isRequired').reset();
		dijit.byId('addOtherOption').reset();
		dojo.byId('typeQuestionId').value="";
		dijit.byId('itemOptions').reset();
		
		this.showTableItems();
	},
	
	showTableItems : function()
	{
		var tableObj = {
			"table":{
				"class":"tblSurveys",
				"id":"tblListItems",
				"width":"100%",
				"summary":"Lista di Elementi della Tabella",
				"thead":{
					"items":[
								{"width":"20%","title":"Domanda"},
								{"width":"20%","title":"Tipo di Risposta"},
								{"width":"40%","title":"Opzioni"},
								{"width":"20%","title":"Operazioni"}
							]
						},
				"tbody":{ "rowItems":[]},
			}
		}
		
		var updateTableJson = function(items,request)
		{
			odd = false;
			for(i=0;i<items.length;i++)
			{
				var item = items[i];
				var operations = "";
				if(this.isEditing == 0)
				operations += "<img class='button' src='" + basePath + "images/icon_cancel.png' onClick=\"jsQuestions.removeItemQuestion(" + 
						parseInt(items[i].itemId) + ")\" border='0' /> ";
				else
				operations += "<img class='button' src='" + basePath + "images/icon_edit.png' onClick=\"jsQuestions.editItemQuestion(" + 
						parseInt(items[i].itemId) + ")\" border='0' /> ";
				if(i>0)
					operations += "<img class='button' src='" + basePath + "images/icon_arrow_up.png' onClick=\"jsQuestions.swapItemPosition(" + 
						parseInt(items[i].itemId) + ", " + parseInt(items[(i - 1)].itemId) + ")\" border='0' /> ";
				
				if(i!=(items.length - 1))
					operations += "<img class='button' src='" + basePath + "images/icon_arrow_down.png' onClick=\"jsQuestions.swapItemPosition(" + 
						parseInt(items[i].itemId) + ", " + parseInt(items[(i + 1)].itemId) + ")\" border='0' /> ";
				
				if(item.itemIsRequired == 1) isReq = "(*)";
				else isReq = "";
				
				if(item.addOtherOption == 1) aOth = " , Altro[]";
				else aOth = "";
				
				if(odd) {oddClass = "odd"; odd=false;}
				else {oddClass = ""; odd=true;}
				
				options = "";
				dojo.forEach(item.itemOptions,function(item,i)
				{
					if(i>0) options += " , ";
					options += item.optionValue;
				});
				
				tableObj.table.tbody.rowItems[i] = {
					"oddClass":oddClass,
					items:[
						{"width":"20%","content":item.titleQuestion.toString() + isReq,"h":true},
						{"width":"20%","content":item.typeQuestion.toString()},
						{"width":"40%","content":options + aOth},
						{"width":"20%","html":operations}
					]};
			}
		};
		
		var itemsTable = questionItems.fetch({query:{itemId:"*"}, sort:[{attribute:"itemOrdering"}], onComplete:updateTableJson});
		
		var tableHtmlElement = tableMaker(tableObj);
		var listSpace = document.getElementById('questionItemsList');
		if(document.getElementById('tblListItems') != undefined)
		{
			var oldTable = document.getElementById('tblListItems');
			listSpace.removeChild(oldTable);
		}
		listSpace.innerHTML = "";
		listSpace.appendChild(tableHtmlElement);
		listSpace.innerHTML += "<div style='text-align:right;'><button dojoType='dijit.form.Button' " +
			" onClick='jsQuestions.showPreviewQuestion'>Anteprima</button></div>";
		dojo.parser.parse("questionItemsList");
	},
	
	
	
	
	
	getElementsFromQuestion : function()
	{
		var questionElements = new Array();
		var getItemsFromQuestion = function(items, result)
		{
			for(i=0;i<items.length;i++)
			{
				item = items[i];
				o = {};
				dojo.forEach(questionItems.getAttributes(item), function(attr){ o[attr] = questionItems.getValue(item, attr); });
				questionElements[i] = o;
			}
		};		
		questionItems.fetch({query:{itemId:"*"},sort:[{attribute:"itemOrdering"}],onComplete:getItemsFromQuestion});
		return questionElements;
	},
	
	
	
	
	
	showPreviewQuestion : function()
	{
		var items = jsQuestions.getElementsFromQuestion();
		var elementItems = {"dojoAction":"showPreview","items":items};
		var xhrArgs = {
			url: basePathURL + "dojo",
			postData:dojo.toJson(elementItems),
			handleAs:"json-comment-filtered",
			load:function(data)
			{
				if(data.error == false)
				{
					dlgPreview.attr("content",data.htmlContent);
					dlgPreview.attr("title","Anteprima");
					dlgPreview.show();
				}
				else
					alert("Error");
			}
		};
		var deferred = dojo.xhrPost(xhrArgs);
	},
	
	
	
	
	swapItemPosition : function(first,second)
	{
		var itemFirst = "";
		var firstOrder = 0;
		var itemSecond = "";
		var secondOrder = 0;
		
		var getFirst = function(items, request)
		{
			for (var i = 0; i < items.length; i++)
			{
				itemFirst = items[i];
				firstOrder = parseInt(items[i].itemOrdering);
			}
		};

		var getSecond = function(items, request)
		{
			for (var i = 0; i < items.length; i++)
			{
				itemSecond = items[i];
				secondOrder = parseInt(items[i].itemOrdering);
			}
		};
		
		var request = questionItems.fetch({query:{itemId:first}, onComplete: getFirst});
		var request = questionItems.fetch({query:{itemId:second},onComplete: getSecond});
		questionItems.setValue(itemFirst, "itemOrdering", secondOrder);
		questionItems.setValue(itemSecond, "itemOrdering", firstOrder);
		questionItems.save();
		this.showTableItems();
	},
	
	
	
	
	reorderingItems : function()
	{
		var reordering = function(items,request)
		{
			var idx = 0;
			for(var i=0;i<items.length;i++)
			{
				questionItems.setValue(items[i],"itemOrdering",idx);
				questionItems.save();
				idx++;
			}
			ordering = idx;
		};
		var reorder = questionItems.fetch({query:{itemId:"*"},sort:[{attribute:"itemOrdering"}],onComplete:reordering});
		return true;
	},
	
	
	
	
	
	saveNewQuestion : function()
	{
		var nameQuestion = dijit.byId('nameQuestion').value;
		var descQuestion = dijit.byId('descQuestion').value;
		var elements = new Object();
		var elements = {"dojoAction":"saveNewQuestion","nameQuestion":nameQuestion,"descQuestion":descQuestion,"items":getElementsFromQuestion()};
		var error = 0;
		var errorMsg = "";
		
		if(dojo.trim(nameQuestion) == "")
		{
			error++;
			errorMsg += "Inserire un titolo valido per il Questionario.<br />";
		}
		
		if(elements.items.length == 0)
		{
			error++;
			errorMsg += "Inserire ALMENO un elemento nel Questionario.<br />";
		}
		
		if(error>0)
		{
			var dlgError = new dijit.Dialog({"title":"Nuovo Sondaggio","content":errorMsg});
			dlgError.show();
			dojo.connect("dlgError","onHide",function()
			{
				dlgError.destroy();
			});
			return false;
		}
		
		var xhrArgs = {
			url:basePathURL + "dojo",
			postData:dojo.toJson(elements),
			handleAs:"json-comment-filtered",
			load:function(data)
			{
				dlgGeneric = new dijit.Dialog();
				dlgGeneric.attr("title","Nuovo Questionario");
				
				if(data.error == false)
				{
					dlgGeneric.attr("content","Questionario salvato correttamente.");
					dlgGeneric.attr("onHide",function(){ document.location.href="<?php echo base_url(); ?>index.php/surveys/questions"; });
				}					
				else
					dlgGeneric.attr("content","Si sono verificati degli errori:<br />" + data.errorMsg);
				
				dlgGeneric.show();
			}
		};
		var deferred = dojo.xhrPost(xhrArgs);
	}
};
