/* This function is used to change the style class of an element */
function swapClass(obj, newStyle) {
    obj.className = newStyle;
}

function isUndefined(value) {
    var undef;
    return value == undef;
}

function isAttrUndefined(value){
    return typeof value == 'undefined' || value == false;
}

function checkAll(theForm) { // check all the checkboxes in the list
    for (var i = 0; i < theForm.elements.length; i++) {
        var e = theForm.elements[i];
        var eName = e.name;
        if (eName != 'allbox' &&
                (e.type.indexOf("checkbox") == 0)) {
            e.checked = theForm.allbox.checked;
        }
    }
}

/* Function to clear a form of all it's values */
function clearForm(frmObj) {
    for (var i = 0; i < frmObj.length; i++) {
        var element = frmObj.elements[i];
        if (element.type.indexOf("text") == 0 ||
                element.type.indexOf("password") == 0) {
            element.value = "";
        } else if (element.type.indexOf("radio") == 0) {
            element.checked = false;
        } else if (element.type.indexOf("checkbox") == 0) {
            element.checked = false;
        } else if (element.type.indexOf("select") == 0) {
            for (var j = 0; j < element.length; j++) {
                element.options[j].selected = false;
            }
            element.options[0].selected = true;
        }
    }
}

/* Function to get a form's values in a string */
function getFormAsString(frmObj) {
    var query = "";
    for (var i = 0; i < frmObj.length; i++) {
        var element = frmObj.elements[i];
        if (element.type.indexOf("checkbox") == 0 ||
                element.type.indexOf("radio") == 0) {
            if (element.checked) {
                query += element.name + '=' + escape(element.value) + "&";
            }
        } else if (element.type.indexOf("select") == 0) {
            for (var j = 0; j < element.length; j++) {
                if (element.options[j].selected) {
                    query += element.name + '=' + escape(element.value) + "&";
                }
            }
        } else {
            query += element.name + '='
                    + escape(element.value) + "&";
        }
    }
    return query;
}

/* Function to hide form elements that show through
 the search form when it is visible */
function toggleForm(frmObj, iState) {// 1 visible, 0 hidden
    for (var i = 0; i < frmObj.length; i++) {
        if (frmObj.elements[i].type.indexOf("select") == 0 || frmObj.elements[i].type.indexOf("checkbox") == 0) {
            frmObj.elements[i].style.visibility = iState ? "visible" : "hidden";
        }
    }
}

/* Helper function for re-ordering options in a select */
function opt(txt, val, sel) {
    this.txt = txt;
    this.val = val;
    this.sel = sel;
}

/* Function for re-ordering <option>'s in a <select> */
function move(list, to) {
    var total = list.options.length;
    index = list.selectedIndex;
    if (index == -1) return false;
    if (to == +1 && index == total - 1) return false;
    if (to == -1 && index == 0) return false;
    to = index + to;
    var opts = new Array();
    for (i = 0; i < total; i++) {
        opts[i] = new opt(list.options[i].text, list.options[i].value, list.options[i].selected);
    }
    tempOpt = opts[to];
    opts[to] = opts[index];
    opts[index] = tempOpt
    list.options.length = 0; // clear

    for (i = 0; i < opts.length; i++) {
        list.options[i] = new Option(opts[i].txt, opts[i].val);
        list.options[i].selected = opts[i].sel;
    }

    list.focus();
}

/*  This function is to select all options in a multi-valued <select> */
function selectAll(elementId) {
    var element = document.getElementById(elementId);
    len = element.length;
    if (len != 0) {
        for (i = 0; i < len; i++) {
            element.options[i].selected = true;
        }
    }
}

/* This function is used to select a checkbox by passing
 * in the checkbox id
 */
function toggleChoice(elementId) {
    var element = document.getElementById(elementId);
    if (element.checked) {
        element.checked = false;
    } else {
        element.checked = true;
    }
}

/* This function is used to select a radio button by passing
 * in the radio button id and index you want to select
 */
function toggleRadio(elementId, index) {
    var element = document.getElementsByName(elementId)[index];
    element.checked = true;
}

/* This function is used to open a pop-up window */
function openWindow(url, winTitle, winParams) {
    winName = window.open(url, winTitle, winParams);
    winName.focus();
}


/* This function is to open search results in a pop-up window */
function openSearch(url, winTitle) {
    var screenWidth = parseInt(screen.availWidth);
    var screenHeight = parseInt(screen.availHeight);

    var winParams = "width=" + screenWidth + ",height=" + screenHeight;
    winParams += ",left=0,top=0,toolbar,scrollbars,resizable,status=yes";

    openWindow(url, winTitle, winParams);
}

/* This function is used to set cookies */
function setCookie(name, value, expires, path, domain, secure) {
    document.cookie = name + "=" + escape(value) +
            ((expires) ? "; expires=" + expires.toGMTString() : "") +
            ((path) ? "; path=" + path : "") +
            ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "");
}

/* This function is used to get cookies */
function getCookie(name) {
    var prefix = name + "="
    var start = document.cookie.indexOf(prefix)

    if (start == -1) {
        return null;
    }

    var end = document.cookie.indexOf(";", start + prefix.length)
    if (end == -1) {
        end = document.cookie.length;
    }

    var value = document.cookie.substring(start + prefix.length, end)
    return unescape(value);
}

/* This function is used to delete cookies */
function deleteCookie(name, path, domain) {
    if (getCookie(name)) {
        document.cookie = name + "=" +
                ((path) ? "; path=" + path : "") +
                ((domain) ? "; domain=" + domain : "") +
                "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}

// This function is for stripping leading and trailing spaces
String.prototype.trim = function () {
    return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
};

// This function is used by the login screen to validate user/pass
// are entered. 
function validateRequired(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oRequired = new required();

    for (x in oRequired) {
        if ((form[oRequired[x][0]].type == 'text' || form[oRequired[x][0]].type == 'textarea' || form[oRequired[x][0]].type == 'select-one' || form[oRequired[x][0]].type == 'radio' || form[oRequired[x][0]].type == 'password') && form[oRequired[x][0]].value == '') {
            if (i == 0)
                focusField = form[oRequired[x][0]];

            fields[i++] = oRequired[x][1];

            bValid = false;
        }
    }

    if (fields.length > 0) {
        focusField.focus();
        alert(fields.join('\n'));
    }

    return bValid;
}

// This function is a generic function to create form elements
function createFormElement(element, type, name, id, value, parent) {
    var e = document.createElement(element);
    e.setAttribute("name", name);
    e.setAttribute("type", type);
    e.setAttribute("id", id);
    e.setAttribute("value", value);
    parent.appendChild(e);
}

function confirmDelete(obj) {
    var msg = "Are you sure you want to delete this " + obj + "?";
    ans = confirm(msg);
    if (ans) {
        return true;
    } else {
        return false;
    }
}

function highlightTableRows(tableId) {
    var previousClass = null;
    var table = document.getElementById(tableId);
    var startRow = 0;
    // workaround for Tapestry not using thead
    if (!table.getElementsByTagName("thead")[0]) {
        startRow = 1;
    }
    var tbody = table.getElementsByTagName("tbody")[0];
    var rows = tbody.getElementsByTagName("tr");
    // add event handlers so rows light up and are clickable
    for (i = startRow; i < rows.length; i++) {
        rows[i].onmouseover = function() {
            previousClass = this.className;
            this.className += ' over'
        };
        rows[i].onmouseout = function() {
            this.className = previousClass
        };
        rows[i].onclick = function() {
            var cell = this.getElementsByTagName("td")[0];
            var link = cell.getElementsByTagName("a")[0];
            if (link.onclick) {
                call = link.getAttribute("onclick");
                if (call.indexOf("return ") == 0) {
                    call = call.substring(7);
                }
                // this will not work for links with onclick handlers that return false
                eval(call);
            } else {
                location.href = link.getAttribute("href");
            }
            this.style.cursor = "wait";
            return false;
        }
    }
}

function highlightFormElements() {
    // add input box highlighting
    addFocusHandlers(document.getElementsByTagName("input"));
    addFocusHandlers(document.getElementsByTagName("textarea"));
}

function addFocusHandlers(elements) {
    for (i = 0; i < elements.length; i++) {
        if (elements[i].type != "button" && elements[i].type != "submit" &&
                elements[i].type != "reset" && elements[i].type != "checkbox" && elements[i].type != "radio") {
            if (!elements[i].getAttribute('readonly') && !elements[i].getAttribute('disabled')) {
                elements[i].onfocus = function() {
                    this.style.backgroundColor = '#ffd';
                    this.select()
                };
                elements[i].onmouseover = function() {
                    this.style.backgroundColor = '#ffd'
                };
                elements[i].onblur = function() {
                    this.style.backgroundColor = '';
                }
                elements[i].onmouseout = function() {
                    this.style.backgroundColor = '';
                }
            }
        }
    }
}

function radio(clicked) {
    var form = clicked.form;
    var checkboxes = form.elements[clicked.name];
    if (!clicked.checked || !checkboxes.length) {
        clicked.parentNode.parentNode.className = "";
        return false;
    }

    for (i = 0; i < checkboxes.length; i++) {
        if (checkboxes[i] != clicked) {
            checkboxes[i].checked = false;
            checkboxes[i].parentNode.parentNode.className = "";
        }
    }

    // highlight the row    
    clicked.parentNode.parentNode.className = "over";
}

window.onload = function() {
    highlightFormElements();
    if ($('successMessages')) {
        $('#successMessages').effect("highlight");
        // causes webtest exception on OS X : http://lists.canoo.com/pipermail/webtest/2006q1/005214.html
        // window.setTimeout("Effect.DropOut('successMessages')", 3000);
    }
    if ($('errorMessages')) {
        $('#errorMessages').effect('highlight');
    }

    /* Initialize menus for IE */
    if ($("#primary-nav")) {
        var navItems = $("#primary-nav").children("li");

        for (var i = 0; i < navItems.length; i++) {
            if (navItems[i].className == "menubar") {
                navItems[i].onmouseover = function() {
                    this.className += " over";
                }
                navItems[i].onmouseout = function() {
                    this.className = "menubar";
                }
            }
        }
    }
}

// Show the document's title on the status bar
window.defaultStatus = document.title;

function addToOrder(url, long) {
    var maxh = 450;
    var maxw = 600;
    if (long) {
        maxh = 520;
        maxw = 720;
    }

    var dialog = $('<div style="display:hidden;"></div>');
    dialog.html($("#dialogLoader").html());
    dialog.dialog({minHeight: maxh, minWidth: maxw, modal: true, title: 'Add To Order'});
    dialog.bind("dialogclose", function(event, ui) {
        dialog.remove();
    });

  $.ajax({
    url: url,
    cache: false,
    dataType: "html",
    success: function(data) {
      dialog.html(data);
    },
    complete: function (xhr, statusText) {
      if (xhr.status == 202) location.reload();
      if (xhr.status == 201) location.href = "login.jsp";
    }
  });
}

function editOrder(url, long) {
    var maxh = 450;
    var maxw = 600;
    if (long) {
        maxh = 520;
        maxw = 720;
    }
    var dialog = $('<div style="display:hidden;"></div>');
    dialog.html($("#dialogLoader").html());
    dialog.dialog({minHeight: maxh, minWidth: maxw, modal: true, title: 'Edit Order'});
    dialog.bind("dialogclose", function(event, ui) {
        dialog.remove();
    });

    $.ajax({
        url: url,
        cache: false,
        dataType: "html",
        success: function(data) {
            dialog.html(data);
        },
        complete: function (xhr, statusText) {
          if (xhr.status == 202) location.reload();
          if (xhr.status == 201) location.href = "login.jsp";
        }
    });
}

function addToSpecial(url) {
    var dialog = $('<div style="display:hidden;"></div>');
    dialog.html($("#dialogLoader").html());
    dialog.dialog({height: 450, maxHeight: 450, maxWidth: 700, minWidth: 600, modal: true, title: 'Add To Order'});
    dialog.bind("dialogclose", function(event, ui) {
        dialog.remove();
    });

    $.ajax({
        url: url,
        cache: false,
        dataType: "html",
        success: function(data) {
            dialog.html(data);
        }
    });

}

function addSpecial(url, titleDialog) {
    var dialog = $('<div style="display:hidden;"></div>');
    dialog.html($("#dialogLoader").html());
    dialog.dialog({minHeight: 520, minWidth: 720, modal: true, title: titleDialog});
    dialog.bind("dialogclose", function(event, ui) {
        $(dialog).dialog("destroy");
        $(dialog).remove();
    });

    $.ajax({
      type: "GET",
      url: url,
      cache: false,
      success: function(data) {
        dialog.html(data);
      },
      complete: function (xhr, statusText) {
        if (xhr.status == 202) location.reload();
        if (xhr.status == 201) location.href = "redirectSpecial.html";
      }
    });
}

function editSpecial(url) {
    $.ajax({
        url: url,
        cache: false,
        dataType: "html",
        success: function(data) {
            $("#content").val(data);
            var dialog = $('<div style="display:hidden;"></div>');
            dialog.html(data);
            dialog.dialog({height: 450, maxHeight: 450, maxWidth: 700, minWidth: 600, modal: true, title: 'Edit Order'});
            dialog.bind("dialogclose", function(event, ui) {
                dialog.remove();
            });
        }
    });
}

function redirect(url) {
    window.location = url;
}

function verifyLimitContents() {
    var max = $('#maxContents').val();
    var min = $('#minContents').val();
    var counter = 0;
    var items = $('[name=menuItemContent]');
    var hasPortions = false;

    for (var i = 0; i < items.length; i++) {
        var __id = 'cntPtn_' + $(items[i]).val();
        var __value = $("input[name=" + __id + "]:checked").val();

        if (!isUndefined(__value))
            hasPortions = true;

        if (hasPortions && __value.length > 0)
            counter++;
    }

    if (hasPortions) {
        if (counter < min) {
            alert("must select at least " + min + " items");
            return false;
        }
        else {
            if (counter > max) {
                alert("must select at most " + max + " items");
                return false;
            }
        }
    }
    return true;
}

function updateTotalItem() {
    var quantity = $("#quantity").val();
    var variant = $("input[name=variant]:checked").val();

    if (isUndefined(variant))
        variant = $("input[name=variant]").val();

    var value = $("input[name=vrntP_" + variant + "]").val();
    var dep = $("input[name=vrntDep_" + variant + "]").val();
    var q = parseFloat(quantity);
    var v = parseFloat(value);
    var d = parseFloat(dep);
    var addon = parseFloat(parseFloat(calculateSinglePricing()).toFixed(2));
    var totalItemAmount = (q * (v + d + addon));
    var totalItem = parseFloat(totalItemAmount).toFixed(2);
    $("#totalItem").html(totalItem);
    $("#addonPrice").val(addon);

    var existsField = $("#actualSpecialPrice").length;

    if (existsField > 0) {
        var currentSpecialPrice = $("#currentSpecialPrice").val();
        var actualSpecialPrice = truncate(parseFloat(currentSpecialPrice) + totalItemAmount);
        $("#actualSpecialPrice").html(actualSpecialPrice);
    }
}

function getSafeMultiplier(value){
    if (isAttrUndefined(value))
        return 1.0;
    return value;
}

function calculateSinglePricing() {
  var price = 0;
  var items = $('[name=menuItemContent]');

  var i;
  var __id;
  var __value;
  var isDefault;
  var nonCosting;
  var portMultiplier;
  var amnMultiplier;

  var defaultToppingCounter = getDefaultToppingDisabled(items);

  var toppingCounter = 0;
  for (i = 0; i < items.length; i++) {
    __id = $(items[i]).val();
    __value = $("input[name=cntPtn_" + __id + "]:checked").val();
    isDefault = ($("input[name=cntPtn_" + __id + "]:checked").attr('def') == 'true');
    nonCosting = $(items[i]).closest('.group_content').attr('ncost');
        portMultiplier =  getSafeMultiplier($("input[name=cntPtn_" + __id + "]:checked").attr('m'));
        amnMultiplier = getSafeMultiplier($("select[name=amnt_" + __id + "] option:selected").attr('m'));
    if (!isUndefined(__value) && nonCosting == 'false' && __value.length > 0 && __value != '') {

        if (isDefault && amnMultiplier > 1)  {
            amnMultiplier = amnMultiplier - 1;
            toppingCounter += parseFloat(amnMultiplier) * portMultiplier;
            if (toppingCounter > defaultToppingCounter) {
                price += parseFloat(eval($("#addnp_" + __id).val())) * portMultiplier * amnMultiplier;
            }
        } else if (!isDefault) {
            toppingCounter += parseFloat(amnMultiplier) * portMultiplier;
            if (toppingCounter > defaultToppingCounter) {
                price += parseFloat(eval($("#addnp_" + __id).val())) * portMultiplier * amnMultiplier;
            }
        }
     }

    if (isUndefined(__value)) {
      if ($('#contentItem_' + __id + ':checked').length > 0 && $('#contentItem_' + __id + ':checked').attr('def') != 'true') {
        price += parseFloat(eval($("#addnp_" + __id).val()));
      } else {
        if ($("#contentItem[contentGroupName='"+ $(items[i]).attr('contentGroupName') +"']").length > 0)
          price += parseFloat(eval($("#addnp_" + $('#contentItem').val()).val()));
      }
    }
  }
  return price;
}

function calculateSinglePricingForSpecials() {
  var price = 0;
  var items = $('[name=menuItemContent]');
  var includedContents = parseInt($('#included_contents').val());

  var i;
  var __id;
  var __value;
  var isDefault;
  var portMultiplier;
  var amnMultiplier;
  var nonCosting;

  var defaultToppingCounter = getDefaultToppingDisabled(items);

  var toppingCounter = 0;
  for (i = 0; i < items.length; i++) {
    __id = $(items[i]).val();
    __value = $("input[name=cntPtn_" + __id + "]:checked").val();
    isDefault = ($("input[name=cntPtn_" + __id + "]:checked").attr('def') == 'true');
    nonCosting = $(items[i]).closest('.group_content').attr('ncost');
    portMultiplier = getSafeMultiplier($("input[name=cntPtn_" + __id + "]:checked").attr('m'));
    amnMultiplier = getSafeMultiplier($("select[name=amnt_" + __id + "] option:selected").attr('m'));
    if (!isUndefined(__value) && nonCosting == 'false' && __value.length > 0 && __value != '') {

        if (isDefault && amnMultiplier > 1)  {
            amnMultiplier = amnMultiplier - 1;
            toppingCounter += parseFloat(amnMultiplier) * portMultiplier;
            if (toppingCounter > (includedContents + defaultToppingCounter)) {
                price += parseFloat(eval($("#addnp_" + __id).val())) * portMultiplier * amnMultiplier;
            }
        } else if (!isDefault) {
            toppingCounter += parseFloat(amnMultiplier) * portMultiplier;
            if (toppingCounter > (includedContents + defaultToppingCounter)) {
                price += parseFloat(eval($("#addnp_" + __id).val())) * portMultiplier * amnMultiplier;
            }
        }
    }

    if (isUndefined(__value)) {
      if ($('#contentItem_' + __id + ':checked').length > 0 && $('#contentItem_' + __id + ':checked').attr("def") != 'true') {
          toppingCounter++;
          if (toppingCounter > (includedContents + defaultToppingCounter)) {
            price += parseFloat(eval($("#addnp_" + __id).val()));
          }
        } else {
          if ($("#contentItem[contentGroupName='"+ $(items[i]).attr('contentGroupName') +"']").length > 0)
                price += parseFloat(eval($("#addnp_" + $('#contentItem').val()).val()));
        }
    }
  }
  return price;
}

function calculateTotalAdditionalCostForSpecials() {
  var price = 0;
  var items = $('[name=menuItemContent]');

  var i;
  var __id;
  var __value;
  var isDefault;
  var portMultiplier;
  var amnMultiplier;
  var nonCosting;

  for (i = 0; i < items.length; i++) {
    __id = $(items[i]).val();
    __value = $("input[name=cntPtn_" + __id + "]:checked").val();
    isDefault = ($("input[name=cntPtn_" + __id + "]:checked").attr('def') == 'true');
    nonCosting = $(items[i]).closest('.group_content').attr('ncost');
    portMultiplier = getSafeMultiplier($("input[name=cntPtn_" + __id + "]:checked").attr('m'));
    amnMultiplier = getSafeMultiplier($("select[name=amnt_" + __id + "] option:selected").attr('m'));

    if (!isUndefined(__value) && nonCosting == 'false' && __value.length > 0 && __value != '') {

         if (isDefault && amnMultiplier > 1)  {
            amnMultiplier = amnMultiplier - 1;
            price += parseFloat(eval($("#addnp_" + __id).val())) * portMultiplier * amnMultiplier;
         } if (!isDefault) {
            price += parseFloat(eval($("#addnp_" + __id).val())) * portMultiplier * amnMultiplier;
         }
    }

    if (isUndefined(__value)) {
        if ($('#contentItem_' + __id + ':checked').length > 0) {
            price += parseFloat(eval($("#addnp_" + __id).val()));
        } else {
            if ($('#contentItem').length > 0)
                price += parseFloat(eval($("#addnp_" + $('#contentItem').val()).val()));
        }
    }
  }
  return price;
}

function getDefaultToppingDisabled(items) {
  var i;
  var __id;
  var __value;
  var isDefault;
  var nonCosting;
  var defaultToppingCounter = 0;
  for (i = 0; i < items.length; i++) {
    __id = $(items[i]).val();
    __value = $("input[name=cntPtn_" + __id + "]:checked").val();
    isDefault = ($("input[name=cntPtn_" + __id + "]:checked").attr('def') == 'true');
    nonCosting = $(items[i]).closest('.group_content').attr('ncost');

    if (!isUndefined(__value) && nonCosting == 'false') {
      if (isDefault) {
        if ((__value.length > 0 && __value != '')) {
          if ($("input[name=cntPtn_" + __id + "]:checked").parent().parent().attr('def_inac') == 'true') {
            $("input[name=cntPtn_" + __id + "]:checked").parent().parent().attr('def_inac', 'false');
          }
        } else {
          $("input[name=cntPtn_" + __id + "]:checked").parent().parent().attr('def_inac', 'true');
          defaultToppingCounter++;
        }
      }
    }
    if (isUndefined(__value)) {
      if ($('#contentItem_' + __id).attr('def') == 'true') {
        if ($('#contentItem_' + __id + ':checked').length > 0) {
          if ($('#contentItem_' + __id + ':checked').attr('def_inac') == 'true') {
            $('#contentItem_' + __id + ':checked').attr('def_inac', 'false');
          }
        } else {
          $('#contentItem_' + __id + ':checked').attr('def_inac', 'true');
          defaultToppingCounter++;
        }
      }
    }
  }
  return defaultToppingCounter;
}

function truncate(num) {
    var str = num + '';
    if (str.indexOf('.') == -1) {
        return str + '.00';
    }
    dot = str.length - str.indexOf('.');
    if (dot > 3) {
        return str.substring(0, str.length - dot + 3);
    }
    else if (dot == 2) {
        return str + '0';
    }
    return str;
}

//var last = 0;

function updateAddonPrices() {

    var itemId = $("input[name=itemId]").val();
    var variant = $("input[name=variant]:checked").val();

    $("#quantity").attr('disabled', 'disabled');
    $("#submit").attr('disabled', 'disabled');
    $("#loader").css('visibility', 'visible');


    $.getJSON('addons.html?id=' + itemId + '&vid=' + variant, function(data) {
        clearAddonPrices();
        for (var i = 0; i < parseInt(data.size); i++) {
            $("input[name=addnp_" + data.list[i].id + "]").val("'" + data.list[i].price + "'");
        }
        updateTotalItem();
        $("#quantity").removeAttr('disabled');
        $("#submit").removeAttr('disabled');
        $("#loader").css('visibility', 'hidden');
    });
}

function clearAddonPrices() {
    var items = $('[name=menuItemContent]');
    for (var i = 0; i < items.length; i++) {
        var __id = 'addnp_' + $(items[i]).val();
        $("input[name=" + __id + "]").val('0');
    }
}

function submitSpecialForm(formId, containerId) {
    if (checkContents()) {
        $.ajax({
            url : $(formId).attr('action'),
            type: 'post',
            cache: false,
            data: $(formId).serialize(),
            beforeSend: function() {
                disableSpecialFormButtons();
            },
            success : function(responseText, statusText, xhr) {
                var answer = $.trim(responseText);

                if (answer == "error") {
                    $('#orderItemErrorId').removeClass('hide');
                } if(!isNaN(parseInt(answer))) {
                    var maxContentErrors = $('[name=maxContentOrderError]');
                    for (var i = 0; i < maxContentErrors.length; i++) {
                        $(maxContentErrors[i]).addClass('hide');
                    }
                    $('#maxContentOrderError' + answer).removeClass('hide');
                } else {
                    if (responseText != '')
                        $(containerId).html(responseText);
                }
            },
            complete: function (xhr, statusText, responseText) {
                if (xhr.status == 202) location.reload();
                $('#back').removeAttr('disabled');
                $('#next').removeAttr('disabled');
            }
        });
    }

    return false;
}

function disableSpecialFormButtons() {
  $('#back').attr('disabled', true);
  $('#next').attr('disabled', true);
}

$.fn.focusFirst = function() {
    //  $($(this).attr('href') + ' :input:visible:enabled:first').focus();
    var elem = $('input[type=text]:visible:enabled:first', this);
    var select = $('select:visible:enabled:first', this);
    if (select && elem) {
        if (select.offsetTop < elem.offsetTop) {
            elem = select;
        }
    }
    var textArea = $('textarea:enabled:visible:first', this);
    if (textArea && elem) {
        if (textArea.offsetTop < elem.offsetTop) {
            elem = textArea;
        }
    }

    if (elem) {
        elem.focus();
    }
    return this;
};

$.fn.prepareResetButton = function() {
    var form = this;
    $('.reset_button', form).click(function() {
        $(form).find(':input').each(function() {
            switch (this.type) {
                case 'password':
                case 'select-multiple':
                case 'select-one':
                case 'text':
                case 'textarea':
                    $(this).val('');
                    break;
                case 'checkbox':
                case 'radio':
                    this.checked = false;
            }
        });
    });
    return this;
};

$.fn.showIndicator = function(woLoading) {
    if ($.browser.msie) return this;
    var body = $(this);
    var progDivClass = 'progress-background' + (woLoading != null || woLoading ? '-wo-loading' : '');
    var indicator = body.prev();
    if (indicator.hasClass(progDivClass)) {
        indicator.remove();
    }

    indicator = $('<div class="' + progDivClass + '"></div>').css({'width': body.width(),
        'height': (body.height() + 2)
        //        'top': body.offset().top,
        //        'left': body.offset().left
    });
    body.before(indicator);
    $(indicator).position({
        of: body,
        my: "left top",
        at: "left top",
        offset: "0",
        collision: 'flip flip'
    });
    indicator.show();
    return this;
};

$.fn.hideIndicator = function(woLoading) {
    if ($.browser.msie) return this;
    var body = $(this);
    var indicator = body.prev();
    if (indicator != null && indicator.hasClass('progress-background' + (woLoading != null || woLoading ? '-wo-loading' : ''))) {
        indicator.remove();
    }
    return this;
};

function updateAddonPricesForSpecials() {
    var itemId = $("input[name=menuItemId]").val();
    var variant = $("input[name=variant]:checked").val();

    $("#submit").attr('disabled', 'disabled');
    $("#loader").css('visibility', 'visible');

    $.getJSON('addons.html?id=' + itemId + '&vid=' + variant, function(data) {
        clearAddonPrices();
        for (var i = 0; i < parseInt(data.size); i++) {
            $("input[name=addnp_" + data.list[i].id + "]").val("'" + data.list[i].price + "'");
        }
        $("#submit").removeAttr('disabled');
        $("#loader").css('visibility', 'hidden');
        updateTotalItemForSpecials();
    });
}

function updateTotalItemForSpecials() {
  var quantity = parseFloat($("#quantity").val());
  var totalSpecialAmount = parseFloat($("#total_special_amount").val());

  var variant = $("input[name=variant]:checked").val();
  if (isUndefined(variant)) variant = $("input[name=variant]").val();
  if ($("input[name=variant]").length == 0) {
    $("#total_special_amount_label").html("0.00");
    return;
  }

  var deposit = parseFloat($("input[name=vrntDep_" + variant + "]").val());
  var extra = parseFloat($("input[name=vrntEx_" + variant + "]").val());

  var priceReduction = parseFloat($('#price_reduction').val());
  var percentReduction = parseFloat($('#percent_reduction').val());
  var isFullPrice = ($('#item_calc_full_price').val() == 'true');

  var basePrice = getBasePrice(variant, priceReduction, percentReduction);

  var additionalAmount = deposit + (priceReduction > 0 || isFullPrice ? 0 : extra);

  var additionalCost = parseFloat(parseFloat(calculateSinglePricingForSpecials()).toFixed(2));
  $("#additional_cost").val(additionalCost);
  $('#total_additional_cost').val(parseFloat(parseFloat(calculateTotalAdditionalCostForSpecials()).toFixed(2)));

  var itemTotalAmount = parseFloat(quantity * (basePrice + additionalAmount + additionalCost));

  totalSpecialAmount = parseFloat(totalSpecialAmount + itemTotalAmount).toFixed(2);
  $("#total_special_amount_label").html(totalSpecialAmount);

//      console.log(" additionalCost:" + additionalCost +
//                  " basePrice:" + basePrice +
//                  " deposit:" + deposit + " extra:" + extra + " itemTotalAmount:" + itemTotalAmount);

//    if ($('input[name=menuItemContent][type=hidden]').length > 0) {
//
//    } else if ($('select[name=menuItemContent]').length > 0 ||
//               $('input[name=menuItemContent][type=radio]').length > 0 ||
//               $('input[name=menuItemContent][type=checkbox]')) {
//    }
}

function checkContents() {
    var defaultContents = $('[name=defaultContent]');
    var maxContents = $('[name=typeContents]');
    var nameContents = $('[name=nameContents]');

    var items = $('[name=menuItemContent]');
    var maxToSelect = 0;
    for (var i = 0; i < defaultContents.length; i++) {
        var totalSelected = 0;
        for (var j = 0; j < items.length; j++) {
            var selectionTypeId = 'st_' + $(items[j]).val();
            var selectionTypeValue = $("input[name=" + selectionTypeId + "]").val();

            if ($(items[j]).attr('type') == 'checkbox') {
                if ($(items[j]).is(":checked") && ($(defaultContents[i]).attr('id') == selectionTypeValue)) {
                   totalSelected++;
                }
            } else if($(items[j]).attr('type') == 'hidden') {
                var __id = 'cntPtn_' + $(items[j]).val();
                var __value = $("input[name=" + __id + "]:checked").val();
                if ((__value != '') && ($(defaultContents[i]).attr('id') == selectionTypeValue)) {
                    totalSelected++;
                }
            }
        }
        maxToSelect = parseInt($(maxContents[i]).val()) + parseInt($(defaultContents[i]).val());
        if (totalSelected > maxToSelect) {
            alert("You can only select a maximum of " + $(maxContents[i]).val() + " " + $(nameContents[i]).val());
            return false;
        }
    }
    return true;
}

function getBasePrice(variant, priceReduction, percentReduction) {
  var basePrice = 0;

  var baseItemPrice = parseFloat($("#base_item_price").val());
  var variantValuePrice = parseFloat($("input[name=vrntP_" + variant + "]").val());

  if (priceReduction > 0) basePrice = variantValuePrice - priceReduction;
  else if (percentReduction > 0) basePrice = variantValuePrice - (percentReduction * variantValuePrice / 100);
  else basePrice = ($('#item_calc_full_price').val() == 'true' ? variantValuePrice : baseItemPrice);

//      console.log(" baseItemPrice:" + baseItemPrice +
//                  " variantValuePrice:" + variantValuePrice + " priceReduction:" + priceReduction + " basePrice:" + basePrice);
  return basePrice;
}

function checkMobileAgent() {
  if ($.browser.mobile) {
    location.href = '../mobile';
  }
}
