﻿/**
 * @author 老阴
 */
$(function(){
    /***********全局变量**************/
    
    var url;
    
    (function(){
        var url;
        InitUrl = function(i){
            if (i) {
                url = i;
            }
            return {
                Get: get,
                Set: set
            };
        }
        function get(){
            return url;
        };
        function set(i){
            if (i) {
                url = i;
            }
        };
            })();
    
    var id;
    (function(){
        var id;
        InitialId = function(i){
            if (i) {
                id = i;
            }
            return {
                Get: get,
                Set: set
            };
        }
        function get(){
            return id;
        };
        function set(i){
            if (i) {
                id = i;
            }
        };
            })();
    
    var json;
    var cjson;
    (function(){
        var json;
        InitJson = function(i){
            if (i) {
                json = eval('(' + i + ')');
                
            }
            return {
                Get: get,
                Set: set
            };
        }
        function get(){
            return json;
        };
        function set(i){
            if (i) {
                json = eval('(' + i + ')');
            }
        };
            })();
    
    
    (function(){
        var json;
        InitCJson = function(i){
            if (i) {
                json = eval('(' + i + ')');
                
            }
            return {
                Get: get,
                Set: set
            };
        }
        function get(){
            return json;
        };
        function set(i){
            if (i) {
                json = eval('(' + i + ')');
            }
        };
            })();
    
    
    var pageInfo;
    
    (function(){
        var pageInfo;
        InitPageInfo = function(i){
            if (i) {
                pageInfo = eval('(' + i + ')');
                
            }
            return {
                Get: get,
                Set: set
            };
        }
        function get(){
            return pageInfo;
        };
        function set(i){
            if (i) {
                pageInfo = eval('(' + i + ')');
            }
        };
            })();
    
    var totalCount;
    (function(){
        var totalCount;
        InitTotalCount = function(i){
            if (i) {
                totalCount = i;
                
            }
            return {
                Get: get,
                Set: set
            };
        }
        function get(){
            return totalCount;
        };
        function set(i){
            if (i) {
                totalCount = i;
            }
        };
            })();
    
    
    var tag;
    (function(){
        var t;
        InitTag = function(i){
            if (i) {
                t = i;
            }
            return {
                Get: get,
                Set: set
            };
        }
        function get(){
            return t;
        };
        function set(i){
            if (i) {
                t = i;
            }
        };
            })();
    
    
    var project;
    
    /******** 初始化全局变量******/
    
    (function(){
        url = InitUrl($("#hfSiteUrl").val());
        json = InitJson($("#hfJson").val());
        cjson = InitCJson($("#hfCateJson").val());
        project = 1;
    })();
    
    
    
    /**************** 图像********************/
    var header;
    
    var content;
    
    var footer = "</graph>";
    
    var strip = new FusionCharts("../../Control/FusionCharts/FCF_Bar2D.swf", "strip", "800", "600");
    
    var pillar = new FusionCharts("../../Control/FusionCharts/FCF_Column3D.swf", "pillar", "800", "600");
    
    var pie = new FusionCharts("../../Control/FusionCharts/FCF_Pie3D.swf", "pie", "800", "600");
    
    var area = new FusionCharts("../../Control/FusionCharts/FCF_Area2D.swf", "area", "800", "600");
    
    var dic = new Dictionary();
    
    dic.Add("strip", strip);
    
    dic.Add("pillar", pillar);
    
    dic.Add("pie", pie);
    
    dic.Add("area", area);
    
    render(strip);
    
    /*****呈现图像*****/
    
    function renderChart(xml, canvas, chart){
        chart.initialDataSet = false;
        chart.setDataXML(xml);
        chart.render(canvas);
    }
    
    /*****生成内容*****/
    
    var isFirst = true;
    
    function render(type){
        $.ajax({
            type: 'GET',
            url: url.Get() + '/Ajax/Instrument/GetIntrumentChartXML.ashx',
            data: 'json=' + $.toJSON(json.Get()) + '&cjson=' + $.toJSON(cjson.Get()) + '&project=' + project,
            dataType: 'json',
            success: function(data, textStatus){
                if (data.success) {
                    generateContentItem(data.list);
                    setHeader(unescape(data.header));
                    if (header && content && footer) {
                        var c = header + content + footer;
                        isFirst = false;
                        renderChart(c, 'chartcanvas', type);
                    }
                }
            }
        });
        
    }
    
    function generateContentItem(list){
        content = "";
        var xml = "<set name='_name_' value='_value_' color='_color_' alpha='70' hoverText='_value_'/>";
        if (list && list.length > 0) {
            for (var i = 0; i < list.length; i++) {
                var s = xml.replace(/_name_/g, list[i].name);
                s = s.replace(/_value_/g, list[i].value);
                s = s.replace(/_color_/g, list[i].color);
                content += s;
            }
        }
    }
    
    function setHeader(result){
        header = result;
    }
    
    
    /************页面事件**************/
    
    $("#ddlChartType").change(function(){
        postBack();
    });
    
    
    $('#header-nav-con ul li a').click(function(){
		var index=$('#header-nav-con ul li a').index($(this));		
		if(index===2||index===3){
			$('#ddlChartType').parent().prev().fadeOut(300);
			$('#ddlChartType').parent().fadeOut(300);
			$('#ddlChartType').val(0);
		}else{
			$('#ddlChartType').parent().prev().fadeIn(300);
			$('#ddlChartType').parent().fadeIn(300);
			
		}
		
        $(this).parent().addClass("current").siblings().each(function(){
            $(this).removeClass("current");
        })
        
        cjson.Get().y = escape($(this).attr("y"));
		

        
        if ($(this).attr("id") == '5') {
            json.Get().Unit = [];
            $("div#center-item-con").animate({
                opacity: 'hide',
                height: 'hide'
            });
            $("div#center-item-con").prev("h2").animate({
                opacity: 'hide',
                height: 'hide'
            });
        }
        else {
            /*********分中心***********/
            $("div#center-item-con").animate({
                opacity: 'show',
                height: 'show'
            });
            
            $("div#center-item-con").prev("h2").animate({
                opacity: 'show',
                height: 'show'
            });
        }
        
        postBack();
    });
    
    var isInitialArray = true;
    (function(){
        $("div#year-item-con ul li").click(function(){
            $(this).toggleClass("year-selected");
            var y = $(this).find("span").attr("id");
            if (y && json.Get().hasOwnProperty("Year")) {
                json.Get().Year = [];
                $("div#year-item-con ul li.year-selected").each(function(){
                    json.Get().Year.push($(this).find("span").attr("id"));
                });
            }
            postBack();
        })
    })();
    
    
    
    (function(){
        $("div#center-item-con ul>li").click(function(){
            $(this).toggleClass("unit-selected");
            var u = $(this).find("span").attr("id");
            if (u && json.Get().hasOwnProperty("Unit")) {
                json.Get().Unit = [];
                $("div#center-item-con ul li.unit-selected").each(function(){
                    json.Get().Unit.push($(this).find("span").attr("id"));
                })
            }
            postBack();
        });
    })();
    
    (function(){
        $("div#value-item-con ul>li").click(function(){
        
            $(this).toggleClass("value-selected");
            var v = $(this).find("span").attr("id");
            if (v && json.Get().hasOwnProperty("Values")) {
                json.Get().Values = [];
                $("div#value-item-con ul li.value-selected").each(function(){
                    json.Get().Values.push(parseInt($(this).find("span").attr("id")));
                });
            }
            
            if (json.Get().Values.length === 0) {
                json.Get().Values = new Array(0, 1, 2, 3, 4, 5);
            }
            postBack();
        });
    })();
    
    
    /****************Post Back********************/
    
    function postBack(){
		
        if (cjson.Get().hasOwnProperty("type")) {
            cjson.Get().type = $("#ddlChartType").val();
        }
        project = $("div#header-nav-con div.box-light-title ul li.current a").attr("id");
        
        if (cjson.Get().hasOwnProperty("type")) {
            cjson.Get().type = $("#ddlChartType").val();
        }
        if (dic && dic.Item($("#ddlChartType").val())) {
            render(dic.Item($("#ddlChartType").val()));
        }
    }
    
    $("#ajax-loading").ajaxStart(function(){
        $(this).show();
    }).ajaxStop(function(){
        $(this).hide();
    });
    

    
    
    
    
    
    /***********************************Dictionary  指点数据结构***********************************************/
    
    
    function Dictionary(){
    
        var me = this; //将this指针保存到变量me中
        this.CompareMode = 1; //比较关键字是否相等的模式，0——二进制；1——文本
        this.Count = 0; //字典中的项目数
        this.arrKeys = new Array(); //关键字数组
        this.arrValues = new Array(); //值数组
        this.ThrowException = true; //遇到错误时，是否用throw语句抛出异常
        this.Item = function(key) //Item方法，获取指定键对应的值。如果键不存在，引发异常
        {
            var idx = GetElementIndexInArray(me.arrKeys, key);
            if (idx != -1) {
                return me.arrValues[idx];
            }
            else {
                if (me.ThrowException) 
                    throw "在获取键对应的值时发生错误，键不存在。";
            }
        }
        
        this.Keys = function() //获取包含所有键的数组
        {
            return me.arrKeys;
        }
        
        this.Values = function() //获取包含所有值的数组
        {
            return me.arrValues;
        }
        
        this.Add = function(key, value) //将指定的键和值添加到字典中
        {
            if (CheckKey(key)) {
                me.arrKeys[me.Count] = key;
                me.arrValues[me.Count] = value;
                me.Count++;
            }
            else {
                if (me.ThrowException) 
                    throw "在将键和值添加到字典时发生错误，可能是键无效或者键已经存在。";
            }
        }
        
        this.BatchAdd = function(keys, values) //批量增加键和值数组项，如果成功，增加所有的项，返回true；否则，不增加任何项，返回false。
        {
            var bSuccessed = false;
            if (keys != null && keys != undefined && values != null && values != undefined) {
                if (keys.length == values.length && keys.length > 0) //键和值数组的元素数目必须相同
                {
                    var allKeys = me.arrKeys.concat(keys); //组合字典中原有的键和新键到一个新数组
                    if (!IsArrayElementRepeat(allKeys)) //检验新数组是否存在重复的键
                    {
                        me.arrKeys = allKeys;
                        me.arrValues = me.arrValues.concat(values);
                        me.Count = me.arrKeys.length;
                        bSuccessed = true;
                    }
                }
            }
            return bSuccessed;
        }
        
        this.Clear = function() //清除字典中的所有键和值
        {
            if (me.Count != 0) {
                me.arrKeys.splice(0, me.Count);
                me.arrValues.splice(0, me.Count);
                me.Count = 0;
            }
        }
        
        this.ContainsKey = function(key) //确定字典中是否包含指定的键
        {
            return GetElementIndexInArray(me.arrKeys, key) != -1;
        }
        
        this.ContainsValue = function(value) //确定字典中是否包含指定的值
        {
            return GetElementIndexInArray(me.arrValues, value) != -1;
        }
        
        this.Remove = function(key) //从字典中移除指定键的值
        {
            var idx = GetElementIndexInArray(me.arrKeys, key);
            if (idx != -1) {
                me.arrKeys.splice(idx, 1);
                me.arrValues.splice(idx, 1);
                me.Count--;
                return true;
            }
            else 
                return false;
        }
        
        this.TryGetValue = function(key, defaultValue) //尝试从字典中获取指定键对应的值，如果指定键不存在，返回默认值defaultValue
        {
            var idx = GetElementIndexInArray(me.arrKeys, key);
            if (idx != -1) {
                return me.arrValues[idx];
            }
            else 
                return defaultValue;
        }
        
        this.ToString = function() //返回字典的字符串值，排列为： 逗号分隔的键列表  分号  逗号分隔的值列表
        {
            if (me.Count == 0) 
                return "";
            else 
                return me.arrKeys.toString() + ";" + me.arrValues.toString();
        }
        
        function CheckKey(key) //检查key是否合格，是否与已有的键重复
        {
            if (key == null || key == undefined || key == "" || key == NaN) 
                return false;
            return !me.ContainsKey(key);
        }
        
        function GetElementIndexInArray(arr, e) //得到指定元素在数组中的索引，如果元素存在于数组中，返回所处的索引；否则返回-1。
        {
            var idx = -1; //得到的索引
            var i; //用于循环的变量
            if (!(arr == null || arr == undefined || typeof(arr) != "object")) {
                try {
                    for (i = 0; i < arr.length; i++) {
                        var bEqual;
                        if (me.CompareMode == 0) 
                            bEqual = (arr[i] === e); //二进制比较
                        else 
                            bEqual = (arr[i] == e); //文本比较
                        if (bEqual) {
                            idx = i;
                            break;
                        }
                    }
                } 
                catch (err) {
                }
            }
            return idx;
        }
        
        function IsArrayElementRepeat(arr) //判断一个数组中的元素是否存在重复的情况，如果存在重复的元素，返回true，否则返回false。
        {
            var bRepeat = false;
            if (arr != null && arr != undefined && typeof(arr) == "object") {
                var i;
                for (i = 0; i < arr.length - 1; i++) {
                    var bEqual;
                    if (me.CompareMode == 0) 
                        bEqual = (arr[i] === arr[i + 1]); //二进制比较
                    else 
                        bEqual = (arr[i] == arr[i + 1]); //文本比较
                    if (bEqual) {
                        bRepeat = true;
                        break;
                    }
                }
            }
            return bRepeat;
        }
    }
    
    
});
