if (typeof(SnowData) == "undefined") {
    var SnowData = {};
}

SnowData = function(submittedDate, lowerDepth, upperDepth) {
    this.submitted = submittedDate;
    this.lowerDepth = lowerDepth;
    this.upperDepth = upperDepth;

    var submitDateObject = submittedDate.substring(0, 10);
    var aDate = submitDateObject.split('.');
    this.date = new Date();
    this.date.setFullYear(aDate[2], aDate[1]-1, aDate[0]);
};

SnowData.prototype = {

    equals: function(aSnowData) {
        return (this.getLowerDepth() == aSnowData.getLowerDepth() && this.getUpperDepth() == aSnowData.getUpperDepth());
    },

    sameMonth: function(aSnowData) {
        return (this.getMonth() == aSnowData.getMonth());
    },

    sameYear: function(aSnowData) {
        return (this.getYear() == aSnowData.getYear());
    },

    sameYearMonth: function(aSnowData) {
        return (this.sameYear(aSnowData) && this.sameMonth(aSnowData));
    },

    getDate: function() {
        return this.date;
    },

    getDay: function() {
        var days = ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"];
        return days[this.getDate().getDay()];
    },

    getMonth: function() {
        var months = ["January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
        return months[this.getDate().getMonth()];
    },

    getYear: function() {
        return this.getDate().getFullYear();
    },

    getFormattedDate: function() {
        return this.getDay() + " " + this.getDate().toLocaleDateString();
    },

    getUpperDepth: function() {
        return this.upperDepth;
    },

    getLowerDepth: function() {
        return this.lowerDepth;
    },

    update: function(submittedDate, lowerDepth, upperDepth) {

        if (lowerDepth != null) {
            this.lowerDepth = lowerDepth;
        }
        if (upperDepth != null) {
            this.upperDepth = upperDepth;
        }
        if (submittedDate != null) {
            this.submitted = submittedDate;
            var submitDateObject = submittedDate.substring(0, 10);
            var aDate = submitDateObject.split('.');
            this.date = new Date();
            this.date.setFullYear(aDate[2], aDate[1], aDate[0]);
        }
    }

};



var SnowReportManager = function(setting) {
    this.reports = [];
    this.container = "";
    if (typeof (FusionCharts) != "undefined") {
        this.chart = new FusionCharts("/other_files/Resources/FusionCharts/FCF_MSLine.swf", "ChId1", "680", "400");
    }
    this.init(setting);
};

SnowReportManager.prototype = {

    init: function(setting) {
        this.reports = setting.list;
        //console.log(this.reports);
        this.container = setting.container;
    },
    seriliseToXML: function(setting) {

        if (typeof (setting) == "undefined") {var setting = false;}
        var reports = setting.list || this.reports;
        var title = setting.title || "";

        var output = "<?xml version='1.0' encoding='UTF-8'?>";
        var output = "<?xml version='1.0' encoding='UTF-8'?>";
        output += "<graph numdivlines='4'numVDivLines='10' divLineAlpha='30' showValues='0' showAnchors='0' caption='"+title+"' xAxisName='Months' yAxisName='Snow Depth'";
        output += "rotateNames='1' decimalPrecision='1' showAlternateHGridColor='1' yAxisMinValue='500' shadowAlpha='50'>";
        //categories
        output += "<categories>";
        var size = reports.length;
        for (var x = 0; x < size; x++) { 
            var label= reports[x].getMonth()+" "+reports[x].getYear();
            if (x!= 0 && reports[x].sameYearMonth(reports[x-1])) { label = "";}
            output += "<category Name='"+label+"'/>"; 
        }
        output += "</categories>";
        //dataset upper depth
        output += "<dataset seriesName='Upper Depth' color='A66EDD' anchorBorderColor='A66EDD' anchorRadius='4'>";
        for (var x = 0; x < size; x++) { output += "<set value='" + reports[x].getUpperDepth()+ "'/>"; }
        output += "</dataset>";
        //dataset lower depth
        output += "<dataset seriesName='Lower Depth' color='F6BD0F' anchorBorderColor='F6BD0F' anchorRadius='4'>";
        for (var x = 0; x < size; x++) { output += "<set value='" + reports[x].getLowerDepth()+ "'/>"; }
        output += "</dataset>";
        output += "</graph>";
        return output;
    },

    renderEachYear:function () {
        var arr = this.reports;
        var size = arr.length;
        if (size === 0) {return false;}
        var firstYear = arr[0].getYear();
        var lastYear  = arr[size-1].getYear();
        var x = 0;

        for (var currentYear= firstYear; currentYear<lastYear; currentYear++)
        {
            var endDate = new Date();
            endDate.setFullYear(currentYear+1, 04,01);
            var resultSet = [];
            var container = this.container+"-"+currentYear;

            var newElement = jQuery("<div id='"+this.container+"-"+currentYear+"'></div>");
            jQuery("#"+this.container).append(newElement);

            for ( ;x<size; x++) {
                if (arr[x].getDate() >= endDate ) {break;}
                resultSet.push(arr[x]);
            }
           this.render({list:resultSet, container:this.container+"-"+currentYear, title:"Snow Report for "+currentYear+"-"+(currentYear+1)} );
        }
   
    },

    render: function(setting) {
        if (typeof (setting) == "undefined") {var setting = false;}
        var data = this.seriliseToXML(setting);
        var container = setting.container || this.container;
        var newChart = new FusionCharts("/other_files/Resources/FusionCharts/FCF_MSLine.swf", "ChId1", "680", "400");
        if (data.length > 0) {
            newChart.setDataXML(data);
            newChart.render(container);
        }
    }

};


