﻿// Name: CheckoutDialog.js
// Version: 1.0.0.0
// FileVersion: 1.0.0.0
// -----------------------------------------------------------------------
//  Copyright (C) Peter Bredenberg System. All rights reserved.
// -----------------------------------------------------------------------

var checkoutItems = 0;

// Show the dialog window
function showCheckoutDialog(items) {
    closeAllDialogs();
    
    positionModalBackground(true);
    centerCheckoutDialog(true, items);
}

// Close the dialog window
function closeCheckoutDialog() {
    var checkOutDialog = $get('CheckoutDialog')
    checkOutDialog.style.display = 'none';
    hideModalBackground();
}

// Center the dialog window
function centerCheckoutDialog(show, items) {
    checkoutItems = items;
    var checkOutDialog = $get('CheckoutDialog');
    var width = 0, height = 0;
    var dlgHeight = 380 + (items * 20);

    if (navigator.appName.indexOf("Microsoft") != -1) {
        width = document.documentElement.clientWidth;
        height = document.documentElement.clientHeight;
    }
    else {
        width = window.innerWidth;
        height = window.innerHeight;
    }

    var left = (width - 800) / 2; if (left < 0) left = 0;
    var top = (height - dlgHeight) / 2; if (top < 0) top = 0; if (top > 110) top = 110;

    checkOutDialog.style.left = parseInt(left) + 'px';
    checkOutDialog.style.top = parseInt(top) + 'px';

    if (show) {
        checkOutDialog.style.display = 'block';
    }
}

// Delete shopping cart item
var sumTextBox;
var orderRow;
function deleteShoppingCartItem(id, row, sum) {
    sumTextBox = sum;
    orderRow = row
    Onyx.Web.Services.OnyxWebService.DeleteShoppingCartItem(id, OnDeleteItemComplete, OnError, OnTimeOut);
}

function OnDeleteItemComplete(result) {
    var row = $get(orderRow);
    var canClose = getShoppingCartItemsCount(row.parentNode.parentNode.parentNode) == 2;

    row.parentNode.parentNode.parentNode.removeChild(row.parentNode.parentNode);
    $get(sumTextBox).innerHTML = result;

    Onyx.Web.Services.OnyxWebService.GetShoppingCart(updateShoppingCart, showUnexpectedErrorMsg, showUnexpectedErrorMsg);

    if (canClose)
        closeCheckoutDialog();
}

//  Get number of shopping cart items
function getShoppingCartItemsCount(node) {
    var counter = 0;
    for (var i = 0; i < node.childNodes.length; i++) {
        var childNode = node.childNodes[i];
        if (childNode.nodeType == 1) {
            counter += 1;
        }
    }
    return counter;
}

// Delete order
function deleteOrder() {
    Onyx.Web.Services.OnyxWebService.DeleteOrder(OnDeleteOrderComplete, OnError, OnTimeOut);
}

function OnDeleteOrderComplete(result) {
    closeCheckoutDialog();
    Onyx.Web.Services.OnyxWebService.GetShoppingCart(updateShoppingCart, OnError, OnTimeOut);
}

// Update shopping cart item
var rowSumLabel;
var sumLabel;
var priceLabel;
function updateShoppingCartItem(id, items, rowSum, sum, price, minQuantity, multiple) {
    rowSumLabel = $get(rowSum);
    sumLabel = $get(sum);
    priceLabel = $get(price);
    minQuantityHidden = $get(minQuantity);
    multipleHidden = $get(multiple);

    var isValid = true;
    itemsValue = $get(items).value.trim();
    itemsValue = itemsValue.replace(',', '.');
    if ((itemsValue == '.') || (itemsValue == '0') || (itemsValue == '')) isValid = false;

    if (minQuantityHidden.value == '') minQuantityHidden.value = "1";

    multipleHidden.value = multipleHidden.value.replace(',', '.');

    var isNumber = new RegExp(/^\d*\.?\d*$/);
    if (!itemsValue.match(isNumber) || !isValid)
        alert('Värde i fältet antal är inte ett gilitigt tal!');
    else if (parseInt(itemsValue) < parseInt(minQuantityHidden.value)) {
        alert('Minsta beställningsantal för denna artikel är ' + minQuantityHidden.value + '!');
        $get(items).value = minQuantityHidden.value;
        Onyx.Web.Services.OnyxWebService.UpdateShoppingCartItem(id, minQuantityHidden.value, OnUpdateItemComplete, OnError, OnTimeOut);
    }
    else if ((parseFloat(itemsValue) * 100).toFixed(0) % (parseFloat(multipleHidden.value * 100).toFixed(0)) > 0) {
        alert('Antal är felaktigt. Denna artikel kan endast beställas i jämna ' + multipleHidden.value + '-tal!');
        $get(items).value = minQuantityHidden.value;
        Onyx.Web.Services.OnyxWebService.UpdateShoppingCartItem(id, minQuantityHidden.value, OnUpdateItemComplete, OnError, OnTimeOut);
    }
    else {
        itemsValue = itemsValue.replace('.', ',');
        Onyx.Web.Services.OnyxWebService.UpdateShoppingCartItem(id, itemsValue, OnUpdateItemComplete, OnError, OnTimeOut);
    }
}


function OnUpdateItemComplete(result) {
    rowSumLabel.innerHTML = result[0];
    priceLabel.innerHTML = result[2];
    sumLabel.innerHTML = 'Totalt exkl. moms&nbsp;&nbsp;&nbsp;' + result[1];
    Onyx.Web.Services.OnyxWebService.GetShoppingCart(updateShoppingCart, OnError, OnTimeOut);
}

// Check items input
function checkItemsInput(e) {
    var allowedKeys = '|8|9|27|46|188|37|39|110|';
    var allow = false;

    var keynum = (window.event != null) ? event.keyCode : e.keyCode;
    allow = ((keynum >= 48 && keynum <= 57) || (keynum >= 96 && keynum <= 105));
    Sys.Debug.trace(keynum);

    if (!allow)
        allow = (allowedKeys.indexOf('|' + keynum + '|') >= 0);

    return allow;
}

// Send order
function sendOrder(addressee, dischargeLoc, goodsLabel, orderNo, delivery, message, isOrderNoReq, isDisLocReq) {
    if (isOrderNoReq == "True") {
        if ($get(orderNo).value.trim().length == 0) {
            $get('OrderNoError').style.display = 'inline';
            alert('Beställningsnummer är obligatoriskt och måste anges!');
            return;
        }
    }

    if (isDisLocReq == "True") {
        if ($get(dischargeLoc).value.trim().length == 0) {
            $get('DischargeLocationError').style.display = 'inline';
            alert('Littera är obligatoriskt och måste anges!');
            return;
        }
    }

    if ($get(message).value.length > 255) {
        alert('Meddelandetexten till orderplock är för lång. Den får vara högst 255 tecken.');
        $get(message).focus();
        return;
    }

    disableCtrls($get('CheckoutTable').childNodes);

    var div = $get('ProcessOrder');
    div.style.display = 'block';
    div.disabled = false;

    Onyx.Web.Services.OnyxWebService.CommitOrder(
        $get(addressee).options[$get(addressee).selectedIndex].value,
        $get(addressee).options[$get(addressee).selectedIndex].innerHTML,
        $get(dischargeLoc).value,
        $get(goodsLabel).value,
        $get(orderNo).value,
        $get(delivery).options[$get(delivery).selectedIndex].value,
        $get(delivery).options[$get(delivery).selectedIndex].innerHTML,
        $get(message).value,
        OnSendOrderComplete,
        OnSendOrderError, 
        OnTimeOut);
}

function OnSendOrderComplete(result) {
    Onyx.Web.Services.OnyxWebService.GetShoppingCart(updateShoppingCart, OnError, OnTimeOut);
    $get('OrderInProcess').style.display = 'none';
    $get('OrderCompleted').style.display = 'block';
}

function OnSendOrderError(result) {
    alert(result.get_message());
    closeCheckoutDialog();
}

function processCheckoutKeypress(ctrl, e) {
    var keynum = (window.event != null) ? event.keyCode : e.keyCode;
    if (keynum == 13 || keynum == 32)
        ctrl.click();
    if (keynum == 27)
        closeCheckoutDialog();

}

var dischargeLocList;
function GetDischargeLocations(addresseeId, dischargeLocId, disLocTextId) {
    $get(disLocTextId).value = '';
    dischargeLocList = $get(dischargeLocId);
    for (var i = (dischargeLocList.options.length - 1); i >= 0; i--) {
        dischargeLocList.options[i] = null;
    }

    Onyx.Web.Services.OnyxWebService.GetDischargeLocation($get(addresseeId).value, OnGetDischargeLocComplete, OnGetDischargeLocError, OnTimeOut);
}

function OnGetDischargeLocComplete(result) {
    for (var i = 0; i < result.length; i++) {
        dischargeLocList.options[i] = new Option(result[i], result[i]);
    }
}

function OnGetDischargeLocError(result) {
    alert(result.get_message());
}

function showRowComment(ctrl, event, artno) {
    var comment = $get('RowComment');
    var heading = $get('RowCommentHeading');
    var text = $get('RowCommentTextArea');
    var artnohd = $get('ArticleRowComment');

    artnohd.value = artno;
    heading.innerHTML = 'Radkommentar för artikel ' + artno;

    var offsetX, offsetY;
    if (typeof event.offsetX != 'undefined') {
        offsetX = event.offsetX;
        offsetY = event.offsetY;
    }
    else if (typeof event.layerX != 'undefined') {
        offsetX = 0;
        offsetY = 0;
    }
    
    comment.style.left = (event.clientX - 220 - offsetX) + 'px';
    comment.style.top = (event.clientY - 122 - offsetY) + 'px';
    comment.style.display = 'block';
    
    text.focus();

    getRowComment();
    
    return false;
}

function closeRowComment() {
    var comment = $get('RowComment');
    var text = $get('RowCommentTextArea');
    
    comment.style.display = 'none';

    text.value = '';
    
    return false;
}

function getRowComment() {
    Onyx.Web.Services.OnyxWebService.GetRowComment($get('ArticleRowComment').value, OnGetRowCommentComplete, OnRowCommentError, OnTimeOut);
}

function saveRowComment() {
    var text = $get('RowCommentTextArea').value;
    if (text.length > 255) {
        alert('Radkommentaren är för lång. Den får vara högst 255 tecken.');
    }
    else {
        Onyx.Web.Services.OnyxWebService.SaveRowComment($get('ArticleRowComment').value, text, closeRowComment, OnRowCommentError, OnTimeOut);
    }
}

function OnGetRowCommentComplete(result) {
    var text = $get('RowCommentTextArea');
    text.value = result;
}

function OnRowCommentError(result) {
    alert(result.get_message());
    closeCheckoutDialog();
}

function onPopupLostFocus() {
    $get('DischargeLocation').style.display = 'none';
}

function showDisLocPopup(lb) {
    $get('RowComment').style.display = 'none';
    $get('DischargeLocation').style.display = 'block';
    $get(lb).focus();
    if ($get(lb).options.length > 0) {
        $get(lb).options[0].selected = true;
    }
    return false;
}

function GetDisLocItem(lb, tb) {
    var index = $get(lb).selectedIndex;
    if (index >= 0) {
        $get(tb).value = $get(lb).options[index].value;
        $get('DischargeLocation').style.display = 'none';
    }
}

// Notify ScriptManager that this is the end of the script
if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();

