
function ProjectTaskRender(){

}

/**
 * 
 * @param object
 * @param htmlElementId
 * @return
 */
ProjectTaskRender.prototype.render = function render(object,htmlElementId){

	//get div element to write data to.
	var taskdiv = document.getElementById(htmlElementId);
	var elementList;
	
	//get task node, if param object is not 
	if (!(object.nodeName == "task")) {
		elementList = object.getElementsByTagName("task");
		if (elementList != null && elementList != undefined && elementList.length > 0){
			object = elementList[0];
		}else{
			object = null;
		}
	}
	
	if(object){
	
		var xmlNode = object;
		var taskName = object.getAttribute("taskname");
		var taskIndex = xmlNode.getAttribute("taskIndex");
		var ismandatory = xmlNode.getAttribute("mandatory");
		var taskId = xmlNode.getAttribute("id");
		
		var divheader = document.createElement("div");
		divheader.style.width="600px";
		divheader.style.position="relative";
		divheader.style.display="block";
		
		var spanTag = document.createElement("h2");
		spanTag.appendChild(document.createTextNode(taskName));
		
		divheader.appendChild(spanTag);
		
		if(ismandatory== undefined || ismandatory==null){
		
			var spanLeftTag = document.createElement("div");
			spanLeftTag.className = "closebox";
		
			var tabortBoxHrefTag = document.createElement("a");
			tabortBoxHrefTag.href="javascript:projectHandler.removeProjectTaskFromProject('"+taskId+"','"+taskIndex+"','"+htmlElementId+"');";
			tabortBoxHrefTag.alt="ta bort";
		
			tabortBoxHrefTag.appendChild(document.createTextNode("[X]"));
			spanLeftTag.appendChild(tabortBoxHrefTag);
			divheader.appendChild(spanLeftTag);		
		}
		
		taskdiv.appendChild(divheader);
		
		elementList = xmlNode.getElementsByTagName("slot");
		
		if(elementList != undefined && elementList != null){
		
			for(var r=0; r != elementList.length ; r++){
				
				var xmlSlotNode = elementList[r];
				var slotName = xmlSlotNode.getAttribute("name");
				var slotType = xmlSlotNode.getAttribute("type");
				var slotId = taskdiv.id + "_slot_" + r;
				var slotNameSpan = document.createElement("span");
				slotNameSpan.className = "slotName";

				var write; 
		
				if(slotName == "Jobbeskrivning"){ // TODO update dependency!
					var s = document.createElement("span");
					s.className = "asterisk";
					s.appendChild(document.createTextNode("*"));
					if(slotName == "Jobbeskrivning") taskdiv.appendChild(s);
					write = slotName + " (minst 20 tecken): ";
				}else{
					write = slotName+":";
				}

				slotNameSpan.appendChild(document.createTextNode(write));				
				taskdiv.appendChild(slotNameSpan);				
				taskdiv.appendChild(document.createElement("br"));
			
				if(slotType == "textarea"){
					this.renderTextArea(xmlSlotNode,taskdiv,slotId,taskName,taskIndex);		
				}else if(slotType == "int"){
					this.renderInt(xmlSlotNode,taskdiv,slotId,taskName,taskIndex);		
				}else if(slotType == "string"){
					this.renderString(xmlSlotNode,taskdiv,slotId,taskName,taskIndex);		
				}else if(slotType == "array"){
					this.renderArray(xmlSlotNode,taskdiv,slotId,taskName,taskIndex);		
				}else if(slotType == "file"){
					this.renderFile(xmlSlotNode,taskdiv,slotId,taskName,taskIndex);		
				}else if(slotType == "label"){
					this.renderLabel(xmlSlotNode,taskdiv,slotId,taskName,taskIndex);
				}	
				taskdiv.appendChild(document.createElement("br"));
			}
		}
	}
};
																					
ProjectTaskRender.prototype.setOnBlurEventHandler = function setOnBlurEventHandler(formElement,xmlSlotNode,slotId,taskIndex,taskName){

  var str = "function() { projectHandler.updateSlot('" + xmlSlotNode.getAttribute("name") + "' , '" + slotId + "' , '" + taskName + "' , '" + taskIndex + "' , '" + xmlSlotNode.getAttribute("slotIndex") + "');}";
				
	if(window.execScript){
		window.execScript("xXx="+str);
		formElement.onblur = xXx;			 	    
	} else {
	   	var func = eval("window.xXx="+str);
		formElement.onblur = window.xXx;
		delete window.xXx;			 	    		    
	}
};

ProjectTaskRender.prototype.renderLabel = function renderLabel(xmlSlotNode,taskdiv,slotId,taskName,taskIndex){

	var hTag = document.createElement("h3");
	hTag.appendChild(document.createTextNode(xmlSlotNode.getAttribute("value")));
	taskdiv.appendChild(hTag);
	// taskdiv.appendChild(document.createElement("br"));
};


ProjectTaskRender.prototype.renderTextArea = function renderTextArea(xmlSlotNode,taskdiv,slotId,taskName,taskIndex){

	var formElementTextArea = document.createElement("textarea");
	
	formElementTextArea.setAttribute("id",slotId);
	formElementTextArea.setAttribute("name",slotId);
	formElementTextArea.setAttribute("cols","70");
	formElementTextArea.setAttribute("rows","5");
	formElementTextArea.appendChild(document.createTextNode(xmlSlotNode.getAttribute("value")));
	
	taskdiv.appendChild(formElementTextArea);
	this.setOnBlurEventHandler(formElementTextArea,xmlSlotNode,slotId,taskIndex,taskName);
};

/**
* Renders a input element for number input.
**/
ProjectTaskRender.prototype.renderInt = function renderInt(xmlSlotNode,taskdiv,slotId,taskName,taskIndex){

	var inputElement = document.createElement("input");
	inputElement.setAttribute("id",slotId);
	inputElement.setAttribute("name",slotId);
	inputElement.setAttribute("size","10");
	inputElement.setAttribute("value",xmlSlotNode.getAttribute("value"));
	taskdiv.appendChild(inputElement);
	this.setOnBlurEventHandler(inputElement,xmlSlotNode,slotId,taskIndex,taskName);
};

/**
* Renders a input element for text input.
**/
ProjectTaskRender.prototype.renderString = function renderString(xmlSlotNode,taskdiv,slotId,taskName,taskIndex){

	var inputElement = document.createElement("input");
	inputElement.setAttribute("id",slotId);
	inputElement.setAttribute("name",slotId);
	inputElement.setAttribute("size","10");
	inputElement.setAttribute("value",xmlSlotNode.getAttribute("value"));
	taskdiv.appendChild(inputElement);
	this.setOnBlurEventHandler(inputElement,xmlSlotNode,slotId,taskIndex,taskName);
};

/**
* Renders a form element for choise input, such as select,checkbox and radiobuttons.
**/
ProjectTaskRender.prototype.renderArray = function renderArray(xmlSlotNode,taskdiv,slotId,taskName,taskIndex){

	var options = new Array();
	var i; 
	var value; 
	
	options = xmlSlotNode.getAttribute("options").split(',');

	if(xmlSlotNode.getAttribute("selectbox")!=null){
	
			var wrapperTag = document.createElement("div");
			wrapperTag.className = "selectBoxWrapperDiv";
			
			value = trimString(xmlSlotNode.getAttribute("value"));
			var selectElement = document.createElement("select");
	
			selectElement.setAttribute("id",""+slotId);
		
			var optionsDummyElement = document.createElement("option");		
			//optionsDummyElement.setAttribute("value","0");
			//optionsDummyElement.appendChild(document.createTextNode("..."));
			//selectElement.appendChild(optionsDummyElement);		
	
			//loop the actual options
			for(i = 0 ; i != options.length ; i++){
		
				var optionsElement = document.createElement("option");		
				var optionValue = trimString(options[i]);
				optionsElement.setAttribute("value",optionValue);
				if(optionValue == value){
					optionsElement.setAttribute("selected","yes");
				}			
		
				optionsElement.appendChild(document.createTextNode(optionValue));
				selectElement.appendChild(optionsElement);		
		
				optionsElement = null;
			}
		
				
		 var str =  "function() { projectHandler.updateSlot('" + xmlSlotNode.getAttribute("name") + "' , '" + slotId + "' , '" + taskName + "' , '" + taskIndex + "' , '" + xmlSlotNode.getAttribute("slotIndex") + "');return true;}";
		    
		 if(window.execScript){
			window.execScript("tmp="+str);
			selectElement.onchange = tmp;			 	    
		 } else {
			var func = eval("window.tmp="+str);
			selectElement.onchange = window.tmp;
			delete window.tmp;			 	    		    
		 }		
				
												
		//this.setOnBlurEventHandler(selectElement,xmlSlotNode,slotId,taskIndex,taskName);
		wrapperTag.appendChild(selectElement);
		taskdiv.appendChild(wrapperTag);
		
	}else if(xmlSlotNode.getAttribute("checkbox")!=null){
	
		var values = new Array();
		values = xmlSlotNode.getAttribute("value").split(",");
	 
		//create hidden field for checked values.
		var checkedValue = document.createElement("input");
		checkedValue.setAttribute("type","hidden");
	
		checkedValue.setAttribute("name",slotId);
		checkedValue.setAttribute("id",slotId);
		checkedValue.setAttribute("value",xmlSlotNode.getAttribute("value"));
		
		taskdiv.appendChild(checkedValue);

		//table for 2 colums.		

		var table = document.createElement("table");
		table.setAttribute("border","0");
  		table.setAttribute("width","600");
  		table.cellPadding = 0;
	  	table.cellSpacing = 0;
		
		var tbody = document.createElement("tbody");

		var rows = Math.ceil(options.length/2);

		var numberwritten = -1;

		for(i = 0 ; i < rows ; i++){
		
			var tr = document.createElement("tr");
			
			var td1 = document.createElement("td");
			var td2 = document.createElement("td");
		
			//write colum data here.
			numberwritten++;
			if(numberwritten != options.length){
				this.writeCheckBox(xmlSlotNode,td1,slotId,taskName,taskIndex,numberwritten,options,values);
			}
		
			numberwritten++;
			if(numberwritten != options.length){
				this.writeCheckBox(xmlSlotNode,td2,slotId,taskName,taskIndex,numberwritten,options,values);
			}
			//write colum data here.
			tr.appendChild(td1);
			tr.appendChild(td2);
			
			tbody.appendChild(tr);
		}

		table.appendChild(tbody);
		taskdiv.appendChild(table);

		for(var v=0; v < values.length; v++) { // fixed foreach...
			i = 0;
			if (values[v]) {	
			for(var u = 0; u < options.length; u++) if (options[u]) {
				if(trimString(values[v]) == trimString(options[u])){
						var element = $(slotId + "_item_" + i);
						element.checked = true;
				}
			i++;
			}}
		}
	
	
	}else if(xmlSlotNode.getAttribute("radiobutton")!=null){
		
		value = xmlSlotNode.getAttribute("value");
		
		//loop the actual options
		for(i = 0 ; i != options.length ; i++){
			
			var itemSlotId = slotId + "_item_" + i;
			
			var cb = document.createElement("input");
			cb.setAttribute("type","radio");
			cb.id=""+itemSlotId;		
			cb.name=""+slotId;		
			cb.value=options[i];
			cb.className = "formbox";
			
			taskdiv.appendChild(cb);
			
			if(trimString(value) == trimString(options[i])){
				cb.checked = true;
			}
			
			str = "function() { projectHandler.updateSlot('" + xmlSlotNode.getAttribute("name") + "' , '" + itemSlotId + "' , '" + taskName + "' , '" + taskIndex + "' , '" + xmlSlotNode.getAttribute("slotIndex") + "');return true;}";
			
			if(window.execScript){
				window.execScript("xXx="+str);
				checkboxElement.attachEvent("onclick",xXx);  
	    	} else {
		    	funct = eval("window.xXx="+str);
				checkboxElement.onclick = window.xXx;
				delete window.xXx; 	    		    
	    	}
			
			var namespan = document.createElement("span");
			//namespan.className = "formtext";
			namespan.appendChild(document.createTextNode(trimString(options[i])));
			taskdiv.appendChild(namespan);
			
			if(i+1!=options.length){
				taskdiv.appendChild(document.createElement("br"));
			}
		}
	}
};

/**
* Renders a File input element.
**/
ProjectTaskRender.prototype.renderFile = function renderFile(xmlSlotNode,taskdiv,slotId,taskName,taskIndex){
		
	/*
	
		var iframe = document.createElement("iframe");

		iframe.setAttribute("src",contextPath+"/do/projects/loadFileupload?taskindex="+taskIndex);
		iframe.frameBorder = "0";
		iframe.width = "600px";
		iframe.height = "60px";
		iframe.scrolling = "auto";
	
		taskdiv.appendChild(iframe);
	
	*/
	
};
/**
*
*/
ProjectTaskRender.prototype.writeCheckBox = function writeCheckBox(xmlSlotNode,taskdiv,slotId,taskName,taskIndex,i,options,values){

		var itemSlotId = slotId + "_item_" + i;
	
		var checkboxElement = document.createElement("input");
		
		checkboxElement.setAttribute("type","checkbox");
		checkboxElement.setAttribute("id",itemSlotId);
		checkboxElement.setAttribute("name",itemSlotId);		
		checkboxElement.setAttribute("value",options[i]);
		
		//checkboxElement.setAttribute("border","0");
		
		checkboxElement.className = "formbox";
	
		taskdiv.appendChild(checkboxElement);
	
		var str =  "function() { projectHandler.updateSlot('" + xmlSlotNode.getAttribute("name") + "' , '" + itemSlotId + "' , '" + taskName + "' , '" + taskIndex + "' , '" + xmlSlotNode.getAttribute("slotIndex") + "','"+slotId+"');return true;}";
	    
	    if(window.execScript){
			window.execScript("tmp="+str);
			checkboxElement.onclick = tmp;			 	    
	    } else {
		    eval("window.tmp="+str);
			checkboxElement.onclick = window.tmp;
			delete window.tmp;	 	    		    
	    }

		var namespan = document.createElement("span");
		//namespan.className = "formtext";
		
		var optionname = trimString(options[i])
		
		if(optionname == "ByggaS\u00e4kert - Byggs\u00e4kerhetsf\u00f6rs\u00e4kring"){
			var ahrefTag = document.createElement("a");
			ahrefTag.setAttribute("target","new");
			ahrefTag.setAttribute("href",window["contextPath"]+"/info/byggasakert");
			ahrefTag.appendChild(document.createTextNode(optionname));
			namespan.appendChild(ahrefTag);	

		}else{
			namespan.appendChild(document.createTextNode(optionname));
		}
		
		taskdiv.appendChild(namespan);

		if(i+1!=options.length){
			taskdiv.appendChild(document.createElement("br"));
		}
};

