﻿var _rows = function()
{
	this.TotalLitre = "";
	this.Total = "";
	this.RowList = [];
};

var _row = function()
{
	this.Type = "";
	this.Volume = 0;
	this.Litre = 0;
	this.Units = 0;
	this.LitreElement = "";
	this.PriceElement = "";
	this.Error = "";
};

var openWin = function(window)
{
	var oManager = GetRadWindowManager();
	oManager.open(null, window);
};

var addRowToTable = function(obj, elVolumeName, elUnitsName, elLitreName, elPriceName, rowType, lblRangeText) {
    var decimalChar = GetDecimalChar();
    var tbl = obj.parentNode.parentNode.parentNode.parentNode;

    var lastRow = tbl.rows.length;
    if (lastRow > 19) return true;

    var iteration = lastRow;
    var row = tbl.insertRow(lastRow);

    // cell Add/Remove button
    var cell0 = row.insertCell(0);
    cell0.setAttribute("class", "AddRemoveButton");
    cell0.setAttribute("className", "AddRemoveButton");

    // cell lblTextQuantity + txtVolume
    var cell1 = row.insertCell(1);
    var tabIndex = getTabIndex(rowType, iteration)
    if (elVolumeName != "") {
        var elVolume = document.createElement('input');
        elVolume.type = 'text';
        elVolume.name = elVolumeName + iteration;
        elVolume.id = elVolumeName + iteration;
        elVolume.setAttribute("class", "textBoxVolume");
        elVolume.setAttribute("className", "textBoxVolume");
        elVolume.setAttribute("tabIndex", (tabIndex - 1).toString());

        elVolume.onkeypress = function(e) {
            var allowDecimal = true;
            var allowNegative = false;
            var key;
            var isCtrl = false;
            var keychar;
            var reg;

            if (window.event) {
                key = window.event.keyCode;
                isCtrl = window.event.ctrlKey;
            }
            else if (e.which) {
                key = e.which;
                isCtrl = e.ctrlKey;
            }

            if (isNaN(key)) return true;

            keychar = String.fromCharCode(key);

            // check for backspace or delete, or if Ctrl was pressed
            if (key == 8 || isCtrl) {
                return true;
            }

            reg = /\d/;
            var isFirstN = allowNegative ? keychar == '-' && this.value.indexOf('-') == -1 : false;
            var isFirstD = allowDecimal ? keychar == decimalChar && this.value.indexOf(decimalChar) == -1 : false;

            return isFirstN || isFirstD || reg.test(keychar);
        };

        elVolume.onkeyup = function() {
            var temp = this.value;
            var decimalPlaces = 4;
            var allowNegative = false;

            if (elVolumeName.indexOf("txt1To3Volume") < 0 &&
				elVolumeName.indexOf("txt10To18Volume") < 0 &&
				elVolumeName.indexOf("txt19To24Volume") < 0 &&
				elVolumeName.indexOf("txt25To50Volume") < 0 &&
				elVolumeName.indexOf("txtUnder500mlVolume") < 0) {

                var volume = this.value;
                if (volume == decimalChar)
                    volume = "0";

                if (validateRangeCondition(elVolumeName, parseFloat(volume.replace(",", "."))) || temp == "") {
                    this.style.backgroundColor = "";
                    elError.style.display = "none";
                }
                else {
                    this.style.backgroundColor = "red";
                    elError.style.display = "inline";
                }
            }

            // avoid changing things if already formatted correctly
            var reg0Str = '[0-9]*';
            if (decimalPlaces > 0) {
                reg0Str += '\\' + decimalChar + '?[0-9]{0,' + decimalPlaces + '}';
            } else if (decimalPlaces < 0) {
                reg0Str += '\\' + decimalChar + '?[0-9]*';
            }
            reg0Str = allowNegative ? '^-?' + reg0Str : '^' + reg0Str;
            reg0Str = reg0Str + '$';
            var reg0 = new RegExp(reg0Str);
            if (reg0.test(temp)) return true;

            // first replace all non numbers
            var reg1Str = '[^0-9' + (decimalPlaces != 0 ? decimalChar : '') + (allowNegative ? '-' : '') + ']';
            var reg1 = new RegExp(reg1Str, 'g');
            temp = temp.replace(reg1, '');

            if (allowNegative) {
                // replace extra negative
                var hasNegative = temp.length > 0 && temp.charAt(0) == '-';
                var reg2 = /-/g;
                temp = temp.replace(reg2, '');
                if (hasNegative) temp = '-' + temp;
            }

            if (decimalPlaces != 0) {
                var reg3 = /\./g;
                var reg3Array = reg3.exec(temp);
                if (reg3Array != null) {
                    // keep only first occurrence of 
                    //  and the number of places specified by decimalPlaces or the entire string if decimalPlaces < 0
                    var reg3Right = temp.substring(reg3Array.index + reg3Array[0].length);
                    reg3Right = reg3Right.replace(reg3, '');
                    reg3Right = decimalPlaces > 0 ? reg3Right.substring(0, decimalPlaces) : reg3Right;
                    temp = temp.substring(0, reg3Array.index) + decimalChar + reg3Right;
                }
            }
            this.value = temp;
        };

        elVolume.onblur = function() {
            var volume = this.value;
            if (volume == decimalChar)
                volume = "0";

            if (validateRangeCondition(elVolumeName, parseFloat(volume.replace(",", "."))) || this.value == "") {
                this.style.backgroundColor = "";
                elError.style.display = "none";
            }
            else {
                this.style.backgroundColor = "red";
                elError.style.display = "inline";
            }

            var rows = new _rows;
            var tbl = this.parentNode.parentNode.parentNode.parentNode;

            for (var i = 0; i < tbl.rows.length; i++) {
                var units = document.getElementById(elUnitsName + i.toString()).value;
                var volume = document.getElementById(elVolumeName + i.toString()).value;

                if (volume == decimalChar)
                    volume = "0";

                var row = new _row;
                row.Type = rowType;
                row.Volume = volume == "" ? 0 : parseFloat(volume.replace(",", "."));
                row.Units = units == "" ? 0 : parseFloat(units);
                row.LitreElement = elLitreName;
                row.PriceElement = elPriceName;

                rows.RowList[i] = row;
            }
            getRowTotal(rows);
        };

        cell1.appendChild(elVolume);
    }

    var txt = document.createTextNode
    var el = document.createElement("label");
    var str = document.createTextNode(lblRangeText);
    el.setAttribute("class", "myVolume");
    el.setAttribute("className", "myVolume");
    el.appendChild(str);
    cell1.appendChild(el);

    // cell lblError
    var txt = document.createTextNode
    var elError = document.createElement("label");

    var str;
    if (document.getElementById("hidLang").value == "en")
        str = document.createTextNode('Invalid volume');
    else
        str = document.createTextNode('Volume non valide');

    elError.id = elVolumeName + iteration + "_Error";
    elError.setAttribute("class", "error");
    elError.setAttribute("className", "error");
    elError.style.display = "none";
    elError.appendChild(str);
    cell1.appendChild(elError);

    // cell lbl L
    var cell2 = row.insertCell(2);

    if (elVolumeName != "") {
        var textNode = document.createTextNode("L");
        cell2.appendChild(textNode);
    }

    // cell txtUnits
    var cell3 = row.insertCell(3);
    var elUnits = document.createElement('input');
    elUnits.type = 'text';
    elUnits.name = elUnitsName + iteration;
    elUnits.id = elUnitsName + iteration;
    elUnits.setAttribute("tabindex", (tabIndex + 1).toString());

    elUnits.onkeypress = function(e) {
        var allowDecimal = false;
        var allowNegative = false;
        var key;
        var isCtrl = false;
        var keychar;
        var reg;

        if (window.event) {
            key = window.event.keyCode;
            isCtrl = window.event.ctrlKey;
        }
        else if (e.which) {
            key = e.which;
            isCtrl = e.ctrlKey;
        }

        if (isNaN(key)) return true;

        keychar = String.fromCharCode(key);

        // check for backspace or delete, or if Ctrl was pressed
        if (key == 8 || isCtrl) {
            return true;
        }

        reg = /\d/;
        var isFirstN = allowNegative ? keychar == '-' && this.value.indexOf('-') == -1 : false;
        var isFirstD = allowDecimal ? keychar == decimalChar && this.value.indexOf(decimalChar) == -1 : false;

        return isFirstN || isFirstD || reg.test(keychar);
    };

    elUnits.onkeyup = function() {
        var temp = this.value;
        var decimalPlaces = 4;
        var allowNegative = false;

        // avoid changing things if already formatted correctly
        var reg0Str = '[0-9]*';
        if (decimalPlaces > 0) {
            reg0Str += '\\' + decimalChar + '?[0-9]{0,' + decimalPlaces + '}';
        } else if (decimalPlaces < 0) {
            reg0Str += '\\' + decimalChar + '?[0-9]*';
        }
        reg0Str = allowNegative ? '^-?' + reg0Str : '^' + reg0Str;
        reg0Str = reg0Str + '$';
        var reg0 = new RegExp(reg0Str);
        if (reg0.test(temp)) return true;

        // first replace all non numbers
        var reg1Str = '[^0-9' + (decimalPlaces != 0 ? decimalChar : '') + (allowNegative ? '-' : '') + ']';
        var reg1 = new RegExp(reg1Str, 'g');
        temp = temp.replace(reg1, '');

        if (allowNegative) {
            // replace extra negative
            var hasNegative = temp.length > 0 && temp.charAt(0) == '-';
            var reg2 = /-/g;
            temp = temp.replace(reg2, '');
            if (hasNegative) temp = '-' + temp;
        }

        if (decimalPlaces != 0) {
            var reg3 = /\./g;
            var reg3Array = reg3.exec(temp);
            if (reg3Array != null) {
                // keep only first occurrence of .
                //  and the number of places specified by decimalPlaces or the entire string if decimalPlaces < 0
                var reg3Right = temp.substring(reg3Array.index + reg3Array[0].length);
                reg3Right = reg3Right.replace(reg3, '');
                reg3Right = decimalPlaces > 0 ? reg3Right.substring(0, decimalPlaces) : reg3Right;
                temp = temp.substring(0, reg3Array.index) + decimalChar + reg3Right;
            }
        }
        this.value = temp;
    };

    elUnits.onblur = function() {
        var rows = new _rows;
        var tbl = this.parentNode.parentNode.parentNode.parentNode;

        for (var i = 0; i < tbl.rows.length; i++) {
            var txtVolume = document.getElementById(elVolumeName + i.toString());
            var txtUnits = document.getElementById(elUnitsName + i.toString());

            var row = new _row;
            row.Type = rowType;
            row.Volume = txtVolume.value == "" ? 0 : parseFloat(txtVolume.value.replace(",", "."));
            row.Units = txtUnits.value == "" ? 0 : parseFloat(txtUnits.value);
            row.LitreElement = elLitreName;
            row.PriceElement = elPriceName;

            rows.RowList[i] = row;
        }

        getRowTotal(rows);
    };

    cell3.appendChild(elUnits);

    // cell Space
    var cell4 = row.insertCell(4);

    // cell Total litres
    var cell5 = row.insertCell(5);

    // cell Space
    var cell6 = row.insertCell(6);

    // cell Rate
    var cell7 = row.insertCell(7);

    // cell Space
    var cell8 = row.insertCell(8);

    // cell Remittance
    var cell9 = row.insertCell(9);
};

var removeRowFromTable = function(obj)
{
	var tbl = obj.parentNode.parentNode.parentNode.parentNode;
	var lastRow = tbl.rows.length;
	if (lastRow > 1) tbl.deleteRow(lastRow - 1);
};

var validateKey = function(obj, ev, allowDecimal, allowNegative)
{
	var key;
	var isCtrl = false;
	var keychar;
	var reg;
		
	if(window.event) {
		key = window.event.keyCode;
		isCtrl = window.event.ctrlKey
	}
	else if(ev.which) {
		key = ev.which;
		isCtrl = ev.ctrlKey;
	}

	if (isNaN(key)) return true;

	keychar = String.fromCharCode(key);

	// check for backspace or delete, or if Ctrl was pressed
	if (key == 8 || isCtrl)
	{
		return true;
	}

	reg = /\d/;
	var decimalChar = GetDecimalChar();
	var isFirstN = allowNegative ? keychar == '-' && obj.value.indexOf('-') == -1 : false;
	var isFirstD = allowDecimal ? keychar == decimalChar && obj.value.indexOf(decimalChar) == -1 : false;
		
	return isFirstN || isFirstD || reg.test(keychar);
};

var extractNumber = function(obj, validate, decimalPlaces, allowNegative, elVolumeName)
{
	var temp = obj.value;
	var decimalChar = GetDecimalChar();

	if (obj.id.indexOf("Volume_") > -1)
	{
		if (validate)
		{
			var volume = obj.value;
			if (volume == decimalChar)
				volume = "0";
			
			if (validateRangeCondition(elVolumeName, parseFloat(volume.replace(",", "."))) || temp == "")
			{
				var el = document.getElementById(elVolumeName + "0_Error")
				el.style.display = "none";
				obj.style.backgroundColor = "";
			}
			else
			{
				var el = document.getElementById(elVolumeName + "0_Error")
				el.style.display = "inline";
				obj.style.backgroundColor = "red";
			}
		}
	}
	
	// avoid changing things if already formatted correctly
	var reg0Str = '[0-9]*';
	if (decimalPlaces > 0) {
		reg0Str += '\\'+decimalChar+'?[0-9]{0,' + decimalPlaces + '}';
	} else if (decimalPlaces < 0) {
		reg0Str += '\\'+decimalChar+'?[0-9]*';
	}
	reg0Str = allowNegative ? '^-?' + reg0Str : '^' + reg0Str;
	reg0Str = reg0Str + '$';
	var reg0 = new RegExp(reg0Str);
	if (reg0.test(temp)) return true;

	// first replace all non numbers
	var reg1Str = '[^0-9' + (decimalPlaces != 0 ? decimalChar : '') + (allowNegative ? '-' : '') + ']';
	var reg1 = new RegExp(reg1Str, 'g');
	temp = temp.replace(reg1, '');

	if (allowNegative) {
		// replace extra negative
		var hasNegative = temp.length > 0 && temp.charAt(0) == '-';
		var reg2 = /-/g;
		temp = temp.replace(reg2, '');
		if (hasNegative) temp = '-' + temp;
	}

	if (decimalPlaces != 0) {
		
		if (decimalChar == ".")
			var reg3 = /\./g;
		else
			var reg3 = /\,/g;
			
		var reg3Array = reg3.exec(temp);
		if (reg3Array != null) {
			// keep only first occurrence of .
			//  and the number of places specified by decimalPlaces or the entire string if decimalPlaces < 0
			var reg3Right = temp.substring(reg3Array.index + reg3Array[0].length);
			reg3Right = reg3Right.replace(reg3, '');
			reg3Right = decimalPlaces > 0 ? reg3Right.substring(0, decimalPlaces) : reg3Right;
			temp = temp.substring(0,reg3Array.index) + decimalChar + reg3Right;
		}
	}

	obj.value = temp;
};

var getRow = function(obj, elTotal, rowType)
{
	var rows = new _rows;
	var row = new _row; 
	row.Type = rowType;
	row.Volume = 1;
	row.Units = obj.value == "" ? 0 : parseFloat(obj.value.replace(",", "."));
	row.PriceElement = elTotal;
	rows.RowList[0] = row;

	getRowTotal(rows);
};

var getFixedRow = function(obj, fixedVolume, elUnitsName, elLitreName, elPriceName, rowType) {
    var rows = new _rows;
    var tbl = obj.parentNode.parentNode.parentNode.parentNode;
    var txtUnits = document.getElementById(elUnitsName);

    var row = new _row;
    row.Type = rowType;
    row.Volume = fixedVolume;
    row.Units = txtUnits.value == "" ? 0 : parseFloat(txtUnits.value);
    row.LitreElement = elLitreName;
    row.PriceElement = elPriceName;

    rows.RowList[0] = row;
    getRowTotal(rows);
};

var getVariableRow = function(obj, elVolumeName, elUnitsName, elLitreName, elPriceName, rowType) {
    var rows = new _rows;
    var tbl = obj.parentNode.parentNode.parentNode.parentNode;
    var decimalChar = GetDecimalChar();

    for (var i = 0; i < tbl.rows.length; i++) {
        var volume = document.getElementById(elVolumeName + i.toString()).value;
        var units = document.getElementById(elUnitsName + i.toString()).value;

        if (volume == decimalChar) {
            volume = "0";
        }

        var row = new _row;
        row.Type = rowType;
        row.Volume = volume == "" ? 0 : parseFloat(volume.replace(",", "."));
        row.Units = units == "" ? 0 : parseFloat(units);
        row.LitreElement = elLitreName;
        row.PriceElement = elPriceName;
        rows.RowList[i] = row;
    }
    getRowTotal(rows);
};

var getRowTotal = function(rows) {
    try {
        currentYear = -1;
        objPeriodMode = document.getElementById("hdnPeriodMode");
        objPeriodYear = document.getElementById("ddlPeriodRetroYear");
        if (objPeriodMode != null && objPeriodYear != null) {
            if (objPeriodMode.value == "R") {
                currentYear = objPeriodYear.options[objPeriodYear.selectedIndex].value;
            }
        }
        SOGHU.PriceService.GetRowTotal(rows, document.getElementById("hidLang").value, currentYear, getRowTotalSucceededCallback);
    }
    catch (e) {
        alert("550 Error : " + e.toString());
    }
};

var getRowTotalSucceededCallback = function(obj) {
    var error = "";

    for (i = 0; i < obj.RowList.length; i++) {
        error += obj.RowList[i].Error;
    }

    if (error == "") {
        for (i = 0; i < obj.RowList.length; i++) {
            var elLitre = document.getElementById(obj.RowList[i].LitreElement);
            if (elLitre) {
                elLitre.innerHTML = (obj.TotalLitre == "0" ? "" : obj.TotalLitre);
            }
            var elPrice = document.getElementById(obj.RowList[i].PriceElement);
            if (elPrice) {
                elPrice.innerHTML = obj.Total;
            }
        }
        getFormTotal();
    }
    else {
        alert("572 Error : " + error);
    }
};

var getFormTotal = function() {
    var total = 0;

    if (document.getElementById("hidLang").value == "en") {
        total += RoundNumber(parseFloat(document.getElementById("litOilTotal").innerHTML.replace(/,/g, "").substring(1, document.getElementById("litOilTotal").innerHTML.replace(/,/g, "").length)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblFilterLess203Total").innerHTML.replace(/,/g, "").substring(1, document.getElementById("lblFilterLess203Total").innerHTML.replace(/,/g, "").length)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblFilterMore203Total").innerHTML.replace(/,/g, "").substring(1, document.getElementById("lblFilterMore203Total").innerHTML.replace(/,/g, "").length)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblFilterSumpTypeTotal").innerHTML.replace(/,/g, "").substring(1, document.getElementById("lblFilterSumpTypeTotal").innerHTML.replace(/,/g, "").length)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lbl500mlTotal").innerHTML.replace(/,/g, "").substring(1, document.getElementById("lbl500mlTotal").innerHTML.replace(/,/g, "").length)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblQuarterUsGallonTotal").innerHTML.replace(/,/g, "").substring(1, document.getElementById("lblQuarterUsGallonTotal").innerHTML.replace(/,/g, "").length)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lbl1To3Total").innerHTML.replace(/,/g, "").substring(1, document.getElementById("lbl1To3Total").innerHTML.replace(/,/g, "").length)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblOneUsGallonTotal").innerHTML.replace(/,/g, "").substring(1, document.getElementById("lblOneUsGallonTotal").innerHTML.replace(/,/g, "").length)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lbl4Total").innerHTML.replace(/,/g, "").substring(1, document.getElementById("lbl4Total").innerHTML.replace(/,/g, "").length)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lbl5To9Total").innerHTML.replace(/,/g, "").substring(1, document.getElementById("lbl5To9Total").innerHTML.replace(/,/g, "").length)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lbl10To18Total").innerHTML.replace(/,/g, "").substring(1, document.getElementById("lbl10To18Total").innerHTML.replace(/,/g, "").length)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblFiveUsGallonTotal").innerHTML.replace(/,/g, "").substring(1, document.getElementById("lblFiveUsGallonTotal").innerHTML.replace(/,/g, "").length)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lbl19To24Total").innerHTML.replace(/,/g, "").substring(1, document.getElementById("lbl19To24Total").innerHTML.replace(/,/g, "").length)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblUnder500mlTotal").innerHTML.replace(/,/g, "").substring(1, document.getElementById("lblUnder500mlTotal").innerHTML.replace(/,/g, "").length)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lbl25To50Total").innerHTML.replace(/,/g, "").substring(1, document.getElementById("lbl25To50Total").innerHTML.replace(/,/g, "").length)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblAerosolTotal").innerHTML.replace(/,/g, "").substring(1, document.getElementById("lblAerosolTotal").innerHTML.replace(/,/g, "").length)), 2);
    }
    else {
        total += RoundNumber(parseFloat(document.getElementById("litOilTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("litOilTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblFilterLess203Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("lblFilterLess203Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblFilterMore203Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("lblFilterMore203Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblFilterSumpTypeTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("lblFilterSumpTypeTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lbl500mlTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("lbl500mlTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblQuarterUsGallonTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("lblQuarterUsGallonTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lbl1To3Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("lbl1To3Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblOneUsGallonTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("lblOneUsGallonTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lbl4Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("lbl4Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lbl5To9Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("lbl5To9Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lbl10To18Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("lbl10To18Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblFiveUsGallonTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("lblFiveUsGallonTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lbl19To24Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("lbl19To24Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblUnder500mlTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("lblUnder500mlTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lbl25To50Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("lbl25To50Total").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
        total += RoundNumber(parseFloat(document.getElementById("lblAerosolTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").substring(0, document.getElementById("lblAerosolTotal").innerHTML.replace(" ", "").replace(/&nbsp;/g, "").replace(",", ".").length - 1)), 2);
    }

    var ilblSubTotal = total;
    document.getElementById("lblSubTotal").innerHTML = formatCurrency(ilblSubTotal);

    var priceGST = RoundNumber(ilblSubTotal * 0.05, 2);
    document.getElementById("lblGst").innerHTML = formatCurrency(priceGST);

    ilblSubTotal += priceGST;
    document.getElementById("lblGstSubTotal").innerHTML = formatCurrency(ilblSubTotal);

    var TVQ = 0.085;
    var today = new Date();
    var newYear2012 = new Date(2012, 3, 1, 0, 0, 0, 0);
    if (today >= newYear2012) {
        TVQ = 0.095;
    }
    var pricePST = RoundNumber(ilblSubTotal * TVQ, 2);

    document.getElementById("lblPst").innerHTML = formatCurrency(pricePST);

    ilblSubTotal += pricePST;
    document.getElementById("lblTotal").innerHTML = formatCurrency(ilblSubTotal);
};

var validateRangeCondition = function(txtVolume, value)
{
	var result = true;
	switch (txtVolume)
	{
		case "txt1To3Volume_":
			result = (value >= 0.501 && value <= 3.999);
			_submitError = _submitError && result;
			break;
		case "txt4LitreVolume_":
			result = (value >= 4 && value <= 4.999);
			_submitError = _submitError && result;
			break;
		case "txt5To9Volume_":
			result = (value >= 5 && value <= 9.999);
			_submitError = _submitError && result;
			break;
		case "txt10To18Volume_":
			result = (value >= 10 && value <= 18.999);
			_submitError = _submitError && result;
			break;  
		case "txt19To24Volume_":
			result = (value >= 19 && value <= 24.999);
			_submitError = _submitError && result;
			break;
		case "txt25To50Volume_":
			result = (value >= 25 && value <= 50);
			_submitError = _submitError && result;
			break;
		case "txtUnder500mlVolume_":
			result = (value >= 0 && value < 0.5);
			_submitError = _submitError && result;
			break;
	}

	return result;
};

var getTabIndex = function(rowType, iteration)
{
	result = 0;
	switch (rowType)
	{
		case "Exactly500":
			result = 30 + iteration;
			break;
		case "QuarterUsGallon":
			result = 50 + iteration;
			break;
		case "Litre1To3":
			result = 70 + (iteration * 2);
			break;
		case "OneUsGallon":;
			result = 110 + iteration
			break;
		case "Litre4":
			result = 130 + (iteration * 2);
			break;
		case "Litre5To9":
			result = 170 + (iteration * 2);
			break;
		case "Litre10To18":
			result = 210 + (iteration * 2);
			break;
		case "FiveUsGallon":
			result = 250 + iteration;
			break;
		case "Litre19To24":
			result = 270 + (iteration * 2);
			break;
		case "Under500":
			result = 310 + (iteration * 2);
			break;
		case "Litre25To50":
			result = 350 + (iteration * 2);
			break;
	}

	return result;
};

var imgBtnSubmit_Click = function() {
    // GL 2011-01-26 : On désactive le bouton submit le temps de faire la validation. Si le formulaire ne passe pas, on doit réactiver le bouton.
    //                 Sinon on se ramasse avec des courriels qui partent en double, triple, etc.
    var btnSubmit = document.getElementById('btnSubmit');
    if (btnSubmit) {
        btnSubmit.disabled = true;
    }
    var bReactivateBtnSubmit = false;

    var hidMemberId = document.getElementById("hidMemberId").value;
    var hidMemberPeriodId = document.getElementById("hidMemberPeriodId").value;
    if (document.getElementById("radTxtRetroactivePeriod")) {
        hidMemberPeriodId = 4;
    }
    var ddlValue = -1;
    if (document.getElementById("ddlPeriodTypes")) {
        var ddlPeriod = document.getElementById("ddlPeriodTypes");
        ddlValue = ddlPeriod[ddlPeriod.selectedIndex].value;
    }
    else if (document.getElementById("ddlPeriodRetroYear")) {
        var ddlPeriod = document.getElementById("ddlPeriodRetroYear");
        if (ddlPeriod.selectedIndex > 0) {
            ddlValue = ddlPeriod[ddlPeriod.selectedIndex].value;
        }
    }
    document.getElementById("lblSubmitError").innerHTML = "";

    if (hidMemberId != "" && hidMemberPeriodId != "") {
        if (ddlValue > 0) {
            if (document.getElementById("chkAccept").checked) {
                try {
                    var lstRows = getAllRows();

                    if (lstRows.RowList.length > 0 && _submitError) {
                        currentYear = -1;
                        objPeriodMode = document.getElementById("hdnPeriodMode");
                        objPeriodYear = document.getElementById("ddlPeriodRetroYear");
                        if (objPeriodMode != null && objPeriodYear != null) {
                            if (objPeriodMode.value == "R") {
                                currentYear = objPeriodYear.options[objPeriodYear.selectedIndex].value;
                            }
                        }
                        SOGHU.PriceService.SubmitRemittance(lstRows, hidMemberId, hidMemberPeriodId, ddlValue, currentYear, submitRemittanceSucceededCallback);
                    }
                    else {
                        if (document.getElementById("hidLang").value == "en")
                            document.getElementById("lblSubmitError").innerHTML += "There is invalid data on the page. <br />";
                        else
                            document.getElementById("lblSubmitError").innerHTML += "Il y a des données non valides sur la page.<br />";

                        document.getElementById("lblSubmitError").style.display = "inline";
                        bReactivateBtnSubmit = true;
                    }
                }
                catch (e) {
                    alert("754 Error : " + e.toString());
                    bReactivateBtnSubmit = true;
                }
            }
            else {
                document.getElementById("reqChkAccept").style.display = "inline";
                bReactivateBtnSubmit = true;
            }
        }
        else {
            if (document.getElementById("hidLang").value == "en")
                document.getElementById("lblSubmitError").innerHTML += "Please select a period for the remittance order.<br />";
            else
                document.getElementById("lblSubmitError").innerHTML += "SVP choisir une période de remise.<br />";

            document.getElementById("lblSubmitError").style.display = "inline";
            document.getElementById("reqValDllPeriod").style.display = "inline";
            bReactivateBtnSubmit = true;
        }
    }
    else {
        if (document.getElementById("hidLang").value == "en")
            document.getElementById("lblSubmitError").innerHTML += "Please enter your Member number and password.<br />";
        else
            document.getElementById("lblSubmitError").innerHTML += "SVP entrer votre numéro de membre et votre mot de passe.<br />";

        document.getElementById("lblSubmitError").style.display = "inline";
        bReactivateBtnSubmit = true;
    }

    if (bReactivateBtnSubmit && btnSubmit) {
        btnSubmit.disabled = false;
    }
};

var submitRemittanceSucceededCallback = function(obj)
{
	window.onbeforeunload = null;
	
	if (obj.toString() > 0)
	{
		if (document.getElementById("hidLang").value == "en")
			window.location.href = "ThankYou_en.aspx?result=1&sOrderNumber=" + obj.toString();
		else
			window.location.href = "ThankYou.aspx?result=1&sOrderNumber=" + obj.toString();
	}
	else
	{
		if (document.getElementById("hidLang").value == "en")
			window.location.href = "ThankYou_en.aspx?result=0";
		else
			window.location.href = "ThankYou.aspx?result=0";
	}
};

var _submitError = true;

var getAllRows = function() {
    _submitError = true;
    var rows = new _rows;
    var i;

    var units = document.getElementById("txtOil").value;
    if (units != "") {
        var row = new _row;
        row.Type = "Oil";
        row.Volume = 1;
        row.Units = parseFloat(units.replace(",", "."));
        rows.RowList.push(row);
    }

    var units = document.getElementById("txtFilterLess203").value;
    if (units != "") {
        var row = new _row;
        row.Type = "LessThan203";
        row.Volume = 1;
        row.Units = parseFloat(units);
        rows.RowList.push(row);
    }

    var units = document.getElementById("txtFilterMore203").value;
    if (units != "") {
        var row = new _row;
        row.Type = "MoreThan203";
        row.Volume = 1;
        row.Units = parseFloat(units);
        rows.RowList.push(row);
    }

    var units = document.getElementById("txtFilterSumpType").value;
    if (units != "") {
        var row = new _row;
        row.Type = "SumpType";
        row.Volume = 1;
        row.Units = parseFloat(units);
        rows.RowList.push(row);
    }

    var units = document.getElementById("txt500mlUnits").value;
    if (units != "") {
        var row = new _row;
        row.Type = "Exactly500";
        row.Volume = 0.5;
        row.Units = parseFloat(units);
        rows.RowList.push(row);
    }

    var units = document.getElementById("txtQuarterUsGallon").value;
    if (units != "") {
        var row = new _row;
        row.Type = "QuarterUsGallon";
        row.Volume = 0.947;
        row.Units = parseFloat(units);
        rows.RowList.push(row);
    }


    var tbl = document.getElementById("tbl1To3");
    for (i = 0; i < tbl.rows.length; i++) {
        var volume = document.getElementById("txt1To3Volume_" + i.toString()).value;
        var units = document.getElementById("txt1To3Units_" + i.toString()).value;
        if (volume != "" && units != "") {
            var row = new _row;
            row.Type = "Litre1To3";
            row.Volume = parseFloat(volume.replace(",", "."));
            row.Units = parseFloat(units);
            rows.RowList.push(row);

            validateRangeCondition("txt1To3Volume_", row.Volume);
        }
    }

    var units = document.getElementById("txtOneUsGallon").value;
    if (units != "") {
        var row = new _row;
        row.Type = "OneUsGallon";
        row.Volume = 3.785;
        row.Units = parseFloat(units);
        rows.RowList.push(row);
    }

    var tbl = document.getElementById("tbl4Litre");
    for (i = 0; i < tbl.rows.length; i++) {
        var volume = document.getElementById("txt4LitreVolume_" + i.toString()).value;
        var units = document.getElementById("txt4LitreUnits_" + i.toString()).value;
        if (volume != "" && units != "") {
            var row = new _row;
            row.Type = "Litre4";
            row.Volume = parseFloat(volume.replace(",", "."));
            row.Units = parseFloat(units);
            rows.RowList.push(row);

            validateRangeCondition("txt4LitreVolume_", row.Volume);
        }
    }

    var tbl = document.getElementById("tbl5To9");
    for (i = 0; i < tbl.rows.length; i++) {
        var volume = document.getElementById("txt5To9Volume_" + i.toString()).value;
        var units = document.getElementById("txt5To9Units_" + i.toString()).value;
        if (volume != "" && units != "") {
            var row = new _row;
            row.Type = "Litre5To9";
            row.Volume = parseFloat(volume.replace(",", "."));
            row.Units = parseFloat(units);
            rows.RowList.push(row);

            validateRangeCondition("txt5To9Volume_", row.Volume);
        }
    }

    var tbl = document.getElementById("tbl10To18");
    for (i = 0; i < tbl.rows.length; i++) {
        var volume = document.getElementById("txt10To18Volume_" + i.toString()).value;
        var units = document.getElementById("txt10To18Units_" + i.toString()).value;
        if (volume != "" && units != "") {
            var row = new _row;
            row.Type = "Litre10To18";
            row.Volume = parseFloat(volume.replace(",", "."));
            row.Units = parseFloat(units);
            rows.RowList.push(row);

            validateRangeCondition("txt10To18Volume_", row.Volume);
        }
    }

    var units = document.getElementById("txtFiveUsGallon").value;
    if (units != "") {
        var row = new _row;
        row.Type = "FiveUsGallon";
        row.Volume = 18.942;
        row.Units = parseFloat(units);
        rows.RowList.push(row);
    }

    var tbl = document.getElementById("tbl19To24");
    for (i = 0; i < tbl.rows.length; i++) {
        var volume = document.getElementById("txt19To24Volume_" + i.toString()).value;
        var units = document.getElementById("txt19To24Units_" + i.toString()).value;
        if (volume != "" && units != "") {
            var row = new _row;
            row.Type = "Litre19To24";
            row.Volume = parseFloat(volume.replace(",", "."));
            row.Units = parseFloat(units);
            rows.RowList.push(row);

            validateRangeCondition("txt19To24Volume_", row.Volume);
        }
    }

    var tbl = document.getElementById("tblUnder500");
    for (i = 0; i < tbl.rows.length; i++) {
        var volume = document.getElementById("txtUnder500mlVolume_" + i.toString()).value;
        var units = document.getElementById("txtUnder500mlUnits_" + i.toString()).value;
        if (volume != "" && units != "") {
            var row = new _row;
            row.Type = "Under500";
            row.Volume = parseFloat(volume.replace(",", "."));
            row.Units = parseFloat(units);
            rows.RowList.push(row);

            validateRangeCondition("txtUnder500mlVolume_", row.Volume);
        }
    }

    var tbl = document.getElementById("tbl25To50");
    for (i = 0; i < tbl.rows.length; i++) {
        var volume = document.getElementById("txt25To50Volume_" + i.toString()).value;
        var units = document.getElementById("txt25To50Units_" + i.toString()).value;
        if (volume != "" && units != "") {
            var row = new _row;
            row.Type = "Litre25To50";
            row.Volume = parseFloat(volume.replace(",", "."));
            row.Units = parseFloat(units);
            rows.RowList.push(row);

            validateRangeCondition("txt25To50Volume_", row.Volume);
        }
    }

    var units = document.getElementById("txtAerosol").value;
    if (units != "") {
        var row = new _row;
        row.Type = "Aerosol";
        row.Volume = 1;
        row.Units = parseFloat(units);
        rows.RowList.push(row);
    }

    return rows;
};

var chkAccept_CheckedChanged = function()
{
	if(document.getElementById("chkAccept").checked)
	{
		var lblTerms = document.getElementById("reqChkAccept");
		if (lblTerms.style.display == "inline")
			lblTerms.style.display = "none";
	}
};

var Left = function(str, n)
{
	if (n <= 0)
		return "";
	else if (n > String(str).length)
		return str;
	else
		return String(str).substring(0,n);
};

var Right = function(str, n)
{
	if (n <= 0)
		return "";
	else if (n > String(str).length)
		return str;
	else {
		var iLen = String(str).length;
		return String(str).substring(iLen, iLen - n);
	}
};

var RoundNumber = function(num, nbDecimals) {
    return Math.round(num * Math.pow(10, nbDecimals)) / Math.pow(10, nbDecimals);
};

var formatCurrency = function (num)
{
	num = num.toString().replace(/\$|\,/g,'');
	
	if (isNaN(num))
		num = "0";
	
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num * 100 + 0.50000000001);
	cents = num % 100;
	num = Math.floor(num / 100).toString();
	
	if (cents < 10)
		cents = "0" + cents;
	
	if (document.getElementById("hidLang").value == "en")
	{
		for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) {
			num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));
		}
	
		return (((sign) ? '' : '-') + '$' + num + '.' + cents);
	}
	else
	{
		for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) {
			num = num.substring(0, num.length - (4 * i + 3)) + ' ' + num.substring(num.length - (4 * i + 3));
		}
		
		return (((sign) ? '' : '-') + num + ',' + cents + ' $');
	}
};

var GetDecimalChar = function()
{
	if(document.getElementById("hidLang").value == "en")
		return ".";
	else
		return ",";
};

var CalculateAllRows = function() {
    //unit rows
    getRow(document.getElementById("txtOil"), 'litOilTotal', 'Oil');
    getRow(document.getElementById("txtAerosol"), 'lblAerosolTotal', 'Aerosol');
    getRow(document.getElementById("txtFilterLess203"), 'lblFilterLess203Total', 'LessThan203');
    getRow(document.getElementById("txtFilterMore203"), 'lblFilterMore203Total', 'MoreThan203');
    getRow(document.getElementById("txtFilterSumpType"), 'lblFilterSumpTypeTotal', 'SumpType');
    //fixed rows
    getFixedRow(document.getElementById("txt500mlUnits"), '0.5', 'txt500mlUnits', 'lbl500mlLitre', 'lbl500mlTotal', 'Exactly500');
    getFixedRow(document.getElementById("txtQuarterUsGallon"), '0.947', 'txtQuarterUsGallon', 'lblQuarterUsGallonLitre', 'lblQuarterUsGallonTotal', 'QuarterUsGallon');
    getFixedRow(document.getElementById("txtOneUsGallon"), '3.785', 'txtOneUsGallon', 'lblOneUsGallonLitre', 'lblOneUsGallonTotal', 'OneUsGallon');
    getFixedRow(document.getElementById("txtFiveUsGallon"), '18.942', 'txtFiveUsGallon', 'lblFiveUsGallonLitre', 'lblFiveUsGallonTotal', 'FiveUsGallon');
    //variable rows
    //1 to 3
    counter = 0;
    do {
        getVariableRow(document.getElementById("txt1To3Volume_" + counter.toString()), 'txt1To3Volume_', 'txt1To3Units_', 'lbl1To3Litre', 'lbl1To3Total', 'Litre1To3');
        counter++;
    } while (document.getElementById("txt1To3Volume_" + counter.toString()));
    //4 L to 4,999 L
    counter = 0;
    do {
        getVariableRow(document.getElementById("txt4LitreVolume_" + counter.toString()), 'txt4LitreVolume_', 'txt4LitreUnits_', 'lbl4Litre', 'lbl4Total', 'Litre4');
        counter++;
    } while (document.getElementById("txt4LitreVolume_" + counter.toString()));
    //5 to 9
    counter = 0;
    do {
        getVariableRow(document.getElementById("txt5To9Volume_" + counter.toString()), 'txt5To9Volume_', 'txt5To9Units_', 'lbl5To9Litre', 'lbl5To9Total', 'Litre5To9');
        counter++;
    } while (document.getElementById("txt5To9Volume_" + counter.toString()));
    //10 to 18
    counter = 0;
    do {
        getVariableRow(document.getElementById("txt10To18Volume_" + counter.toString()), 'txt10To18Volume_', 'txt10To18Units_', 'lbl10To18Litre', 'lbl10To18Total', 'Litre10To18');
        counter++;
    } while (document.getElementById("txt10To18Volume_" + counter.toString()));
    //19 to 24
    counter = 0;
    do {
        getVariableRow(document.getElementById("txt19To24Volume_" + counter.toString()), 'txt19To24Volume_', 'txt19To24Units_', 'lbl19To24Litre', 'lbl19To24Total', 'Litre19To24');
        counter++;
    } while (document.getElementById("txt19To24Volume_" + counter.toString()));
    //under 500ml
    counter = 0;
    do {
        getVariableRow(document.getElementById("txtUnder500mlVolume_" + counter.toString()), 'txtUnder500mlVolume_', 'txtUnder500mlUnits_', 'lblUnder500mlLitre', 'lblUnder500mlTotal', 'Under500');
        counter++;
    } while (document.getElementById("txtUnder500mlVolume_" + counter.toString()));
    //25 to 50
    counter = 0;
    do {
        getVariableRow(document.getElementById("txt25To50Volume_" + counter.toString()), 'txt25To50Volume_', 'txt25To50Units_', 'lbl25To50Litre', 'lbl25To50Total', 'Litre25To50');
        counter++;
    } while (document.getElementById("txt25To50Volume_" + counter.toString()));
    return false;
};

window.onbeforeunload = function (evt)
{
	var message;
	if (document.getElementById("hidLang").value == "en")
		message = "The information you have already entered will not be saved if you close the page.";
	else
		message = "L'information saisie ne sera pas sauvegardée si vous quittez la page.";
		
	if (typeof evt == "undefined")
	{
		evt = window.event;
	}
	if (evt)
	{
		evt.returnValue = message;
	}
	return message;
}

function showHide(objShowId, objHideId, objFieldId, periodMode) {
    objShow = document.getElementById(objShowId);
    objHide = document.getElementById(objHideId);
    objField = document.getElementById(objFieldId);
    if (objShow && objHide) {
        objShow.style.display = "block";
        objHide.style.display = "none";
    }
    objField.Value = periodMode;
    return false;
}

function dump(obj) {
    var out = '';
    for (var i in obj) {
        out += i + ": " + obj[i] + "\n";
    }
    alert(out);
}
