// HPS configurator functionality

// script url
var url = window.location.protocol + '//' + window.location.host + '/calculate.php' ;
// message parameters
var mailto = 'verkoop@hpsindustrial.nl';
var mailsubject = 'Aanvraag offerte HPS server via website';
var quotesubject = 'Aanvraag offerte product via website';
var mailbody = 'body';
// order notifications
var msg_ok = 'Uw aanvraag is verzonden. Als u een email adres heeft ingevoerd, zult u een kopie hiervan ontvangen.';
var msg_no_email = 'Vult u a.u.b. uw email adres in.';
var expect_ok = 'Uw adres is opgeslagen. Als het artikel leverbaar is zult u een bericht hierover ontvangen.<br>';
var expect_no_email = 'Vult u a.u.b. uw email adres in.';

// fetch and display config data
function getConfig(e)
{
    var req = new Ajax.Request(url, 
    {
        method: 'get',
        parameters: 'mode=calculate&' + Form.serialize('configurator'),
        onComplete: function(r) 
        {
            j = eval(r.responseText);
            for (var i in j.parts)
            {
                if (j.parts[i].hideprice == 0) {
                    var id = 'mod_' + j.parts[i].caid;
                    var diff = j.parts[i].diff.toFixed(2);
                    var prefix = diff < 0 ? '- &euro; ' : '+ &euro; ';
                    if ($(id))
                        Element.update(id, prefix + diff.replace(/\./,',').replace(/-/,''));
                }
            }
            Element.update('total', '&euro; ' + j.total.toFixed(2).replace(/\./,','));
            $('mailbody').value = j.body;
            if ($('power')) {
                if (parseInt(j.power) > 0) {
                    Element.update('powertotal', parseInt(j.power) + 'W');
                    Element.show('power');
                }
                else
                    Element.hide('power');
            }
        }
    });
}

// send order mail
function sendMail(e)
{
    var req = new Ajax.Request(url, 
    {
        parameters: 'mode=order&subject=' + mailsubject +
            '&recipient=' + mailto + 
            '&' + Form.serialize('offerte'),
        onComplete: function(r) 
        {
            j = eval(r.responseText);
            if (j.ok) {
                hideOrder();
                Element.update('offerte-result', msg_ok);
                Element.show('offerte-result');
            }
            else if (j.noemail) {
                Element.update('offerte-result', msg_no_email);
                Element.show('offerte-result');
            }
        }
    });
}

// send quote mail
function sendQuoteMail(e)
{
    var req = new Ajax.Request(url, 
    {
        parameters: 'mode=order&subject=' + quotesubject +
            '&recipient=' + mailto + 
            '&' + Form.serialize('offerte'),
        onComplete: function(r) 
        {
            j = eval(r.responseText);
            if (j.ok) {
                hideOrder();
                Element.update('offerte-result', msg_ok);
                Element.show('offerte-result');
            }
            else if (j.noemail) {
                Element.update('offerte-result', msg_no_email);
                Element.show('offerte-result');
            }
        }
    });
}

// store email address on server
function saveExpectList(e)
{
    var req = new Ajax.Request(url, 
    {
        parameters: 'mode=expected&' + Form.serialize('expectmail'),
        onComplete: function(r) 
        {
            j = eval(r.responseText);
            if (j.ok) {
                Element.show('expectresult');
                Element.hide('expectinput');
            }
            else if (j.noemail) {
                Element.update('expectresult', expect_no_email);
                Element.show('expectresult');
            }
        }
    });
}

// show order form
function showOrder(e)
{
    Element.show('offerte');
    Element.scrollTo('offerte');
}

// show expect form
function showExpect(e)
{
    Element.show('expectmail');
    Element.scrollTo('expectmail');
}

// hide order form
function hideOrder(e)
{
    Element.hide('offerte');
}

// hide expect form
function hideExpect(e)
{
    Element.hide('expectmail');
}

// stop form submits
function stopEvent(e)
{
    Event.stop(e);
    return false;
}

// toggle to right option set
function showOptions(e)
{
    var elm = Event.element(e);
    var option = elm.value;
    if (option == 'geometry') {
        Element.show('geometry');
        Element.hide('storage');
    }
    else {
        Element.hide('geometry');
        Element.show('storage');
    }
}

function init()
{
    // set up event listeners on selectors for configurator
    test = $('configurator');
    if (test) {
        Element.hide('offerte');
        Element.hide('offerte-result');
        $$('.modifier, .configurator').each(function(elm)
        {
            Event.observe(elm, 'change', getConfig, false);
        });
        // block submits
        Event.observe('configurator', 'submit', stopEvent, false);
        Event.observe('mailto', 'submit', stopEvent, false);
        Event.observe('offerte', 'submit', stopEvent, false);
        // respond to buttons
        Event.observe('showform', 'click', showOrder, false);
        Event.observe('send', 'click', sendMail, false);
        Event.observe('hide', 'click', hideOrder, false);
        // force recalculation
        getConfig();
    }
    if ($('quote')) {
        Element.hide('offerte');
        Element.hide('offerte-result');
        // block submits
        Event.observe('mailto', 'submit', stopEvent, false);
        Event.observe('offerte', 'submit', stopEvent, false);
        // respond to buttons
        if ($('showform'))
            Event.observe('showform', 'click', showOrder, false);
        if ($('showprice'))
            Event.observe('showprice', 'click', showOrder, false);
        Event.observe('send', 'click', sendQuoteMail, false);
        Event.observe('hide', 'click', hideOrder, false);
    }
    if ($('expectmail')) {
        // block submits
        Event.observe('expectmail', 'submit', stopEvent, false);
        // respond to buttons
        Event.observe('expectsend', 'click', saveExpectList, false);
    }
    if ($("configsearch")) {
        var options = document.getElementsByClassName('optiontoggle');
        options.each(function(elm)
        {
            Event.observe(elm, 'click', showOptions, false);
        });
    }
}

Event.observe(window, 'load', init, false);

