
//Task Manager - used to keep track of tasks - maximize/minimize, open, etc.

function IMS2_TaskManager(){
	var self = this;
	
	this.tasks = new Array();
	this.currentTask = 0;
	
	function GetContainingDiv(){
		return(document.getElementById("tabcont_tasks"));
    }
    this.GetContainingDiv = GetContainingDiv;
	
	//add/open task to UI
	function Add(type){
		var id = 0;
		var div = self.GetContainingDiv();
		
		IMS2_Status.ShowStatus(parseInt(findPos(div)[1]),parseInt(findPos(div)[0]),"Initializing Task...");
		
        if(self.tasks.length > 0)
			id = parseInt(self.tasks[self.tasks.length - 1].id) + 1;
		var task;
		switch (type){
//			case "upload":
//				task = new IMS2_TaskUpload(id);
//				break;
			case "gaz":
				task = new IMS2_TaskGaz(id);
				break;
			case "parc":
				task = new IMS2_TaskParcelSearch(id);
				break;	
//			case "opt":
//				if(self.HasType(type)){
//					task = self.HasType(type);
//					id = task.id;
//					document.getElementById("_task_" + id).innerHTML = task.Render();
//					document.getElementById("_task_" + id).style.display = "block";
//					task.isActive = false;
//					self.ActivateTask(id);
//					IMS2_Status.HideStatus();
//					return;
//				}else{	
//					task = new IMS2_TaskOptions(id);
//				}
//				break;
			case "query":
				task = new IMS2_TaskQuery(id);
				break;
//			case "aoi":
//				task = new IMS2_TaskAOI(id);
//				break;
//			case "loc":
//				task = new IMS2_TaskLocate(id);
//				break;
//			case "imp":
//				task = new IMS2_TaskImpact(id);
//				break;
//			case "analysis":
//				task = new IMS2_TaskAnalysis(id);
//				break;
//			case "bookmarks":
//				if(self.HasType(type)){
//					task = self.HasType(type);
//					id = task.id;
//					document.getElementById("_task_" + id).innerHTML = task.Render();
//					document.getElementById("_task_" + id).style.display = "block";
//					task.isActive = false;
//					self.ActivateTask(id);
//					IMS2_Status.HideStatus();				
//					return;
//				}else{
//					task = IMS2_Bookmarks;
//					task.id = id;
//				}
//				break;
//			case "downloads":
//				if(self.HasType(type)){
//					task = self.HasType(type);
//					id = task.id;
//					document.getElementById("_task_" + id).innerHTML = task.Render();
//					document.getElementById("_task_" + id).style.display = "block";
//					task.isActive = false;
//					self.ActivateTask(id);
//					IMS2_Status.HideStatus();				
//					return;
//				}else{
//					task = IMS2_Downloads;
//					task.id = id;
//				}
//				break;
//			case "aois":
//				if(self.HasType(type)){
//					task = self.HasType(type);
//					id = task.id;
//					document.getElementById("_task_" + id).innerHTML = task.Render();
//					document.getElementById("_task_" + id).style.display = "block";
//					task.isActive = false;
//					self.ActivateTask(id);
//					IMS2_Status.HideStatus();				
//					return;
//				}else{
//					task = IMS2_AOIs;
//					task.id = id;
//				}
//				break;
//			case "impacts":
//				if(self.HasType(type)){
//					task = self.HasType(type);
//					id = task.id;
//					document.getElementById("_task_" + id).innerHTML = task.Render();
//					document.getElementById("_task_" + id).style.display = "block";
//					task.isActive = false;
//					self.ActivateTask(id);	
//					IMS2_Status.HideStatus();			
//					return;
//				}else{
//					task = IMS2_Impacts;
//					task.id = id;
//				}
//				break;
//			case "reports":
//				if(self.HasType(type)){
//					task = self.HasType(type);
//					id = task.id;
//					document.getElementById("_task_" + id).innerHTML = task.Render();
//					document.getElementById("_task_" + id).style.display = "block";
//					task.isActive = false;
//					self.ActivateTask(id);	
//					IMS2_Status.HideStatus();			
//					return;
//				}else{
//					task = IMS2_Analyses;
//					task.id = id;
//				}
//				break;	
		}		
        if( (null != task) && (!self.Get(id)) ){
            self.tasks[self.tasks.length] = task;
			task.currentIndex = 1;
			
            if( (div) && (!document.getElementById(this.id)) ){	
				var html = "";
				html += "<div id=\"_task_" + id + "\" style=\"background-color:#ffffff;\">";
				html += task.Render();
				html += "</div>";
				div.innerHTML += html;
//                if(task.type == "opt")
//					task.PreloadSettings();
				//if(task.type == "aoi")
					//task.SetAOI();	
            }			
		}
		self.ActivateTask(id);
		IMS2_Status.HideStatus();
    }
    this.Add = Add;	
    
    function Contains(task){
        return(false);
    }
    this.Contains = Contains;
    
    
    function Get(id){
        var obj = null;
        for(var i = 0; i < self.tasks.length; i++){
            var cur = self.tasks[i];
            if((null != cur) && cur.id == id){
                obj = cur;
                break;
            }
        }
        return(obj);
    }
    this.Get = Get;    
    
    function indexOf(id){
		for(var i = 0; i < self.tasks.length; i++){
            var cur = self.tasks[i];
            if((null != cur) && cur.id == id){
                return(i);
                break;
            }
        }
        return(-1);
    }
    this.indexOf = indexOf;
    
    function HasType(type){
		var obj = null;
		for(var i = 0; i < self.tasks.length; i++){
            var cur = self.tasks[i];
            if((null != cur) && cur.type == type){
                obj = cur;
                break;
            }
        }
        return(obj);
    }
    this.HasType = HasType;
    
    //highlight and expand the task
    function ActivateTask(id){
    	activateSideTab("tasks");
    	
		var task = self.Get(self.currentTask);
		if( task && task.isActive )
			task.ToggleInfoDisplay();
		
		var task2 = self.Get(id);
		if(task2){
			task2.ToggleInfoDisplay();
		}
		
		self.currentTask = id;
		
//		if(task.type == "aoi")
//			currentAOI = id;
    }
    this.ActivateTask = ActivateTask;
    
    function Remove(id){
        var i = self.indexOf(id);
        if( i >= 0 ){
			if( self.tasks.length > 1 ){
				
				if( i == (self.tasks.length - 1) ){
					self.ActivateTask(self.tasks[i - 1].id);
				}else{
					self.ActivateTask(self.tasks[i + 1].id);
				}
			}
			
			var div = document.getElementById("_task_" + id);
			div.style["display"] = "none";
		}
    }
    this.Remove = Remove;
	
}

//get the screen coordinates of an element
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function GetSelectValues(id){
	var val = "";
	var sel = document.getElementById(id);
	for (var i=0; i < sel.options.length; i++)
	{
		if (sel.options[i].selected){
			val += sel.options[i].value + ";";
		}
	}
	//alert(val);
	return val;
}

function GetUserLayers(id){
	var inp = document.getElementById(id);
	//if(inp.options.length > 0)
		//return;
	var maps = IMS2_MapManager.maps;
	var mapctl = IMS2_MapManager.GetMap("MapControl1");
	var layers = mapctl.layers.layers;
	inp.options.length = 0;
	for(var i = 0; i < layers.length; i++){
		//don't include image or acetate layers
		if( (layers[i].type != "Image") || (layers[i].type != "Acetate" ) ){
			inp.options[inp.options.length] = new Option(layers[i].name,layers[i].name);
			inp.options[inp.options.length - 1].id = id + "_opt_" + layers[i].name;
		}	
	}
}

var IMS2_Tasks = new IMS2_TaskManager();
var currentAOI = -1;