var last_hdl = 'grid';
var last_menu = 'view_menu_grid';
var last_parent = 'li_grid';
var current_grid = 'grid';
var compareDepth = 0;
var maxCompareDepth = 6;
var revert = false;
var checkedArray = new Array();
var checkedArraySize = new Array();
var useFields = false;
var oldUseFields = false;
var useOldFields = false;
var removedComparison = false;
var maxFields = 9;
var selectedFCount = 0;
var selectedFields = new Array();
var oldSelectedFields = new Array();
var comparisonIds = new Array();
var comparisonName = '';
var updClicked = true;
var needClearAll = false;
var gridLoading = false;
var needUpdColumns = false;
var customFiltersData = {};
var customFiltersMin = {};
var customFiltersMax = {};
var customFiltersValues = {};
var defCustomFiltersData = {};
var currentCustomFilter = '';
var currentCustomValues = {'min' : false, 'max' : false, 'values' : false};
var currentFilterTopTd = null;
var filterLoaded = {
    'primineral' : false,
    'allmineral' : false,
    'priexchange' : false,
    'allexchange' : false,
    'mcap' : false,
    'stage' : false,
    'rnr' : false,
    'country' : false
};
var compareFields = {
    'Basic' : {'exchange_name' : 'Exchs',
                    'est_mineral_name' : 'Min. w/ Estimates',
                    'noest_mineral_name' : 'Min. w/o Estimates',
                    'stage' : 'Stage',
                    'ev' : 'EV',
                    'mcap' : 'Mcap',
                    'hqcountry' : 'HQ C',
                    'propcountry' : 'Prop C'
                },
    'Finance' : {'shares' : 'Shares',
                    'fdshares' : 'FD Share',
                    'ps' : 'Price',
                    'revenue' : 'Revenue',
                    'earnings' : 'Earnings',
                    'cffo' : 'CFFO',
                    'cash' : 'Cash',
                    'assets' : 'Curr Asset',
                    'liab' : 'Curr Liab',
                    'tassets' : 'Tot Asset',
                    'debt' : 'Tot Liab'
                },
    'FinanacialStrength': {'wcap' : 'Working capital',
                           'cratio' : 'Current ratio',
                           'dratio' : 'Debt ratio',
                           'eqratio' : 'Equity ratio',
                           'burntime' : 'Burn Time'
                },
    'Value' : {'eps' : 'EPS',
                    'ppe' : 'P/E Ratio',
                    'roe' : 'ROE',
                    'nprofit' : 'Net Prft Margin',
                    'evcffo' : 'Rel Cash Flow',
                    'evrev' : 'EV/Revenue',
                    'dividend' : 'Dividends',
                    'dividend_yield' : 'Dividend Yields'
                },
    'Resource' : {'mineral1_name' : 'Min 1',
                    'mirsc' : 'M&amp;I',
                    'pprsv' : 'P&amp;P',
                    'irsc' : 'Inferred',
                    'prod' : 'Prod',
                    'cost' : 'Cost',
                    'mineral2_name' : 'Min 2',
                    'mirsc2' : 'M&amp;I',
                    'pprsv2' : 'P&amp;P',
                    'irsc2' : 'Inferred',
                    'prod2' : 'Prod',
                    'cost2' : 'Cost'
                },
    'Ore' : {
                    'evm1mirsc' : 'EV/min1<br>(M&amp;I)',
                    'evm1pprsv' : 'EV/min1<br>(P&amp;P)',
                    'evm1total' : 'EV/min1<br>(Total)',
                    'evmirsc_all' : 'EV/value <br>of M&amp;I',
                    'evpprsv_all' : 'EV/value <br>of P&amp;P',
                    'evtotal_all' : 'EV/value <br>of Total',
                    'totalequity_all' : 'Value Total / Share<br>holders\' equity'//,
//                    'evnetres' : 'EV/Net <br>Reserve <br>Value'
                }
}
var allFields = {
    'exchange_name' : 'Exchs',
    'est_mineral_name' : 'Min. w/ Estimates',
    'noest_mineral_name' : 'Min. w/o Estimates',
    'stage' : 'Stage',
    'ev' : 'EV',
    'mcap' : 'Mcap',
    'hqcountry' : 'HQ C',
    'propcountry' : 'Prop C',
    'shares' : 'Shares',
    'fdshares' : 'FD Share',
    'ps' : 'Price',
    'revenue' : 'Revenue',
    'earnings' : 'Earnings',
    'cffo' : 'CFFO',
    'cash' : 'Cash',
    'assets' : 'Curr Asset',
    'liab' : 'Curr Liab',
    'tassets' : 'Tot Asset',
    'debt' : 'Tot Liab',
    'wcap' : 'Working capital',
    'cratio' : 'Current ratio',
    'dratio' : 'Debt ratio',
    'eqratio' : 'Equity ratio',
    'burntime' : 'Burn Time',
    'eps' : 'EPS',
    'ppe' : 'P/E Ratio',
    'roe' : 'ROE',
    'nprofit' : 'Net Profit Margin',
    'evcffo' : 'EV/CFFO',
    'evrev' : 'EV/Revenue',
    'dividend' : 'Dividends',
    'dividend_yield' : 'Dividend Yields',
    'mineral1_name' : 'Min 1',
    'mirsc' : 'M&amp;I',
    'pprsv' : 'P&amp;P',
    'irsc' : 'Inferred',
    'prod' : 'Prod',
    'cost' : 'Cost',
    'mineral2_name' : 'Min 2',
    'mirsc2' : 'M&amp;I',
    'pprsv2' : 'P&amp;P',
    'irsc2' : 'Inferred',
    'prod2' : 'Prod',
    'cost2' : 'Cost',
    'evm1mirsc' : 'EV/min1(M&I)',
    'evm1pprsv' : 'EV/min1(P&P)',
    'evm1total' : 'EV/min1(Total)',
    'evmirsc_all' : 'EV/value of M&I',
    'evpprsv_all' : 'EV/value of P&P',
    'evtotal_all' : 'EV/value f Total',
    'totalequity_all' : 'Value of Total/Shareholders\' equity'
}
var compareClasses = {
    'Basic' : 'basic',
    'Finance' : 'fin',
    'FinanacialStrength' : 'fs',
    'Value' : 'val',
    'Resource' : 'res',
    'Ore' : 'ore'
}

var compareMenuBtn = {};

var defListName = '';
var deflistURL = '';
var deflistType = '';
var deflistMetaTitle = '';
var deflistMetaKeywords = '';
var deflistMetaDescription = '';
var defindexName = '';
var defindexETF = 'N';
var defindexDesc = '';
var defindexSDesc = '';
var defindexLimit = '';
var defindexSortField = '';
var defindexSortDesc = '';
var defindexURL = '';
var defindexMetaTitle = '';
var defindexMetaKeywords = '';
var defindexMetaDescription = '';


clearAllFilters = function(){
    if (!needClearAll) return;
    document.getElementById('ch_propertyFilter').checked = false;
    document.getElementById('img_propertyFilter').src = 'img/unchecked.gif';
    var have_custom_filter = false;
    for (var k in customFiltersData) {
        have_custom_filter = true;
        if (document.getElementById('x-grid3-top-cell-'+k)) {
            document.getElementById('x-grid3-top-cell-'+k).innerHTML = '<div unselectable="on" class="x-grid3-td-inner ">filter</div>';
        }
    }
    customFiltersData = {};
    if (have_custom_filter) {
        if (Ext.get('updButton')) {
            Ext.get('updButton').addClass('btn_result');
            Ext.get('updButton').removeClass('btn_result_dis');
        }
        updClicked = false;
    }
    Filters['stage'].clear();
    Filters['rnr'].clear();
    Filters['mcap'].clear();
    Filters['country'].clear();
    Filters['mineral'].clear();
    Filters['exchange'].clear();
    var prefix = (typeof(customFilterPrefix) != 'undefined')? '&prefix='+customFilterPrefix : '';
    loader.data['onerror'] = function(){};
    loader.processGET('index.php?act=filters&hdl=clear_custom_all'+prefix, function(http){}, false, false);
}

resetSort = function(){
    var gridName = (useFields)? 'field' : current_grid;
    gridArray[gridName].getStore().setMultipleSort(false);
    gridArray[gridName].getStore().sort('company_name', 'ASC', true);
}

checkResetAll = function(){
    var notNeedReset = Filters['stage'].clean && Filters['rnr'].clean && Filters['mcap'].clean &&
        Filters['country'].clean && Filters['mineral'].clean && Filters['exchange'].clean
        && !document.getElementById('ch_propertyFilter').checked;
    for(var k in customFiltersData) {
        notNeedReset = notNeedReset && !customFiltersData[k].used;
    }
    if (notNeedReset){
        Ext.get('resetAllButton').removeClass('btn_reset');
        Ext.get('resetAllButton').addClass('btn_reset_dis');
        needClearAll = false;
    }else{
        Ext.get('resetAllButton').removeClass('btn_reset_dis');
        Ext.get('resetAllButton').addClass('btn_reset');
        needClearAll = true;
    }
}

clearComapreSelection = function(store){
    if (!checkedArray[compareDepth+1]) return;
    checkedArray[compareDepth+1] = new Array();
    checkedArraySize[compareDepth+1] = 0;
    if (Ext.get('refineButton')) {
        Ext.get('refineButton').removeClass('btn_compare');
        Ext.get('refineButton').addClass('btn_compare_dis');
    }
    if (Ext.get('compareImg')) {
        Ext.get('compareImg').set({src:"img/compareInactive.jpg"});
    }
}

compareGrid = function(){
//    var records = gridArray[last_hdl].getStore().getRange();
    if (!checkedArray[compareDepth+1]) return;
    var len = 0;
    for (var i in checkedArray[compareDepth+1]){
        if (!parseInt(i) || checkedArray[compareDepth+1][i]==false ) continue;
        len ++;
    }
    if (len < 2) return;
    //if ((compareDepth >= 0) && (useFields) && (selectedFields.length == 0)) return;
    compareDepth++;
    if (compareDepth > maxCompareDepth){
        compareDepth = maxCompareDepth;
        return;
    }
    if (slider) slider.value = 0;
    for (i in Filters)
        if (Filters[i].FilterMenu.isVisible()) Filters[i].cancel();
    document.getElementById('allFilters').style.display = 'none';
//    document.getElementById('fliterSearchPreviewText').style.display = 'none';
    document.getElementById('allCompare').style.display = '';
    Ext.get('resetAllButton').removeClass('btn_reset');
    Ext.get('resetAllButton').addClass('btn_reset_dis');
    document.getElementById('viewModeButtons').style.display = 'none';
    needClearAll = false;
    useFields = oldUseFields;
    /*
    checkedArray[compareDepth] = new Array();
    for (var i = 0; i < records.length; i++){
        var el = gridArray[last_hdl].getView().getCell(i, 0).childNodes[0].childNodes[0].childNodes;
        if (el[1])
            checkedArray[compareDepth][records[i].get('user_id')] = el[1].checked;
        else checkedArray[compareDepth][records[i].get('user_id')] = false;
    }
    */
    revert = false;
    removedComparison = true;
    filterGrid(last_hdl, 'need_redraw', true, false);
    Ext.get('compareImg').set({src:"img/compareInactive.jpg"});
    var comparebtn = document.getElementById('compareButtonHref');
    if (comparebtn) {
        comparebtn.setAttribute('isSetTooltip', 'false');
        if (typeof(compareTip) != 'undefined') {
            compareTip.hide();
            compareTip.destroy();
        }
        compareTip = showElTooltip(comparebtn, 'Select 2 or more companies to compare.', true);
    }
}

nextCompareGrid = function(){
    if (checkedArraySize[compareDepth+1] && (checkedArraySize[compareDepth+1] < 2)) return;
    compareGrid();
}

addCompany = function(id, rowIndex){
    if (!document.getElementById('company'+id)) return;
    if (!checkedArray[compareDepth+1]){
        checkedArray[compareDepth+1] = new Array();
        checkedArraySize[compareDepth+1] = 0;
    }
    checkedArray[compareDepth+1][id] = document.getElementById('company'+id).checked;
    checkedArraySize[compareDepth+1] += (document.getElementById('company'+id).checked)? 1 : -1;
    var gridName = (useFields)? 'field' : current_grid;
    if (typeof(gridArray[gridName]) != 'undefined') {
        var gridView = gridArray[gridName].getView();
        var row_id = document.getElementById('img_company'+id).getAttribute('row_id');
        var el = Ext.get(gridView.getRow(row_id));
        if (checkedArray[compareDepth+1][id]) {
            el.addClass('row-selected');
        } else {
            el.removeClass('row-selected');
        }
    }
    if ((compareDepth < maxCompareDepth) && (checkedArraySize[compareDepth+1] < 2) && (Ext.get('refineButton'))){
        Ext.get('refineButton').removeClass('btn_compare');
        Ext.get('refineButton').addClass('btn_compare_dis');
    } else if ((compareDepth < maxCompareDepth) && (Ext.get('refineButton'))){
        Ext.get('refineButton').removeClass('btn_compare_dis');
        Ext.get('refineButton').addClass('btn_compare');
    }

    var len = 0;
    for (var i in checkedArray[compareDepth+1]){
        if (!parseInt(i) || checkedArray[compareDepth+1][i]==false ) continue;
        len ++;
    }
    var comparebtn = document.getElementById('compareButtonHref');
    if (comparebtn) {
        comparebtn.setAttribute('isSetTooltip', 'false');
        if (typeof(compareTip) != 'undefined') {
            compareTip.hide();
            compareTip.destroy();
        }
    }
    if (len < 2) {
        Ext.get('compareImg').set({src:"img/compareInactive.jpg"});
        if (comparebtn) {
            compareTip = showElTooltip(comparebtn, 'Select 2 or more companies to compare.', true);
        }
    } else {
        Ext.get('compareImg').set({src:"img/compare.jpg"});
        if (comparebtn) {
            compareTip = showElTooltip(comparebtn, 'Click here to compare selected companies.', true);
        }
    }
    /*if (document.getElementById('company'+id).checked) {
        gridArray[current_grid].getSelectionModel().selectRow(rowIndex, true);
    } else {
        gridArray[current_grid].getSelectionModel().deselectRow(rowIndex)();
    }*/
}

loadCompare = function(depth){
    for (var i=depth+1; i<=compareDepth; i++) checkedArray[i] = false;
    compareDepth = depth;
    for (i in Filters)
        if (Filters[i].FilterMenu.isVisible()) Filters[i].cancel();
    document.getElementById('allFilters').style.display = 'none';
    document.getElementById('allCompare').style.display = '';
    revert = true;
    filterGrid(last_hdl, 'need_redraw', false, false);
}

removeCompare = function(){
    for (var i=1; i<=compareDepth; i++) checkedArray[i] = false;
    compareDepth = 0;
    comparisonName = '';
    comparisonIds = new Array();
    for (i in Filters)
        if (Filters[i].FilterMenu.isVisible()) Filters[i].cancel();
    document.getElementById('allFilters').style.display = '';
    document.getElementById('gridTabs').style.display = 'inline';
//    document.getElementById('gridLinks').style.display = 'inline';
    document.getElementById('allCompare').style.display = 'none';
    document.getElementById('viewModeButtons').style.display = '';
//    document.getElementById('fliterSearchPreviewText').style.display = '';
//    document.getElementById('compareButtonTd').style.display = '';
    removedComparison = true;
    oldUseFields = useFields;
    useFields = false;
    checkResetAll();
    filterGrid(last_hdl, last_hdl, true, false);
}

showGrid = function (hdl, ahref, use_sort) {
	if (loader && !gridLoading) {
		ahref.className="view_menu_curr";
        getObj('li_'+hdl).className = 'current_tab';
		if ( (last_menu!=null) && (last_menu!=ahref.id)) {
            getObj(last_parent).className = '';
			getObj(last_menu).className="view_menu";
		}
        updClicked = true;
        closeCustomFilter();
        var addorder = (typeof(use_sort) != 'undefined')? use_sort : true;
        if ((typeof(currentHdl) != 'undefined')) {
            if (currentHdl == 'grid') {
                filterGrid(hdl, last_hdl, addorder, true);
            } else if ((currentHdl == 'entry') && (typeof(entry) != 'undefined')) {
                entry.filterGrid(hdl, addorder);
            }
        } else {
            loadGrid(hdl, last_hdl, true, '');
        }
		last_hdl=hdl;
		last_menu=ahref.id;
        last_parent = 'li_'+hdl;
		current_grid = hdl;
        document.getElementById('printType').value = hdl;
	}
};

filterGrid = function(hdl, old_hdl, addorder, update){
	if (loader && !gridLoading) {
        if (Ext.get('updButton')) {
            Ext.get('updButton').addClass('btn_result_dis');
            Ext.get('updButton').removeClass('btn_result');
        }
        for (i in Filters)
            if (Filters[i].FilterMenu.isVisible()) Filters[i].cancel();
        var add_list_id = (typeof(lists) != 'undefined')? '&list_id='+lists.listId : '';
        add_list_id += (typeof(use_lists) != 'undefined' && use_lists)? '&use_lists=true' : '';
		var url='index.php?act=company&hdl='+hdl+'_grid&from_hdl='+old_hdl+add_list_id;
        var vars = '';
        var ptype = current_grid;
        var hide_compare = false;
        if (update) checkedArray[compareDepth+1] = false;
        //document.getElementById('gridTabs').style.display = '';
        if (document.getElementById('allFilters').style.display != 'none'){
            var values = new Array();
            values[0] = (Filters['mineral']) ? Filters['mineral'].getValues() : '';
            values[1] = (Filters['stage']) ? Filters['stage'].getValues() : '';
            values[2] = (Filters['rnr']) ? Filters['rnr'].getValues() : '';
            values[3] = (Filters['mcap']) ? Filters['mcap'].getValues() : '';
            values[4] = (Filters['country']) ? Filters['country'].getValues() : '';
            values[5] = (Filters['exchange']) ? Filters['exchange'].getValues() : '';
            for (var i = 0; i < values.length; i++){
                if (values[i] == '') continue;
                vars += '&'+values[i];
            }
            if (document.getElementById('ch_propertyFilter') && document.getElementById('ch_propertyFilter').checked) {
                vars += '&filters[]=propdata&propdata[]=1'
            }
        }else{
            hide_compare = true;
            var depthDiv = document.getElementById('compareDepth');
            var html = '<div class="search_rez"><a href="javascript:void(0);" onclick="removeCompare()" class="btn_back_to_search">back to Search</a></div>';
            html +='<div class="use_cb"><div class="comp_share">Share &nbsp;<div>&nbsp;</div> <a href="javascript:emailGrid()"><img src="img/email_icon.jpg" /></a></span></div>'+
                    '<div>Use the checkboxes to refine your initial comparison.\n\
                    <a href="javascript:void(0);" onclick="document.getElementById(\'helpForm\').submit();" class="use_cb_help">Help</a>\n\
                    </div>';
            var compares = new Array();
            for (var i = 1; i <= compareDepth; i++) {
                compares[i-1] = '<table><tr><td>' + ((i > 1)? '<img src="img/left.gif" /></td><td><a class="revert_link" href="javascript:void(0);" onclick="loadCompare('+(i-1)+');">Revert</a>' : '&nbsp;') +'</td></tr>'+
                                          '<tr>' + ((i > 1)? '<td><img src="img/more.gif"></td>' : '') + '<td><span style=>Compare '+i+'</span></td></tr></table>';
            }

            var comps =  implode('</div><div class="comparison">', compares);
            if (comps != '') comps = '<div class="comparison" style="width:56px;position:relative;top:-1px;">' + comps + '</div>';
            var comp_btn = '<div class="comparison_add"><img src="img/more.gif" ><a href="javascript:nextCompareGrid();" class="btn_compare_dis" id="refineButton">Refine Compare</a></div>';
            depthDiv.innerHTML = html + comps + ((compareDepth < maxCompareDepth)? comp_btn : '');
            if (useFields){
                url='index.php?act=company&hdl=field_grid&from_hdl='+old_hdl;
                ptype = 'field';
                vars += getFields();
                document.getElementById('gridTabs').style.display = 'none';
//                document.getElementById('gridLinks').style.display = 'none';
            }
            for (var i in checkedArray[compareDepth]){
                if (!parseInt(i)) continue;
                if (!checkedArray[compareDepth][i]) continue;
                vars += '&user_id[]='+i;
            }
        }
        if (vars != '') vars = 'search=Y&filters[]=user_id' + vars;
        else vars = 'clear=Y' + vars;
        vars += '&applyCustomFilter=true';

//		url+='_ajax_table&'+dg.data['prefix']+'page='+dg.data['page']+'&'+dg.data['prefix']+'order='+dg.data['order_name']+'&'+dg.data['prefix']+'order_type='+dg.data['order_type']+'&from_hdl='+this.last_hdl;
        document.getElementById('printType').value = ptype;
        
        loadGrid(hdl, old_hdl, addorder, vars, url);
	}
}

loadGrid = function(hdl, old_hdl, addorder, vars, curr_url){
	if (!loader || gridLoading) {
        return;
    }
    gridLoading = true;
    var url='index.php?act=company&hdl='+hdl+'_grid&from_hdl='+old_hdl;
    if ((typeof(curr_url) != 'undefined') && (curr_url != '')) {
        url = curr_url;
    }

    if (slider && sg) {
        url += '&slider_pos=' + slider.getValue();
        url += '&start=' + parseInt(slider.getValue()/sg.data['rows_per_page']) * sg.data['rows_per_page'];
    }else if (typeof(def_slider_pos) != 'undefined') {
        url += '&slider_pos=' + def_slider_pos;
        url += '&start=' + def_start;
    }

    var order = '';
    if (addorder && (typeof(gridArray[current_grid]) != 'undefined') && !useFields){
        var store = gridArray[current_grid].getStore();
        if (store.getMultipleSortStatus()){
            document.getElementById('multipleSortReset').style.display = '';
            document.getElementById('multipleSortCheck').value = 'on';
            document.getElementById('multipleSortCheckA').innerHTML = 'ON';
            document.getElementById('multipleSortCheckA').style.color = 'green';
            var multisort = store.getMultipleSort();
            for (var k in multisort)
                order += '&morder['+multisort[k].weight+']='+k+'&morder_dir['+multisort[k].weight+']='+multisort[k].dir;
            if (order == '') {
                var sort_state = store.getSortState()
                order = '&order='+sort_state['field']+'&order_type='+sort_state['direction']+'&enable_multisort=true';
            }
        }else{
            document.getElementById('multipleSortReset').style.display = 'none';
            document.getElementById('multipleSortCheck').value = '';
            document.getElementById('multipleSortCheckA').innerHTML = 'OFF';
            document.getElementById('multipleSortCheckA').style.color = 'red';
            var sort_state = store.getSortState()
            order = '&order='+sort_state['field']+'&order_type='+sort_state['direction'];
        }
        setMultiTip((document.getElementById('multipleSortCheck').value == 'on'));
    }else {
        if (addorder && (typeof(def_order) != 'undefined')) {
            if (multi_order) {
                order = '';
                for (var k in def_order) {
                    order += '&morder['+def_order[k].weight+']='+k+'&morder_dir['+def_order[k].weight+']='+def_order[k].dir;
                }
                if (order == '') {
                    order = '&order='+def_order+'&order_type='+def_state+'&enable_multisort=true';
                }
            } else {
                order = '&order='+def_order+'&order_type='+def_state;
            }
        }
//      gridArray[current_grid].getStore().setMultipleSort(false);
        //document.getElementById('multipleSortCheck').checked = false;
        if ((typeof(multi_order) != 'undefined') && multi_order) {
            document.getElementById('multipleSortReset').style.display = '';
            document.getElementById('multipleSortCheck').value = 'on';
            document.getElementById('multipleSortCheckA').innerHTML = 'ON';
            document.getElementById('multipleSortCheckA').style.color = 'green';
        } else {
            document.getElementById('multipleSortReset').style.display = 'none';
            document.getElementById('multipleSortCheck').value = '';
            document.getElementById('multipleSortCheckA').innerHTML = 'OFF';
            document.getElementById('multipleSortCheckA').style.color = 'red';
        }
        setMultiTip((document.getElementById('multipleSortCheck').value == 'on'));
    }
    var form=new DEVXForm({'loader':loader});
    form.loadObj2IDPOST(url+order, vars, 'grid_ext', function () {
//        if ((typeof(hide_compare) != 'undefined') && hide_compare) document.getElementById('compareButtonTd').style.display = 'none';
        eval(form.jscode);
        if (Ext.get('overRankInfo')) Ext.get('overRankInfo').hide();
        if (Ext.get('overRankInfoProd')) Ext.get('overRankInfoProd').hide();
        if (typeof(hide_compare) == 'undefined' && typeof(gridArray[current_grid]) != 'undefined') {
            gridArray[current_grid].getStore().on('sort', clearComapreSelection);
        }
    });
}

updColumns = function(){
    if (!needUpdColumns) return;
    if ((typeof(currentHdl) != 'undefined') && (currentHdl == 'entry') && (typeof(entry) != 'undefined')) {
        entry.filterGrid(last_hdl);
    } else {
        filterGrid(last_hdl, 'need_redraw', true, true);
    }
    needUpdColumns = false;
    Ext.get('columnsUpdButton').removeClass('btn_columns_upd');
    Ext.get('columnsUpdButton').addClass('btn_columns_upd_dis');
}

saveOldFields = function(){
    if (needUpdColumns) return;
    oldSelectedFields = new Array();
    for (var i = 0; i < selectedFields.length; i++)
        oldSelectedFields[i] = selectedFields[i];
}

selectField = function (number){
    var checkbox = document.getElementById('field_checkbox'+number);
    var image = document.getElementById('field_img'+number);
    checkbox.checked = !checkbox.checked;
    if ((checkbox.checked) && (selectedFCount == maxFields)){
        checkbox.checked = false; return;
    }
    if (checkbox.checked){
        selectedFields[selectedFCount] = checkbox.value;
        selectedFCount++;
    }else{
        for (var i = 0; i < selectedFields.length; i++)
            if (selectedFields[i] == checkbox.value) break;
        if (i == 0) selectedFields.shift();
            else selectedFields.splice(i, 1);
        selectedFCount--;
    }
    var html = new Array();
    for (var i = 0; i < selectedFields.length; i++){
        for (var k in compareFields){
            if (!compareFields[k][selectedFields[i]]) continue;
            var field_name = compareFields[k][selectedFields[i]];
            field_name = field_name.replace('<br>', '', 'gi');
            html[i] = '<span><input type="button" onclick="removeField('+i+')">'+field_name+'</span>';
            break;
        }
    }
    if (useFields){
        if (Ext.get('updButton')) {
            Ext.get('updButton').addClass('btn_result');
            Ext.get('updButton').removeClass('btn_result_dis');
        }
        updClicked = false;
        needUpdColumns = true;
        Ext.get('columnsUpdButton').removeClass('btn_columns_upd_dis');
        Ext.get('columnsUpdButton').addClass('btn_columns_upd');
    }
    document.getElementById('comapreFieldsView').innerHTML = implode(' ', html);
    document.getElementById('compareCountView').innerHTML = selectedFields.length+' of 9';
    image.src = 'img/'+((checkbox.checked)? 'checked' : 'unchecked') + '.gif';
}

removeField = function (id){
    document.getElementById('field_checkbox'+selectedFields[id]).checked = false;
    document.getElementById('field_img'+selectedFields[id]).src = 'img/unchecked.gif';
    if (id == 0) selectedFields.shift();
        else selectedFields.splice(id, 1);
    selectedFCount--;
    var html = new Array();
    for (var i = 0; i < selectedFields.length; i++){
        for (var k in compareFields){
            if (!compareFields[k][selectedFields[i]]) continue;
            var field_name = compareFields[k][selectedFields[i]];
            field_name = field_name.replace('<br>', '', 'gi');
            html[i] = '<span><input type="button" onclick="removeField('+i+')">'+field_name+'</span>';
            break;
        }
    }
    if (useFields){
        if (Ext.get('updButton')) {
            Ext.get('updButton').addClass('btn_result');
            Ext.get('updButton').removeClass('btn_result_dis');
        }
        updClicked = false;
        needUpdColumns = true;
        Ext.get('columnsUpdButton').removeClass('btn_columns_upd_dis');
        Ext.get('columnsUpdButton').addClass('btn_columns_upd');
    }
    document.getElementById('comapreFieldsView').innerHTML = implode(' ', html);
    document.getElementById('compareCountView').innerHTML = selectedFields.length+' of 9';
}

saveGrid = function(){
    if (document.getElementById('allFilters').style.display != 'none') return;
    if (user_id == 0){
        Ext.MessageBox.show({
            buttons : Ext.MessageBox.OK,
            icon : Ext.MessageBox.ERROR,
            msg : 'Please, log in before save',
            title : 'Warning'
        });
        return;
    }
    var msg = 'Comparison Name: <input type="text" id="saveNameText" size="20" style="width:245px;vertical-align:middle" value="'+comparisonName+'">';
    if (comparisonIds.length > 0){
        msg = '<input type="radio" name="overwrite" id="overwriteRadio" checked\n\
                onclick="document.getElementById(\'saveNameText\').disabled = true" style="vertical-align:middle"> Overwrite saved comparison&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n\
                <input type="radio" name="overwrite" id="newverRadio"\n\
                onclick="document.getElementById(\'saveNameText\').disabled = false" style="vertical-align:middle"> Save comparison as new<br><br>\n\
                Comparison Name: \n\
                <input type="text" id="saveNameText" size="20" style="width:245px;vertical-align:middle" value="'+comparisonName.replace(/"/g, '&quot;')+'" disabled>';
    }
    Ext.DevxMessageBox.show({
        buttons : Ext.MessageBox.OKCANCEL,
        title : 'Save comparison',
        msg : msg,
        width : 400,
        fn : function(btn, text){
            Ext.DevxMessageBox.setToHide(true);
            text = document.getElementById('saveNameText').value;
            if (btn == 'cancel') return;
            var url = 'index.php?act=company&hdl=save_comparison';
            var vars = 'depth='+compareDepth;
            if (comparisonIds.length > 0){
                vars += '&overwrite='+((document.getElementById('overwriteRadio').checked)? 'true' : 'false');
                if (document.getElementById('overwriteRadio').checked)
                    vars += '&name='+rawurlencode(comparisonName);
                else
                    vars += '&name='+rawurlencode(text);
                for (var i = 0; i < comparisonIds.length; i++)
                    vars += '&comp_ids[]='+comparisonIds[i];
            }else
                vars += '&name='+rawurlencode(text);
            for (var i = 1;  i <= compareDepth; i++){
                for (var j in checkedArray[i]){
                    if (!parseInt(j)) continue;
                    if (!checkedArray[i][j]) continue;
                    vars += '&user_id['+(i-1)+'][]='+j;
                }
            }
            if (useFields){
                for (var i = 0; i < selectedFields.length; i++)
                    vars += '&fields[]='+selectedFields[i];
            }
            loader.data['onerror'] = function(){};
            loader.processPOST(url, vars, function(http){
                var res = JSON.parse(http.responseText);
                if ((comparisonIds.length > 0) && (document.getElementById('overwriteRadio').checked)){}else
                    comparisonName = text;
                comparisonIds = res['comp_id'];
            }, false, false);
        }
    });
}

saveList = function(error, error_text){
    if (document.getElementById('allFilters').style.display == 'none') return;
    if (user_id == 0){
        Ext.MessageBox.show({
            buttons : Ext.MessageBox.OK,
            icon : Ext.MessageBox.ERROR,
            msg : 'Please, log in before save',
            title : 'Warning'
        });
        return;
    }
    listId = (typeof(listId) != 'undefined')? listId : 0;
    listURL = (typeof(listURL) != 'undefined')? listURL : '';
    listType = (typeof(listType) != 'undefined')? listType : 'SECTOR';
    listMetaTitle = (typeof(listMetaTitle) != 'undefined')? listMetaTitle : '';
    listMetaKeywords = (typeof(listMetaKeywords) != 'undefined')? listMetaKeywords : '';
    listMetaDescription = (typeof(listMetaDescription) != 'undefined')? listMetaDescription : '';
    var msg = '<table class="index_save"><tr><th>List Title<font color=red>*</font>:</th> <td><input type="text" id="listName" size="20" vertical-align:middle" value="'+listName+'"></td></tr>\n\
        <tr><th>List URL<font color=red>*</font>:</th> <td><input type="text" id="listURL" size="20" style="vertical-align:middle" value="'+listURL+'"></td></tr>\n\
        <tr><th>List Page Title:</th> <td><input type="text" id="listMetaTitle" size="20" style="vertical-align:middle" value="'+listMetaTitle+'"></td></tr>\n\
        <tr><th>List Keywords:</th> <td><textarea id="listMetaKeywords" cols=28 rows=3 style="">'+listMetaKeywords+'</textarea></td></tr>\n\
        <tr><th>List Description:</th> <td><textarea id="listMetaDescription" cols=28 rows=3 style="">'+listMetaDescription+'</textarea></td></tr>\n\
        <tr><th>Type<font color=red>*</font>:</th> <td><select id="listType" style="vertical-align:middle">\n\
        <option value="SECTOR" '+((listType != 'MINERAL' && listType != 'EDITOR')? 'selected' : '')+'>Sector List\n\
        <option value="MINERAL" '+((listType == 'MINERAL')? 'selected' : '')+'>Mineral List\n\
        <option value="EDITOR" '+((listType == 'EDITOR')? 'selected' : '')+'>Editor\'s Pick\n\
        </select></td></tr></table>\n\
    ';
    error = (typeof(error) != 'undefined')? error : false;
    if (error) {
        msg = '<font color=red>' + error_text + '</font>' + msg;
    }
    /*
    if (listId > 0){
        msg = '<input type="radio" name="overwrite" id="overwriteRadio" '+((error)? '' : 'checked')+'\n\
                onclick="document.getElementById(\'saveNameText\').disabled = true;" style="vertical-align:middle"> Overwrite saved list&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n\
                <input type="radio" name="overwrite" id="newverRadio" '+((error)? 'checked' : '')+'\n\
                onclick="document.getElementById(\'saveNameText\').disabled = false" style="vertical-align:middle"> Save list as new<br><br>\n\
                List Name: \n\
                <input type="text" id="saveNameText" size="20" style="width:245px;vertical-align:middle" value="'+listName.replace(/"/g, '&quot;')+'" '+((error)? '' : 'disabled')+'>';
    }
    */
    Ext.DevxMessageBox.show({
        buttons : Ext.MessageBox.OKCANCEL,
        title : 'Save list',
        msg : msg,
        width : 400,
        fn : function(btn, text){
            Ext.DevxMessageBox.setToHide(true);
            if (btn == 'cancel'){
                listName = defListName;
                listURL = deflistURL;
                listType = deflistType;
                listMetaTitle = deflistMetaTitle;
                listMetaKeywords = deflistMetaKeywords;
                listMetaDescription = deflistMetaDescription;
                return;
            }
            Ext.DevxMessageBox.setToHide(false);
            var hdl = (listId)? 'update&id='+listId : 'insert';
            var url = 'index.php?act=adm_lists&hdl='+hdl+'&insert_filters=Y';
            var name = document.getElementById('listName').value;
            var link = document.getElementById('listURL').value;
            var type_ = document.getElementById('listType').options[document.getElementById('listType').selectedIndex].value;
            var metaTitle = document.getElementById('listMetaTitle').value;
            var metaKeywords = document.getElementById('listMetaKeywords').value;
            var metDescription = document.getElementById('listMetaDescription').value;
            var vars = 't_name='+name+'&t_link='+link+'&t_type_='+type_+'&t_meta_title='+metaTitle+'&t_meta_keywords='+metaKeywords+'&t_meta_description='+metDescription;

            loader.data['onerror'] = function(){};
            loader.processPOST(url, vars, function(http){
                var xml=http.responseXML;
                var err = xml.getElementsByTagName("error");
                if ((err.length!=null) && (err.length>0)) {
                    err = err[0].childNodes.item(0).data;
                } else {
                    err = '';
                }
                if (err > '') {
                    listName = name;
                    listURL = link;
                    listType = type_;
                    listMetaTitle = metaTitle;
                    listMetaKeywords = metaKeywords;
                    listMetaDescription = metDescription;
                    saveList(true, err);
                } else {
                    Ext.DevxMessageBox.setToHide(true);
                    Ext.DevxMessageBox.hide();
                    Ext.DevxMessageBox.show({
                        buttons : Ext.MessageBox.OK,
                        title : 'Save list',
                        msg : 'List successfully saved. Use list URL name for all functions: '+link,
                        width : 400
                    });
                    listName = defListName;
                    listURL = deflistURL;
                    listType = deflistType;
                    listMetaTitle = deflistMetaTitle;
                    listMetaKeywords = deflistMetaKeywords;
                    listMetaDescription = deflistMetaDescription;
                }
            }, false, false);
        }
    });
}

saveIndex = function(error, error_text){
    if (user_id == 0){
        Ext.MessageBox.show({
            buttons : Ext.MessageBox.OK,
            icon : Ext.MessageBox.ERROR,
            msg : 'Please, log in before save',
            title : 'Warning'
        });
        return;
    }
    indexId = (typeof(indexId) != 'undefined')? indexId : 0;
    indexName = (typeof(indexName) != 'undefined')? indexName : '';
    indexETF = (typeof(indexETF) != 'undefined')? indexETF : '';
    indexSDesc = (typeof(indexDesc) != 'undefined')? indexSDesc : '';
    indexDesc = (typeof(indexDesc) != 'undefined')? indexDesc : '';
    indexLimit = (typeof(indexLimit) != 'undefined')? indexLimit : '';
    indexSortField = (typeof(indexSortField) != 'undefined')? indexSortField : '';
    indexSortDesc = (typeof(indexSortDesc) != 'undefined')? indexSortDesc : '';
    indexURL = (typeof(indexURL) != 'undefined')? indexURL : '';
    indexMetaTitle = (typeof(indexMetaTitle) != 'undefined')? indexMetaTitle : '';
    indexMetaKeywords = (typeof(indexMetaKeywords) != 'undefined')? indexMetaKeywords : '';
    indexMetaDescription = (typeof(indexMetaDescription) != 'undefined')? indexMetaDescription : '';
    var msg = '<table class="index_save"><tr><th>Index name<font color=red>*</font>:</th> <td><input type="text" id="indexName" size="20" value="'+indexName+'"></td></tr>\n\
        <tr><th>Index URL<font color=red>*</font>:</th> <td><input type="text" id="indexURL" size="20" style="vertical-align:middle" value="'+indexURL+'"></td></tr>\n\
        <tr><th>Index short description:</th> <td><input type="text" id="indexSDesc" size="20" value="'+indexSDesc+'"></td></tr>\n\
        <tr><th>Index description:</th> <td><textarea id="indexDesc" cols=20 rows=3>'+indexDesc+'</textarea></td></tr>\n\
        <tr><th>Maximum companies:</th> <td><input type="text" id="indexLimit" size="20"  value="'+indexLimit+'"></td></tr>\n\
        <tr><th>Sort companies by:</th> <td><select id="indexSortField">\n\
        <option value="">Select field</option>\n\
    ';
    for (var k in allFields) {
        msg+= '<option value="'+k+'" '+((indexSortField == k)? 'selected' : '')+'>'+allFields[k]+'</option>\n';
    }
    msg += '</select></td></tr>\n\
        <tr><th>Descending sort:</th> <td><input type="checkbox" id="indexSortDesc" '+((indexSortDesc == 'Y')? 'checked' : '')+' style="width:14px"></td></tr>\n\
        <tr><th>Is ETF:</th> <td><input type="checkbox" id="indexETF" '+((indexETF == 'Y')? 'checked' : '')+' style="width:14px"></td></tr>\n\
        <tr><th>Index Page Title:</th> <td><input type="text" id="indexMetaTitle" size="20" style="vertical-align:middle" value="'+indexMetaTitle+'"></td></tr>\n\
        <tr><th>Index Keywords:</th> <td><textarea id="indexMetaKeywords" cols=28 rows=3 style="">'+indexMetaKeywords+'</textarea></td></tr>\n\
        <tr><th>Index Description:</th> <td><textarea id="indexMetaDescription" cols=28 rows=3 style="">'+indexMetaDescription+'</textarea></td></tr>\n\
        </table>';
    error = (typeof(error) != 'undefined')? error : false;
    if (error) {
        msg = '<font color=red>' + error_text + '</font>' + msg;
    }
    /*
    if (listId > 0){
        msg = '<input type="radio" name="overwrite" id="overwriteRadio" '+((error)? '' : 'checked')+'\n\
                onclick="document.getElementById(\'saveNameText\').disabled = true;" style="vertical-align:middle"> Overwrite saved list&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n\
                <input type="radio" name="overwrite" id="newverRadio" '+((error)? 'checked' : '')+'\n\
                onclick="document.getElementById(\'saveNameText\').disabled = false" style="vertical-align:middle"> Save list as new<br><br>\n\
                List Name: \n\
                <input type="text" id="saveNameText" size="20" style="width:245px;vertical-align:middle" value="'+listName.replace(/"/g, '&quot;')+'" '+((error)? '' : 'disabled')+'>';
    }
    */
    Ext.DevxMessageBox.show({
        buttons : Ext.MessageBox.OKCANCEL,
        title : 'Save index',
        msg : msg,
        width : 400,
        fn : function(btn, text){
            Ext.DevxMessageBox.setToHide(true);
            if (btn == 'cancel'){
                indexName = defindexName;
                indexETF = defindexETF;
                indexSDesc = defindexSDesc;
                indexDesc = defindexDesc;
                indexLimit = defindexLimit;
                indexSortField = defindexSortField;
                indexSortDesc = defindexSortDesc;
                indexURL = defindexURL;
                indexMetaTitle = defindexMetaTitle;
                indexMetaKeywords = defindexMetaKeywords;
                indexMetaDescription = defindexMetaDescription;
                return;
            }
            Ext.DevxMessageBox.setToHide(false);
            var hdl = (indexId)? 'update&id='+indexId : 'insert';
            var url = 'index.php?act=adm_indexes&hdl='+hdl+'&insert_filters=Y';
            var name = document.getElementById('indexName').value;
            var etf = (document.getElementById('indexETF').checked)? 'Y' : 'N';
            var description = document.getElementById('indexDesc').value;
            var sdescription = document.getElementById('indexSDesc').value;
            var limit = document.getElementById('indexLimit').value;
            var sort_field = document.getElementById('indexSortField').options[document.getElementById('indexSortField').selectedIndex].value;
            var sort_desc = (document.getElementById('indexSortDesc').checked)? 'Y' : 'N';
            var link = document.getElementById('indexURL').value;
            var metaTitle = document.getElementById('indexMetaTitle').value;
            var metaKeywords = document.getElementById('indexMetaKeywords').value;
            var metDescription = document.getElementById('indexMetaDescription').value;
            var type_ = 'FILTER';
            if (typeof(entry) != 'undefined') {
                type_ = 'LIST';
            }
            var vars = 't_name='+str_replace('&', '%26', name)+'&t_description='+str_replace('&', '%26', description)+'&t_short_description='+str_replace('&', '%26', sdescription)
                +'&t_type_='+type_+'&t_limit_='+limit+'&t_sort_field='+sort_field+'&t_sort_desc='+sort_desc+'&t_is_etf='+etf
                +'&t_link='+link+'&t_meta_title='+metaTitle+'&t_meta_keywords='+metaKeywords+'&t_meta_description='+metDescription;;

            loader.data['onerror'] = function(){};
            loader.processPOST(url, vars, function(http){
                var xml=http.responseXML;
                var err = xml.getElementsByTagName("error");
                if ((err.length!=null) && (err.length>0)) {
                    err = err[0].childNodes.item(0).data;
                } else {
                    err = '';
                }
                if (err > '') {
                    indexName = name;
                    indexETF = etf;
                    indexDesc = description;
                    indexSDesc = sdescription;
                    indexLimit = limit;
                    indexSortField = sort_field;
                    indexSortDesc = sort_desc;
                    indexURL = link;
                    indexMetaTitle = metaTitle;
                    indexMetaKeywords = metaKeywords;
                    indexMetaDescription = metDescription;
                    saveIndex(true, err);
                } else {
                    Ext.DevxMessageBox.setToHide(true);
                    Ext.DevxMessageBox.hide();
                    Ext.DevxMessageBox.show({
                        buttons : Ext.MessageBox.OK,
                        title : 'Save index',
                        msg : 'Index successfully saved',
                        width : 400
                    });
                    indexName = defindexName;
                    indexETF = defindexETF;
                    indexDesc = defindexDesc;
                    indexSDesc = defindexSDesc;
                    indexLimit = defindexLimit;
                    indexSortField = defindexSortField;
                    indexSortDesc = defindexSortDesc;
                    indexURL = defindexURL;
                    indexMetaTitle = defindexMetaTitle;
                    indexMetaKeywords = defindexMetaKeywords;
                    indexMetaDescription = defindexMetaDescription;
                }
            }, false, false);
        }
    });
}

printGrid = function(){
    if (document.getElementById('noRows').style.display != 'none') return;
    if (slider.getValue()) {
        document.getElementById('printStart').value = slider.getValue();
    } else {
        document.getElementById('printStart').value = 0;
    }
    var order = '';
    var gridName = current_grid;
    if (useFields && (document.getElementById('allFilters').style.display == 'none'))
        gridName = 'field';
    var store = gridArray[gridName].getStore();
    if (store.getMultipleSortStatus()){
        var multisort = store.getMultipleSort();
        for (var k in multisort)
            order += '&morder['+multisort[k].weight+']='+k+'&morder_dir['+multisort[k].weight+']='+multisort[k].dir;
    }else{
        var sort_state = store.getSortState();
        order = '&order='+sort_state['field']+'&order_type='+sort_state['direction'];
    }
    if ((typeof(currentHdl) != 'undefined') && (currentHdl == 'entry')) {
        order += '&use_entry=true';
    }
    document.getElementById('printForm').action="index.php?act=company&hdl=print_grid"+order;
    document.getElementById('printForm').submit();
}

emailGrid = function(entry){
    if (document.getElementById('noRows').style.display != 'none') return;
    var start = 0;
    if (slider.getValue()) {
        start = slider.getValue();
    } else {
        start = 0;
    }
    var use_entry = ((typeof(entry) != 'undefined') && entry)? '&use_entry=true' : '';
    use_entry += ((typeof(lists) != 'undefined') && lists)? '&use_list=true&list_id='+lists.listId : '';
    document.getElementById('printStart').value = start;
    var order = '';
    var gridName = current_grid;
    if (useFields && (selectedFields.length > 0)) {
        var field = true;
        if (document.getElementById('allFilters')) {
            field = (document.getElementById('allFilters').style.display == 'none');
        }
        if (field) {
            gridName = 'field';
        }
    }
    var store = gridArray[gridName].getStore();
    if (store.getMultipleSortStatus()){
        var multisort = store.getMultipleSort();
        for (var k in multisort)
            order += '&morder['+multisort[k].weight+']='+k+'&morder_dir['+multisort[k].weight+']='+multisort[k].dir;
    }else{
        var sort_state = store.getSortState();
        order = '&order='+sort_state['field']+'&order_type='+sort_state['direction'];
    }
    //document.getElementById('printForm').action="index.php?act=company&hdl=email&start="+start+order;
    //document.getElementById('printForm').submit();
    var config;
    if ((typeof(user_id) != 'undefined') && (user_id > 0)){
        config = {

            title : 'Send email to friend with current comparison results/current grid results',
            buttons : Ext.MessageBox.OKCANCEL,
            width : 550,
            msg : 'Enter email<br>\n\
                    <input type=\'text\' id=\'emailInput\' class=\'ext-mb-input\'>',
            fn : function(btn, text){
                Ext.DevxMessageBox.setToHide(true);
                if (btn == 'cancel') return;
                var email = document.getElementById('emailInput').value;
                var pattern = /^[a-z0-9!#$%&*+-=?^_`{|}~]+(\.[a-z0-9!#$%&*+-=?^_`{|}~]+)*@([-a-z0-9]+\.)+([a-z]{2,6})$/i;
                if (!email.match(pattern) || (email == '')){
                    a = Math.ceil(Math.random() * 10);
                    b = Math.ceil(Math.random() * 10);
                    c = a + b;
                    config.msg = '<font color="red">Wrong email</font><br>\n\
                            Enter email<br>\n\
                            <input type=\'text\' id=\'emailInput\' class=\'ext-mb-input\' value=\''+email+'\'>',
                    Ext.DevxMessageBox.setToHide(false);
                    Ext.DevxMessageBox.updateText(config.msg);
                    return;
                }
                var url = "index.php?act=company&hdl=email&start="+start+"&email="+email+order+use_entry;
                var vars = 'start='+document.getElementById('printStart').value+'&ptype='+document.getElementById('printType').value;
                loader.data['onerror'] = function(){};
                Ext.DevxMessageBox.setToHide(true);
                loader.processPOST(url, vars, function(http){
                    var msg = '';
                    if (http.responseText == 'OK') msg = 'Your email sent successfully';
                        else msg = 'There were some errors when sending email';
                    Ext.DevxMessageBox.show({
                        buttons : Ext.MessageBox.OK,
                        title : 'Information',
                        msg : msg
                    });
                }, false, false);
            }
        }
    }else{
        //show captcha
        var a = Math.ceil(Math.random() * 10);
        var b = Math.ceil(Math.random() * 10);
        var c = a + b;
        config = {
            buttons : Ext.MessageBox.OKCANCEL,
            title : 'Send email to friend with current comparison results/current grid results',
            width : 550,
            msg : 'To prevent sending emails by bots please answer the question below:<br>What is '+a+' + '
                    +b+'?<br><input type=\'text\' id=\'simpleCaptcha\' class=\'ext-mb-input\'>\n\
                    <br>Enter your name<br>\n\
                    <input type=\'text\' id=\'nameInput\' class=\'ext-mb-input\'>\n\
                    <br>Enter email<br>\n\
                    <input type=\'text\' id=\'emailInput\' class=\'ext-mb-input\'>',
            fn : function(btn, text){
                Ext.DevxMessageBox.setToHide(true);
                if (btn == 'cancel') return;
                var email = document.getElementById('emailInput').value;
                var name = document.getElementById('nameInput').value;
                if (c != document.getElementById('simpleCaptcha').value){
                    a = Math.ceil(Math.random() * 10);
                    b = Math.ceil(Math.random() * 10);
                    c = a + b;
                    config.msg = '<font color="red">Wrong answer. Try again.</font><br>To prevent sending emails by bots please answer the question below:<br>What is '+a+' + '
                            +b+'?<br><input type=\'text\' id=\'simpleCaptcha\' class=\'ext-mb-input\'>\n\
                            <br>Enter your name<br>\n\
                            <input type=\'text\' id=\'nameInput\' class=\'ext-mb-input\' value=\''+name+'\'>\n\
                            <br>Enter email<br>\n\
                            <input type=\'text\' id=\'emailInput\' class=\'ext-mb-input\' value=\''+email+'\'>',
                    Ext.DevxMessageBox.setToHide(false);
                    Ext.DevxMessageBox.updateText(config.msg);
                    return;
                }
                var pattern = /^[a-z0-9!#$%&*+-=?^_`{|}~]+(\.[a-z0-9!#$%&*+-=?^_`{|}~]+)*@([-a-z0-9]+\.)+([a-z]{2,6})$/i;
                if (!email.match(pattern) || (email == '')){
                    a = Math.ceil(Math.random() * 10);
                    b = Math.ceil(Math.random() * 10);
                    c = a + b;
                    config.msg = '<font color="red">Wrong email</font><br>\n\
                            To prevent sending emails by bots please answer the question below:<br>What is '+a+' + '
                            +b+'?<br><input type=\'text\' id=\'simpleCaptcha\' class=\'ext-mb-input\'>\n\
                            <br>Enter your name<br>\n\
                            <input type=\'text\' id=\'nameInput\' class=\'ext-mb-input\' value=\''+name+'\'>\n\
                            <br>Enter email<br>\n\
                            <input type=\'text\' id=\'emailInput\' class=\'ext-mb-input\' value=\''+email+'\'>',
                    Ext.DevxMessageBox.setToHide(false);
                    Ext.DevxMessageBox.updateText(config.msg);
                    return;
                }
                name = urlencode(name);
                if (name == ''){
                    a = Math.ceil(Math.random() * 10);
                    b = Math.ceil(Math.random() * 10);
                    c = a + b;
                    config.msg = '<font color="red">Enter your name.</font><br>\n\
                            To prevent sending emails by bots please answer the question below:<br>What is '+a+' + '
                            +b+'?<br><input type=\'text\' id=\'simpleCaptcha\' class=\'ext-mb-input\'>\n\
                            <br>Enter your name<br>\n\
                            <input type=\'text\' id=\'nameInput\' class=\'ext-mb-input\' value=\''+name+'\'>\n\
                            <br>Enter email<br>\n\
                            <input type=\'text\' id=\'emailInput\' class=\'ext-mb-input\' value=\''+email+'\'>',
                    Ext.DevxMessageBox.setToHide(false);
                    Ext.DevxMessageBox.updateText(config.msg);
                    return;
                }
                var url = "index.php?act=company&hdl=email&start="+start+"&email="+email+"&name="+name+order+use_entry;
                var vars = 'start='+document.getElementById('printStart').value+'&ptype='+document.getElementById('printType').value;
                loader.data['onerror'] = function(){};
                Ext.DevxMessageBox.setToHide(true);
                loader.processPOST(url, vars, function(http){
                    var msg = '';
                    if (http.responseText == 'OK') msg = 'Email successfully sent';
                        else msg = 'There were some errors when sending email';
                    Ext.DevxMessageBox.show({
                        buttons : Ext.MessageBox.OK,
                        title : 'Email grid result',
                        msg : msg
                    });
                }, false, false);
            }
        };
    }
    Ext.DevxMessageBox.show(config);
}

checkPropertyFilter = function(el){
    var checkbox = document.getElementById('ch_propertyFilter');
    checkbox.checked = !checkbox.checked;
    el.src = 'img/'+((checkbox.checked)? '' : 'un')+'checked.gif';
    Ext.get('updButton').addClass('btn_result');
    Ext.get('updButton').removeClass('btn_result_dis');
    updClicked = false;
    checkResetAll();
}

getFields = function(){
    var vars = '';
    if (useOldFields){
        useOldFields = false;
        var needUpd = false;
        needUpdColumns = false;
        Ext.get('columnsUpdButton').removeClass('btn_columns_upd');
        Ext.get('columnsUpdButton').addClass('btn_columns_upd_dis');
        for (var i = 0; i < oldSelectedFields.length; i++){
            vars += '&fields[]='+oldSelectedFields[i];
            var j = 0;
            while (j < selectedFields.length){
                if (selectedFields[j] == oldSelectedFields[i]) break;
                j++;
            }
            if (j == selectedFields.length) needUpd = true;
        }
        if (selectedFields.length > oldSelectedFields.length) needUpd = true;
        if (needUpd){
            needUpdColumns = true;
            Ext.get('columnsUpdButton').addClass('btn_columns_upd');
            Ext.get('columnsUpdButton').removeClass('btn_columns_upd_dis');
        }
    }else{
        for (var i = 0; i < selectedFields.length; i++){
            vars += '&fields[]='+selectedFields[i];
        }
    }
    return vars;
}

showTooltip = function (ahref) {
    if (ahref.getAttribute('isSetTooltip') != 'true') {
        ahref.setAttribute('isSetTooltip', 'true');
        var html = '';
        if (current_grid == 'grid' && !useFields) {
            html = 'Click to view preview<br />';
        } else {
            html = 'Click to view company pages w/ full data<br />';
        }
        var text_div=getObj(ahref.id+'_tooltip_text');
        if (typeof(text_div)!='undefined' && text_div!=null) {
            html += text_div.innerHTML;
        } else {
            html += ahref.innerHTML;
        }
        var tt = new Ext.ToolTip({
            target: ahref,
            html: html
        });
        var el = Ext.get(ahref);
        tt.targetXY = el.getXY();
        tt.show();
    }
};

showTooltipIfNeed = function (td, hidden) {
    var extEl = Ext.get(td);
    if (!extEl) {
        return;
    }
    if (td.getAttribute('oldName') == td.innerHTML && td.getAttribute('oldWidth') == extEl.getWidth()) {
        return;
    }
    if (typeof(hidden) == 'undefined') {
        td.setAttribute('oldName', td.innerHTML);
        td.setAttribute('oldWidth', extEl.getWidth());
    }
    var html = td.innerHTML;
    if (typeof(td.toolTip) != 'undefined') {
        td.toolTip.hide();
        td.toolTip.destroy();
    }
    if (Ext.util.TextMetrics.createInstance(td).getWidth(html) > extEl.getWidth()) {
        if (typeof(hidden) != 'undefined') {
            return;
        }
        td.toolTip = new Ext.ToolTip({
            target: td,
            html: html
        });
        td.toolTip.targetXY = extEl.getXY();
        td.toolTip.show();
    }
};

showElTooltip = function (el, text, hidden) {
    if (el.getAttribute('isSetTooltip') != 'true') {
        el.setAttribute('isSetTooltip', 'true');
        var tt = new Ext.ToolTip({
            target: el,
            html: text
        });
        var ext_el = Ext.get(el);
        tt.targetXY = ext_el.getXY();
        if (typeof(hidden) == 'undeinfed' || !hidden) {
            tt.show();
        }
        return tt;
    }
};

multipleSortClick = function(){
    var gridName = current_grid;
    if (useFields) {
        if (document.getElementById('allFilters') && (document.getElementById('allFilters').style.display == 'none'))
                gridName = 'field';
        if (document.getElementById('entryFilters') && (document.getElementById('entryFilters').style.display == 'none'))
                gridName = 'field';
    }
    if (document.getElementById('multipleSortCheck').value=='on') {
        document.getElementById('multipleSortReset').style.display = 'none';
        document.getElementById('multipleSortCheck').value = '';
        document.getElementById('multipleSortCheckA').innerHTML = 'OFF';
        document.getElementById('multipleSortCheckA').style.color = 'red';
    } else {
        document.getElementById('multipleSortReset').style.display = '';
        document.getElementById('multipleSortCheck').value = 'on';
        document.getElementById('multipleSortCheckA').innerHTML = 'ON';
        document.getElementById('multipleSortCheckA').style.color = 'green';
    }
    setMultiTip((document.getElementById('multipleSortCheck').value == 'on'));
    gridArray[gridName].getStore().setMultipleSort(document.getElementById('multipleSortCheck').value=='on');
}

setMultiTip = function (is_on) {
    var msTd = document.getElementById('multipleSortTd');
    msTd.setAttribute('isSetTooltip', 'false');
    if (typeof(multiTip) != 'undefined') {
        multiTip.hide();
        multiTip.destroy();
    }
    if (is_on) {
        multiTip = showElTooltip(msTd, 'Turn OFF to sort by one column at a time.', true);
    } else {
        multiTip = showElTooltip(msTd,'Turn ON to sort by a text column alphabetically, then click any other column to sort within that order.', true);
    }
}

customFilterBlur = function(el, type) {
    if (el.readOnly){
      return;  
    } 
    var val = (type == 'max')? 'max' : 'min';
    if (el.value == ''){
        var def_val = (type == 'max')? 'max' : 'min';
        if ((type == 'max') && (typeof(customFiltersMax[currentCustomFilter]) != 'undefined')) {
            def_val = customFiltersMax[currentCustomFilter];
        } else if (typeof(customFiltersMin[currentCustomFilter]) != 'undefined') {
            def_val = customFiltersMin[currentCustomFilter];
        }
        currentCustomValues[val] = false;
        el.value = def_val;
        el.style.color='#8E8E8E';
    } else {
        currentCustomValues[val] = true;
    }
}

customFilterFocus = function(el, type) {
    if (el.readOnly) {
        return;
    }
    el.style.color='black';
    var def_val = (type == 'max')? 'max' : 'min';
    if ((type == 'max') && (typeof(customFiltersMax[currentCustomFilter]) != 'undefined')) {
        def_val = customFiltersMax[currentCustomFilter];
    } else if (typeof(customFiltersMin[currentCustomFilter]) != 'undefined') {
        def_val = customFiltersMin[currentCustomFilter];
    }
    if (el.value == def_val) {
        el.value='';
    }
}

showCustomFilter = function(id, td) {
    if (!setCustomFilterData(id, td)) {
        return;
    }
    var data = customFiltersData[currentCustomFilter];

    document.getElementById('cust_range').style.display = '';
    document.getElementById('custom_filter_min').style.display = '';
    document.getElementById('custom_filter_max').style.display = '';
    document.getElementById('custom_filter_min').style.visibility = 'visible';
    document.getElementById('custom_filter_max').style.visibility = 'visible';
    document.getElementById('cust_values').style.display = 'none';
    document.getElementById('cust_title').innerHTML = 'Custom Range';
    if (id == 'ps') {
        document.getElementById('cust_title_sub').style.display = '';
        document.getElementById('cust_filt_footer_line').style.display = '';
        document.getElementById('cust_filt_footer').style.display = '';
        document.getElementById('cust_title_sub').style.visibility = 'visible';
        document.getElementById('cust_filt_footer_line').style.visibility = 'visible';
        document.getElementById('cust_filt_footer').style.visibility = 'visible';
        Ext.get('customFilter').addClass('not_usd_popup');
    } else {
        document.getElementById('cust_title_sub').style.display = 'none';
        document.getElementById('cust_filt_footer_line').style.display = 'none';
        document.getElementById('cust_filt_footer').style.display = 'none';
        document.getElementById('cust_title_sub').style.visibility = 'hidden';
        document.getElementById('cust_filt_footer_line').style.visibility = 'hidden';
        document.getElementById('cust_filt_footer').style.visibility = 'hidden';
        Ext.get('customFilter').removeClass('not_usd_popup');
    }
    Ext.get('customFilter').removeClass('country_popup');

    var def_min_val = 'min';
    var def_max_val = 'max';
    if (typeof(customFiltersMin[currentCustomFilter]) != 'undefined') {
        def_min_val = customFiltersMin[currentCustomFilter];
    }
    if (typeof(customFiltersMax[currentCustomFilter]) != 'undefined') {
        def_max_val = customFiltersMax[currentCustomFilter];
    }
    var minVal = (data.used && (data.min.toString() != ''))? data.min : def_min_val;
    var maxVal = (data.used && (data.max.toString() != ''))? data.max : def_max_val;
    document.getElementById('custom_filter_min').value = minVal;
    document.getElementById('custom_filter_max').value = maxVal;
    document.getElementById('custom_filter_min').style.color = (data.used && (data.min.toString() != '') && (data.min != def_min_val))? 'black' : '#8E8E8E';
    document.getElementById('custom_filter_max').style.color = (data.used && (data.max.toString() != '') && (data.max != def_max_val))? 'black' : '#8E8E8E';

    currentCustomValues['min'] = data.used && (data.min.toString() != '') && (data.min != def_min_val);
    currentCustomValues['max'] = data.used && (data.max.toString() != '') && (data.max != def_max_val);
    currentCustomValues['values'] = false;
    
    setCustomFilterPosition(td);
}

showCustomHQCFilter = function(id, td) {
    if (!setCustomFilterData(id, td)) {
        return;
    }
    var data = customFiltersData[currentCustomFilter];

    document.getElementById('cust_range').style.display = 'none';
    document.getElementById('custom_filter_min').style.display = 'none';
    document.getElementById('custom_filter_max').style.display = 'none';
    document.getElementById('custom_filter_min').style.visibility = 'hidden';
    document.getElementById('custom_filter_max').style.visibility = 'hidden';
    document.getElementById('cust_values').style.display = '';
    document.getElementById('cust_title').innerHTML = 'Headquarter Country';
    document.getElementById('cust_title_sub').style.display = 'none';
    document.getElementById('cust_filt_footer_line').style.display = 'none';
    document.getElementById('cust_filt_footer').style.display = 'none';
    document.getElementById('cust_title_sub').style.visibility = 'hidden';
    document.getElementById('cust_filt_footer_line').style.visibility = 'hidden';
    document.getElementById('cust_filt_footer').style.visibility = 'hidden';
    Ext.get('customFilter').removeClass('not_usd_popup');
    Ext.get('customFilter').addClass('country_popup');

    currentCustomValues['values'] = '';
    var text = '';
    if (typeof(customFiltersValues[currentCustomFilter]) != 'undefined') {
        var total_count = customFiltersValues[currentCustomFilter].length;
        text = '<div style="float:left">';
        for (var k = 0; k < customFiltersValues[currentCustomFilter].length; k++) {
            if (k == Math.floor(total_count / 2)) {
                text += '</div><div style="float:left">';
            }
            var checked = false;
            if (data.values != '') {
                for (var j = 0; j < data.values.length; j++) {
                    if (data.values[j] == customFiltersValues[currentCustomFilter][k]) {
                        checked = true;
                        break;
                    }
                }
            }
            text += '<div><input type="checkbox" style="display:none" id="customCheckbox'+k+'" '+((checked)? 'checked' : '')+'>'
                +'<img src="img/grid_'+((checked)?'' : 'un')+'checked.gif" onclick="onCustomCheckboxClick('+k+')" id="customCheckboxImg'+k+'">'
                +customFiltersValues[currentCustomFilter][k]+'</div>';
            if (checked) {
                if (currentCustomValues['values'] == '') {
                    currentCustomValues['values'] = [];
                }
                currentCustomValues['values'][currentCustomValues['values'].length] = customFiltersValues[currentCustomFilter][k];
            }
        }
        text += '</div>';
    }
    document.getElementById('cust_values').innerHTML = text;

    currentCustomValues['min'] = false;
    currentCustomValues['max'] = false;

    setCustomFilterPosition(td);
}

setCustomFilterData = function(id, td) {
    if (currentCustomFilter == id) {
        return false;
    }
    if (!saveCustomFilter()){
        return false;
    }

    currentFilterTopTd = td;
    currentCustomFilter = id;
    Ext.get(currentFilterTopTd).addClass('custom_cell_active');
    if (typeof(customFiltersData[currentCustomFilter]) == 'undefined') {
        customFiltersData[currentCustomFilter] = {used : false, min : '', max : '', values : ''};
    }
    return true;
}

onCustomCheckboxClick = function(id) {
    var checked = !document.getElementById('customCheckbox'+id).checked;
    document.getElementById('customCheckbox'+id).checked = checked;
    document.getElementById('customCheckboxImg'+id).src = 'img/grid_'+((checked)?'' : 'un')+'checked.gif';
    if (currentCustomValues['values'] == '' && checked) {
        currentCustomValues['values'] = [];
    }
    if (checked) {
        currentCustomValues['values'][currentCustomValues['values'].length] = customFiltersValues[currentCustomFilter][id];
    } else if (currentCustomValues['values'] != '') {
        var data = [];
        for (var k = 0; k < currentCustomValues['values'].length; k++) {
            if (customFiltersValues[currentCustomFilter][id] == currentCustomValues['values'][k]) {
                continue;
            }
            data[data.length] = currentCustomValues['values'][k];
        }
        currentCustomValues['values'] = (data.length == 0)? '' : data;
    }
}

setCustomFilterPosition = function(td) {
    var customFiler = document.getElementById('customFilter');
    if (customFiler) {
        customFiler.style.position = 'absolute';
        var el = Ext.get(td);
        var dom_el = Ext.getDom(el);
        var x = 0;
        while (dom_el.offsetParent){
            x += dom_el.offsetLeft;
            dom_el = dom_el.offsetParent;
        }
        x = x + Math.ceil((el.getWidth() - 150)/2);//150 - width from style.css custom_filter_popup
        var y = el.getY() + el.getHeight();
        customFiler.style.left = x + 'px';
        customFiler.style.top = y + 'px';
        customFiler.style.display = 'inline';
    }
}

closeCustomFilter = function () {
    if (!document.getElementById('customFilter')) {
        return;
    }
    if (currentFilterTopTd != null) {
        Ext.get(currentFilterTopTd).removeClass('custom_cell_active');
    }
    document.getElementById('customFilterErrorIcon').style.display='none';
    document.getElementById('customFilter').style.display = 'none';
    currentCustomFilter = '';
    currentCustomValues = {'min' : false, 'max' : false};
    currentFilterTopTd = null;
}

saveCustomFilter = function () {
    if (currentCustomFilter == ''){
        return true;
    }
    var prefix = (typeof(customFilterPrefix) != 'undefined')? '&prefix='+customFilterPrefix : '';
    var used = currentCustomValues['min'] || currentCustomValues['max'] || currentCustomValues['values'];
    var params = '';
    var url='index.php?act=filters&filter='+currentCustomFilter+prefix;
    var def_min_val = '_';
    var def_max_val = '_';
    if (typeof(customFiltersMin[currentCustomFilter]) != 'undefined') {
        def_min_val = customFiltersMin[currentCustomFilter];
    }
    if (typeof(customFiltersMax[currentCustomFilter]) != 'undefined') {
        def_max_val = customFiltersMax[currentCustomFilter];
    }
    var values = (currentCustomValues['values'])? currentCustomValues['values'] : '';
    var minVal = (currentCustomValues['min'])? parseFloat(document.getElementById('custom_filter_min').value) : def_min_val;
    var maxVal = (currentCustomValues['max'])? parseFloat(document.getElementById('custom_filter_max').value) : def_max_val;
    if ((minVal != '_') && (maxVal != '_') && (minVal > maxVal)) {
        document.getElementById('customFilterErrorIcon').style.display='inline';
        return false;
    }
    used = used && ((minVal != def_min_val) || (maxVal != def_max_val) || (values != ''));
    if (used) {
        var html = '';
        if (values != '') {
            for (var k = 0; k < customFiltersValues[currentCustomFilter].length; k++) {
                for (var j = 0; j < values.length; j++) {
                    if (values[j] == customFiltersValues[currentCustomFilter][k]) {
                        html += values[j] + ', ';
                        break;
                    }
                }
            }
            html = html.substring(0, html.length - 2);
        } else {
            html = minVal + ' - ' + maxVal;
        }
        currentFilterTopTd.innerHTML =  '<div unselectable="on" class="x-grid3-td-inner ">'+html+'</div>'
        minVal = (minVal == def_min_val)? '' : minVal;
        maxVal = (maxVal == def_max_val)? '' : maxVal;
        customFiltersData[currentCustomFilter] = {used : true, min : minVal, max : maxVal, values : values};
        url += '&hdl=save_custom';
        params = 'min_val='+minVal+'&max_val='+maxVal;
        if (values != '') {
            for (var k = 0; k < values.length; k++) {
                params += '&values[]='+values[k]+'';
            }
        }
        loader.data['onerror'] = function(){};
        loader.processPOST(url, params, function(http){afterSaveCustomFilter();}, false, false);
    } else {
        customFiltersData[currentCustomFilter] = {used : false, min : '', max : '', values : ''};
        currentFilterTopTd.innerHTML = '<div unselectable="on" class="x-grid3-td-inner ">filter</div>';
        url += '&hdl=clear_custom';
        loader.data['onerror'] = function(){};
        loader.processPOST(url, params, function(http){afterSaveCustomFilter();}, false, false);
    }
    if (Ext.get('updButton')) {
        Ext.get('updButton').addClass('btn_result');
        Ext.get('updButton').removeClass('btn_result_dis');
    }
    return true;
}

afterSaveCustomFilter = function() {
    updClicked = false;
    if ((typeof(currentHdl) != 'undefined') && (currentHdl == 'entry') && (typeof(entry) != 'undefined')) {
        entry.checkClearAll();
    } else {
        checkResetAll();
    }
    closeCustomFilter();
    if ((typeof(currentHdl) != 'undefined')) {
        if (currentHdl == 'grid') {
            filterGrid(last_hdl, 'need_redraw', true, true);
        } else if ((currentHdl == 'entry') && (typeof(entry) != 'undefined')) {
            entry.filterGrid(last_hdl, true);
        }
    } else {
        filterGrid(last_hdl, 'need_redraw', true, true);
    }
}

oreRowOver = function(e, isOver, record, row, view) {
    if (record.id < 0) return;
    if (isOver) {
        var rank = 'rank_'+record.id+'_';
        var haveMin1MnI = (Ext.get(rank+'evm1mirsc'))? true : false;
        var haveMin1PnP = (Ext.get(rank+'evm1pprsv'))? true : false;
        var haveMin1Total = (Ext.get(rank+'evm1total'))? true : false;
        if (!haveMin1Total && !haveMin1MnI && !haveMin1PnP) {
            // show long label - "no resource estimates for min1"
            var div = Ext.get('emptyOreMin1All_'+record.id);
            var cell = Ext.get(view.getCell(row, 2));
            var first_cell = Ext.get(view.getCell(0, 0));
            var width = -2;
            for (var i = 2; i < 5; i++) {
                width += Ext.get(view.getCell(row, i)).getWidth();
            }
            div.applyStyles({left : cell.getLeft()-first_cell.getLeft()+'px', top : cell.getTop()-first_cell.getTop()+'px', height: cell.getHeight()+'px', width : width+'px'});
            div.show();
        } else {
            Ext.get('emptyOreMin1All_'+record.id).hide();
            var type, el;
            if (!haveMin1MnI) {
                type = 'evm1mirsc';
                // show empty over for min1 M&I
                el = Ext.get('rank_'+record.id+'_'+type);
                if (el) el.hide();
                el = Ext.get('data_'+record.id+'_'+type);
                if (el) el.hide();
                el = Ext.get('mindata_'+record.id+'_'+type);
                if (el) el.hide();
                el = Ext.get('empty_over_'+record.id+'_'+type);
                if (el) el.show();
            }
            if (!haveMin1PnP) {
                type = 'evm1pprsv';
                // show empty over for min1 P&P
                el = Ext.get('rank_'+record.id+'_'+type);
                if (el) el.hide();
                el = Ext.get('data_'+record.id+'_'+type);
                if (el) el.hide();
                el = Ext.get('mindata_'+record.id+'_'+type);
                if (el) el.hide();
                el = Ext.get('empty_over_'+record.id+'_'+type);
                if (el) el.show();
            }
        }
        var haveMnI = (Ext.get(rank+'evmirsc_all'))? true : false;
        var havePnP = (Ext.get(rank+'evpprsv_all'))? true : false;
        var haveTotal = (Ext.get(rank+'evtotal_all'))? true : false;
        if (!haveTotal && !haveMnI && !havePnP) {
            // show long label - "company reports no resource estimates"
            var div = Ext.get('emptyOreAll_'+record.id);
            var cell = Ext.get(view.getCell(row, 5));
            var first_cell = Ext.get(view.getCell(0, 0));
            var width = (Ext.isIE)? -4 : -2;
            var offset = (Ext.isIE)? 3 : 1;
            for (var i = 5; i < 9; i++) {
                width += Ext.get(view.getCell(row, i)).getWidth();
            }
            div.applyStyles({left : cell.getLeft()-first_cell.getLeft()+offset+'px', top : cell.getTop()-first_cell.getTop()+'px', height: cell.getHeight()+'px', width : width+'px'});
            div.show();
        } else {
            Ext.get('emptyOreAll_'+record.id).hide();
            var type, el;
            if (!haveMnI) {
                // show empty over for M&I
                type = 'evmirsc';
                el = Ext.get('rank_'+record.id+'_'+type);
                if (el) el.hide();
                el = Ext.get('data_'+record.id+'_'+type);
                if (el) el.hide();
                el = Ext.get('empty_over_'+record.id+'_'+type);
                if (el) el.show();
            }
            if (!havePnP) {
                // show empty over for P&P
                type = 'evpprsv';
                el = Ext.get('rank_'+record.id+'_'+type);
                if (el) el.hide();
                el = Ext.get('data_'+record.id+'_'+type);
                if (el) el.hide();
                el = Ext.get('empty_over_'+record.id+'_'+type);
                if (el) el.show();
            }
        }
    } else {
        // hide all labels
        for (var k in record.data) {
            var el = Ext.get('empty_over_'+record.id+'_'+k);
            if (el && el.isVisible()) el.hide();
            el = Ext.get('data_'+record.id+'_'+k);
            if (el && !el.isVisible()) el.show();
            el = Ext.get('mindata_'+record.id+'_'+k);
            if (el && !el.isVisible()) el.show();
        }
        Ext.get('emptyOreMin1All_'+record.id).hide();
        Ext.get('emptyOreAll_'+record.id).hide();
    }
}

finstrRowOver = function(e, isOver, record, row, view) {
    if (record.id < 0) return;
    if (isOver) {
        var haveEarnings = document.getElementById('earningsVal_'+record.id).innerHTML != '';
        var rank = 'rank_'+record.id+'_';
        var haveBurnTime = (Ext.get(rank+'burntime'))? true : false;
        if (haveEarnings && !haveBurnTime) {
            // show empty over for Burn Time
            var el = Ext.get('rank_'+record.id+'_burntime');
            if (el) el.hide();
            el = Ext.get('data_'+record.id+'_burntime');
            if (el) el.hide();
            el = Ext.get('empty_over_'+record.id+'_burntime');
            if (el) el.show();
        } else if (!haveEarnings) {
            // show long label "no financials available for the company""
            var div = Ext.get('emptyFinstr_'+record.id);
            var cell = Ext.get(view.getCell(row, 2));
            var first_cell = Ext.get(view.getCell(0, 0));
            var width = 0;
            for (var i = 2; i < 7; i++) {
                width += Ext.get(view.getCell(row, i)).getWidth();
            }
            div.applyStyles({left : cell.getLeft()-first_cell.getLeft()+'px', top : cell.getTop()-first_cell.getTop()+'px', height: cell.getHeight()+'px', width : width+'px'});
            div.show();
        }
    } else {
        // hide all labels
        for (var k in record.data) {
            var el = Ext.get('empty_over_'+record.id+'_'+k);
            if (el && el.isVisible()) el.hide();
            el = Ext.get('data_'+record.id+'_'+k);
            if (el && !el.isVisible()) el.show();
        }
        Ext.get('emptyFinstr_'+record.id).hide();
    }
}

/*
showHelp = function (ahref, text) {
    if (ahref.getAttribute('isSetTooltip') != 'true') {
        ahref.setAttribute('isSetTooltip', 'true');
        var tt = new Ext.ToolTip({
            target: ahref,
            html: text
        });
        var el = Ext.get(ahref);
        tt.targetXY = el.getXY();
        tt.show();
    }
};
*/

