﻿AG.Data.Stock = {
    _objStockData: '',
    GetFavourite: function (stockCode) {
        var obj = AG.ClientAPI;
        var requestName = 'Favourite_NoLanguage';
        for (var i = 0; i < stockCode.length; i++) {
            var value = stockCode[i];
            stockCode[i] = { Code: value };
            requestName += '_' + value;
        }
        stockCode.push({ Type: AG.Config.CompanyType.Listed });
        stockCode.push({ Type: '00000000-0000-0000-0000-000000000004' });
        stockCode.push({ Type: '00000000-0000-0000-0000-000000000005' });
        return obj.createData(CompanyRealtime, requestName, stockCode, { static: ['Id', 'Code', 'ClosePrice', 'Diff', 'DiffPercent', 'Modified', 'StockExchange'] }, [], [], undefined, 0, 60000);
    },
    GetNVSOutstandingShare: function () {
        return AG.ClientAPI.createData(CompanyRealtime, 'GetNVSOutstandingShare', [{ Code: 'NVS'}], { static: ['OutstandingShare'], dynamic: ['SessionDate'] })[0];
    },
    GetShareholder: function (stockCodeId) {
        var obj = AG.ClientAPI;
        return obj.createData(Shareholder, 'Shareholder', [{ Company: stockCodeId }, { Type: AG.Config.ShareholderType.Shareholder}], { static: ['Id', 'Code', 'Name', 'HoldingQuantity', 'HoldingPercent'] });
    },
    GetMarketEvent: function (stockCode, type, startDate, endDate, startIndex, endIndex) {
        if (typeof (stockCode) == 'undefined')
            stockCode = '';
        if (typeof (type) == 'undefined')
            type = '';
        if (typeof (startDate) == 'undefined')
            startDate = '';
        if (typeof (endDate) == 'undefined')
            endDate = '';
        if (typeof (startIndex) == 'undefined')
            startIndex = '';
        if (typeof (endIndex) == 'undefined')
            endIndex = '';
        var url = '/Handler/WS.StockData/SearchMarketEvent.ashx?' + '&typeEvent=' + type + '&company=' + stockCode + '&startDate=' + startDate + '&endDate=' + endDate + '&startIndex=' + startIndex + '&endIndex=' + endIndex + '&language=' + agLanguageName;
        var objData = AG.ClientAPI.getDirectData(url, false, null);
        if (typeof (objData.StockDataDS.News) == 'undefined') {
            objData.StockDataDS.News = {}
        }
        if (typeof (objData.StockDataDS.News) != 'undefined')
            return objData.StockDataDS.News;
        if (typeof (objData.StockDataDS.News.length) == 'undefined') {
            objData.StockDataDS.News = [objData.StockDataDS.News];
            objData.StockDataDS.News.length = 0;
        }
        return objData.StockDataDS.News;
    },
    CountMarketEvent: function (stockCode, type, startDate, endDate) {
        var url = '/Handler/WS.StockData/CountMarketEvent.ashx?' + 'typeEvent=' + type + '&company=' + stockCode + '&startDate=' + startDate + '&endDate=' + endDate + '&language=' + agLanguageName;
        return AG.ClientAPI.getDirectData(url, false, null);
    },
    // ham lay ma cong ty - dung cho phan search - TungTT - 28-10-2011
    GetListSymbolForSearch: function () {

        if (AGFSLib.request("TabId") != "217") {
            var request = 'StockListed' + '_NoLanguage';
            if (agLanguageName == "vi-VN") {
                this._objStockData = AG.ClientAPI.createData(CompanyInfomation, request, [{ Type: AG.Config.CompanyType.Listed }, { Type: AG.Config.CompanyType.Fund}], { static: ['Id', 'Code', 'VietnameseName', 'Type', 'StockExchange'] }, [{ Field: 'Code', Direction: 'ASC'}]);
            }
            else {
                this._objStockData = AG.ClientAPI.createData(CompanyInfomation, request, [{ Type: AG.Config.CompanyType.Listed }, { Type: AG.Config.CompanyType.Fund}], { static: ['Id', 'Code', 'Type', 'StockExchange', 'InternationalName'] }, [{ Field: 'Code', Direction: 'ASC'}]);
            }
        }
        else {
            var request = 'StockListed';
            this._objStockData = AG.ClientAPI.createData(CompanyInfomation, request, [{ Type: AG.Config.CompanyType.Listed }, { Type: AG.Config.CompanyType.Fund}], { static: ['Id', 'Code', 'Name', 'Type', 'StockExchange', 'InternationalName'] }, [{ Field: 'Code', Direction: 'ASC'}]);
        }
        return AG.Data.Stock._objStockData;
    },
    // end
    GetListSymbol: function () {
        AG.Data.Stock._objStockData = AG.ClientAPI.createData(CompanyInfomation, 'StockListed', [{ Type: AG.Config.CompanyType.Listed }, { Type: AG.Config.CompanyType.Fund}], { static: ['Id', 'Code', 'Name', 'Type', 'InternationalName', 'StockExchange'] }, [{ Field: 'Code', Direction: 'ASC'}]);
        return AG.Data.Stock._objStockData;
    },
    GetListSymbolByStockExchange: function (aFloor, aType, key) {
        var requestName = 'StockListed';
        var data = [];
        if (typeof (aFloor) != 'undefined') {
            if (aFloor.length > 0) {
                for (var i = 0; i < aFloor.length; i++) {
                    data.push({ StockExchange: aFloor[i] });
                    requestName += aFloor[i];
                }
            }
        } if (typeof (aType) != 'undefined') {
            if (aType.length > 0) {
                for (var i = 0; i < aType.length; i++) {
                    data.push({ Type: aType[i] });
                    requestName += aType[i];
                }
            }
        }
        if (typeof (key) != 'undefined') {
            if (key != '') {
                var filter = [{ Field: 'Code', Type: 'Static', Index: 0, Operator: 'like', Value: (key + '%')}];
                requestName += key;
            }
        }
        return AG.ClientAPI.createData(CompanyInfomation, requestName, data, { static: ['Id', 'Code', 'Name', 'Type'] }, [{ Field: 'Code', Direction: 'ASC'}], filter);

    },
    GetTopLoser: function (floorId, count) {
        var obj = AG.ClientAPI;
        var requestName = 'TopLoser_NoLanguage' + '_' + floorId + '_' + count;
        return obj.createData(CompanyRealtime, requestName, [{ StockExchange: floorId }, { Type: AG.Config.CompanyType.Listed }, { Type: AG.Config.CompanyType.Fund }, { StartIndex: 1 }, { EndIndex: count}], { static: ['Id', 'Code', 'ClosePrice', 'Diff', 'DiffPercent', 'RefPrice'] }, [{ Field: 'DiffPercent', Direction: 'ASC'}], [], undefined, 0, 60000);
    },
    //-------------start------------// last update by TungTT 07/11/2011
    GetTopGainers: function (floorId, count) {
        var obj = AG.ClientAPI;
        var requestName = 'TopGainer_NoLanguage' + '_' + floorId + '_' + count;
        return obj.createData(CompanyRealtime, requestName, [{ StockExchange: floorId }, { Type: AG.Config.CompanyType.Listed }, { Type: AG.Config.CompanyType.Fund }, { StartIndex: 1 }, { EndIndex: count}], { static: ['Id', 'Code', 'ClosePrice', 'Diff', 'DiffPercent', 'RefPrice'] }, [{ Field: 'DiffPercent', Direction: 'DESC'}], [], undefined, 0, 60000);
    },
    GetTopActives: function (floorId, count) {
        var obj = AG.ClientAPI;
        var requestName = 'TopActive_NoLanguage' + '_' + floorId + '_' + count;
        return obj.createData(CompanyRealtime, requestName, [{ StockExchange: floorId }, { Type: AG.Config.CompanyType.Listed }, { Type: AG.Config.CompanyType.Fund }, { StartIndex: 1 }, { EndIndex: count}], { static: ['Id', 'Code', 'ClosePrice', 'DiffPercent', 'RefPrice', 'TotalShare'] }, [{ Field: 'TotalShare', Direction: 'DESC'}], [], undefined, 0, 60000);
    },
    GetForeignBuy: function (floorId, count) {
        var obj = AG.ClientAPI;
        var requestName = 'ForeignBuy_NoLanguage' + '_' + floorId + '_' + count;
        return obj.createData(CompanyRealtime, requestName, [{ StockExchange: floorId }, { Type: AG.Config.CompanyType.Listed }, { Type: AG.Config.CompanyType.Fund }, { StartIndex: 1 }, { EndIndex: count}], { static: ['Id', 'Code', 'ClosePrice', 'DiffPercent', 'RefPrice', 'ForeignBuyVolume'] }, [{ Field: 'ForeignBuyVolume', Direction: 'DESC'}], [], undefined, 0, 60000);
    },
    GetForeignSell: function (floorId, count) {
        var obj = AG.ClientAPI;
        var requestName = 'ForeignSell_NoLanguage' + '_' + floorId + '_' + count;
        return obj.createData(CompanyRealtime, requestName, [{ StockExchange: floorId }, { Type: AG.Config.CompanyType.Listed }, { Type: AG.Config.CompanyType.Fund }, { StartIndex: 1 }, { EndIndex: count}], { static: ['Id', 'Code', 'ClosePrice', 'DiffPercent', 'RefPrice', 'ForeignSellVolume'] }, [{ Field: 'ForeignSellVolume', Direction: 'DESC'}], [], undefined, 0, 60000);
    },
    //-------------end------------//
    GetProfile: function (stockCode) {
        var obj = AG.ClientAPI;
        var requestName = 'StockProfile' + '_' + stockCode;
        var result = obj.createData(CompanyRealtime, requestName, [{ Code: stockCode}], { static: ['Id', 'Code', 'OutstandingShare', 'PE', 'StockExchange', 'MarketCapitalization', 'Type', 'DividendPayoutRatioLFY', 'ClosePrice', 'Highest52Weeks', 'Lowest52Weeks', 'DividendPayoutRatioLFI'] });
        if (result.length > 0) {
            result[0].StockExchange = obj.createData(StockExchange, 'StockExchange', [{ Id: result[0].StockExchange}], { static: ['Id', 'Name'] })[0].Name;
        }
        return result;
    },
    getMinMaxFieldVNSC: function (fieldName) {
        var obj = AG.ClientAPI;
        var requestName = 'FindMinMax' + fieldName + '_NoLanguage';
        var order = [{ Field: fieldName, Direction: 'Asc'}];
        type = "Static";
        var filter = [];
        type = 'Static';
        dataType = "decimal(32,2)";
        filter.push({ Field: fieldName, Type: type, Index: 1, DataType: dataType, Operator: '>=', Value: '-1000000' });
        var objMin = obj.createData(CompanyRealtime, requestName + '_Min', [{ StartIndex: 1 }, { EndIndex: 1}], { static: ['Id', fieldName] }, order, filter);
        order[0].Direction = 'DESC';
        var objMax = obj.createData(CompanyRealtime, requestName + '_Max', [{ StartIndex: 1 }, { EndIndex: 1}], { static: ['Id', fieldName] }, order, filter);

        return { Min: objMin[0][fieldName], Max: objMax[0][fieldName], Name: fieldName };
    },
    getStockSceenerVNSC: function (listField, stockExchangeId, rootIndustryId, startIndex, endIndex, orderBy, orderType) {
        var obj = AG.ClientAPI;
        var requestName = 'StockSceenerVNSC' + '_NoLanguage' + listField + '_' + stockExchangeId + '_' + rootIndustryId + '_' + startIndex + '_' + endIndex + '_' + orderBy + '_' + orderType;
        var data = [{ StartIndex: startIndex }, { EndIndex: endIndex}];
        if (stockExchangeId != undefined && stockExchangeId != '' && stockExchangeId != '00000000-0000-0000-0000-000000000000') {
            data.push({ StockExchange: stockExchangeId });
        }
        var arrListParam = listField.split(';');
        var fields = { static: ['Id', 'Code', 'Name', 'StockExchange'], dynamic: [] };
        var filter = [];
        var type = 'Static';
        var dataType = "decimal(32,8)";
        var index = 0;
        for (var i = 0; i < arrListParam.length; i++) {
            var arrParam = arrListParam[i].split(',');
            switch (arrParam[0]) {

                case 'TotalDebtTotalAssetLFI':
                case 'ForeignOwnedRatio':
                case 'TotalEquityLFI':
                case 'PELFI':
                case 'CharteredCapitalLFI':
                    type = 'Dynamic';
                    break;
                case 'StockExchange':
                case 'Industry':
                case 'RootIndustry':
                    dateType = 'nvarchar(50)';
                default:
                    type = 'Static';
                    break;

            }

            filter.push({ Field: arrParam[0], Type: type, Index: index++, DataType: dataType, Operator: '>=', Value: arrParam[1] });
            filter.push({ Field: arrParam[0], Type: type, Index: index++, DataType: dataType, Operator: '<=', Value: arrParam[2] });
            if (type == 'Dynamic')
                fields.dynamic.push(arrParam[0]);
            else
                fields.static.push(arrParam[0]);
        }
        if (rootIndustryId != undefined && rootIndustryId != '' && rootIndustryId != '00000000-0000-0000-0000-000000000000') {
            filter.push({ Field: 'RootIndustry', Type: 'Static', Index: (2 * arrListParam.length), Operator: '=', Value: rootIndustryId });
        }
        var order = [];
        if (typeof (orderBy) != "undefined")
            order = [{ Field: orderBy, Direction: 'ASC'}];
        else
            order = [{ Field: 'ID', Direction: 'ASC'}];
        if (typeof (orderType) != "undefined") {
            order[0].Direction = orderType;
        }
        if (orderBy != 'Code')
            order.push({ Field: 'Code', Direction: 'ASC' });
        return obj.createData(CompanyRealtime, requestName, data, fields, order, filter);
    },
    getCountStockSceenerVNSC: function (listField, stockExchangeId, rootIndustryId) {
        var obj = CompanyRealtime;
        var requestName = 'StockSceenerVNSC' + listField;
        var arrListParam = listField.split(';');
        var data = [];
        if (stockExchangeId != undefined && stockExchangeId != '' && stockExchangeId != '00000000-0000-0000-0000-000000000000') {
            data.push({ StockExchange: stockExchangeId });
        }
        var filter = [];
        var type = "";
        var fields = { static: ['Id', ] };
        for (var i = 0; i < arrListParam.length; i++) {
            var arrParam = arrListParam[i].split(',');
            switch (arrParam[0]) {
                case 'TotalDebtTotalAssetLFI':
                case 'TotalEquityLFI':
                case 'PELFI':
                case 'CharteredCapitalLFI':
                    type = 'Dynamic';
                    break;
                case 'StockExchange':
                case 'Industry':
                case 'RootIndustry':
                    dateType = 'nvarchar(50)';
                default:
                    type = 'Static';
                    break;
            }
            filter.push({ Field: arrParam[0], Type: type, Index: (2 * i), Operator: '>=', Value: arrParam[1] });
            filter.push({ Field: arrParam[0], Type: type, Index: ((2 * i) + 1), Operator: '<=', Value: arrParam[2] });
            fields.static.push(arrParam[0]);
        }
        if (rootIndustryId != undefined && rootIndustryId != '' && rootIndustryId != '00000000-0000-0000-0000-000000000000') {
            filter.push({ Field: 'RootIndustry', Type: 'Static', Index: (2 * arrListParam.length), Operator: '=', Value: rootIndustryId });
        }
        return obj.getCount(data, undefined, undefined, filter);
    },
    GetEvent: function (stockCode, type, startDate, endDate, startIndex, endIndex) {

        var order = [];
        var data = [{ Type: AG.Config.CompanyType.Listed }, { Type: AG.Config.CompanyType.Fund}];
        var dataEvent = [{ StartDate: startDate }, { EndDate: endDate }, { StartIndex: startIndex }, { EndIndex: endIndex}];
        if (stockCode != '')
            dataEvent.push({ Company: stockCode });
        if (type != AG.Config.Empty && typeof (type) != 'undefined' && type != '')
            dataEvent.push({ Type: type });
        order.push({ Field: 'ExRightDate', Direction: 'DESC' });
        var requestName = 'GetEvent' + '_' + stockCode + '_' + type + '_' + startIndex + '_' + endIndex + '_' + startDate + '_' + endDate;
        return AG.ClientAPI.createData(Event, requestName, dataEvent, { static: ['Id', 'ExRightDate', 'EndRegisterDate', 'ExerciseDate', 'Type', 'Name'], dynamic: ['Title', 'Content'] }, order, undefined, [{ Name: 'AG_Stock_Company', Alias: 'E', Join: 'Left Join', JoinColumn: 'Id', MainColumn: 'Company', data: undefined, fields: { static: ['Code']}}]);
        order = null; data = null, dataEvent = null;
    },
    //    GetEvent: function (stockCodeId, type, startDate, endDate, startIndex, endIndex) {
    //        if (typeof (stockCodeId) == 'undefined')
    //            stockCodeId = '';
    //        if (typeof (type) == 'undefined')
    //            type = '';
    //        if (typeof (startDate) == 'undefined')
    //            startDate = '';
    //        if (typeof (endDate) == 'undefined')
    //            endDate = '';
    //        if (typeof (startIndex) == 'undefined')
    //            startIndex = '';
    //        if (typeof (endIndex) == 'undefined')
    //            endIndex = '';
    //        var url = '/Handler/WS.StockData/SearchMarketEvent.ashx?' + '&typeEvent=' + type + '&company=' + stockCodeId + '&startDate=' + startDate + '&endDate=' + endDate + '&startIndex=' + startIndex + '&endIndex=' + endIndex + '&language=' + agLanguageName;
    //        var objData = AG.ClientAPI.getDirectData(url, false, null);
    //        if (typeof (objData.StockDataDS.News) == 'undefined') {
    //            objData.StockDataDS.News = {}
    //        }
    //        if (typeof (objData.StockDataDS.News.length) == 'undefined' && typeof (objData.StockDataDS.News) != 'undefined') {
    //            objData.StockDataDS.News = [objData.StockDataDS.News];
    //            objData.StockDataDS.News.length = 0;
    //        }
    //        return objData.StockDataDS.News;
    //    },
    GetCountEvent: function (stockCode, type, startDate, endDate) {
        var data = [{ Type: AG.Config.CompanyType.Listed }, { Type: AG.Config.CompanyType.Fund}];
        var dataEvent = [{ StartDate: startDate }, { EndDate: endDate}];
        if (stockCode != '')
            dataEvent.push({ Company: stockCode });
        if (type != AG.Config.Empty && typeof (type) != 'undefined' && type != '')
            dataEvent.push({ Type: type });
        return Event.getCount(dataEvent);
        data = null, dataEvent = null;
    },
    GetEventDetail: function (eventId) {
        var requestName = 'GetEventDetail' + eventId;
        var objEvent = AG.ClientAPI.createData(Event, requestName, [{ Id: eventId}], { static: ['Id', 'PublishDate'], dynamic: ['Title', 'Content', 'Summary'] });
        var objAttachment = AG.ClientAPI.createData(Attachment, requestName, [{ Parent: eventId}], { static: ['Id', 'Name'] });
        var result = { Title: null, Content: null, Attachment: null };
        if (objEvent.length > 0) {
            result.Title = objEvent[0].Title;
            result.Content = objEvent[0].Content;
            result.PublishDate = objEvent[0].PublishDate;
            result.Attachment = objAttachment;
        }
        return result;
    },
    GetEventDateInMonth: function (startDate, endDate) {
        var data = [{ StartDate: startDate }, { EndDate: endDate}];
        var field = { static: ['Id', 'ExRightDate'] };
        var requestName = startDate + '_' + endDate;
        return AG.ClientAPI.createData(Event, requestName, data, field);
    },
    GetTypeEvent: function () {
        var data = ['EVO06', 'EVO07', 'EVO08', 'EVC03', 'EVC04', 'EVC01', 'EVC08', 'EVD01', 'EVI04', 'EVI03', 'EVO01', 'EVC05', 'EVO02', 'EVO05'];
        for (var i = 0; i < data.length; i++) {
            data[i] = { Code: data[i] };
        }
        return AG.ClientAPI.createData(Config, 'GetTypeEvent', data, { static: ['Id', 'Name'] });
    },
    GetTypeFinancialReport: function (reportGroup) {
        if (typeof (reportGroup) == 'undefined' || reportGroup == AG.Config.Empty)
            reportGroup = AG.Config.Empty;
        var obj = AG.ClientAPI;
        return obj.createData(FieldCategory, 'GetTypeFinancialReport' + reportGroup, [{ ParentId: reportGroup, Type: AG.Config.DataType.ReportGroup}], { static: ['Id', 'Code', 'Name', 'Level', 'Type', 'PathById'] });
    },
    GetFinancialTime: function (level, startIndex, endIndex, parentId) {
        var data = [{ Level: level}];
        if (typeof (startIndex) != 'undefined')
            data.push({ StartIndex: startIndex });
        if (typeof (endIndex) != 'undefined')
            data.push({ EndIndex: endIndex });
        if (typeof (parentId) != 'undefined')
            data.push({ ParentId: parentId });
        var requestName = level + '_' + startIndex + '_' + endIndex + '_' + parentId;
        var order = [{ Field: 'EndDate', Direction: 'DESC'}];
        var result;
        result = AG.ClientAPI.createData(FinancialTime, requestName, data, { static: ['Id', 'Name'] }, order);
        data = null, requestName = null, order = null;
        return result;
    },
    GetFinancialInfomation: function (func, companyId, timeLevel, typeFinancialReport, startIndex, endIndex) {
        var that = this;
        var endDate = that.GetLastFinancialTime(companyId, timeLevel);
        var objTime = that.GetFinancialTime(timeLevel, startIndex, endIndex);
        var data = [{ Company: companyId}, {'ReportType':'All'}];
        for (var i = 0; i < objTime.length; i++) {
            data.push({ FinancialTime: objTime[i].Id });
        }
        var requestNameFR = 'FinancialReport' + companyId + '_' + timeLevel + '_' + startIndex + '_' + endIndex;
        for (var i = 0; i < typeFinancialReport.length; i++) {
            data.push({ Type: typeFinancialReport[i] });
            requestNameFR += '_' + typeFinancialReport;
        }
        var objFinancialReport = AG.ClientAPI.createData(FinancialReport, requestNameFR, data);
        AG.ClientAPI.add(func, function () { return FinancialReport.pkConditions[requestNameFR].isRun; }, function () { return { Time: objTime, financialReport: AG.ClientAPI.getData(FinancialReport, requestNameFR) }; });
        obj = null, order = null; data = null, objFinancialReport = null;
    },
    GetLastFinancialTime: function (companyId, timeLevel) {
        var requestName = 'GetLastFinancialTime' + '_' + companyId + '_' + timeLevel;
        var result = AG.ClientAPI.createData(FinancialTime, requestName, [{ Level: timeLevel }, { StartIndex: 1 }, { EndIndex: 1}], { static: ['Id', 'Name', 'EndDate'] }, [{ Field: 'EndDate', Direction: 'DESC'}], undefined, [{ Name: 'AG_Stock_FinancialReport', Alias: 'FR', Join: 'Inner Join', JoinColumn: 'FinancialTime', MainColumn: 'Id', data: [{ Company: companyId}], fields: undefined}]);
        if (result.length > 0) {
            return result[0];
        }
        else
            return {};
    },
    GetFinancialReportByFieldCode: function (func, companyId, code, timeLevel, startIndex, endIndex, reportGroup) {
        var that = this;
        var requestNameFRBFC = 'GetFinancialReportByFieldCode' + '_' + companyId + '_' + '_' + reportGroup + '_' + timeLevel + '_' + startIndex + '_' + endIndex;
        for (var i = 0; i < code.length; i++) {
            code[i] = { Code: code[i] };
            requestNameFRBFC += '_' + code[i];
        }
        code.push({ ParentId: reportGroup });
        var objField = Field.searchField(requestNameFRBFC, code);
        code = null;
        var objTime = that.GetFinancialTime(timeLevel, startIndex, endIndex);
        var data = [{ ParentId: reportGroup}, {ReportType: 'All'}];
        for (var i = 0; i < objTime.length; i++) {
            data.push({ FinancialTime: objTime[i].Id });
        }
        data.push({ Company: companyId });
        var fields = { static: ['Id', 'FinancialTime'], field: [] };
        for (var i = 0; i < objField.length; i++) {
            fields.field.push({ Id: objField[i].Id });
        }
        FinancialReport.getFinancialInfoById(requestNameFRBFC, data, fields);
        AG.ClientAPI.add(func, function () { return FinancialReport.pkConditions[requestNameFRBFC].isRun; }, function () { return { Time: objTime, financialReport: AG.ClientAPI.getData(FinancialReport, requestNameFRBFC) }; });
        objField = null, order = null; objFinancialReport = null, data = null, fields = null;
    },
    // Hàm lấy ra chi tiết hoạt động kinh doanh
    GetBusinessActivities: function (stockCode) {

        var objResult = AG.ClientAPI.createData(CompanyInfomation, 'BusinessActivities', [{ Code: stockCode}], { static: ['Id', 'BusinessActivities'] });
        var result = '';
        if (objResult.length > 0)
            result = objResult[0].BusinessActivities && typeof (objResult[0].BusinessActivities) != 'undefined' ? objResult[0].BusinessActivities : '';
        objResult = null;
        return result;
    },

    // Hàm lấy lich su hinh thanh công ty
    GetOverview: function (stockCode) {

        var objResult = AG.ClientAPI.createData(CompanyInfomation, 'Overview', [{ Code: stockCode}], { static: ['Id', 'Overview'] });
        var result = '';
        if (objResult.length > 0)
            result = objResult[0].Overview && typeof (objResult[0].Overview) != 'undefined' ? objResult[0].Overview : '';
        objResult = null;
        return result;
    },

    //Hàm lấy chi tiết chiến lược phát triển công ty
    GetBusinessStrategy: function (stockCode) {

        var objResult = AG.ClientAPI.createData(CompanyInfomation, 'BusinessStrategy', [{ Code: stockCode}], { static: ['Id', 'BusinessStrategy'] });
        var result = '';
        if (objResult.length > 0)
            result = objResult[0].BusinessStrategy && typeof (objResult[0].BusinessStrategy) != 'undefined' ? objResult[0].BusinessStrategy : '';
        objResult = null;
        return result;
    },

    //Hàm lấy vi the cong ty
    GetCompanyPositioning: function (stockCode) {

        var objResult = AG.ClientAPI.createData(CompanyInfomation, 'CompanyPositioning', [{ Code: stockCode}], { static: ['Id', 'CompanyPositioning'] });
        var result = '';
        if (objResult.length > 0)
            result = objResult[0].CompanyPositioning && typeof (objResult[0].CompanyPositioning) != 'undefined' ? objResult[0].CompanyPositioning : '';
        objResult = null;
        return result;
    },
    //Ban lanh dao
    GetLeadership: function (stockCodeId) {
        var obj = AG.ClientAPI;
        var order = [{ Field: 'Index', Direction: 'ASC'}];
        var requestName = 'Leadership' + stockCodeId;
        return obj.createData(Leadership, requestName, [{ Company: stockCodeId}], { static: ['Id', 'Code', 'Name', 'CurrentPosition'] }, order);
    },

    // Hàm lấy địa chỉ liên hệ công ty
    GetHeadquarter: function (stockCode) {

        return AG.ClientAPI.createData(CompanyInfomation, 'Headquarter', [{ Code: stockCode}], { static: ['Id', 'Code', 'Headquarter', 'Phone', 'InternationalName', 'Website', 'Fax', 'Name'] });
    },

    /* Truy vấn giá */
    GetPriceQuery: function (stockCode, startDate, endDate, startIndex, endIndex, orderBy, orderType) {
        var obj = AG.ClientAPI;
        var order = [];
        if (typeof (orderBy) != "undefined")
            order = [{ Field: orderBy, Direction: 'ASC'}];
        else
            order = [{ Field: 'ID', Direction: 'ASC'}];
        if (typeof (orderType) != "undefined") {
            order[0].Direction = orderType;
        }
        if (orderBy != 'Code')
            order.push({ Field: 'Code', Direction: 'ASC' });
        var requestName = 'StockPriceQuery' + '_' + stockCode + '_' + startDate + '_' + endDate + '_' + startIndex + '_' + endIndex + '_' + orderBy + '_' + orderType;
        return obj.createData(CompanyDaily, requestName, [{ Code: stockCode }, { StartDate: startDate }, { EndDate: endDate }, { StartIndex: startIndex }, { EndIndex: endIndex}], { static: ['Id', 'Code', 'SessionDate', 'OpenPrice', 'ClosePrice', 'Diff', 'DiffPercent', 'RefPrice', 'TotalShare', 'TotalValue', 'ForeignBuyVolume', 'ForeignSellVolume', 'ForeignBuyValue', 'ForeignSellValue', 'ForeignCurrentRoom', 'BidVolumeOrder', 'BidCountOrder', 'OfferCountOrder'], dynamic: ['HighestPrice', 'LowestPrice', 'OfferVolumeOrder'] }, order);

    },
    GetCountPriceQuery: function (stockCode, startDate, endDate) {
        var obj = CompanyDaily;
        return obj.getCount([{ Code: stockCode }, { StartDate: startDate }, { EndDate: endDate}]);
    },
    GetPriceQueryToExcel: function (stockCode, startDate, endDate, orderBy, orderType) {
        var obj = CompanyDaily;
        var order = [];
        if (typeof (orderBy) != "undefined")
            order = [{ Field: orderBy, Direction: 'ASC'}];
        else
            order = [{ Field: 'ID', Direction: 'ASC'}];
        if (typeof (orderType) != "undefined")
            order[0].Direction = orderType;
        if (orderBy != 'Code')
            order.push({ Field: 'Code', Direction: 'ASC' });
        obj.toExcel('PriceQuery', [{ Code: stockCode }, { StartDate: startDate }, { EndDate: endDate}], { static: ['Id', 'Code', 'SessionDate', 'OpenPrice', 'ClosePrice', 'HighestPrice', 'LowestPrice', 'Diff', 'DiffPercent', 'RefPrice', 'TotalShare', 'TotalValue', 'ForeignBuyVolume', 'ForeignSellVolume', 'ForeignBuyValue', 'ForeignSellValue', 'ForeignCurrentRoom'] }, order);
    },
    //Lay danh sach cac cong ty: Niem yet, chua niem yet, UPCOM
    GetListCompany: function (aFloorId, aTypeId, IndustryId, StockCode, key, startIndex, endIndex, orderBy, orderType) {
        var requestName = 'GetListCompany' + '_' + startIndex + '_' + endIndex + '_' + orderBy + '_' + orderType;
        var order = [];
        if (typeof (orderBy) != "undefined")
            order = [{ Field: orderBy, Direction: 'ASC'}];
        else
            order = [{ Field: 'T.ID', Direction: 'ASC'}];
        if (typeof (orderType) != "undefined")
            order[0].Direction = orderType;
        if (orderBy != 'Code')
            order.push({ Field: 'T.Code', Direction: 'ASC' });
        var data = [{ StartIndex: startIndex }, { EndIndex: endIndex}];
        for (var i = 0; i < aFloorId.length; i++) {
            data.push({ StockExchange: aFloorId[i] });
            requestName += '_' + aFloorId[i];
        }
        for (var i = 0; i < aTypeId.length; i++) {
            data.push({ Type: aTypeId[i] });
            requestName += '_' + aTypeId[i];
        }
        if (IndustryId != '') {
            var objIndustry = AG.Data.Industry.GetChildIndustry(IndustryId);
            data.push({ Industry: IndustryId });
            requestName += '_' + IndustryId;
            for (var i = 0; i < objIndustry.length; i++) {
                data.push({ Industry: objIndustry[i].Id });
            }
        }
        var filter = [];
        if (StockCode != '')
            filter.push({ Field: 'Code', Type: 'Static', Index: 0, Operator: '=', Value: (StockCode) });
        requestName += '_' + StockCode;
        var field = { static: ['Id', 'Code', 'Name'] };
        if (key != '') {
            filter.push({ Field: 'Code', Type: 'Static', Index: 1, Operator: 'like', Value: (key + '%') });
            requestName += '_' + key;
        }
        var joinTable = [{ Name: 'AG_Stock_CompanyCategory', Alias: 'CC', Join: 'LEFT Join', JoinColumn: 'Id', MainColumn: 'Industry', data: [], fields: { static: ['Name']} }, { Name: 'AG_Stock_StockExchange', Alias: 'SE', Join: 'LEFT Join', JoinColumn: 'Id', MainColumn: 'StockExchange', data: [], fields: { static: ['Name']} }, { Name: 'AG_Stock_Report_CompanyRealtime', Alias: 'Mkc', Join: 'LEFT Join', JoinColumn: 'Code', MainColumn: 'Code', data: [], fields: { static: ['MarketCapitalization']}}];
        return AG.ClientAPI.createData(CompanyInfomation, requestName, data, field, order, filter, joinTable);
    },
    GetCountListCompany: function (aFloorId, aTypeId, IndustryId, StockCode, key) {
        var data = [];
        for (var i = 0; i < aFloorId.length; i++) {
            data.push({ StockExchange: aFloorId[i] });
        }
        for (var i = 0; i < aTypeId.length; i++) {
            data.push({ Type: aTypeId[i] });
        }
        if (IndustryId != '') {
            var objIndustry = AG.Data.Industry.GetChildIndustry(IndustryId);
            data.push({ Industry: IndustryId });
            for (var i = 0; i < objIndustry.length; i++) {
                data.push({ Industry: objIndustry[i].Id });
            }
        }
        var filter = [];
        if (StockCode != '')
            filter.push({ Field: 'Code', Type: 'Static', Index: 0, Operator: '=', Value: (StockCode) });
        if (key != '') {
            filter.push({ Field: 'Code', Type: 'Static', Index: 1, Operator: 'like', Value: (key + '%') });
        }
        return CompanyInfomation.getCount(data, undefined, undefined, filter);
    },
    GetListCompanyToExcel: function (aFloorId, aTypeId, IndustryId, StockCode, key, orderBy, orderType) {
        var order = [];
        if (typeof (orderBy) != "undefined")
            order = [{ Field: orderBy, Direction: 'ASC'}];
        else
            order = [{ Field: 'ID', Direction: 'ASC'}];
        if (typeof (orderType) != "undefined")
            order[0].Direction = orderType;
        if (orderBy != 'Code')
            order.push({ Field: 'Code', Direction: 'ASC' });
        var data = [];
        for (var i = 0; i < aFloorId.length; i++) {
            data.push({ StockExchange: aFloorId[i] });
        }
        for (var i = 0; i < aTypeId.length; i++) {
            data.push({ Type: aTypeId[i] });
        }
        if (IndustryId != '') {
            var objIndustry = AG.Data.Industry.GetChildIndustry(IndustryId);
            data.push({ Industry: IndustryId });
            for (var i = 0; i < objIndustry.length; i++) {
                data.push({ Industry: objIndustry[i].Id });
            }
        }
        var filter = [];
        if (StockCode != '')
            filter.push({ Field: 'Code', Type: 'Static', Index: 0, Operator: '=', Value: (StockCode) });
        if (key != '') {
            filter.push({ Field: 'Code', Type: 'Static', Index: 1, Operator: 'like', Value: (key + '%') });
        }
        var field = { static: ['Id', 'Code', 'Name'] };
        var joinTable = [{ Name: 'AG_Stock_CompanyCategory', Alias: 'CC', Join: 'LEFT Join', JoinColumn: 'Id', MainColumn: 'Industry', data: [], fields: { static: ['Name']} }, { Name: 'AG_Stock_StockExchange', Alias: 'SE', Join: 'LEFT Join', JoinColumn: 'Id', MainColumn: 'StockExchange', data: [], fields: { static: ['Name']} }, { Name: 'AG_Stock_Report_CompanyRealtime', Alias: 'Mkc', Join: 'LEFT Join', JoinColumn: 'Code', MainColumn: 'Code', data: [], fields: { static: ['MarketCapitalization']}}];
        return CompanyInfomation.toExcel('ListCompanies', data, field, order, filter, joinTable);
    },
    //lay ten doanh nghiep
    GetName: function (stockCode) {

        var objCompany = AG.ClientAPI.createData(CompanyInfomation, ('StockName' + stockCode), [{ Code: stockCode}], { static: ['Id', 'Code', 'Name', 'InternationalName', 'Industry', 'StockExchange', 'ListingDate', 'CharteredCapital', 'Website'], dynamic: ['RootIndustry', 'ReportGroup'] });
        var objCompanyRealtime = AG.ClientAPI.createData(CompanyRealtime, ('CompanyRealtime' + stockCode), [{ Code: stockCode}], { static: ['Id', 'OutstandingShare'], dynamic: ['ListedShare'] });
        if (typeof (objCompany[0].Industry) != 'undefined')
            var objField = AG.ClientAPI.createData(CompanyCategory, ('Industry' + objCompany[0].Industry), [{ Id: objCompany[0].Industry}], { static: ['Id', 'Name'] });
        if (typeof (objCompany[0].RootIndustry) != 'undefined')
            var objRootField = AG.ClientAPI.createData(CompanyCategory, ('RootIndustry' + objCompany[0].RootIndustry), [{ Id: objCompany[0].RootIndustry}], { static: ['Id', 'Name'] });
        if (typeof (objCompany[0].StockExchange) != 'undefined')
            var objStockExchange = AG.ClientAPI.createData(StockExchange, ('StockExchange' + objCompany[0].StockExchange), [{ Id: objCompany[0].StockExchange}], { static: ['Id', 'COde'] });
        var result = { Id: objCompany[0].Id, Code: objCompany[0].Code.trim(), Name: objCompany[0].Name, InternationalName: objCompany[0].InternationalName, Industry: objCompany[0].Industry, StockExchange: objCompany[0].StockExchange, ReportGroup: objCompany[0].ReportGroup, RootIndustry: objCompany[0].RootIndustry, IndustryName: objField.length > 0 ? objField[0].Name : '', RootIndustryName: objRootField.length > 0 ? objRootField[0].Name : '', StockExchangeCode: objStockExchange.length > 0 ? objStockExchange[0].Code : '', ListingDate: objCompany[0].ListingDate, CharteredCapital: objCompany[0].CharteredCapital, OutstandingShare: objCompanyRealtime.length > 0 ? objCompanyRealtime[0].OutstandingShare : null, ListedShare: objCompanyRealtime.length > 0 ? objCompanyRealtime[0].ListedShare : null, Website: objCompany[0].Website };
        return result;
    },
    //Ke hoach kinh doanh tiep
    GetNextPlan: function (stockCodeId) {

        return AG.ClientAPI.createData(YearPlanning, stockCodeId, [{ Company: stockCodeId}], { static: ['Id', 'Code', 'Year', 'EBT', 'NBAT', 'DivInShares', 'DivInCash'], dynamic: ['Sales'] });
    },
    //lay chi so cong ty cho phan so sanh
    GetComparison: function (stockCode) {
        return AG.ClientAPI.createData(CompanyRealtime, 'GetComparision_NoLanguage' + stockCode, [{ Code: stockCode}], { static: ['Id', 'Code', 'PriceBookValueShareTotalEquityLFY', 'MarketCapitalization', 'DiffPercentPrice5Days', 'DiffPercentPrice1Month'], dynamic: ['PELTM', 'PELFY', 'PELFI', 'PriceBookValueShareTotalEquityLTM', 'PriceBookValueShareTotalEquityLFI', 'ROELTM', 'ROALTM', 'ROELFY', 'ROALFY', 'GrossProfitMarginLTM', 'GrossProfitMarginLFY', 'GrossProfitMarginLFI', 'IncomeAfterTaxMarginLTM', 'IncomeAfterTaxMarginLFY', 'IncomeAfterTaxMarginLFI', 'TotalDebtTotalEquityLFI', 'TotalDebtTotalEquityLFY'] });
    },
    //lay ra cac chi so bien dong gia doanh nghiep
    GetFluctuationsPrice: function (stockCode) {
        return AG.ClientAPI.createData(CompanyRealtime, 'GetFluctuationsPrice' + stockCode, [{ Code: stockCode}], { static: ['Id', 'Code', 'ClosePrice', 'HighestPrice', 'LowestPrice', /*thay doi 1 ngay*/'DiffPercent', /*thay doi 1 tuan*/'DiffPercentPrice5Days', /*thay doi 1 thang*/'DiffPercentPrice1Month', /*thay doi 3 thang*/'DiffPercentPrice3Months', 'DiffPercentPrice6Months', 'DiffPercentPrice1Year'], dynamic: [ /*Dư mua hôm nay CP*/'TodayAskVolume', /*Dư ban hôm nay CP*/'TodayBidVolume'] });
    },
    //lay ra cac chi so tinh thanh khoan doanh nghiep
    GetLiquidity: function (stockCode) {
        return AG.ClientAPI.createData(CompanyRealtime, 'GetLiquidity' + stockCode, [{ Code: stockCode}], { static: ['Id', 'Code', 'AverageVolume10Days', 'AverageVolume3Months', /*Cao nhat 52 tuan*/'Highest52Weeks', /*thap nhat 52 tuan*/'Lowest52Weeks'], dynamic: ['AverageValue3Months', /*KL NDTNN ban*/'ForeignMatchingSellVolume', /*KL NDTNN ban*/'ForeignMatchingBuyVolume', /*GTGD so với thị trường*/'MarketTradingValue', /*GTGD / Vốn hóa*/'CapitalizationTradingValue'] });
    },
    //lay ra tinh thanh khoan
    GetRiskMarket: function (stockCode) {
        return AG.ClientAPI.createData(CompanyRealtime, 'GetRiskMarket' + stockCode, [{ Code: stockCode}], { static: ['Id', 'Code', /*Beta*/'Beta', 'ClosePrice'], dynamic: [ /*lai lo binh quan ngay*/'DailyAverageGainLoss', 'WeeklyAverageGainLoss', /*Var95% tuan*/'DailyVaR95', 'ClosePrice', /*Var95% tuan*/'WeeklyVaR95', /*Do lech chuan*/'YearStandardDeviation'] });
    },
    GetCriteriaGeneral: function (stockCode) {
        return AG.ClientAPI.createData(CompanyRealtime, 'GetCriteriaGeneral_NoLanguage' + stockCode, [{ Code: stockCode}], { static: ['Id', 'Code', 'ClosePrice', 'RefPrice', 'OutstandingShare', 'MarketCapitalization'], dynamic: ['EPSLTM', 'EPSLFY', 'BookValueShareTotalEquityLFI', 'BookValueShareTotalEquityLFY', 'EBITDALTM', 'EBITDALFY', 'EBITDALFI', 'EBITLTM', 'EBITLFY', 'EBITLFI', 'OutstandingShareLTM'] });
    },
    //-- Last update by TungTT - 31/10/2011 --//
    GetValuation: function (stockCode) {
        return AG.ClientAPI.createData(CompanyRealtime, 'GetValuation_NoLanguage' + stockCode, [{ Code: stockCode}], { static: ['Id', 'Code', 'PriceBookValueShareTotalEquityLFY', 'MarketCapitalization'], dynamic: ['PELTM', 'PELFY', 'PELFI', 'PriceBookValueShareTotalEquityLTM', 'PriceBookValueShareTotalEquityLFI', 'PriceCashFlowShareLFY', 'PriceCashFlowShareLFI', 'PSLTM', 'PSLFY', 'PSLFI', 'TotalRevenueLTM', 'TotalRevenueLFY', 'EVEBITDA', 'EVEBITDALFY', 'EVEBIT', 'EVEBITLFY'] });
    },
    //-- Last update by TungTT - 31/10/2011 --//
    GetRevenue: function (stockCode) {
        return AG.ClientAPI.createData(CompanyRealtime, 'GetRevenue_NoLanguage' + stockCode, [{ Code: stockCode}], { static: ['Id', 'Code'], dynamic: ['GrossProfitMarginLTM', 'GrossProfitMarginLFY', 'GrossProfitMarginLFI', 'OperatingIncomeMarginLTM', 'OperatingIncomeMarginLFY', 'OperatingIncomeMarginLFI', 'IncomeBeforeTaxMarginLTM', 'IncomeBeforeTaxMarginLFY', 'IncomeBeforeTaxMarginLFI', 'IncomeAfterTaxMarginLTM', 'IncomeAfterTaxMarginLFY', 'IncomeAfterTaxMarginLFI', 'EBITDAMarginLTM', 'EBITDAMarginLFY', 'EBITMarginLTM'] });
    },
    //-- Last update by TungTT - 31/10/2011 --//
    GetEffectiveManagement: function (stockCode) {
        return AG.ClientAPI.createData(CompanyRealtime, 'GetEffectiveManagement_NoLanguage' + stockCode, [{ Code: stockCode}], { static: ['Id', 'Code', 'MarketCapitalization'], dynamic: ['ROELTM', 'ROELFY', 'ROALTM', 'ROALFY', 'ROCLTM', 'ROCLFY', 'TotalRevenueLTM', 'TotalRevenueLFY', 'TotalRevenueEmployeeLFY', 'TotalRevenueEmployeeLTM'] });
    },
    //-- Last update by TungTT - 31/10/2011 --//
    GetFinancialHealth: function (stockCode) {
        return AG.ClientAPI.createData(CompanyRealtime, 'GetFinancialHealth_NoLanguage' + stockCode, [{ Code: stockCode}], { static: ['Id', 'Code'], dynamic: ['CashRatioLFY', 'CashRatioLFI', 'QuickRatioLFY', 'QuickRatioLFI', 'LongtermDebtTotalAssetsLFI', 'LongtermDebtTotalAssetsLFY', 'TotalDebtTotalAssetLFI', 'TotalDebtTotalAssetLFY', 'TotalDebtTotalEquityLFI', 'TotalDebtTotalEquityLFY'] });
    },
    //Last update by TungTT 05/11/2011
    GetValuationPrice: function (stockCode) {
        return AG.ClientAPI.createData(CompanyRealtime, 'GetValuationPrice_NoLanguage' + stockCode, [{ Code: stockCode}], { static: ['Id', 'Name', 'Code', 'ClosePrice', 'RefPrice', 'RefPrice', 'Diff', 'DiffPercent', 'Modified', 'OpenPrice', 'HighestPrice', 'LowestPrice', 'TotalShare', 'MarketCapitalization', 'Highest52Weeks', 'Lowest52Weeks', 'AverageVolume10Days', 'ForeignBuyVolume', 'ForeignOwnedRatio', 'Beta'], dynamic: ['TodayAskVolume', 'TodayBidVolume', 'DividendShareCommonStockPrimaryLFY', 'DividendYield', 'EPSLTM', 'PELTM', 'PSLTM', 'BookValueShareTotalEquityLTM', 'PriceBookValueShareTotalEquityLTM']
        });
    },
    //Thong tin lien he
    GetContactInfo: function (stockCode) {
        var objCompany = AG.ClientAPI.createData(CompanyInfomation, 'ProfileSummery', [{ Code: stockCode}], { static: ['Id', 'Website', 'Abbreviation', 'Headquarter', 'Phone', 'Fax', 'Email'] });
        return { Website: objCompany[0].Website, Abbreviation: objCompany[0].Abbreviation, Headquarter: objCompany[0].Headquarter, Phone: objCompany[0].Phone, Logo: '/Handler/WS.StockData/GetCompanyLogo.ashx?StockCode=' + stockCode, Fax: objCompany[0].Fax, Email: objCompany[0].Email };
    },
    GetFinancialAndRatios: function (func, companyId, fReport, fRatio, timeLevel, startIndex, endIndex, reportGroup) {
        var that = this;
        var strfReport = ""; var strfRatio = "";
        for (var i = 0; i < fReport.length; i++) {
            if (fReport[i] != "" && typeof (fReport[i]) != 'undefined') {
                if (i != fReport.length - 1) {
                    strfReport += fReport[i] + ',';
                } else strfReport += fReport[i];
            }
        }
        if (timeLevel == "1") {
            typeRatio = "LFY";
        }
        else { typeRatio = "LFI" }
        for (var i = 0; i < fRatio.length; i++) {
            if (fRatio[i] != "" && typeof (fRatio[i]) != 'undefined') {
                if (i != fRatio.length - 1) {
                    strfRatio += fRatio[i] + typeRatio + ',';
                } else strfRatio += fRatio[i] + typeRatio;
            }
        }
        var objTypeFR = AG.Data.Stock.GetTypeFinancialReport(reportGroup);
        /* Lấy ra loại báo cáo là Cân đối kế toán  */
        for (var i = 0; i < objTypeFR.length; i++) {
            // Kiểm tra trong chuỗi có "BS"(Cân đối kế toán)
            if ((objTypeFR[i].Code).indexOf("ARP") > 0) {
                // Lấy ra loại báo cáo
                typeReport = objTypeFR[i].Id;
                break;
            }
        }
        var url = '/Handler/WS.StockData/SearchFinancialReportByFieldCode.ashx?' + 'Language=' + agLanguageName + '&Level=' + timeLevel + '&Company=' + companyId + '&StartIndex=' + startIndex + '&EndIndex=' + endIndex + '&FinancialReport=' + strfReport + '&FinancialRatio=' + strfRatio + '&TypeReport=' + typeReport;
        ///Handler/WS.StockData/SearchFinancialReportByFieldCode.ashx?Language=vi-VN&Level=1&StartIndex=1&EndIndex=4&Company=00000000-0000-0000-0000-000000000003
        AG.ClientAPI.getDataAsync(url, true, func);
    },
    GetStockScreener: function (listField, stockExchangeId, rootIndustryId, startIndex, endIndex, orderBy, orderType) {
        var strData = '';
        if (stockExchangeId != undefined && stockExchangeId != '' && stockExchangeId != '00000000-0000-0000-0000-000000000000') {
            strData = 'StockExchange=' + stockExchangeId+'&';
        }
        if (rootIndustryId != undefined && rootIndustryId != '' && rootIndustryId != '00000000-0000-0000-0000-000000000000') {
            strData += 'RootIndustry=' + rootIndustryId + '&';
        }
        if (typeof (orderBy) != "undefined")
            strData += 'Order=' + orderBy + '&';
        if (typeof (orderType) != "undefined") {
            strData += 'OrderType=' + orderType + '&';
        }
        strData += 'StartIndex=' + startIndex + '&';
        strData += 'EndIndex' + endIndex + '&';
        var arrListParam = listField.split(';');
        var strField='';
        var strMin='';
        var strMax='';
        for (var i = 0; i < arrListParam.length; i++) {
            var arrParam = arrListParam[i].split(',');
            strField+=';'+arrParam[0];
            strMin+=';'+arrParam[1];
            strMax+=';'+arrParam[2];
        } 
        strData+='Conditions='   +strField+'&';
        strData+='Min='   +strMin+'&';
        strData+='Max='   +strMax+'&';
        $.ajax({
            url: 'StockScreener.ashx',
            data: strData,
            type: 'GET',
            dataType: 'json',
            cache: true,
            async: false,
            success: function (data) {
                return data;
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                return false;
            }
        })
    }
}
