var current_action;
var current_category;
var extra_flag = false;
var destination;
var current_tab = 'summary';
var invoice_data;

function sendRequest(url, params) {

    var ajax = new Ajax.Updater(
        {},
        url,
        { method: 'post', parameters: params, onSuccess: handleSuccess, onFailure: handleError}
    );

}


function handleError (request) {

    alert("An error occurred, please try again later.");

}


function handleSuccess (request) {

    switch (current_action) {

        case "fetch":

            var returned_text = request.responseText;

            if (returned_text != 'Permission Denied') {
                $(destination + '_container').innerHTML = returned_text;
            }

            $(destination).style.color = 'black';

            if ( ! $(destination).visible() ) {
                new Effect.SlideDown(destination, { scaleFrom: 1, scaleTo: 100, duration: 0.5 });
            }

            break;

        case "get_domain_details":

            var returned_text = request.responseText;


            if (returned_text != 'Permission Denied') {

                var data = returned_text.evalJSON(true);

                if (data.host_email)      { $('bcm_host_email').checked               = true; }
                if (data.host_dns)        { $('bcm_host_dns').checked                 = true; }
                if (data.host_web == '1') { $('bcm_host_website_as_own_site').checked = true; }
                if (data.host_web == '2') { 
                    $('bcm_host_website_as_alias').checked    = true; 
                    $('alias').value                          = data.aliased_to;
                }
                $('domain_expiry').innerHTML = data.expiry_date;
                $('num_days').innerHTML      = data.num_days;

                if (data.num_days < 60) { $('num_days').style.color='red';   $('num_days').style.fontWeight='bold';   }
                else                    { $('num_days').style.color='black'; $('num_days').style.fontWeight='normal'; }

            } else {

                alert('Permission Denied\nYou do not have permission to see the email addresses for this domain.');

            }

            togglevis('domain_information', 'domain_information_wait');

            break;

        case "get_email_addresses":

            var returned_text = request.responseText;

            if (returned_text != 'Permission Denied') {

                var data = returned_text.evalJSON(true);

                $('email_list').options.length = 0;

                for (i = 0; i < data.length; i++) {
                    $('email_list').options[$('email_list').options.length] = new Option(data[i], data[i], false, false);
                }

                $('domain_name').innerHTML = $('my_domains').value;

            } else {

                alert('Permission Denied\nYou do not have permission to see the email addresses for this domain.');

            }

            togglevis('email_pulldown', 'address_list_wait');

            if (extra_flag == true) {

                reset_email_details();
                togglevis('address_details', 'address_details_wait');

            }

            break;

        case "get_email_details":

            var returned_text = request.responseText;

            if (returned_text != 'Permission Denied') {

                var data = returned_text.evalJSON(true);

                var email_addr_parts = data.mail.split('@');
                var username = email_addr_parts[0];

                $('pkid').value = data.pkid;
                $('email_address').value = username;
                $('original_email_address').value = data.mail;

                var forwards_to = data.destination.split(/,/);
                var forwards_to_entries = new Array();

                var is_mailbox = false;
                for (i = 0; i < forwards_to.length; i++) {

                    if (forwards_to[i] == data.mail) { 
                        is_mailbox = true; 
                    } else { 
                        forwards_to_entries.push(forwards_to[i]);
                    }

                }

                $('forward_to').value = forwards_to_entries.join(',');

                if (is_mailbox) {
                    $('is_mailbox').checked = true;
                    $('passwd').value = 'donotchange';
                } else {
                    $('passwd').disabled = true;
                }

            } else {

                alert('Permission Denied\nYou do not have permission to see the details of this email address.');

            }

            togglevis('address_details', 'address_details_wait');

            break;

        case "get_website_aliases":

            var returned_text = request.responseText;

            if (returned_text != 'Permission Denied') {

                var data = returned_text.evalJSON(true);

                $('url_list').options.length = 0;

                for (i = 0; i < data.length; i++) {
                    $('url_list').options[$('url_list').options.length] = new Option(data[i], data[i], false, false);
                }

            } else {

                alert('Permission Denied\nYou do not have permission to see the aliases for this website.');

            }

            $('new_alias').value = '';
            togglevis('url_alias_section', 'url_alias_wait');

            break;

        case "get_details":

            var returned_text = request.responseText;

            var target = extra_flag + "_detail";
            var target_wait = extra_flag + "_detail_wait";

            if (returned_text != 'Permission Denied') {

                $(target).innerHTML = returned_text;

            } else {

                alert('Permission Denied\nYou do not have permission to see the details for this.');

            }

            togglevis(target, target_wait);

            break;

        case "retrieve_invoice_data":

            parse_invoice_data( request.responseText );
            break;

        case "get_invoice_detail":

            draw_invoice_detail( request.responseText );
            break;

        case "edit_invoice_header":

            handle_edit_invoice_header( request.responseText );
            break;

        case "retrieve_invoice_item":

            retrieve_invoice_item( request.responseText );
            break;

        case "toggle_save":

            toggle_save();
            break;


        default:

            window[current_action]( request.responseText );
            break;
    }

}


function items_toggle(which, select_categories) {

    var prefix = '';
    if (select_categories) { prefix = "select_"; }

    if ( $(prefix + 'children_' + which).visible() ) {

        new Effect.SlideUp(prefix + 'children_' + which);
        $(prefix + 'bullet_' + which).src = "images/bullet_toggle_plus.png";

    } else {

        new Effect.SlideDown(prefix + 'children_' + which);
        $(prefix + 'bullet_' + which).src = "images/bullet_toggle_minus.png";

        $(prefix + 'category_div').scrollTop += $('children_'+which).style.height;

    }

}


function get_items( category ) {

    var url    = "search.cgi";
    var params = "rm=get_items";

    if ( $('search_term').value ) { params += "&search_term=" + $('search_term').value; }

    if ( category ) {

        if ( current_category ) { $('parent_' + current_category).style.backgroundColor = '#FFFFFF'; }

        $('parent_' + category).style.backgroundColor = '#CCCCCC';
        current_category = category;

    }


    params += "&category=" + current_category;

    current_action = "process_items";

    if (category == 'all') {
        $('items_list').innerHTML = "<center>Search for an item or click on a category to the left<BR>to display items.</center>";
    } else {
        sendRequest(url, params);
    }

}



function process_items( returned_text ) {

    if (returned_text == 'no search criteria') {
        alert("You did not specify any search criteria.");
        return;
    }

    var data        = returned_text.evalJSON(true);

    var items       = data.items;
    var drawn_first = false;


    var new_div_contents = '';

    for ( var i = 0; i < items.length; i++ ) {

        var this_div_contents = '';

        this_div_contents += "<center><div id='" + items[i].ITEMCODE + "' style='width: 98%; font-size: 0.8em; text-align: left;";
        if (data.admin) { this_div_contents += " cursor: pointer;"; }

        if (drawn_first == true) {
            this_div_contents += " border-top: 1px #AAA solid;";
        } else {
            drawn_first = true;
        }

        this_div_contents += "'";

        if (data.admin) { 
            this_div_contents += " onClick=\"edit_item('" + items[i].PRODUCTID + "');\""; 
            this_div_contents += " onMouseOver=\"$('" + items[i].ITEMCODE + "').style.backgroundColor='#F5F5DC';\"";
            this_div_contents += " onMouseOut=\"$('" + items[i].ITEMCODE + "').style.backgroundColor='#FFFFFF';\"";
        }
        this_div_contents += ">\n";

        this_div_contents += "<table width='100%'><tr valign=top>";

        if (items[i].PICTURE) {
            this_div_contents += "<td><img src='image.php?image=products/" + items[i].PICTURE + "'></td>\n";
        }
        this_div_contents += "<td width='80%' style='font-size: 0.7em;'>";
        this_div_contents += "<div style='float: right; font-weight: bold;'>";

        if (data.admin) { this_div_contents += "<span style='color: #999;'>$" + items[i].COST + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>"; }
        this_div_contents += "$" + items[i].PRICE + "</div>\n";
        this_div_contents += "<B>" + items[i].ITEMCODE + "</B><BR>\n";
        this_div_contents += items[i].DESCRIPTION + "<BR>\n";

        if (! items[i].INSTOCK) { this_div_contents += "<p style='font-style: italic; color: red; padding-top: 15px;'>This item is currently out of stock.</p>\n"; }

        this_div_contents += "</td></tr></table>\n";

        this_div_contents += "<BR style='clear: both;'></div>\n";
        this_div_contents += "</div></center>\n";

        new_div_contents += this_div_contents;

    }

    $('items_list').innerHTML = new_div_contents;

}


