﻿var _maxCompareItems = 5;
var _coySelDiv = 'dvCoySels';
var _prodSelDiv = 'dvProdSels';
var _coyCompareCookieName = 'BGNCOMPARECOY';
var _prodCompareCookieName = 'BGNCOMPAREPROD';
var _selectionWorking = true;

function bgnGetArrayNameForType(type) {
    var name = '';
    
    switch(type) {
        case 'c':
            name = _coyCompareCookieName;
            break;
            
        case 'p':
            name = _prodCompareCookieName;
            break;
    }
    
    return name;
}

function bgnGetDisplayDivForType(type) {
    var name = '';
    
    switch(type) {
        case 'c':
            name = _coySelDiv;
            break;
            
        case 'p':
            name = _prodSelDiv;
            break;
    }
    
    return name;
}

function bgnGetTextBoxName(type) {
    var name = '';
    switch (type) {
        case 'c':
            name = 'coysels';
            break;

        case 'p':
            name = 'prodsels';
            break;
    }
    return name;
}

function bgnGetSelectionCount(type) {
    var currentSelections = bgnGetComparisonCookie(type);
    if (null == currentSelections || 0 == currentSelections.length) { return 0; }
    else { var selArray = currentSelections.split(','); return selArray.length; }
}

function bgnGetSelections(type) {
    var currentSelections = bgnGetComparisonCookie(type);
    if (null == currentSelections || 0 == currentSelections.length) { return ''; }
    else { return currentSelections; }
}

function bgnAddSelection(type, val) {
    var selectionCount = bgnGetSelectionCount(type);

    if (selectionCount >= _maxCompareItems) {
        alert('You cannot compare more than ' + _maxCompareItems + ' records. Please remove a selection and try again');
        return false;
    }
    else {

        if (!bgnIsValueSelected(type, val)) {
            var currentSelections = bgnGetSelections(type);

            if (0 == currentSelections.length) {
                currentSelections = val;
            }
            else {
                currentSelections = currentSelections + ',' + val;
            }
        
            bgnSetComparisonCookie(type, currentSelections);
        }

        return true;
    }
}

function bgnIsValueSelected(type, val) {
    var currentSelections = bgnGetSelections(type);

    if (0 == currentSelections.length) { return false; }

    var selArray = currentSelections.split(',');

    var exists = false;
    
    for (var x = 0; x < selArray.length; x++) {
        if (val == selArray[x]) {
            exists = true;
            continue;
        }
    }

    return exists;
}

function bgnRemoveFromSelectedList(type, val) {

    if (type == 'c') {
        if (document.getElementById('c' + val)) {
            document.getElementById('c' + val).click();
        }
        else {
            bgnRemoveSelection(type, val);
            bgnShowSelected(type);
        }
    }
    if (type == 'p') {
        if (document.getElementById('p' + val)) {
            document.getElementById('p' + val).click();
        }
        else {
            bgnRemoveSelection(type, val);
            bgnShowSelected(type);
        }
    }
}

function bgnRemoveSelection(type, val) {
    var currentSelections = bgnGetSelections(type);
    var newSelections = '';
    
    if (0 == currentSelections.length) {
        return;
    }
    else {
        var selArray = currentSelections.split(',');
        
        for(var x = 0; x < selArray.length; x++){
            if (val != selArray[x]) {

                if (0 == newSelections.length) {
                    newSelections = selArray[x];
                }
                else {
                    newSelections = newSelections + ',' + selArray[x];
                }
            }
        }
    }

    bgnSetComparisonCookie(type, newSelections);
}

function bgnSelForCompare(chk) {
    if (!chk) { return; }

    // extract the id and type from the checkbox id
    var item_type = chk.id.substring(0, 1);
    var item_id = chk.id.substring(1);
    var item_name = '';
    var item_url = '';

    if (document.getElementById('a' + item_type + item_id)) {
        item_name = document.getElementById(item_type + item_id).innerHTML;
        item_url = document.getElementById(item_type + item_id).href;
    }

    var currentSelections = '';

    if (chk.checked) {
        if (!bgnAddSelection(item_type, item_id)) {
            chk.checked = false;
            return;
        }
    }
    else {
        bgnRemoveSelection(item_type, item_id);
    }

    bgnShowSelected(item_type);
}

// set a simple cookie
function bgnSetComparisonCookie(type, value) {
    var curCookie = bgnGetArrayNameForType(type) + "=" + escape(value);
    curCookie += "; path=/";
    document.cookie = curCookie;
}

// get the cookie value
function bgnGetComparisonCookie(type) {    
    var dc = document.cookie;
    var prefix = bgnGetArrayNameForType(type) + "=";
    var begin = dc.indexOf("; " + prefix);
    
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    } else
        begin += 2;
    
    var end = document.cookie.indexOf(";", begin);

    if (end == -1) {
        end = dc.length;
    }
    
    return unescape(dc.substring(begin + prefix.length, end));
}

function bgnUpdateSelectedCheckboxes(type, option) {
    var currentValues = bgnGetSelections(type);
    var selArray = currentValues.split(',');

    if (selArray.length > 0) {
        for (var x = 0; x < selArray.length; x++) {
            if (document.getElementById(type + selArray[x])) {
                document.getElementById(type + selArray[x]).checked = option;
            }
        }
    }
}

function bgnShowSelected(type) {
    if (!_selectionWorking) {
        var selections = bgnGetSelections(type);
        bgnDisplaySelections(type, selections);
    }
}

function bgnDisplaySelections(type, selections) {
    if (0 == selections.length) {
        bgnDisplaySelectionsRender(type, '');
    }
    else {
        new Ajax.Request(_appRoot + 'callbacks/GetSelections.aspx',
	    {
	        method: 'post',
	        parameters: { pub: _pubID, type: type, sels: selections },
	        onSuccess: function(transport) {
	            bgnDisplaySelectionsRender(type, transport.responseText);
	        },
	        onFailure: function(transport) {
	            bgnDisplaySelectionsRender(type, "<p>Error retrieving the selected values</p>");
	        }
	    });
    }
}

function bgnDisplaySelectionsRender(type, retval, noclear) {
    var divid = bgnGetDisplayDivForType(type);
    SetSelectedItemsFormValues(type);
    
    if (document.getElementById(divid)) {
        if (0 == retval.length) {
        	document.getElementById(divid).innerHTML = '<p>Check boxes on right to make selections</p>';

			//noclear checked to avoid stack overflow by repeated loop of calls in IE.
        	if (noclear = undefined || noclear == false) 
        	{
        		bgnClearAllSelections();
        	}
        }
        else {
            var selectionCount = bgnGetSelectionCount(type);
            document.getElementById(divid).innerHTML = selectionCount + ' of ' + _maxCompareItems + ' selected' + retval;
        	//document.getElementById(divid).innerHTML = retval;
            document.getElementById(divid).appendChild(bgnCreateClearSelectedLink(type));
            document.getElementById(divid).appendChild(bgnCreateCompareButton('Compare'));
        }
    }
}

function bgnCreateCompareButton(txt) {
    var para = document.createElement('p');
    para.setAttribute('class', 'centr');
    var btn = document.createElement('input');
    btn.setAttribute('type', 'image');
    btn.setAttribute('src', _imgRoot + 'buttons/btn_compare.gif');
    //btn.setAttribute('value', txt);
    para.appendChild(btn);
    return para;
}

function bgnSubmitCompareNow(type) {
    var selectionCount = bgnGetSelectionCount(type);
    
    switch (type) {
        case 'c':
            if (selectionCount > 0) {
                if (document.getElementById('frmCoyCompare')) {
                    document.getElementById('frmCoyCompare').submit();
                }
            }
            else {
                alert('You have not selected any companies');
            }
            break;

        case 'p':
            if (selectionCount > 0) {
                if (document.getElementById('frmProdCompare')) {
                    document.getElementById('frmProdCompare').submit();
                }
            }
            else {
                alert('You have not selected any products');
            }
            break;
    }    
}

function bgnCreateClearSelectedLink(type) {
    var para = document.createElement('p');
    para.setAttribute('class', 'centr');
    var clearLink = document.createElement('a');
    var txt = document.createTextNode('Clear All Selections');
    var funcName = 'javascript:bgnClearSelections(\'' + type + '\')';
    clearLink.setAttribute('href', funcName);
    clearLink.appendChild(txt);
    para.appendChild(clearLink);
    return para;
}

function bgnClearAllSelections() {
    bgnClearSelections('c');
    bgnClearSelections('p');
}

function bgnClearSelections(type) {
    bgnUpdateSelectedCheckboxes(type, false);
    bgnSetComparisonCookie(type, '');
    bgnDisplaySelectionsRender(type, '', true);
    SetSelectedItemsFormValues(type);
}

function SetSelectedItemsFormValues(type) {
    var ctrl = bgnGetTextBoxName(type);
    if (document.getElementById(ctrl)) {
        document.getElementById(ctrl).value = bgnGetSelections(type);        
    }
}
