var BandCalculator = {
    bandWaste: '',
    bandConnection: '',
    bandConnectionPrice: '',
    startPriceBringer: '',
    startPriceWaveborder: '',
    startPriceControlProfile: '',
    startPriceHoles: '',
    bands: [],
    bringers: [],
    holes: [],
    controlProfiles: [],
    waveBorders: [],
    chosenBand: null,
    chosenBringer: null,
    chosenHole: null,
    chosenControlProfile: null,
    chosenWaveBorder: null,
    selectText: 'Choose...',
    noneChosenText: 'None chosen',
    unsetField: '?',
    errorSelectBandText: '',
    errorBandwidthText: '',
    errorBandlengthText: '',
    errorBandwidthBiggerText: '',
    messageTotalPrice: 'Total Price',
    elementEndlessBandlengthValue: null,
    elementCenterDistance: null,
    elementDrum_d1a: null,
    elementDrum_d1b: null,
    elementPreStressing: null,
    elementEndlessBandlengthCalculated: null,
    elementPreStressingCalculated: null,
    elementBandLength: null,
    elementBringerAmount: null,
    elementBringerRatio: null,
    elementHolesRatio: null,
    elementHolesHorizontalAmount: null,
    elementCalculatedBandlength: null,
    elementEndlessBandlength: null,
    elementBringerLengthAmount1: null,
    elementBringerLengthAmount2: null,
    elementBringerLengthAmount3: null,
    elementBringerLengthDiameter1: null,
    elementBringerLengthDiameter2: null,
    elementBringerLengthDiameter3: null,
    elementWaveBorderAmount: null,
    elementControlProfileAmount: null,
	elementControlProfileBorder: null,
	elementControlProfileDiameter: null,
    elementHolesHorizontalAmount: null,
    elementHolesVerticalAmount: null,
    initialize: function () {
        if (window.location.hostname == "ellegaardv2.com.apollo.techhouse.dk") {
            Debug.active = true;
        }
        $('#order_button').attr("disabled", "disabled");
        $('#calculate_button').click(function (event) {
            BandCalculator.calculate();
            $('#order_button').attr("disabled", "");
            return false;
        });
        $('input[type="text"]').change(function () {
            $('#order_button').attr("disabled", "disabled");
        });
        $('input[type="radio"]').change(function () {
            $('#order_button').attr("disabled", "disabled");
        });
        $('select').change(function () {
            $('#order_button').attr("disabled", "disabled");
        });
        $('#order_button').click(function (event) {
            BandCalculator.order();
            return false;
        });
		$('.diagram').each(function()
		{
			thumbnail = $('<img />').attr({
            src: $(this).attr('imagesrc'),
            width: $(this).attr('imagewidth')
	        });

			$(this).qtip({
			content: thumbnail,
			style: { width: { max: 1000 } }
			});
		});
        BandCalculator.elementEndlessBandlengthValue = $('#endless_bandlength_value:first');
        BandCalculator.elementCenterDistance = $('#centerDistance:first');
        BandCalculator.elementDrum_d1a = $('#drum_d1a:first');
        BandCalculator.elementDrum_d1b = $('#drum_d1b:first');
        BandCalculator.elementPreStressing = $('#preStressing:first');
        BandCalculator.elementEndlessBandlengthCalculated = $('#endless_bandlength_calculated:first');
        BandCalculator.elementPreStressingCalculated = $('#prestressing_calculated:first');
        BandCalculator.elementBandLength = $('#bandLength:first');
        BandCalculator.elementBringerAmount = $('#bringerAmount:first');
        BandCalculator.elementBringerRatio = $('#bringerRatio:first');
        BandCalculator.elementHolesRatio = $('#holesRatio:first');
        BandCalculator.elementHolesHorizontalAmount = $('#holesHorizontalAmount:first');
        BandCalculator.elementCalculatedBandlength = $('#calculated_bandlength:first');
        BandCalculator.elementEndlessBandlength = $('#endless_bandlength:first');
        BandCalculator.elementBringerLengthAmount1 = $('#bringerLengthAmount1:first');
        BandCalculator.elementBringerLengthAmount2 = $('#bringerLengthAmount2:first');
        BandCalculator.elementBringerLengthAmount3 = $('#bringerLengthAmount3:first');
        BandCalculator.elementBringerLengthDiameter1 = $('#bringerLengthDiameter1:first');
        BandCalculator.elementBringerLengthDiameter2 = $('#bringerLengthDiameter2:first');
        BandCalculator.elementBringerLengthDiameter3 = $('#bringerLengthDiameter3:first');
        BandCalculator.elementWaveBorderAmount = $('#waveBorderAmount:first');
        BandCalculator.elementControlProfileAmount = $('#controlProfileAmount:first');
		BandCalculator.elementControlProfileBorder = $('#controlProfileBorder:first');
		BandCalculator.elementControlProfileDiameter = $('#controlProfileDiameter:first');
        BandCalculator.elementHolesHorizontalAmount = $('#holesHorizontalAmount:first');
        BandCalculator.elementHolesVerticalAmount = $('#holesVerticalAmount:first');
        BandCalculator.elementEndlessBandlength.click(function () {
            BandCalculator.calculateBandLength();
        });
        BandCalculator.elementCalculatedBandlength.click(function () {
            BandCalculator.calculateBandLength();
        });
        BandCalculator.elementEndlessBandlengthValue.change(function () {
            BandCalculator.setEndlessLengthChecked();
            BandCalculator.calculateBandLength();
        });
        BandCalculator.elementCenterDistance.change(function () {
            BandCalculator.setCalculateLengthChecked();
            BandCalculator.calculateBandLength();
        });
        BandCalculator.elementDrum_d1a.change(function () {
            BandCalculator.setCalculateLengthChecked();
            BandCalculator.calculateBandLength();
        });
        BandCalculator.elementDrum_d1b.change(function () {
            BandCalculator.setCalculateLengthChecked();
            BandCalculator.calculateBandLength();
        });
        BandCalculator.elementPreStressing.change(function () {
            BandCalculator.setCalculateLengthChecked();
            BandCalculator.calculateBandLength();
        });
        BandCalculator.elementBringerAmount.change(function () {
            BandCalculator.calculateBringerRatio();
        });
        BandCalculator.elementHolesHorizontalAmount.change(function () {
            BandCalculator.calculateHoleRatio();
        });
		BandCalculator.elementControlProfileBorder.change(function(){
			console.log($(this).attr("checked"));
			if($(this).attr("checked")){
				BandCalculator.elementControlProfileDiameter.attr("disabled", "");
				console.log(BandCalculator.elementControlProfileDiameter);
			}
			else{
				BandCalculator.elementControlProfileDiameter.attr("disabled", "disabled");
				BandCalculator.elementControlProfileDiameter.val("");
				console.log(BandCalculator.elementControlProfileDiameter);
			}
		});
        BandCalculator.getBands();
        BandCalculator.getBringers();
        BandCalculator.getWaveBorders();
        BandCalculator.getControlProfiles();
        BandCalculator.getHoles();
    },
    setEndlessLengthChecked: function () {
        BandCalculator.elementEndlessBandlength.attr('checked', 'checked');
        BandCalculator.elementCalculatedBandlength.attr('checked', '');
    },
    setCalculateLengthChecked: function () {
        BandCalculator.elementEndlessBandlength.attr('checked', '');
        BandCalculator.elementCalculatedBandlength.attr('checked', 'checked');
    },
    isError: function (data) {
        if (typeof (data[0].error) != "undefined" && data[0].error != "") {
            Debug.log(data[0].error, true);
            return true;
        }
        return false;
    },
    getBands: function () {
        $.ajax({
            url: '/ajax.asp',
            data: { action: "getData", type: "band" },
            success: function (data_array) {
                var myObject = eval('(' + data_array + ')');
                if (!BandCalculator.isError(myObject)) {
                    BandCalculator.bands = myObject;
                    BandCalculator.setBands();
                }
            },
            error: function (message) {
                Debug.log('BandCalculator->getBands Error: ' + message);
            }
        });
    },
    setBands: function () {
        var $select = $('#bandtype');
        $select.empty();
        $select.change(function (event) {
            var $idno = event.currentTarget.options[event.currentTarget.selectedIndex].value;
            BandCalculator.chosenBand = null;
            $('#bb_d1').text(BandCalculator.unsetField);
            $('#bb_d2').text(BandCalculator.unsetField);
            $('#bandwidthmax').text(BandCalculator.unsetField);
            $.each(BandCalculator.bands, function (key, object) {
                if (object.IDno == $idno) {
                    BandCalculator.chosenBand = object;
                    $('#bb_d1').text(object.D1);
                    $('#bb_d2').text(object.D2);
                    $('#bandwidthmax').text(object.MaxWidth);
                }
            });
        });
        $select.append('<option value="-1">' + BandCalculator.selectText + '</option>');
        $.each(BandCalculator.bands, function (key, object) {
            $select.append('<option value="' + object.Value + '">' + object.Label + '</option>');
        });
    },
    getBringers: function () {
        $.ajax({
            url: '/ajax.asp',
            data: { action: "getData", type: "bringer" },
            success: function (data_array) {
                var myObject = eval('(' + data_array + ')');
                if (!BandCalculator.isError(myObject)) {
                    BandCalculator.bringers = myObject;
                    BandCalculator.setBringers();
                }
            },
            error: function (message) {
                Debug.log('BandCalculator->getBringers Error: ' + message);
            }
        });
    },
    setBringers: function () {
        var $select = $('#bringerType');
        $select.empty();
        $select.change(function (event) {
            var $idno = event.currentTarget.options[event.currentTarget.selectedIndex].value;
            BandCalculator.chosenBringer = null;
            $('#bringerMinDrumDiameter').text(BandCalculator.unsetField);
            $('#bringerBandwidthmax').text(BandCalculator.unsetField);
            $.each(BandCalculator.bringers, function (key, object) {
                if (object.IDno == $idno) {
                    BandCalculator.chosenBringer = object;
                    $('#bringerMinDrumDiameter').text(object.D1);
                    $('#bringerBandwidthmax').text(object.MaxWidth);
                }
            });
        });
        $select.append('<option value="-1">' + BandCalculator.noneChosenText + '</option>');
        $.each(BandCalculator.bringers, function (key, object) {
            $select.append('<option value="' + object.Value + '">' + object.Label + '</option>');
        });
    },
    getHoles: function () {
        $.ajax({
            url: '/ajax.asp',
            data: { action: "getData", type: "holes" },
            success: function (data_array) {
                var myObject = eval('(' + data_array + ')');
                if (!BandCalculator.isError(myObject)) {
                    BandCalculator.holes = myObject;
                    BandCalculator.setHoles();
                }
            },
            error: function (message) {
                Debug.log('BandCalculator->getHoles Error: ' + message);
            }
        });
    },
    setHoles: function () {
        var $select = $('#holesType');
        $select.empty();
        $select.change(function (event) {
            var $idno = event.currentTarget.options[event.currentTarget.selectedIndex].value;
            BandCalculator.chosenHole = null;
            $.each(BandCalculator.holes, function (key, object) {
                if (object.IDno == $idno) {
                    BandCalculator.chosenHole = object;
                }
            });
        });
        $select.append('<option value="-1">' + BandCalculator.noneChosenText + '</option>');
        $.each(BandCalculator.holes, function (key, object) {
            $select.append('<option value="' + object.Value + '">' + object.Label + '</option>');
        });
    }
	,
    getControlProfiles: function () {
        $.ajax({
            url: '/ajax.asp',
            data: { action: "getData", type: "controlprofile" },
            success: function (data_array) {
                var myObject = eval('(' + data_array + ')');
                if (!BandCalculator.isError(myObject)) {
                    BandCalculator.controlProfiles = myObject;
                    BandCalculator.setControlProfiles();
                }
            },
            error: function (message) {
                Debug.log('BandCalculator->getControlProfiles Error: ' + message);
            }
        });
    },
    setControlProfiles: function () {
        var $select = $('#controlProfileType');
        $select.empty();
        $select.change(function (event) {
            var $idno = event.currentTarget.options[event.currentTarget.selectedIndex].value;
            BandCalculator.chosenControlProfile = null;
            $('#controlProfileMinDrumDiameter').text(BandCalculator.unsetField);
            $.each(BandCalculator.controlProfiles, function (key, object) {
                if (object.IDno == $idno) {
                    BandCalculator.chosenControlProfile = object;
                    $('#controlProfileMinDrumDiameter').text(object.D1);
                }
            });
        });
        $select.append('<option value="-1">' + BandCalculator.noneChosenText + '</option>');
        $.each(BandCalculator.controlProfiles, function (key, object) {
            $select.append('<option value="' + object.Value + '">' + object.Label + '</option>');
        });
    }
	,
    getWaveBorders: function () {
        $.ajax({
            url: '/ajax.asp',
            data: { action: "getData", type: "waveborder" },
            success: function (data_array) {
                var myObject = eval('(' + data_array + ')');
                if (!BandCalculator.isError(myObject)) {
                    BandCalculator.waveBorders = myObject;
                    BandCalculator.setWaveBorders();
                }
            },
            error: function (message) {
                Debug.log('BandCalculator->getWaveBorders Error: ' + message);
            }
        });
    },
    setWaveBorders: function () {
        var $select = $('#waveBorderType');
        $select.empty();
        $select.change(function (event) {
            var $idno = event.currentTarget.options[event.currentTarget.selectedIndex].value;
            BandCalculator.chosenWaveBorder = null;
            $('#waveBorderMinDrumDiameter').text(BandCalculator.unsetField);
            $.each(BandCalculator.waveBorders, function (key, object) {
                if (object.IDno == $idno) {
                    BandCalculator.chosenWaveBorder = object;
                    $('#waveBorderMinDrumDiameter').text(object.D1);
                }
            });
        });
        $select.append('<option value="-1">' + BandCalculator.noneChosenText + '</option>');
        $.each(BandCalculator.waveBorders, function (key, object) {
            $select.append('<option value="' + object.Value + '">' + object.Label + '</option>');
        });
    },
    getBandLength: function () {
        var bandLength = parseFloat($('#bandLength').text());
        if (BandCalculator.elementEndlessBandlength.attr('checked')) {
            bandLength = parseFloat($('#endless_bandlength_value').val());
        }
        if (isNaN(bandLength)) {
            bandLength = 0
        }
        return bandLength;
    },
    calculateBandLength: function () {
        if (BandCalculator.elementCalculatedBandlength.attr('checked')) {
            var centerDistance = parseFloat(BandCalculator.elementCenterDistance.val());
            if (isNaN(centerDistance)) {
                centerDistance = 0;
            }
            var drum_d1a = parseFloat(BandCalculator.elementDrum_d1a.val());
            if (isNaN(drum_d1a)) {
                drum_d1a = 0;
            }
            var drum_d1b = parseFloat(BandCalculator.elementDrum_d1b.val());
            if (isNaN(drum_d1b)) {
                drum_d1b = 0;
            }
            var preStressing = BandCalculator.elementPreStressing.val().replace(',','.');
            if (isNaN(preStressing)) {
                preStressing = 0;
            }
            var bandlengthCalculated = (centerDistance * 2) + (drum_d1a * 3.14 / 2) + (drum_d1b * 3.14 / 2);
            var preStressingCalculated = 0;
            if (preStressing > 0) {
                preStressingCalculated = bandlengthCalculated / 100 * preStressing;
            }
            var bandlength = bandlengthCalculated - preStressingCalculated;
            BandCalculator.elementPreStressingCalculated.text(preStressingCalculated.toFixed(2));
            BandCalculator.elementEndlessBandlengthCalculated.text(bandlengthCalculated.toFixed(2));
            BandCalculator.elementBandLength.text(bandlength.toFixed(0));
        }
        //Update dependencies
        BandCalculator.calculateBringerRatio();
        BandCalculator.calculateHoleRatio();
    },
    calculateBringerRatio: function () {
        var bringerAmount = BandCalculator.elementBringerAmount.val();
        var bandLength = BandCalculator.getBandLength();
        BandCalculator.elementBringerRatio.text(BandCalculator.unsetField);
        if (bandLength > 0 && bringerAmount > 0) {
            var bringerRatio = bandLength / bringerAmount
            BandCalculator.elementBringerRatio.text(bringerRatio.toFixed(2));
        }
    },
    calculateHoleRatio: function () {
        var bandLength = BandCalculator.getBandLength();
        var holesHorizontalAmount = parseFloat(BandCalculator.elementHolesHorizontalAmount.val());
        BandCalculator.elementHolesRatio.text(BandCalculator.unsetField);
        if (bandLength > 0 && holesHorizontalAmount > 0) {
            var holesRatio = bandLength / holesHorizontalAmount;
            BandCalculator.elementHolesRatio.text(holesRatio.toFixed(2));
        }
    },
    calculate: function () {
        $('#nettoBandPrice').val('')
        Debug.log(BandCalculator.chosenBand, true);
        Debug.log(BandCalculator.chosenBringer, true);
        Debug.log(BandCalculator.chosenHole, true);
        Debug.log(BandCalculator.chosenControlProfile, true);
        Debug.log(BandCalculator.chosenWaveBorder, true);
        if (BandCalculator.chosenBand != null) {
            var $bandwidth = parseFloat($('#bandwidth').val());
            if ($bandwidth > 0) {
                var $bandLength = BandCalculator.getBandLength();
                if ($bandLength > 0) {
                    var $maxBandWidth = parseFloat($('#bandwidthmax').text());
                    if ($bandwidth < $maxBandWidth) {
                        var $bandm2 = ((($bandLength + parseFloat(BandCalculator.bandWaste)) * $bandwidth) / 1000000);
                        var $bandPrice = (parseFloat(BandCalculator.chosenBand.Pricem2) * $bandm2).toFixed(2);
                        var $bandConnectionMinPrice = parseFloat(BandCalculator.bandConnectionPrice);
                        var $bandConnectionWidthPrice = parseFloat(BandCalculator.bandConnection) * $bandwidth;
                        if ($bandConnectionWidthPrice > $bandConnectionMinPrice) {
                            $bandConnectionMinPrice = $bandConnectionWidthPrice;
                        }
                        var $bringerPrice = 0;
                        var $waveBorderPrice = 0;
                        var $controlProfilePrice = 0;
                        var $holePrice = 0;
                        if (BandCalculator.chosenBringer != null) {
                            var $bringerLengthAmount1 = parseFloat(BandCalculator.elementBringerLengthAmount1.val());
                            var $bringerLengthDiameter1 = parseFloat(BandCalculator.elementBringerLengthDiameter1.val());
                            var $bringer1calculated = 0;
                            if ($bringerLengthAmount1 > 0 && $bringerLengthDiameter1 > 0) {
                                $bringer1calculated = $bringerLengthAmount1 * $bringerLengthDiameter1;
                            }
                            var $bringerLengthAmount2 = parseFloat(BandCalculator.elementBringerLengthAmount2.val());
                            var $bringerLengthDiameter2 = parseFloat(BandCalculator.elementBringerLengthDiameter2.val());
                            var $bringer2calculated = 0;
                            if ($bringerLengthAmount2 > 0 && $bringerLengthDiameter2 > 0) {
                                $bringer2calculated = $bringerLengthAmount2 * $bringerLengthDiameter2;
                            }
                            var $bringerLengthAmount3 = parseFloat(BandCalculator.elementBringerLengthAmount3.val());
                            var $bringerLengthDiameter3 = parseFloat(BandCalculator.elementBringerLengthDiameter3.val());
                            var $bringer3calculated = 0;
                            if ($bringerLengthAmount3 > 0 && $bringerLengthDiameter3 > 0) {
                                $bringer3calculated = $bringerLengthAmount3 * $bringerLengthDiameter3;
                            }
                            var $bringerAmount = parseFloat(BandCalculator.elementBringerAmount.val());
                            if ($bringerAmount > 0) {
                                var $bringerLength = parseFloat(($bringer1calculated + $bringer2calculated + $bringer3calculated) * ($bringerAmount / 1000));
                                var $bringerm2 = $bringerLength;
                                var $bringerPricem2 = parseFloat(parseFloat(BandCalculator.chosenBringer.Pricem2) * $bringerm2);
                                $bringerPrice = parseFloat($bringerPricem2 + parseFloat(BandCalculator.startPriceBringer)).toFixed(2);
                            }
                        }
                        if (BandCalculator.chosenWaveBorder != null) {
                            var waveBorderAmount = parseFloat(BandCalculator.elementWaveBorderAmount.val());
                            if (waveBorderAmount > 0) {
                                var waveBorderLength = parseFloat($bandLength * waveBorderAmount / 1000)
                                var waveBorderm2 = waveBorderLength;
                                var waveBorderPricem2 = parseFloat(BandCalculator.chosenWaveBorder.Pricem2);
                                $waveBorderPrice = (parseFloat(waveBorderPricem2 * waveBorderm2) + parseFloat(BandCalculator.startPriceWaveborder)).toFixed(2);
                            }
                        }
                        if (BandCalculator.chosenControlProfile != null) {
                            var controlProfileAmount = parseFloat(BandCalculator.elementControlProfileAmount.val());
                            if (controlProfileAmount > 0) {
                                var controlProfileLength = parseFloat($bandLength * (controlProfileAmount / 1000))
                                var controlProfilem2 = controlProfileLength;
                                var controlProfilePricem2 = parseFloat(BandCalculator.chosenControlProfile.Pricem2);
                                $controlProfilePrice = ((controlProfilePricem2 * controlProfilem2) + parseFloat(BandCalculator.startPriceControlProfile)).toFixed(2);
                            }
                        }
                        if (BandCalculator.chosenHole != null) {
                            var holesHorizontalAmount = parseInt(BandCalculator.elementHolesHorizontalAmount.val());
                            var holesVerticalAmount = parseInt(BandCalculator.elementHolesVerticalAmount.val());
                            if (holesHorizontalAmount > 0 && holesVerticalAmount > 0) {
                                var holes = parseInt(holesHorizontalAmount * holesVerticalAmount);
                                $holePrice = ((holes * parseFloat(BandCalculator.chosenHole.Price)) + parseFloat(BandCalculator.startPriceHoles)).toFixed(2);
                            }
                        }
                        var totalPrice = (parseFloat($bandPrice) + parseFloat($bandConnectionMinPrice) + parseFloat($bringerPrice) + parseFloat($waveBorderPrice) + parseFloat($controlProfilePrice) + parseFloat($holePrice)).toFixed(2);
                        Debug.log('$bandPrice:' + $bandPrice, true);
                        Debug.log('$bandConnectionMinPrice:' + $bandConnectionMinPrice, true);
                        Debug.log('$bringerPrice:' + $bringerPrice, true);
                        Debug.log('$waveBorderPrice:' + $waveBorderPrice, true);
                        Debug.log('$controlProfilePrice:' + $controlProfilePrice, true);
                        Debug.log('$holePrice:' + $holePrice, true);

                        Debug.log('Total Price:' + totalPrice, true);
                        //alert(BandCalculator.messageTotalPrice+': '+totalPrice);
                        $('#nettoBandPrice').val(totalPrice.replace('.', ','));
						$.ajax({
							url: '/ajax.asp',
							processDataBoolean: false,
							data: 'action=Calculate&bandlength='+BandCalculator.getBandLength()+'&calculatedPrice='+$('#nettoBandPrice').val()+'&'+$('#bandCalculator').serialize(),
							success: function (data_array) {
								var myObject = eval('(' + data_array + ')');
								if (!BandCalculator.isError(myObject)) {
									/*if (myObject[0].status == '200') {
										alert("Success");
									}
									else {
										alert("Failure");
									}*/
								}
							},
							error: function (message) {
								Debug.log('BandCalculator->calculate Error: ' + message);
							}
						});
                    }
                    else {
                        alert(BandCalculator.errorBandwidthBiggerText);
                    }
                }
                else {
                    alert(BandCalculator.errorBandlengthText);
                }

            }
            else {
                alert(BandCalculator.errorBandwidthText);
            }
        }
        else {
            alert(BandCalculator.errorSelectBandText);
        }
    },
    order: function () {
        $.ajax({
            url: '/ajax.asp',
            processDataBoolean: false,
            data: 'action=Order&bandlength='+BandCalculator.getBandLength()+'&calculatedPrice='+$('#nettoBandPrice').val()+'&'+$('#bandCalculator').serialize(),
            success: function (data_array) {
                var myObject = eval('(' + data_array + ')');
                if (!BandCalculator.isError(myObject)) {
                    if (myObject[0].status == '200') {
                        alert("Success");
                    }
                    else {
                        alert("Failure");
                    }
                }
            },
            error: function (message) {
                Debug.log('BandCalculator->order Error: ' + message);
            }
        });
    }
}
