var currency = 39; // Одна у. е. в рублях
var multiplier = 1.15;

var maxWardrobeHeight = 273;
var minWardrobeHeight = 100;

var maxWardrobeWidth = 450;
var minWardrobeWidth = 50;

var maxWardrobeDepth = 78;
var minWardrobeDepth = 27;

var maxDoorCount = 5;
var minDoorCount = 2;
var doorTypeCount = 5;
var minSectionWidth = 10;

var doorsToWidth = [ 180, 270, 360, 450 ];

var doorsWidth = [ 45, 60, 70, 80, 90, 100 ]; // ширина двери
var systemCount = 3;
var doorCounts = Array( doorTypeCount );
var doorsInfo = Array( 6 );

var warnMessage = '';

// для первой ширины двери
doorsInfo[ 0 ] = Array( 5 )
doorsInfo[ 0 ][ 0 ] = Array( 2 ); // серебро/бронза
doorsInfo[ 0 ][ 0 ][ 0 ] = [ 100, 120, 116, 147, 180, 230 ]; // для зеркальной (серебро)
doorsInfo[ 0 ][ 0 ][ 1 ] = [ 125, 140, 123, 154, 190, 235 ]; // для зеркальной (бронза)
doorsInfo[ 0 ][ 1 ] = [ 80, 98, 95, 126, 135, 190 ]; // для ДСП Kronopol
doorsInfo[ 0 ][ 2 ] = [ 127, 148, 140, 166, 200, 245 ]; // для стекла
doorsInfo[ 0 ][ 3 ] = [ 223, 223, 223, 223, 223, 223 ]; // для ротанга, LOCATELLI
doorsInfo[ 0 ][ 4 ] = [ 120, 143, 135, 170, 210, 250 ]; // для комби

// для второй ширины двери
doorsInfo[ 1 ] = Array( 5 )
doorsInfo[ 1 ][ 0 ] = Array( 2 ); // серебро/бронза
doorsInfo[ 1 ][ 0 ][ 0 ] = [ 110, 140, 123, 154, 190, 245 ]; // для зеркальной (серебро)
doorsInfo[ 1 ][ 0 ][ 1 ] = [ 135, 155, 130, 161, 210, 250 ]; // для зеркальной (бронза)
doorsInfo[ 1 ][ 1 ] = [ 85, 100, 102, 133, 145, 200 ]; // для ДСП Kronopol
doorsInfo[ 1 ][ 2 ] = [ 142, 161, 149, 173, 220, 260 ]; // для стекла
doorsInfo[ 1 ][ 3 ] = [ 267, 267, 267, 267, 267, 267 ]; // для ротанга, LOCATELLI
doorsInfo[ 1 ][ 4 ] = [ 130, 156, 145, 186, 230, 270 ]; // для комби

// для третей ширины двери
doorsInfo[ 2 ] = Array( 5 )
doorsInfo[ 2 ][ 0 ] = Array( 2 ); // серебро/бронза
doorsInfo[ 2 ][ 0 ][ 0 ] = [ 115, 156, 140, 159, 210, 260 ]; // для зеркальной (серебро)
doorsInfo[ 2 ][ 0 ][ 1 ] = [ 140, 170, 147, 170, 235, 265 ]; // для зеркальной (бронза)
doorsInfo[ 2 ][ 1 ] = [ 90, 105, 107, 138, 155, 210 ]; // для ДСП Kronopol
doorsInfo[ 2 ][ 2 ] = [ 158, 180, 166, 180, 245, 275 ]; // для стекла
doorsInfo[ 2 ][ 3 ] = [ 299, 299, 299, 299, 299, 299 ]; // для ротанга, LOCATELLI
doorsInfo[ 2 ][ 4 ] = [ 150, 175, 159, 202, 250, 285 ]; // для комби

// для четвертой ширины двери
doorsInfo[ 3 ] = Array( 5 )
doorsInfo[ 3 ][ 0 ] = Array( 2 ); // серебро/бронза
doorsInfo[ 3 ][ 0 ][ 0 ] = [ 120, 173, 150, 173, 235, 260 ]; // для зеркальной (серебро)
doorsInfo[ 3 ][ 0 ][ 1 ] = [ 145, 188, 157, 188, 250, 270 ]; // для зеркальной (бронза)
doorsInfo[ 3 ][ 1 ] = [ 99, 116, 112, 143, 170, 220 ]; // для ДСП Kronopol
doorsInfo[ 3 ][ 2 ] = [ 178, 210, 185, 210, 260, 280 ]; // для стекла
doorsInfo[ 3 ][ 3 ] = [ 332, 332, 332, 332, 332, 332 ]; // для ротанга, LOCATELLI
doorsInfo[ 3 ][ 4 ] = [ 168, 175, 160, 216, 265, 290 ]; // для комби

// для пятой ширины двери
doorsInfo[ 4 ] = Array( 5 )
doorsInfo[ 4 ][ 0 ] = Array( 2 ); // серебро/бронза
doorsInfo[ 4 ][ 0 ][ 0 ] = [ 125, 176, 160, 179, 235, 270 ]; // для зеркальной (серебро)
doorsInfo[ 4 ][ 0 ][ 1 ] = [ 150, 195, 174, 195, 250, 280 ]; // для зеркальной (бронза)
doorsInfo[ 4 ][ 1 ] = [ 108, 121, 116, 148, 185, 230 ]; // для ДСП Kronopol
doorsInfo[ 4 ][ 2 ] = [ 193, 217, 200, 217, 270, 290 ]; // для стекла
doorsInfo[ 4 ][ 3 ] = [ 359, 359, 359, 359, 359, 359 ]; // для ротанга, LOCATELLI
doorsInfo[ 4 ][ 4 ] = [ 180, 188, 176, 227, 280, 300 ]; // для комби

// для шестой ширины двери
doorsInfo[ 5 ] = Array( 5 )
doorsInfo[ 5 ][ 0 ] = Array( 2 ); // серебро/бронза
doorsInfo[ 5 ][ 0 ][ 0 ] = [ 130, 194, 170, 194, 250, 280 ]; // для зеркальной (серебро)
doorsInfo[ 5 ][ 0 ][ 1 ] = [ 155, 205, 197, 205, 270, 300 ]; // для зеркальной (бронза)
doorsInfo[ 5 ][ 1 ] = [ 110, 126, 121, 152, 210, 240 ]; // для ДСП Kronopol
doorsInfo[ 5 ][ 2 ] = [ 199, 220, 206, 220, 290, 310 ]; // для стекла
doorsInfo[ 5 ][ 3 ] = [ 368, 368, 368, 368, 368, 368 ]; // для ротанга, LOCATELLI
doorsInfo[ 5 ][ 4 ] = [ 190, 190, 179, 252, 300, 315 ]; // для комби

var addForMirrorCost = [ 0, 90, 240 ];

var panelsWidths = [ 10, 20, 30, 40, 50, 60, 68 ];
var panelsCosts = [ 10, 15, 18, 25, 28, 30, 33 ];

var panelHeight = 273;
var directsSize = 10;
var pogonMeterCost = 20;
var orgalitWidth = 120;
var orgalitLeafCost = 20;

var addPanelsCosts = [ 0, 10, 25 ];

var maxSectionCount = 8;

var sectionCount = 0;
var barCost = 10;
var hungCost = 7;
var boxCost = 20;
var basketCost = 30;
var netShielfCost = 12;
var lightCost = 26;
var pogonMeterABSCost = 2.6;
var externalShielfWidth = 50;
var externalShielfWorkCost = 10;
var internalFill = [ 0.9, 1 ];

var height = 0;
var width = 0;
var depth = 0;
var doorCount = 0;
var cornerShielves = 0;
var system = 1;


function calculate() {
warnMessage = '';
var oResult = document.getElementById( 'result' );
oResult.innerHTML = '';

if ( ! checkFields() ) {
    return;
}

var result = 0;
var doorWidth = width / doorCount;

var widthType = 0;
while ( widthType < doorsWidth.length && doorWidth > doorsWidth[ widthType ] ) {
    widthType++;
}

var oGroup = document.getElementById( 'color' + system + '2' );
var group = 0;

if( oGroup.checked ) {
    group = 1;
}

var form = document.forms[ 'formCalculator' ];

for ( var i = 1; i <= doorTypeCount; i++ ) {
    if ( form.elements[ 'doorCount' + i ].value > 0 ) {
        if ( i == 1 ) {
            result += ( doorsInfo[ widthType ][ i - 1 ][ ( form.elements[ 'mirror' ].value - 1 ) % 2 ][ ( system - 1 ) * 2 + group ] + addForMirrorCost[ parseInt( form.elements[ 'mirror' ].value / 2 ) ] ) * form.elements[ 'doorCount' + i ].value;
        } else {
            result += doorsInfo[ widthType ][ i - 1 ][ ( system - 1 ) * 2 + group ] * form.elements[ 'doorCount' + i ].value;
        }

    }

}

result += parseInt( width * 2 * pogonMeterCost / 100 );

var panelType = 0;
while ( panelType < panelsWidths.length && depth > panelsWidths[ panelType ] ) {
    panelType++;
}

var oPanels2 = document.getElementById( 'panels2' );
var oPanels3 = document.getElementById( 'panels3' );

if ( oPanels2.checked ) {
    result += panelsCosts[ panelType ] + addPanelsCosts[ 1 ];
}

if ( oPanels3.checked ) {
    result += 2 * panelsCosts[ panelType ] + addPanelsCosts[ 2 ];
}

var roofFloorSize = 0;

if ( form.elements[ 'roof' ].checked ) {
    roofFloorSize += width;
}

if ( form.elements[ 'floor' ].checked ) {
    roofFloorSize += width;
}

var roofFloorPanelCount = 0;

if ( roofFloorSize > 0 ) {
    roofFloorPanelCount = parseInt( ( roofFloorSize - 1 ) / panelHeight ) + 1;
}

result += roofFloorPanelCount * panelsCosts[ panelType ];

if ( form.elements[ 'wall' ].checked ) {
    result += ( parseInt( ( width - 1 ) / orgalitWidth ) + 1 ) * orgalitLeafCost;
}

if ( cornerShielves ) {
    var shielfCost = parseInt( ( panelsCosts[ panelType ] - 1 ) / parseInt( panelHeight / depth ) ) + 1;

    result += panelsCosts[ panelType ] + parseInt( cornerShielves * ( shielfCost + depth * 2 * pogonMeterABSCost / 100 ) ) + externalShielfWorkCost;

}

var internalPanelType = 0;
while ( internalPanelType < panelsWidths.length && ( depth - directsSize ) > panelsWidths[ internalPanelType ] ) {
    internalPanelType++;
}

var fillTypeIndex = 1;

var oFillType1 = document.getElementById( 'fillType1' );

if ( oFillType1.checked ) {
    fillTypeIndex = 0;
}

result += parseInt( ( sectionCount - 1 ) * panelsCosts[ internalPanelType ] * internalFill[ fillTypeIndex ] );

for ( var i = 1; i <= sectionCount; i++ ) {
    var shielfCost = parseInt( ( ( panelsCosts[ internalPanelType ] - 1 ) / parseInt( panelHeight / form.elements[ 'width' + i ].value ) + 1 ) * internalFill[ fillTypeIndex ] );

    var shielfCount = form.elements[ 'shielves' + i ].value;

    if ( form.elements[ 'antresol' + i ].checked ) {
        shielfCount++;
    }

    result += parseInt( shielfCount * shielfCost );
    result += parseInt( form.elements[ 'netShielves' + i ].value * netShielfCost );
    result += parseInt( form.elements[ 'boxes' + i ].value * boxCost );
    result += parseInt( form.elements[ 'baskets' + i ].value * basketCost );
    result += parseInt( form.elements[ 'bars' + i ].value * barCost );
    result += parseInt( form.elements[ 'hungs' + i ].value * hungCost );

}

result += form.elements[ 'lights' ].options[ form.elements[ 'lights' ].selectedIndex ].value * lightCost;

result = parseInt( result * currency * multiplier );

var oResult = document.getElementById( 'result' );
oResult.innerHTML = 'Стоимость шкафа <strong>' + result + '</strong> руб.' + warnMessage;

}


function checkFields() {
var form = document.forms[ 'formCalculator' ];

height = parseInt( form.elements[ 'height' ].value ) || 0;
form.elements[ 'height' ].value = height;

/*
if ( height < minWardrobeHeight || height > maxWardrobeHeight ) {
    alert( 'Высота шкафа должна быть от ' + minWardrobeHeight + ' до ' + maxWardrobeHeight );
    form.elements[ 'height' ].focus();

    return false;

}
*/

if ( height < minWardrobeHeight ) {
    alert( 'Высота шкафа должна быть от ' + minWardrobeHeight );
    form.elements[ 'height' ].focus();

    return false;

}

if ( height > maxWardrobeHeight ) {
    height = maxWardrobeHeight;
    warnMessage = '<br><br><font color="red">Обратите внимание!</font><br>Так как высота шкафа превышает 273 см, то для уточнения стоимости обратитесь к менеджеру.<br>Телефон (495) 601-7502.';

}

width = parseInt( form.elements[ 'width' ].value ) || 0;
form.elements[ 'width' ].value = width;

if ( width < minWardrobeWidth || width > maxWardrobeWidth ) {
    alert( 'Ширина шкафа должна быть от ' + minWardrobeWidth + ' до ' + maxWardrobeWidth );
    form.elements[ 'width' ].focus();

    return false;

}

depth = parseInt( form.elements[ 'depth' ].value ) || 0;
form.elements[ 'depth' ].value = depth;

if ( depth < minWardrobeDepth || depth > maxWardrobeDepth ) {
    alert( 'Глубина шкафа должна быть от ' + minWardrobeDepth + ' до ' + maxWardrobeDepth );
    form.elements[ 'depth' ].focus();

    return false;

}

doorCount = 0;
for ( var i = 1; i <= doorTypeCount; i++ ) {
    doorCounts[ i - 1 ] = parseInt( form.elements[ 'doorCount' + i ].value ) || 0;
    doorCounts[ i - 1 ] = ( doorCounts[ i - 1 ] > 0 ) ? doorCounts[ i - 1 ] : 0;
    form.elements[ 'doorCount' + i ].value = doorCounts[ i - 1 ];
    doorCount += doorCounts[ i - 1 ];

}

var i = 0;
while ( width > doorsToWidth[ i ] && i < maxDoorCount - minDoorCount ) {
    i++;
}

var possibleDoorCount = minDoorCount + i;

if ( doorCount != possibleDoorCount ) {
    alert( 'Общее количество дверей должно быть ' + possibleDoorCount + '\nСейчас ' + doorCount );
    form.elements[ 'doorCount1' ].focus();

    return false;

}

cornerShielves = parseInt( form.elements[ 'cornerShielves' ].value ) || 0;
cornerShielves = ( cornerShielves > 0 ) ? cornerShielves : 0;
form.elements[ 'cornerShielves' ].value = cornerShielves;

var sectionsWidth = 0;

sectionCount = form.elements[ 'sectionCount' ].options[ form.elements[ 'sectionCount' ].selectedIndex ].value;
for ( var i = 1; i <= sectionCount; i++ ) {
    var value = parseInt( form.elements[ 'width' + i ].value ) || 0;
    value = ( value > 0 ) ? value : 0;
    form.elements[ 'width' + i ].value = value;

    if ( value == 0 ) {
        alert( 'Секция ' + i + ':\n' + 'ширина должна быть указана' );
        form.elements[ 'width' + i ].focus();

        return false;

    } else if ( value < minSectionWidth ) {
        alert( 'Секция ' + i + ':\n' + 'минимальная ширина секции ' + minSectionWidth );
        form.elements[ 'width' + i ].focus();

        return false;

    }

    sectionsWidth += value;

    var value = parseInt( form.elements[ 'shielves' + i ].value ) || 0;
    value = ( value > 0 ) ? value : 0;
    form.elements[ 'shielves' + i ].value = value;

    var value = parseInt( form.elements[ 'netShielves' + i ].value ) || 0;
    value = ( value > 0 ) ? value : 0;
    form.elements[ 'netShielves' + i ].value = value;

    var value = parseInt( form.elements[ 'boxes' + i ].value ) || 0;
    value = ( value > 0 ) ? value : 0;
    form.elements[ 'boxes' + i ].value = value;

    var value = parseInt( form.elements[ 'baskets' + i ].value ) || 0;
    value = ( value > 0 ) ? value : 0;
    form.elements[ 'baskets' + i ].value = value;

    var value = parseInt( form.elements[ 'bars' + i ].value ) || 0;
    value = ( value > 0 ) ? value : 0;
    form.elements[ 'bars' + i ].value = value;

    var value = parseInt( form.elements[ 'hungs' + i ].value ) || 0;
    value = ( value > 0 ) ? value : 0;
    form.elements[ 'hungs' + i ].value = value;

}

if ( sectionsWidth != width ) {
    alert( 'Общая ширина секций должна быть ' + width + '\nСейчас ' + sectionsWidth );
    form.elements[ 'width1' ].focus();

    return false;

}

return true;

}


function setSystems( value ) {
system = value;

for ( var i = 1; i <= systemCount; i++ ) {
    var oDiv = document.getElementById( 'divSystem' + i );
    
    if ( i == system ) {
        oDiv.style.display = 'block';
    } else {
        oDiv.style.display = 'none';
    }

}

}


function setSections( oSelect ) {
var count = parseInt( oSelect.options[ oSelect.selectedIndex ].value );

for ( var i = 1; i <= count; i++ ) {
    var oDiv = document.getElementById( 'divSection' + i );
    oDiv.style.display = 'block';

}

for ( var i = count + 1; i <= maxSectionCount; i++ ) {
    var oDiv = document.getElementById( 'divSection' + i );
    oDiv.style.display = 'none';

}

}
