// *********** drag drop handler functions


function getCurrentItemIndex(item){

	var itemIndex = 0;
	var contor = 0;

	if(item){
		var innerSpans = item.getElementsByTagName('span');
	
	
		if(innerSpans.length){
			var indexIdPattern = new RegExp('^([a-zA-Z]+)_index_([0-9]+)$');
		
			for(var i = 0 ;i < innerSpans.length ; i++){
				if(indexIdPattern.exec(innerSpans[i].id) && !contor){
					taskIndex = parseInt(innerSpans[i].id.replace(indexIdPattern,'$2'));
					contor++;
				}
			}
		}	
	}	

	return taskIndex;
}



function setCurrentItemIndex(item,index){
	var contor = 0;
	
	if(item){
		var innerSpans = item.getElementsByTagName('span');
	
	
		if(innerSpans.length){
			var indexIdPattern = new RegExp('^([a-zA-Z]+_index_)[0-9]+$');
		
			for(var i = 0 ;i < innerSpans.length ; i++){
				if(indexIdPattern.exec(innerSpans[i].id) && !contor){
					innerSpans[i].id = innerSpans[i].id.replace(indexIdPattern,'$1'+index);
					innerSpans[i].innerHTML = '&nbsp;'+index+'&nbsp;';
					contor++;
				}
			}
		}	
	}	
}

function refreshSourceIndexes(sourceID,currentItem,forTasks){
	var source = $(sourceID);
	var currentItemIndex = getCurrentItemIndex(currentItem);
	var contor = 0;

	
	if(source){
		var sourceSpans = source.getElementsByTagName('span');
		
		if(forTasks){
			var indexIdPattern = new RegExp('^(task_index_)([0-9]+)$');
		}else{
			var indexIdPattern = new RegExp('^(milestone_index_)([0-9]+)$');			
		}
		
		if(sourceSpans.length){
			for(var i = 0 ;i < sourceSpans.length ; i++){

				if(indexIdPattern.exec(sourceSpans[i].id)){
					var sourceSpanIndex = parseInt(sourceSpans[i].id.replace(indexIdPattern,'$2'));
					
					if(sourceSpanIndex > currentItemIndex){
						
						sourceSpans[i].id = sourceSpans[i].id.replace(indexIdPattern,'$1' + (sourceSpanIndex - 1));
						sourceSpans[i].innerHTML = '&nbsp;'+ (sourceSpanIndex - 1)+'&nbsp;';
					}
				}
			}
		}
		
	}
}


function refreshTargetIndexes(targetID,currentItem,previousTask,forTasks){
	var targetMilestone = $(targetID);
	
	if(previousTask){
		var currentItemIndex = getCurrentItemIndex(previousTask);
	}else{
		var currentItemIndex = 0;
	}

		
	if(targetMilestone){
		var targetSpans = targetMilestone.getElementsByTagName('span');
		
		if(forTasks){
			var indexIdPattern = new RegExp('^(task_index_)([0-9]+)$');
		}else{
			var indexIdPattern = new RegExp('^(milestone_index_)([0-9]+)$');
		}
		
		if(targetSpans.length){
			for(var i = 0 ;i < targetSpans.length ; i++){

				if(indexIdPattern.exec(targetSpans[i].id)){
					var targetSpanIndex = parseInt(targetSpans[i].id.replace(indexIdPattern,'$2'));
					if(targetSpanIndex > currentItemIndex){
						
						targetSpans[i].id = targetSpans[i].id.replace(indexIdPattern,'$1' + (targetSpanIndex + 1));
						targetSpans[i].innerHTML = '&nbsp;'+ (targetSpanIndex + 1) + '&nbsp;';
					}
				}
			}
		}
		
	}
	
	setCurrentItemIndex(currentItem,currentItemIndex+1);

}


function reorderList(sourceMilestoneId, dragGroup, targetMilestoneId, previousTask){

	var task = dragGroup.element;
	var taskCurrentIndex = getCurrentItemIndex(task);
	var taskIdPattern = new RegExp('^task_[0-9]+$')
	
	if(previousTask){
		if(taskIdPattern.exec(previousTask.id)){
			var previousTaskId = previousTask.id.replace('task_','');
		}else{
			var previousTaskId = 0;
		}
	}else{
		var previousTaskId = 0;
	}


	var XMLHTTPConn = new XML_HTTP_Conn();
	var taskId = task.id.replace('task_','');
	var projectId = $('projectId').value;
	
	var vars = "action=project.moveTaskExe";
	vars += "&taskId=" + taskId;
	vars += "&sourceMilestoneId=" + sourceMilestoneId;	
	vars += "&targetMilestoneId=" + targetMilestoneId;	
	vars += "&previousTaskId=" + previousTaskId;		
	vars += "&taskCurrentIndex=" + taskCurrentIndex;		
	vars += "&projectId=" + projectId;		
	
	
	//alert(groupName)
	//alert(userName)
	
	XMLHTTPConn.connect(controllerURL, "POST", vars,
	      function(xh) {
		
	        if(xh.responseText == 'null') {
	           // handler
	           return;
	        }
	         
		      var response = xh.responseText.parseJSON();
		      	//alert("Received response");
				//alert(xh.responseText)
				//check if request has succeeded
				
		      if(!response.moved){
		      
		      		alert("Task couldn't be moved!");
		      		
					if(dragGroup.nextElement){
						dragGroup.elementParent.insertBefore(dragGroup.element,dragGroup.nextElement);
					}else{
						dragGroup.elementParent.appendChild(dragGroup.element);
					}
		
					if(dragGroup.factory.dropSnapGuide.parentNode){
						dragGroup.factory.dropSnapGuide.parentNode.removeChild(dragGroup.factory.dropSnapGuide);
					}

					window.location.reload(true);
			  }else{

				if(sourceMilestoneId.indexOf('standalone')== -1){
					sourceMilestoneId = 'milestone_'+sourceMilestoneId;
				}
				
				if(targetMilestoneId.indexOf('standalone')== -1){
					targetMilestoneId = 'milestone_'+targetMilestoneId;
				}
				
				refreshSourceIndexes(sourceMilestoneId,task,true);

				if(previousTaskId){
					refreshTargetIndexes(targetMilestoneId,task,previousTask,true);
				}else{
					refreshTargetIndexes(targetMilestoneId,task,null,true);
				}
				
				dragGroup.elementParent = dragGroup.factory.currentTarget;			  	
			  }
			   
		 }
	   );
			
	
}

function reorderMilestonesList(dragGroup, previousMilestone){

	var milestone = dragGroup.element;
	var milestoneCurrentIndex = getCurrentItemIndex(milestone);
	var milestoneIdPattern = new RegExp('^milestone_[0-9]+$')
	
	if(previousMilestone){
		if(milestoneIdPattern.exec(previousMilestone.id)){
			var previousMilestoneId = previousMilestone.id.replace('milestone_','');
		}else{
			var previousMilestoneId = 0;
		}
	}else{
		var previousMilestoneId = 0;
	}

	//alert(previousMilestoneId)
	var XMLHTTPConn = new XML_HTTP_Conn();
	var milestoneId = milestone.id.replace('milestone_','');
	var projectId = $('projectId').value;
	
	var vars = "action=project.moveMilestoneExe";
	vars += "&milestoneId=" + milestoneId;
	vars += "&previousMilestoneId=" + previousMilestoneId;		
	vars += "&milestoneCurrentIndex=" + milestoneCurrentIndex;		
	vars += "&projectId=" + projectId;			
	
	
	//alert(groupName)
	//alert(userName)
	
	XMLHTTPConn.connect(controllerURL, "POST", vars,
	      function(xh) {
		
	        if(xh.responseText == 'null') {
	           // handler
	           return;
	        }
	         
		      var response = xh.responseText.parseJSON();
		      	//alert("Received response");
				//alert(xh.responseText)
				//check if request has succeeded
				
		      if(!response.moved){
		      
		      		alert("Milestone couldn't be moved!");
		      		
					if(dragGroup.nextElement){
						dragGroup.elementParent.insertBefore(dragGroup.element,dragGroup.nextElement);
					}else{
						dragGroup.elementParent.appendChild(dragGroup.element);
					}
		
					if(dragGroup.factory.dropSnapGuide.parentNode){
						dragGroup.factory.dropSnapGuide.parentNode.removeChild(dragGroup.factory.dropSnapGuide);
					}
					
					window.location.reload(true);
			  }else{

				var	sourceMilestoneId = 'milestones_list';
				var	targetMilestoneId = 'milestones_list';
				
				refreshSourceIndexes(sourceMilestoneId,milestone,false);

				if(previousMilestone){
					refreshTargetIndexes(targetMilestoneId,milestone,previousMilestone,false);
				}else{
					refreshTargetIndexes(targetMilestoneId,milestone,null,false);
				}
				
				
				dragGroup.elementParent = dragGroup.factory.currentTarget;			  	
			  }
			   
		 }
	   );
			
	
}



function reorderStatusesList(dragGroup, previousStatus){

	var status = dragGroup.element;
	var statusIdPattern = new RegExp('^status_[0-9]+$')
	
	if(previousStatus){
		if(statusIdPattern.exec(previousStatus.id)){
			var previousStatusId = previousStatus.id.replace('status_','');
		}else{
			var previousStatusId = 0;
		}
	}else{
		var previousStatusId = 0;
	}

	//alert(previousMilestoneId)
	var XMLHTTPConn = new XML_HTTP_Conn();
	var statusId = status.id.replace('status_','');
	var projectId = $('projectId').value;
	
	var vars = "action=project.moveTaskStatusExe";
	vars += "&statusId=" + statusId;
	vars += "&previousStatusId=" + previousStatusId;		
//	vars += "&milestoneCurrentIndex=" + milestoneCurrentIndex;		
	vars += "&projectId=" + projectId;			
	
	//alert(vars)
	//alert(groupName)
	//alert(userName)
	
	XMLHTTPConn.connect(controllerURL, "POST", vars,
	      function(xh) {
		
	        if(xh.responseText == 'null') {
	           // handler
	           return;
	        }
	         
		      var response = xh.responseText.parseJSON();
		      	//alert("Received response");
				//alert(xh.responseText)
				//check if request has succeeded
				
		      if(!response.moved){
		      
		      		alert("Status couldn't be moved!");
		      		
					if(dragGroup.nextElement){
						dragGroup.elementParent.insertBefore(dragGroup.element,dragGroup.nextElement);
					}else{
						dragGroup.elementParent.appendChild(dragGroup.element);
					}
		
					if(dragGroup.factory.dropSnapGuide.parentNode){
						dragGroup.factory.dropSnapGuide.parentNode.removeChild(dragGroup.factory.dropSnapGuide);
					}
					
					window.location.reload(true);
			  }
			   
		 }
	   );
			
	
}


