/**
* ProspectHandler extends GenericHandler
* Handler class used to handle requests all requests regarding Prospect entites.
*
* @author: Christian Vejrich
* @date: 2007-05-30
**/
function ProjectHandler(uri, args, projectName){
     this.uri = uri+"/";
     this.projectId=null;
     if (window["currentProject"]) this.projectId=window["currentProject"];
}


/**
* getSavedProjects
* list projects...
*/
ProjectHandler.prototype.getSavedProjects = function(subjectKey){
	var rpc;
	rpc = new RPC();
	rpc.draw = function(){
		//check status.	
		var xml = this.request.responseXML;
		var rootElementList = xml.getElementsByTagName("rater"); 
		var rootTag = rootElementList[0];
		
		if (!rootTag) {
		   log("getSavedProjects error in response:"+this.request.responseText);
		   alert("RPC error getSavedProjects");
		   return;
		}
		var status = rootTag.getAttribute("status");
		if(status!="ok"){
			this.showErrorMessage(xml);
		}else{ //do success here.
			listenerHandler.notifyListenersToSubject(subjectKey,this.request.responseXML);
		}
  	};

 	rpc.load(this.uri+"getSaveProjectList","",this);
 	return;
};

/**
* removeProjectTaskFromProject
*
*/
ProjectHandler.prototype.removeProjectTaskFromProject = function(taskId,taskIndex,htmlElementId){
	var rpc;
	rpc = new RPC();
	rpc.htmlElementId = htmlElementId;
	
	rpc.draw = function(){
		
		//check status.	
		var xml = this.request.responseXML;
		var rootElementList = xml.getElementsByTagName("rater"); 
		var rootTag = rootElementList[0];
		var status = rootTag.getAttribute("status");
	
		if(status!="ok"){
			this.showErrorMessage(xml);	
		}else{
			//remove the calling html element from its parent.
			var htmlElement = document.getElementById(this.htmlElementId);
			var parentNode = htmlElement.parentNode;
			parentNode.removeChild(htmlElement);
			//remove listeners (??)
		}
	};
	
 	rpc.load(this.uri+"removeProjectTaskFromProject","taskId="+taskId+"&taskIndex="+taskIndex,this);

	return;
};

/**
*
*/
ProjectHandler.prototype.saveProjectValue = function(htmlElementId,headerName,subjectKey){

	var inputField = document.getElementById(htmlElementId);
	
	var rpc;
	rpc = new RPC();
	rpc.subjectKey = subjectKey;
	
	rpc.draw = function(){
	
		//check status.	
		var xml = this.request.responseXML;
		var rootElementList = xml.getElementsByTagName("rater"); 
		var rootTag = rootElementList[0];
		
		if (!rootTag) {
		   log("saveProjectValue error in response:"+this.request.responseText);
		   alert("RPC error saveProjectValue");
		   return;
		}
		
		var status = rootTag.getAttribute("status");
	
		if(status!="ok"){
			//specific error message handling for in listeners.
			listenerHandler.notifyListenersToSubject(this.subjectKey,this.request.responseXML);
		}else{
			//do success here.
			listenerHandler.notifyListenersToSubject(this.subjectKey,this.request.responseXML);
		}
		
		return;
	};
	
	//alert(headerName+"="+inputField.value);
		
	rpc.load(this.uri+"saveProjectValue", ""+headerName+"="+inputField.value, this);
 	
 	return;
};

/**
*
*/
ProjectHandler.prototype.saveProjectRawValue = function(value,headerName,subjectKey){

	

	var rpc;
	rpc = new RPC();
	rpc.subjectKey = subjectKey;
	
	rpc.draw = function(){
	
		//check status.	
		var xml = this.request.responseXML;
		var rootElementList = xml.getElementsByTagName("rater"); 
		var rootTag = rootElementList[0];
		
		if (!rootTag) {
		   log("saveProjectRawValue error in response:"+this.request.responseText);
		   alert("RPC error saveProjectRawValue");
		   return;
		}
		
		var status = rootTag.getAttribute("status");
	
		if(status!="ok"){
			//specific error message handling for in listeners.
			listenerHandler.notifyListenersToSubject(this.subjectKey,this.request.responseXML);
		}else{
			//do success here.
			listenerHandler.notifyListenersToSubject(this.subjectKey,this.request.responseXML);
		}
	};
	
	//alert(headerName+"="+inputField.value);
		
	rpc.load(this.uri+"saveProjectValue", ""+headerName+"="+value, this);
 	
 	return;
};


/**
* createProjectTaskToProject
*

* \u00f6 = �
* \u00e5 = �
* \u00e4 = �

*/
ProjectHandler.prototype.createProjectTaskToProject = function(projectTaskId){

	if(projectTaskId==-1){
		alert("Du m\u00e5ste ange n\u00e5got alternativ f\u00f6r att kunna l\u00e4gga till en detaljerad beskrivning. V\u00e4lj ett alternativ i listan (f\u00f6rutom [ange]) och klicka sedan L\u00e4gg till");
		return;
	}
	
	var rpc;
	rpc = new RPC();
	rpc.draw = function(){
		
		//check status.	
		var xml = this.request.responseXML;
		var rootElementList = xml.getElementsByTagName("rater"); 
		var rootTag = rootElementList[0];
		
		if (!rootTag) {
		   log("saveProjectRawValue error in response:", this.request.responseText);
		   alert("RPC error saveProjectRawValue");
		   return;
		}
		
		var status = rootTag.getAttribute("status");
	
		if(status!="ok"){
			this.showErrorMessage(xml);
		}else{	
			//do success here.
			listenerHandler.notifyListenersToSubject("project.tasklist",this.request.responseXML);
		}
	};
	
	rpc.load(this.uri+"createProjectTask","projectTaskId="+projectTaskId,this);
	
	return;
};



/**
* updateSlot
*
*/
ProjectHandler.prototype.updateSlot = function(slotName,valueElementId,taskName,taskIndex,slotIndex,checkValuesElementId){

	var valueElement = document.getElementById(valueElementId);
	var slotValue = valueElement.value;

	var checkedValuesElement;

	//hack ie bugg with checking and unchecking radio boxes.
	if(valueElement.type == "radio" && window.execScript){
		
		if(valueElement.checked == true){
			valueElement.checked = false;
		}else{
			valueElement.checked = true;
		}
	}
	
	//do logic for multi checkboxes.
	if(checkValuesElementId != undefined && checkValuesElementId != null){
		
		checkedValuesElement = document.getElementById(checkValuesElementId);
		
		var checkedValues = new Array();
		checkedValues = checkedValuesElement.value.split(",");
		
		//this value should be added to hidden value field.
		if(valueElement.checked == true){
				var isPresent = false;
				for(var v in checkedValues){
					if(checkedValues[v] == slotValue){
						isPresent = true;									
						break;
					}
				}
				if(!isPresent){
					checkedValuesElement.value += ","+slotValue;
				}
		//this value should be delete from the value array.
		}else if(valueElement.checked == false){
		
				var str = "";
				for(var v2 in checkedValues) {
					if(checkedValues.hasOwnProperty(v2) && checkedValues[v2] != slotValue && "" != checkedValues[v2]){
						str += checkedValues[v2] + ",";		
					}
				}
				
			checkedValuesElement.value = str;
		
		}
		slotValue = checkedValuesElement.value;	
	}

	//alert("slotName: " + slotName + "\n slotValue: " +slotValue + "\n taskName: " + taskName + "\n taskIndex: " + taskIndex + "\n slotIndex: " + slotIndex + "\n checked:" + valueElement.checked);

	var rpc;
	rpc = new RPC();
	
	rpc.draw = function() {
		
		//check status.	
		var xml = this.request.responseXML;
		var rootElementList = xml.getElementsByTagName("rater"); 
		var rootTag = rootElementList[0];
		
		if (!rootTag) {
		   log("check status... error in response:"+this.request.responseText);
		   alert("RPC error");
		   return false;
		}
		
		var status = rootTag.getAttribute("status");
	
		if(status!="ok"){
			this.showErrorMessage(xml);
		}else{
			//do success here.
			//alert("success, build nicer popup.");
		}
		return true;
	};
	
	rpc.load(this.uri+"updateSlot","slotName="+slotName+"&slotValue="+slotValue+"&taskName="+taskName+"&taskIndex="+taskIndex,this);
	
	return true;
};


/**
* addSlotToProjectTask
*
*/
ProjectHandler.prototype.saveSlotToProjectTask = function(formId,taskName,taskIndex){
	
	var form = document.getElementById(formId);
	var inputs = form.getElementsByTagName("input");
	var selects = form.getElementsByTagName("select");
	
	var queryString = "";
  	queryString = this.buildQueryFromInput(queryString,inputs);
  	queryString = this.buildQueryFromSelect(queryString,selects);
	
	var rpc;
	rpc = new RPC();
	rpc.draw = function(){
	
		//check status.	
		var xml = this.request.responseXML;
		var rootElementList = xml.getElementsByTagName("rater"); 
		var rootTag = rootElementList[0];
	
		if (!rootTag) {
		   log("saveSlotToProjectTask... error in response:", this.request.responseText);
		   alert("RPC error saveSlotToProjectTask");
		   return;
		}
		
		var status = rootTag.getAttribute("status");
	
		if(status!="ok"){
			this.showErrorMessage(xml);
		}else{
			//do success here.
			//alert("success, build nicer popup.");
		}
	};
	
 	rpc.load(this.uri+"saveSlotToProjectTask",queryString+"taskName="+taskName+"&taskIndex="+taskIndex,this);
 	
 	return;
};

/**
* removeSlotFromProjectTask
*
*
*/
ProjectHandler.prototype.removeSlotFromProjectTask = function(slotName,taskName,taskIndex){
	
	var rpc;
	rpc = new RPC();
	rpc.draw = function(){
	
		//check status.	
		var xml = this.request.responseXML;
		var rootElementList = xml.getElementsByTagName("rater"); 
		var rootTag = rootElementList[0];
		
		if (!rootTag) {
		   log("removeSlotFromProjectTask... error in response:",this.request.responseText);
		   alert("RPC error removeSlotFromProjectTask");
		   return;
		}
		
		var status = rootTag.getAttribute("status");
	
		if(status!="ok"){
			this.showErrorMessage(xml);
		}else{
			//do success here.
			//alert("success, build nicer popup.");
		}
	};
	
 	rpc.load(this.uri+"removeSlotFromProjectTask","taskName="+taskName+"&taskIndex="+taskIndex,this);
 	
 	return;
};

/**
* loadCurrentProject
*
*/
ProjectHandler.prototype.loadCurrentProject = function(subjectKey){
	
	//show about change notifier.
	listenerHandler.notifyListenersToSubjectAboutChange(subjectKey);
	
	var rpc;
	rpc = new RPC();
	rpc.subjectKey = subjectKey;
	rpc.draw = function(){
	
		//check status.	
		var xml = this.request.responseXML;
		var rootElementList = xml.getElementsByTagName("rater"); 
		var rootTag = rootElementList[0];
		
		if (!rootTag) {
		   log("loadCurrentProject... error in response:",this.request.responseText);
		   alert("RPC error loadCurrentProject");
		   return;
		}
		
		var status = rootTag.getAttribute("status");
	
		listenerHandler.notifyListenersToSubjectAboutChangeStop(this.subjectKey);
	
		if(status!="ok"){
			this.showErrorMessage(xml);
		}else{
			//do success here.
			listenerHandler.notifyListenersToSubject(this.subjectKey,this.request.responseXML);
		}
		
		//remove about change notifier.
  	};
	
 	rpc.load(this.uri+"getProjectById","projectId=-1",this);
 	
 	return;
};


/**
* changeCurrentProject
*
*/
ProjectHandler.prototype.changeCurrentProject = function(projectId,subjectKey){
	
	//not currently in use.
	//var textBox = document.getElementById(htmlElementId);
	
	//show about change notifier.
	listenerHandler.notifyListenersToSubjectAboutChange(subjectKey);

	var rpc;
	rpc = new RPC();
	rpc.projectId = projectId;
	rpc.subjectKey = subjectKey;
	
	rpc.draw = function(){
		//check status.	
		var xml = this.request.responseXML;
		var rootElementList = xml.getElementsByTagName("rater"); 
		var rootTag = rootElementList[0];
		if (!rootTag) {
		   log("changeCurrentProject... error in response:", this.request.responseText);
		   alert("RPC error changeCurrentProject");
		   return;
		}
		
		var status = rootTag.getAttribute("status");
		listenerHandler.notifyListenersToSubjectAboutChangeStop(this.subjectKey);
		
		if(status!="ok"){
			this.showErrorMessage(xml);
		}else{ //do success here.
			currentProject = parseInt(this.projectId);
			listenerHandler.notifyListenersToSubject(this.subjectKey,this.request.responseXML);
		}
		// update the get saved projects.
		// TODO: change this RPC to return the list!
		projectHandler.projectId=currentProject;
		projectHandler.getSavedProjects('saved_projects_list');
		
	};
	
	rpc.load(this.uri+"changeCurrentProject","projectId="+projectId,this);
	
	return;
};

/**
* saveProject
*
*/
ProjectHandler.prototype.saveProject = function(htmlElementId){

		//alert("saving project...");
	var rpc;
	rpc = new RPC();
	rpc.draw = function(){
		//check status.	
		var xml = this.request.responseXML;
		var rootElementList = xml.getElementsByTagName("rater"); 
		var rootTag = rootElementList[0];
		
		if (!rootTag) {
		   log("saveProject... error in response:", this.request.responseText);
		   alert("RPC error saveProject");
		   return;
		}
		
		var status = rootTag.getAttribute("status");
	
		if(status!="ok"){
			this.showErrorMessage(xml);
		}else{
			//update the get saved projects.
			projectHandler.getSavedProjects('saved_projects_list');
			alert("Din jobbf\u00f6rfr\u00e5gan \u00e4r nu sparad.");
		}
	
	};
	
	rpc.load(this.uri+"saveProject","",this);
	
	return;
};

/**
* sendProject
*
*/
ProjectHandler.prototype.sendProject = function(htmlElementId){

	alert("not in use!");

	/*var textBox = document.getElementById(htmlElementId);	
	var rpc = new RPC();
	rpc.draw = function(){
		
		var xml = this.request.responseXML;
		var rootElementList = xml.getElementsByTagName("rater"); 
		var rootTag = rootElementList[0];
		var status = rootTag.getAttribute("status");
	
		if(status!="ok"){
			//showErrorMessage(xml);
		}else{
			//do success here.
			
			//no notifier is shown... 
			alert("Din offertforfragan ar skickad!");
		}
		//reload save projects list.
		projectHandler.getSavedProjects('saved_projects_list');
		
		
	}
	
	rpc.load(this.uri+"sendProjectTaskSummaryToSelectedFirms","",this);
	*/
	return;
};

/**
* deleteProject
*
*/
ProjectHandler.prototype.deleteProject = function(htmlElementId,projectId){

	//var textBox = document.getElementById(htmlElementId);
	
	var rpc;
	rpc = new RPC();
	rpc.draw = function(){
	
		//check status.	
		var xml = this.request.responseXML;
		var rootElementList = xml.getElementsByTagName("rater"); 
		var rootTag = rootElementList[0];

		if (!rootTag) {
		   log("deleteProject... error in response:", this.request.responseText);
		   alert("RPC error deleteProject");
		   return;
		}
				
		var status = rootTag.getAttribute("status");
	
		if(status!="ok"){
			this.showErrorMessage(xml);
		}else{
			document.location.href = window["contextPath"]+"/do/request";
			//projectHandler.getSavedProjects("saved_projects_list");
			//projectHandler.loadCurrentProject('project');
		}
	
	};
	
	rpc.load(this.uri+"deleteProject","projectId="+projectId,this);
	
	return;
};

