﻿function clsPlotCtrl()
{
    this.unqPlotID = 1;
}

clsPlotCtrl.prototype.initPlot = function()
{
    arrPlots[0] = new clsGraph();
    arrPlots[0].id = 0;
    this.sltPlot = document.getElementById("sltPlot");
    this.divCreate = document.getElementById("divCreate");
    this.divDelete = document.getElementById("divDelete");
    this.divEdit = document.getElementById("divEdit");
}

var ctrlPlot = new clsPlotCtrl();   //The Plots list control

clsPlotCtrl.prototype.render_Plots = function()
{
    for(var i=1; i< arrPlots.length; i++)
    {
        var elOpt = document.createElement('option');
        elOpt.id = arrPlots[i].id;
        elOpt.value = arrPlots[i].id;
        elOpt.text = arrPlots[i].title;
        try {
            this.sltPlot.add(elOpt, null); // standards compliant; doesn't work in IE
        }
        catch(ex) {
            this.sltPlot.add(elOpt); // IE only
        }
    }
    this.user_changedPlots();
}

clsPlotCtrl.prototype.user_changedPlots = function()
{
    var elOpts = this.sltPlot.options;
    var cnt_ = 0;
    for(var i=0;i<elOpts.length;i++)
    {    
        for(var j=0; j< arrPlots.length; j++)
        {
            if(arrPlots[j] != null && elOpts[i].value == arrPlots[j].id)
            {
                arrPlots[j].selected = elOpts[i].selected;
                if(arrPlots[j].selected == true)
                    cnt_++;
            }
        }        
    }
    if(cnt_ > 0)
    {
        if($("#divDelete").hasClass("ui-state-disabled") == true)
            $("#divDelete").removeClass("ui-state-disabled");
    }
    else
    {
        if($("#divDelete").hasClass("ui-state-disabled") == false)
            $("#divDelete").addClass("ui-state-disabled");
    }
    
    if(cnt_ == 1)
    {
        if($("#divEdit").hasClass("ui-state-disabled") == true)
            $("#divEdit").removeClass("ui-state-disabled");
        this.user_clickedPlots();
    }
    else
    {
        if($("#divEdit").hasClass("ui-state-disabled") == false)
            $("#divEdit").addClass("ui-state-disabled");
    }
    this.refreshButtonSet();
}

clsPlotCtrl.prototype.user_clickedPlots = function()
{
    var arrLoc = null;
    for(var i=1;i<arrPlots.length;i++)
    {
        if(arrPlots[i].selected == true)
        {
            if(arrPlots[i].plottype == "selection")
            {
                var stt_ = arrPlots[i].startDate;
                var edt_ = arrPlots[i].endDate;
                
                ctrlTime.SetDates(stt_,edt_);
                
                arrLoc = arrPlots[i].strLocations.split(',');
                for(var r=0;r<arrLocations.length;r++)
                {
                    arrLocations[r].selected = false;   
                }
                for(var j=0;j<arrLoc.length; j++)
                {
                    for(var k=0;k<arrLocations.length;k++)
                    {
                        if(arrLocations[k].id == arrLoc[j])
                        {
                            arrLocations[k].selected = true;
                            break;
                        }
                        
                    }
                }
                
                var arrSens = arrPlots[i].strSensorTypes.split(',');
                for(var s=0;s<arrSensorTypes.length;s++)
                {
                    arrSensorTypes[s].selected = false;  
                    if(arrSensorTypes[s].arrDepths != null)
                    {
                        for(var d=0;d<arrSensorTypes[s].arrDepths.length;d++)
                        {
                            arrSensorTypes[s].arrDepths[d].selected = false;
                        }
                    } 
                }
                
                for(var a=0;a<arrSens.length;a++)
                {
                    var arrValue = arrSens[a].split('_');
                    for(s=0;s<arrSensorTypes.length;s++)
                    {
                        if(arrValue[0] == arrSensorTypes[s].id)
                        {
                            if(arrValue.length > 1)
                            {
                                if(arrSensorTypes[s].arrDepths != null && arrValue[1] != undefined)
                                {
                                    arrSensorTypes[s].arrDepths[arrValue[1]].selected = true;
                                }
                            }
                            else
                                arrSensorTypes[s].selected = true;
                            break;
                        }
                    }
                }
    
            }
            else
            {
                ctrlDesc.Notice("Tag data could not edit here");
                return;
            }
            break;
        }
    }
    
    ctrlSiteLocation.refreshAll();
    ctrlSensorType.render_SensorTypes();
    ctrlMap.OnClick_location(arrLoc[0]);
}


clsPlotCtrl.prototype.CleanUp_Plots_memory = function()
{
    for(var i=0; i < arrPlots.length ; i++)
    {
        delete arrPlots[i].id;
        delete arrPlots[i].title;
        delete arrPlots[i].createTime;
        delete arrPlots[i].strLocations
        delete arrPlots[i].strSensorTypes;
        delete arrPlots[i].startTime;
        delete arrPlots[i].endTime;
    
        arrPlots[i].id = null;
        arrPlots[i].title = null;
        arrPlots[i].createTime = null;
        arrPlots[i].arrLocations= null;
        arrPlots[i].arrSensorTypes = null;
        arrPlots[i].startTime = null;
        arrPlots[i].endTime = null;    
    }
}

clsPlotCtrl.prototype.cleanUpLists = function()
{
    var length = this.sltPlot.length;
    for(var i=length-1; 0<=i;i--)
    {
        this.sltPlot.options[i] = null;
        this.sltPlot.remove(i);
    }
    
    this.sltPlot = null;
    this.sltPlot = document.getElementById("sltPlot"); 
}

clsPlotCtrl.prototype.GetCurrentTime = function() 
{
    var now = new Date();
    var hours = now.getHours();
    var minutes = now.getMinutes();
    var seconds = now.getSeconds()
    var timeValue = "" + ((hours >12) ? hours -12 :hours)
    if (timeValue == "0") timeValue = 12;
    timeValue += ((minutes < 10) ? ":0" : ":") + minutes
    timeValue += ((seconds < 10) ? ":0" : ":") + seconds
    timeValue += (hours >= 12) ? " P.M." : " A.M."
    return timeValue;
}

clsPlotCtrl.prototype.user_DeletePlots = function()
{
    if(this.sltPlot.value == "")
    {
        ctrlDesc.EffectedNotice("Click the selection or Tag first to be Deleted");
        return;
    }
    for(var i=arrPlots.length-1; i >= 0;i--)
    {
        if(arrPlots[i].selected == true)
        {
            ctrlGraph.DeleteGraphItems(arrPlots[i].id);
            arrPlots.splice(i, 1);
            this.sltPlot.remove(i);
        }
    }
    this.cleanUpLists();
    this.render_Plots();
}

clsPlotCtrl.prototype.user_EditPlots = function()
{
    if(!ctrlGraph.ClickedCheckReady())
    {
        return;
    }
    
    if(this.sltPlot.value == "")
    {
        ctrlDesc.EffectedNotice("Click the selection or Tag first to be UPDATED");
        return;
    }
     
    for(var i=1; i<arrPlots.length;i++)
    {
        if(arrPlots[i].id == this.sltPlot.value)
        {
            if(arrPlots[i].plottype == "selection")
            {
                arrPlots[i].startDate = ctrlTime.start;
                arrPlots[i].endDate = ctrlTime.end;
                arrPlots[i].strLocations = "";
                arrPlots[i].strSensorTypes = "";
                for(var j=0; j < arrLocations.length;j++)
                {
                    if(arrLocations[j].selected)
                    {
                        arrPlots[i].strLocations += arrLocations[j].id + ",";
                    }
                }
                arrPlots[i].strLocations = arrPlots[i].strLocations.substr(0,arrPlots[i].strLocations.length-1);
                
                var strSensNames = "";
                
                for(j=0; j < arrSensorTypes.length;j++)
                {
                    if(arrSensorTypes[j].selected)
                    {
                        arrPlots[i].strSensorTypes += arrSensorTypes[j].id + ",";
                        strSensNames += arrSensorTypes[j].name + ",";
                    }
                    else
                    {
                        if(arrSensorTypes[j].arrDepths != null && arrSensorTypes[j].arrDepths != undefined)
                        {
                            for(var d=0;d<arrSensorTypes[j].arrDepths.length;d++)
                            {   
                                if(arrSensorTypes[j].arrDepths[d].selected)
                                {
                                    arrPlots[i].strSensorTypes += arrSensorTypes[j].id + "_" + d + ",";
                                    strSensNames += arrSensorTypes[j].name + "Depth" + (d + 1) + ",";
                                }
                            }
                        }
                    }
                }
    
                arrPlots[i].strSensorTypes = arrPlots[i].strSensorTypes.substr(0,arrPlots[i].strSensorTypes.length-1);
                arrPlots[i].title = "#" + (arrPlots[i].id + 1) + "::"+ strSensNames.substr(0,strSensNames.length-1) + "::" + arrPlots[i].strLocations;
                break;
            }
            else
            {
                ctrlDesc.Notice("Tag data could not be updated");
                return;
            }
        }
    }
    this.cleanUpLists();
    this.render_Plots();
    ctrlGraph.EditGraphItems();
}

clsPlotCtrl.prototype.user_CreatePlots = function()
{
    if(!ctrlGraph.ClickedCheckReady())
    {
        return;
    }
        
    var num = arrPlots.length;
    var plotID = this.GeneratePlot(num);
    
    this.cleanUpLists();
    this.render_Plots();
    
    ctrlGraph.CreateGraphItems(plotID);
    ctrlGraph.render_PlotTree();
    
    return plotID;
}

clsPlotCtrl.prototype.GeneratePlot = function(num)
{
    if(num != 0)
    {
        arrPlots[num] = new clsPlots();
        arrPlots[num].id = this.unqPlotID++;
    }
    arrPlots[num].createTime = this.GetCurrentTime();
    arrPlots[num].startDate = ctrlTime.start;
    arrPlots[num].endDate = ctrlTime.end;
    arrPlots[num].strLocations = "";
    arrPlots[num].strSensorTypes = "";
    arrPlots[num].plottype = "selection";
    
    for(var i=0; i < arrLocations.length;i++)
    {
        if(arrLocations[i].selected)
        {
            arrPlots[num].strLocations += arrLocations[i].id + ",";
        }
    }
    
    arrPlots[num].strLocations = arrPlots[num].strLocations.substr(0,arrPlots[num].strLocations.length-1);
    
    var strSensNames = "";
    for(i=0; i < arrSensorTypes.length;i++)
    {
        if(arrSensorTypes[i].selected)
        {
            arrPlots[num].strSensorTypes += arrSensorTypes[i].id + ",";
            strSensNames += arrSensorTypes[i].name + ",";
        }
        else
        {
            if(arrSensorTypes[i].arrDepths != null && arrSensorTypes[i].arrDepths != undefined)
            {
                for(var d=0;d<arrSensorTypes[i].arrDepths.length;d++)
                {   
                    if(arrSensorTypes[i].arrDepths[d].selected)
                    {
                        arrPlots[num].strSensorTypes += arrSensorTypes[i].id + "_" + d + ",";
                        strSensNames += arrSensorTypes[i].name + "Depth" + (parseInt(d) + 1) + ",";
                    }
                }
            }
        }
    }
    arrPlots[num].strSensorTypes = arrPlots[num].strSensorTypes.substr(0,arrPlots[num].strSensorTypes.length-1);
   
    arrPlots[num].title = "#" + (arrPlots[num].id) + "::"+ strSensNames.substr(0,strSensNames.length-1) + "::" + arrPlots[num].strLocations;
    
    return arrPlots[num].id;
}

clsPlotCtrl.prototype.RemoveGraphInPlot = function(plotID, sensID) {
    for (var i = arrPlots.length-1 ; i >= 1 ; i--)  {
        if (arrPlots[i].id == plotID) 
        {
            var arr = arrPlots[i].strSensorTypes.split(',');

            var sensStr = '';
            var strSensNames = "";
            var aSs_ = null;
            for (var j = 0; j < arr.length; j++) 
            {
                if (arr[j] != sensID) {
                    sensStr += arr[j] + ',';
                    aSs_ = arr[j].split('_');
                    for (var s = 0; s < arrSensorTypes.length; s++) 
                    {
                        if(aSs_.length == 1 && arrSensorTypes[s].id == arr[j])
                        {
                            strSensNames += arrSensorTypes[s].name + ",";
                        }
                        else if(aSs_.length == 2 && arrSensorTypes[s].id == aSs_[0])
                        {
                            strSensNames += arrSensorTypes[s].name + ' Depth' + (parseInt(aSs_[1]) + 1) + ',';
                        }
                    }
                    
                }
            }

            if (sensStr == '') {
                arrPlots.splice(i, 1);
                this.sltPlot.remove(i);
            }
            else {
                arrPlots[i].strSensorTypes = sensStr.substr(0, sensStr.length - 1);
                arrPlots[i].title = "#" + (arrPlots[i].id) + "::" + strSensNames.substr(0, strSensNames.length - 1) + "::" + arrPlots[i].strLocations;
            }
            this.cleanUpLists();
            this.render_Plots();
            return;
        }
    }
}

clsPlotCtrl.prototype.RemoveTagInPlot = function(plotID) {
    for (var i = arrPlots.length-1 ; i >= 1 ; i--) {
        //alert(arrPlots[i].id + ' ' + plotID);
        if (arrPlots[i].id == plotID) {
            var bFlag = false;
            for (var g = 0; g < arrGraphs.length; g++) {
                if (arrGraphs[g].plotID == plotID)
                    bFlag = true;
            }
            if (bFlag == false) {
                arrPlots.splice(i, 1);
                this.sltPlot.remove(i);
                this.cleanUpLists();
                this.render_Plots();
            }
            return;
        }
    }
}

clsPlotCtrl.prototype.CreateTags = function(tagid)
{
    var num = arrPlots.length;
    if (num == 0)
        num = 1;

    var cnt = 0;
    arrPlots[num] = new clsPlots();
    arrPlots[num].id = this.unqPlotID++;
    arrPlots[num].createTime = this.GetCurrentTime();
    arrPlots[num].strLocations = "";
    arrPlots[num].strSensorTypes = tagid;
    arrPlots[num].plottype = "tag";

    arrPlots[num].strSensNames = "TAGDATA";
    var tagTitle = "";
    for (var i = 0; i < arrTags.length; i++)
    {
        if (arrTags[i].tagid == tagid)
        {
            tagTitle = arrTags[i].title;
            break;
        }
    }

    arrPlots[num].title = "#" + (arrPlots[num].id) + "::" + "TAG" + "::" + tagTitle;

    this.cleanUpLists();
    this.render_Plots();

    ctrlGraph.CreateTagItems(arrPlots[num].id, tagid);
    ctrlGraph.render_PlotTree();
}


clsPlotCtrl.prototype.checkValid = function()
{
    var flgLoc = false;
    var flgSens = false;
    for(var i=0; i < arrLocations.length;i++)
    {
        if(arrLocations[i].selected)
        {
            flgLoc = true;
            break;
        }
    }
    
    for(i=0; i < arrSensorTypes.length;i++)
    {
        if(arrSensorTypes[i].selected)
        {
            flgSens = true;
            break;
        }
        else
        {
            if(arrSensorTypes[i].arrDepths != null && arrSensorTypes[i].arrDepths != undefined)
            {
                for(var d=0;d<arrSensorTypes[i].arrDepths.length;d++)
                {   
                    if(arrSensorTypes[i].arrDepths[d].selected)
                    {
                        flgSens = true;
                        break;
                    }
                }
            }
        }
    }
    if(flgSens && flgLoc)
        return true;
    else    
    {
        return false;
    }
}
clsPlotCtrl.prototype.refreshButtonSet = function()
{
    $(".fg-button:not(.ui-state-disabled)")
	.hover(
		function(){ 
			$(this).addClass("ui-state-hover"); 
		},
		function(){ 
			$(this).removeClass("ui-state-hover"); 
		}
	)
	.mousedown(function(){
			$(this).parents('.fg-buttonset-single:first').find(".fg-button.ui-state-active").removeClass("ui-state-active");
			if( $(this).is('.ui-state-active.fg-button-toggleable, .fg-buttonset-multi .ui-state-active') ){ $(this).removeClass("ui-state-active"); }
			else { $(this).addClass("ui-state-active"); }	
	})
	.mouseup(function(){
		if(! $(this).is('.fg-button-toggleable, .fg-buttonset-single .fg-button,  .fg-buttonset-multi .fg-button') ){
			$(this).removeClass("ui-state-active");
		}
	});
}