﻿var goToQueryBuilder = function(_location) {
    window.location = _location;
};


var mask, loadingMsg;
function initLoadingIndicator(_maskLayer, _placeHolder) {
    mask = $(_maskLayer);
    loadingMsg = $(_placeHolder);
}
// Changes the cursor to an hourglass
function cursor_wait() {
    document.body.style.cursor = 'wait';
}

function get_popup_left(popup) {
    var _left = document.viewport.getScrollOffsets().left + (document.viewport.getWidth() - $(popup).getWidth()) / 2;
    return (_left) + 'px';
}

function get_popup_top(popup) {
    var _top = document.viewport.getScrollOffsets().top + (document.viewport.getHeight() - $(popup).getHeight()) / 2;
    return _top + 'px';
}

function getViewportWidth() {
    return document.viewport.getWidth();
}
function getViewportHeight() {
    return document.viewport.getHeight();
}
function hideMask() {
    mask.style.display = 'none';
}

function hideLoadingMsg() {
    loadingMsg.style.display = 'none';
    disableMapForIncompatibleVersionsOfBrowser();
}

function disableMapForIncompatibleVersionsOfBrowser() {
    if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) //test for MSIE x.x;
    var IEVersion=new Number(RegExp.$1) // capture x.x portion and store as a number
    if(!isNaN(IEVersion) && eval(IEVersion) < 7) { // hide map for IE < 7
        $('mapIncompatiblityNotice').style.display = 'block';
        $('mapsContainer').hide();
    }
}

function getWindowHeight() {
    return document.viewport.getHeight() < document.body.clientHeight ? document.body.clientHeight : document.viewport.getHeight();
}

function getWindowWidth() {
    return document.viewport.getWidth() < document.body.clientWidth ? document.body.clientWidth : document.viewport.getWidth();
}

function showMask(event, flag) {
    if(flag == undefined)
        flag = false;
        
    if(gridsBeingLoaded > 0 || flag) {
        var _ht = getWindowHeight();
        var _wt = getWindowWidth();

        mask.style.width = _wt + 'px';
        mask.style.height = (_ht + 10) + 'px';
        mask.style.top = 0;
        mask.style.left = 0;
        mask.style.display = 'block';
        loadingMsg.style.display = 'none';
    }
}

// Returns the cursor to the default pointer
function cursor_clear() {
    document.body.style.cursor = 'default';
}


var gridsBeingLoaded = 0;
function showLoading() {
    gridsBeingLoaded += 1;
    cursor_wait();
    showMask();
    showLoadingMsg();
}

function showLoadingMsg() {
    if(gridsBeingLoaded > 0) {
        loadingMsg.style.top = get_popup_top($(loadingMsg).id);
        loadingMsg.style.left = get_popup_left($(loadingMsg).id);
        loadingMsg.style.display = 'block';
    }
}

var xPos, yPos;
function saveScrollPosition() {
    xPos = (document.all)?document.body.scrollLeft:window.pageXOffset; 
    yPos = (document.all)?document.body.scrollTop:window.pageYOffset;
}

function setScrollPosition() {
    window.scrollTo(xPos, yPos);
}

function hideLoading() {
    gridsBeingLoaded -= 1;
    if(gridsBeingLoaded == 0) {
        cursor_clear();
        hideMask();
        hideLoadingMsg();
    }
}

function getAllYearsFromCookie() {
    if (document.cookie.length > 0) {
        c_start = document.cookie.indexOf("allYears" + "=");
        if (c_start != -1) { 
            c_start = c_start + "allYears".length + 1; 
            c_end = document.cookie.indexOf(";", c_start);
            if (c_end==-1) c_end = document.cookie.length;
            return unescape(document.cookie.substring(c_start, c_end));
        }
    }
    return 2005;
}

function setCookie(key, value) {
    var s = new Storage();
    s.setCookieValue(key, value);
}

function getCookie(key) {
    var s = new Storage();
    var temp = s.getCookieValue(key);
    if (!temp || temp.length == 0) {
        if(key == 'pageSize')
            return s.pagesize;
        if(key == 'pageNumber')
            return s.pagenumber;
        if(key == 'sortCol')
            return s.sortcol;
        if(key == 'sortDir')
            return s.sortdir;
    }
    return temp;
}

function setLang(lang) {
    var s = new Storage();
    s.setLang(lang);
}

function resetListSelectionById(controlId, values) {
    var control = $(controlId);
    if (control) {
        //either its a group of check/radio boxes or a select box
    
        for (var i = 0; i < qbChemical.options.length; i++) {
            qbChemical.options[i].selected = false;
        }
    }
}
function getElementsFromGroupName(groupName) {
    var results = [];
    if (!groupName || groupName.length == 0) {
        return results;
    }
    var elements = document.getElementsByName(groupName);
    if (elements && elements.length > 0) {
        var isSelect = false;
        //check if select box
        if (elements.length == 1 && elements[0].options && elements[0].options.length > 0) {
            elements = elements[0].options;
            isSelect = true;
        }
        for (var i = 0; i < elements.length; i++) {
            if (isSelect) {
                if (elements[i].selected) {
                    results.push(elements[i]);
                }
            } else {
                if (elements[i].checked) {
                    results.push(elements[i]);
                }
            }
        }
    }
    return results;
}
function getValuesFromGroupName(groupName) {
    var results = [];
    if (!groupName || groupName.length == 0) {
        return results;
    }
    var elements = document.getElementsByName(groupName);
    if (elements && elements.length > 0) {
        var isSelect = false;
        //check if select box
        if (elements.length == 1 && elements[0].options && elements[0].options.length > 0) {
            elements = elements[0].options;
            isSelect = true;
        }
        for (var i = 0; i < elements.length; i++) {
            if (isSelect) {
                if (elements[i].selected) {
                    results.push(elements[i].value);
                }
            } else {
                if (elements[i].checked) {
                    results.push(elements[i].value);
                }
            }
        }
    }
    return results;
}
function resetGroupByName(groupName, values) {
    if (!groupName || groupName.length == 0) {
        return;
    }
    var elements = document.getElementsByName(groupName);
    if (elements && elements.length > 0) {
        var isSelect = false;
        //check if select box
        if (elements.length == 1 && elements[0].options && elements[0].options.length > 0) {
            elements = elements[0].options;
            isSelect = true;
        }
    
    
        //reset to unselected
        for (var i = 0; i < elements.length; i++) {
            if (isSelect) {
                elements[i].selected = false;
            } else {
                elements[i].checked = false;
            }
        }
        //set new values
        if (values && values.length > 0) {
            if (Object.isString(values)) {
                values = values.split(',');
            }
            for (var j = 0; j < values.length; j++) {
                for (var k = 0; k < elements.length; k++) {
                    if (elements[k].value == values[j]) {
                        if (isSelect) {
                            elements[k].selected = true;
                        } else {
                            elements[k].checked = true;
                        }
                    }
                }
            }
        }
    }
}


window.onresize = showLoadingMsg;
window.onscroll = showLoadingMsg;

function ChemicalsMatched() {
    try {
        var hash = window.location.toString().split('?')[1];
    }
    catch(ex) {}
    window.open('ChemicalsMatched.aspx?' + hash, 'ChemicalsMatched');
}

function convertHashToJSON(hash) {
    var params = "{";

    if (hash && hash.size() > 0)
        hash.each(function(pair) {
            params += '"' + pair.key + '":"' + pair.value + '",';
        });
    var lastIndex = params.length - 1;
    if (params.charAt(lastIndex) == ",")
        params = params.substring(0, lastIndex);

    params += "}";
    return params;
}

// throws if getReport method fails
function onGetReportFail(e) {
	//alert(e.get_message() + "\n" + e.get_stackTrace());
    hideLoading();
	if (e.get_exceptionType() == "CEC.DataModel.DataThresholdExceededException"){
		alert(e.get_message());
		window.history.go(-1);
	}
	else {
	    return;
        location.href = "errors/ErrorPage.aspx?messages=Result";
	}
}

function maxChar(fieldElement, maxNum) {
    if (fieldElement.value.length > maxNum) {
        fieldElement.value = fieldElement.value.substring(0, maxNum);
    }
}

function toggleFeedback() {
    $('feedback').toggle();
}

function validEmail(src) {
    var emailReg = "^[\\w-_\.+]*[\\w-_\.]\@([\\w]+\\.)+[\\w]+[\\w]$";
    var regex = new RegExp(emailReg);
    return regex.test(src);
}
  
function saveFeedback() {
    var name = $F('fbName');
    var email = $F('fbEmail');
    var message = $F('fbMessage');
    
    if(email.trim().length > 0 && !validEmail(email.trim())) {
        alert('Please enter valid email');
        $('fbEmail').focus();
        return;
    }
     
    if(message.trim().length == 0) {
        alert('Please enter message');
        $('fbMessage').focus();
        return;
    }

    var feedbackInfo = {};
    feedbackInfo.Name = name;
    feedbackInfo.Email = email;
    feedbackInfo.Message = message;
    feedbackInfo.Location = location.href;

    function onSaveFeedbackCompleted(results) {
        $('fbName').value = '';
        $('fbEmail').value = '';
        $('fbMessage').value = '';
        $('feedback').toggle();
        alert(results);
    }

    function onSaveFeedbackFailed() {
        $('feedback').toggle();
    }
    var s = new Storage();
    CEC.Service.IService1.SaveFeedback(s.getCulture(), feedbackInfo, onSaveFeedbackCompleted);
}

function cancelFeedback() {
    $('feedback').toggle();    
}

function resizeMapBtnCaption(btn) {
    if($(btn).innerHTML.include(getResizeMapBtnCaption('maximize'))) {
        showMask(this.event, true);
        $(btn).innerHTML = '&nbsp;' + getResizeMapBtnCaption('minimize') + '&nbsp;';
    }
    else {
        hideMask();        
        $(btn).innerHTML = '&nbsp;' + getResizeMapBtnCaption('maximize') + '&nbsp;';
    }
}

function getResizeMapBtnCaption(captionType) {
    var s = new Storage();
    return resizeMapBtnCaptions[s.getCulture()][captionType];
}

function resizeSingleMap(mapDiv, isDrilldown) {
    // toggleMapSizeBtnCaption is defined in cec-main.js
    // this is kept outside the below fn, because, in Chemical & Industry drilldown reports, 
    // toggleMapSize is called twice to resize two maps, so, changing caption once here
    resizeMapBtnCaption('resizeMapBtn');
    
    // toggleMapSize is defined in FormatData.js
    toggleMapSize('resizeMapBtn', 'mapsContainer', mapDiv, 'spacer', isDrilldown, mapDiv);
}

function resizeTwoMaps() {
    // toggleMapSize is defined in cec-main.js
    resizeMapBtnCaption('resizeMapBtn');
    
    var selectedReport = $('mapsContainer').down('li.selected').down().id.include('facilities') ? 'Facility' : 'State';
    var hiddenReport = $('mapsContainer').down('li.selected').down().id.include('facilities') ? 'State' : 'Facility';
    var selectedMap = $('mapsContainer').down('li.selected').down().id.include('facilities') ? 'facilitiesMap' : 'statesMap';
    var hiddenMap = $('mapsContainer').down('li.selected').down().id.include('facilities') ? 'statesMap' : 'facilitiesMap';
    
    // toggleMapSize is defined in FormatData.js
    toggleMapSize($('resizeMapBtn'), $('mapsContainer'), selectedMap, $('spacer'), true, selectedReport);
    toggleMapSize($('resizeMapBtn'), $('mapsContainer'), hiddenMap, $('spacer'), true, hiddenReport);
}

function forceAnchorHoverColor(ctrl) {
    $(ctrl).style.color = '#99cc66';
}

function forceAnchorNormalColor(ctrl) {
    $(ctrl).style.color = '#0099cc';
}

function toggleCheckbox(chkBox) {
    $(chkBox).click();
}

function chkBoxClicked(section) {
    if(section.include('All'))
        toggleAllTabs();
    else
        tabClick(section);
}
