// common.js

var AddToShoppingListWidget = {
    clickedElement: null,
    
    show : function(e, clickedElement, products, callback) {
        var params = {};
        $.each(products, function(productId, quantity) {
            params["product_quantity_" + productId] = quantity;
        });
    
        AddToShoppingListWidget.callback = callback;
    	$.ajax({type: "POST",
    	    url: "?action=add_to_shopping_list.init",
   	        dataType: "json",
   	        data: jQuery.param(params), 
   	        success: function(response) {
        	    $("#add_to_shopping_list_widget").replaceWith(response.content);
        	    AddToShoppingListWidget.clickedElement = clickedElement;
        	    fn.dropdown(e, clickedElement, $("#add_to_shopping_list_widget"));
        	    $('.initialHide').hide().removeClass('initialHide');
        	    epoint.ow.DocumentReadyManager.runAllActions();
        	    epoint.ow.forms2.ErrorManager.triggerErrorRelatedEvents("add_to_shopping_list");
            }
    	});
    },
        
    add : function() {
        var formName = "form_add_to_shopping_list";
        var form = epoint.ow.Utils.getForm(formName);
        var params = $(form).serializeArray();
        
        params.push({"name" : "formName", "value" : formName});
        $.ajax({type: "POST",
            url: "?action=add_to_shopping_list.add",
            dataType: "json",
            data: params, 
            success: function(response) {
            	var $dropdown = $("#add_to_shopping_list_widget");
        		$dropdown.replaceWith(response.content);
        		fn.dropdown('', AddToShoppingListWidget.clickedElement, $dropdown.attr("id"));
        		AddToShoppingListWidget.callback();
        		epoint.ow.DocumentReadyManager.runAllActions();
                epoint.ow.forms2.ErrorManager.triggerErrorRelatedEvents("add_to_shopping_list");
            }
        })
    },

    eventHandlers : function() {
        $("#form_add_to_shopping_list").bind("formIsNotValid", function () {
            var validationErrors = epoint.ow.forms2.ErrorManager.getAllErrors("add_to_shopping_list");
            
            for (var j = 0; j < validationErrors.length; j++) {
                if (validationErrors[j].validatorName == "name.NewListNameUniqueValidator") {
                    var newListField = epoint.ow.Utils.getField('add_to_shopping_list', 'name');
                    var selectField = epoint.ow.Utils.getField('add_to_shopping_list', 'shoppingList');
                        
                    for(var i = 0; i < selectField.options.length; i++) {
                        var option = selectField.options[i];
                        if (option.text == newListField.value) {
                            selectField.selectedIndex = i;
                            break;
                        }
                    }
                    $('[name="shoppingListType"][value="existingList"]').get(0).checked = true;
                    break;
                }
            }
        })
        
        $("#add_to_shopping_list_name").focus(function () {
            $('[name="shoppingListType"][value="newList"]').get(0).checked = true;
        })    
    }    
};

var Cart =  {

    changeOwnerFields: function(formName, who) {
	//    alert("" + formName + " " + who);
	$('#' + formName +  '_my_customer_number').hide();
	$('#' + formName +  '_agreement_number').hide();
	$('#' + formName +  '_other_agreement_number').hide();
	$('#' + formName +  '_other_customer_number').hide();
	
	if(who == 'customer') {
	    $('#' + formName +  '_my_customer_number').show();
	}
	
	if(who == 'representative') {
	    $('#' + formName +  '_agreement_number').show();
	}
	
	
	if(who == 'other_representative_customer') {
	    $('#' + formName +  '_other_agreement_number').show();
	    $('#' + formName +  '_other_customer_number').show();
	}
    },
    
    updateOwnerFields: function(formName) {
	var  val = $("input[name='who']:checked", '#form_' + formName).val()
	Cart.changeOwnerFields(formName, val);
    },
    
    addItemsBySkuToCart: function(parameters) {
	var formData = jQuery.param(parameters);

	$.ajax({type: "POST",
	    url: "?action=cart.addItemsBySkuToCart", 
    	    dataType: "html",
	     success: function(data) {
		    CartAddItemsBySkuWidget.hide();
		    location.reload();
	    }})
    },

    multicartToolBarAddItemsBySkuToCart: function(parameters) {
	
	CartAddItemsBySkuWidget.hide();

	CartAddProductsToCartWidget.add(CartAddItemsBySkuWidget.event, CartAddItemsBySkuWidget.clickedElement, parameters);
    },


    addSingleItemBySku: function(formName) {
	var formData = $("#form_" + formName).serialize();
	$.ajax({type: "POST",
	    url: "?action=cart.addSingleItemBySkuToCart", 
    	    dataType: "html",
	    data: formData,
            success: function(data) {
		    location.reload();
	    }})
    },



    pageReload: function() {
	location.reload();
    },

    debug: function(msg) {
	alert(msg);
    },

    nop: function() {
	// no operation
    },

    singleQuantity: function(formName) {
	
	var quantity = $("input[name='quantity']","#form_" + formName).val();

	return quantity;
    },

    singleSku: function(formName) {
	
	var sku = $("input[name='sku']","#form_" + formName).val();

	return sku;
    },

    singleProduct: function(formName) {
	var quantity = Cart.singleQuantity(formName);
	var sku = Cart.singleSku(formName);
	var res = {};
	res[sku] = quantity;
	return res;
    },

    quickOrderAddRows: function() {
	epoint.ow.ajax_forms.Utils.reloadForm('quickorder_add_items_by_sku', "?action=cart.quickOrderAddRows");
    },

    updateTopPanel: function() {
	$.ajax({type: "POST",
   	        url: "?action=cart.updateTopPanel", 
		dataType: "json",
		
		success: function(data) {
		    for(var i in data) {
			var el = $('#' + i);
			if(el) { 
			    el.html(data[i]);
			}
		    }
		}});
    },

    removeItemViaQuickView: function(cartId, productId) {
	var params = {};
	params["cartId"] = cartId;
	params["productId"] = productId;
                
        $.ajax({type: "POST",
            url: "?action=cart.removeItem",
            dataType: "json",
            data: jQuery.param(params), 
	    success: function(data) {
		    //Cart.updateTopPanel();
		    location.reload();

		}});
    }, 

    skuQuantityChangeHandler: function(formName, fieldNumber) {
	return function() {
	    var val = $("input[name='sku_" + fieldNumber + "']","#form_" + formName).val();
	    if(val == "") {
		$("input[name='quantity_" + fieldNumber + "']","#form_" + formName).val("");
	    } else {
		$("input[name='quantity_" + fieldNumber + "']","#form_" + formName).val("1");
	    }
	}
    },

    addSkuQuantityEventHandlers: function(formName, numberOfFields) {
	for(i = 1; i <= numberOfFields; i++) {
	    $("input[name='sku_" + i + "']","#form_" + formName).change(Cart.skuQuantityChangeHandler(formName, i));
	}
    },

    productName: function(sku, callback) {
	var params = {};
	params["sku"] = sku;
                
        $.ajax({type: "POST",
            url: "?action=cart.productName",
            dataType: "json",
            data: jQuery.param(params), 
	    success: function(data) {
		    
		    if(data.exists) {
			callback(data.name); 
		    } else {
			// alert("NOT EXISTS " + sku);
		    }

		}});
    },


    addSingleItemFieldIsNotValidHandler: function()  {
	$("#add_single_item_by_sku_product_name").html("");
    },

    addSingleItemFieldFieldIsValidHandler: function()  {
	var field = "sku";
	
	var sku = $("input[name='" + field + "']","#form_cart_cart_add_single_item_by_sku").val();
	if(sku == "") {
	    $("#add_single_item_by_sku_product_name").html("");
	    return; 
	}

	Cart.productName(sku, function(name) {$("#add_single_item_by_sku_product_name").html(name);});

    },

    addSingleItemBySkuBindEvents: function() {
	$('#cart_cart_add_single_item_by_sku_sku').bind('fieldIsNotValid', Cart.addSingleItemFieldIsNotValidHandler);
	$('#cart_cart_add_single_item_by_sku_sku').bind('fieldIsValid', Cart.addSingleItemFieldFieldIsValidHandler);
    }

};

var CartAddItemsBySkuWidget = {
    callback: 0,
    buttonLabel: "",
    event: 0,
    clickedElement: 0,

    extraParameters: function() {
	return jQuery.param({label: CartAddItemsBySkuWidget.buttonLabel});
    },

    show: function(e, clickedElement, callback, buttonLabel) {
    	var $skuWidget = $(clickedElement).parents(".quick_order_container").exists() ? $('#cart_add_items_by_sku_widget_with_header') : $('#cart_add_items_by_sku_widget');
    	var $skuWidgetContent = $skuWidget.find('.drop_down_layer_content');
   	CartAddItemsBySkuWidget.event = e;
	CartAddItemsBySkuWidget.clickedElement = clickedElement;
    	CartAddItemsBySkuWidget.callback = callback;
    	CartAddItemsBySkuWidget.buttonLabel = buttonLabel;
	
  		var formData =  CartAddItemsBySkuWidget.extraParameters();
    if(!$skuWidget.hasClass('active_dropdown')) {
    	$.ajax({type: "POST",
          url: "?action=cart.addItemsBySkuWidget", 
          data: formData,
          dataType: "html",
          success: function(data) {
          $skuWidgetContent.html(data);
                             epoint.ow.DocumentReadyManager.runAllActions();
          if($(clickedElement).parents(".quick_order_container").exists()) {
            var $clickedElementParent = $(clickedElement).parents('.quick_order_container');
            fn.dropdown(e, clickedElement, "cart_add_items_by_sku_widget_with_header", $clickedElementParent, {definedWidth: $clickedElementParent.outerWidth()});
          } else {
            fn.dropdown(e, clickedElement, "cart_add_items_by_sku_widget", $(clickedElement).parent());
          }
      }})
    } else {
    	Dropdown.hideDropdown();
    }
			
    },

    hide: function() {
	$('#cart_add_items_by_sku_widget drop_down_layer_content').html("");
	$('#cart_add_items_by_sku_widget').hide();
	$('#cart_add_items_by_sku_widget').removeClass("active_dropdown");
    },
    
    isVisible : function() {
        return $('#cart_add_items_by_sku_widget').is(":visible");
    },


    submit: function() {
      var formData = $("#form_cart_cart_add_items_by_sku").serialize() + "&" + CartAddItemsBySkuWidget.extraParameters();
      $.ajax({type: "POST",
				      url: "?action=cart.addItemsBySkuProcess",
			        data: formData,
			    	  dataType: "json",
				      success: function(data) {
                var $skuWidget = $(CartAddItemsBySkuWidget.clickedElement).parents(".quick_order_container").exists() ? $('#cart_add_items_by_sku_widget_with_header') : $('#cart_add_items_by_sku_widget');
					      var $skuWidgetContent = $skuWidget.find('.drop_down_layer_content');
					      $skuWidgetContent.html(data.content);
                epoint.ow.DocumentReadyManager.runAllActions();
						    // alert(data.result);
		            if(data.result) {
			            CartAddItemsBySkuWidget.callback(data.quantities);
			            CartAddItemsBySkuWidget.callback = null;
		            }
      }});
    },
    
    registerSubmitWithValidationEventHandler : function(formName) {
    	var form = epoint.ow.Utils.getForm(formName);
    	
    	$(form).submit(function(e, action) {
    		var deferred = jQuery.Deferred();
    		
    		deferred.done(function () {
    			epoint.ow.forms2.Utils.runFormValidationSuccessActions(formName);
    			if (action != null) {
    				form.action = action;
    			}
    			CartAddItemsBySkuWidget.submit();
    		});
    		
    		deferred.fail(function () {
    			epoint.ow.forms2.Utils.runFormValidationFailedActions(formName);
    		});
    		
    		epoint.ow.forms2.Utils.validateForm(formName, deferred);
    		e.preventDefault();
    	});
    },

    getQuantities: function(formName) {
	var quantities = {};
	var i = 1;
	while(true) {

	    if(! $("input[name='sku_" + i + "']","#form_quickorder_add_items_by_sku").exists()) {
		break;
	    }

	    var sku = $("input[name='sku_" + i + "']","#form_quickorder_add_items_by_sku").val();
	    var quantity = $("input[name='quantity_" + i + "']","#form_quickorder_add_items_by_sku").val();


	    if(sku != "") {
		if(quantities[sku]) {
		    quantities[sku] = "" + (parseInt(quantities[sku]) + parseInt(quantity));
		} else {
		    quantities[sku] = quantity;
		}
	    }
	    i++;
	}
	
	return quantities;
    },
    
    fieldIsNotValidHandler: function(formName, row)  {
      $("#add_items_by_sku_product_name_" + row).fadeOut();;
    },

    fieldIsValidHandler: function(formName, row)  {
      var field = "sku_" + row;
      var sku = $("input[name='" + field + "']","#form_" + formName).val();
      var $row = $("#add_items_by_sku_product_name_" + row);
      var $imgStatus = $row.find('IMG');
      if(sku == "") {
        $row.fadeOut();
        $imgStatus.attr("alt", "").attr("title", "");
        return; 
      }
      Cart.productName(sku, function(name) {
        $row.fadeIn();
        $imgStatus.attr("alt", name).attr("title", name);
      });

    },

    bindEventsForRow: function(formName, field, row) {
	$('#' + formName + "_" + field).bind('fieldIsNotValid', function() {CartAddItemsBySkuWidget.fieldIsNotValidHandler(formName,row);});
	$('#' + formName + "_" + field).bind('fieldIsValid', function() {CartAddItemsBySkuWidget.fieldIsValidHandler(formName, row);});
    },

    bindEvents: function(formName) {

	var row  = 1;
	while(true) {
	    var field = "sku_" + row;
	    
	    if(! $("input[name='" + field + "']","#form_" + formName).exists()) {
		break;
	    }
	    CartAddItemsBySkuWidget.bindEventsForRow(formName, field, row);

	    row++;
	}
    },

    clearForm: function(cartId) {
	var i = 1;
	while(true) {

	    if(! $("input[name='sku_" + i + "']","#form_quickorder_add_items_by_sku").exists()) {
		break;
	    }

	    $("input[name='sku_" + i + "']","#form_quickorder_add_items_by_sku").val("");
	    $("input[name='quantity_" + i + "']","#form_quickorder_add_items_by_sku").val("");
	    
	    i++;
	}
    }


};

var CartChangeOrAddOwnerWidget = {
    
    callback: Cart.pageReload,

    show: function(callback, e, clickedElement) {
      CartChangeOrAddOwnerWidget.callback = callback;
      var $carOwnerContainer = $('#cart_change_or_add_owner_container');
      var $carOwnerContent = $carOwnerContainer.find(".popup_content");
      
      $.ajax({type: "POST",
              url: "?action=cart.changeOrAddOwnerWidget", 
              dataType: "html",
              success: function(data) {
	              if(clickedElement != null) {
	                var $cartWidget = $("#cart_change_or_add_owner_container");
	                var $cartWidgetContent = $cartWidget.find(".drop_down_layer_content");
                  
	                $cartWidgetContent.html(data);
	                fn.dropdown(e,clickedElement,"cart_change_or_add_owner_container",$(clickedElement).parents('.shopping_for'));
                  $("#cart_change_person_name").combobox();	                
	              } else {
	                $carOwnerContent.html(data);
	                fn.popup("cart_change_or_add_owner_container");
	                $("#cart_change_person_name").combobox();

	              }
		      epoint.ow.DocumentReadyManager.runAllActions();
	      }
	    });
    },

    hide: function() {
      fn.hidePopups();
    },

    changeOwner: function() {
      var formData = $("#form_cart_change_person").serialize();
      $.ajax({type: "POST",
              url: "?action=cart.changeOrAddOwnerChangeOwnerProcess",
              data: formData,
              dataType: "json",
              success: function(data) {
                var $cartWidget = $('#cart_change_or_add_owner_container');
                var $cartWidgetContent = null;
                if($cartWidget.find(".drop_down_layer").exists()) {
                  $cartWidgetContent = $cartWidget.find(".drop_down_layer_content");
                } else {
                  $cartWidgetContent = $cartWidget.find(".popup_content");
                }
                $cartWidgetContent.html(data.content);
		epoint.ow.DocumentReadyManager.runAllActions();
                if(data.result) {
                  CartChangeOrAddOwnerWidget.callback(data.cartId);
                } else {

                }
              }
          });
    },

    addOwner: function() {
		var formData = $("#form_cart_add_new_cart_for_widget").serialize();
		$.ajax({type: "POST",
		    url: "?action=cart.changeOrAddOwnerAddOwnerProcess",
	        data: formData,
	        dataType: "json",
		    success: function(data) {
	    		var $cartWidget = $('#cart_change_or_add_owner_container');
		    	var $cartWidgetContent = null;
		    	
		    	if($cartWidget.find(".drop_down_layer_content").exists()) {
		    		$cartWidgetContent = $cartWidget.find(".drop_down_layer_content");
		    	} else {
		    		$cartWidgetContent = $cartWidget.find(".popup_content");
		    	}
		    	
		    	$cartWidgetContent.html(data.content);
		    	epoint.ow.DocumentReadyManager.runAllActions();
		    	if(data.result) {
		    		CartChangeOrAddOwnerWidget.callback(data.cartId);
	    		} else {
	    			//alert("NOT_OK");
    			}
			}
		});
    }
};


var CartAddProductsToCartWidget = {
		
	add: function(e, clickedElement, products) {
		var $cartItems = $('#cart_add_products_to_cart_container');
		var $cartItemsContent =  $cartItems.find('.drop_down_layer_content');
		var obj = {};
	
		$.each(products, function(productId,quantity) {
			obj["quantity_" + productId] = quantity;
		});
	
		var formData = jQuery.param(obj);
	
		$.ajax({
			type: "POST",
			url: "?action=cart.addProductsToCartWidget", 
			dataType: "json",
			data: formData,
			success: function(data) {
			if(data.result == false) return;
			$cartItemsContent.html(data.content);
			
			if($(clickedElement).parents("#orderLayer").exists()) {
				var $clickedElementParent = $(clickedElement).parents('.quick_order_container');
				fn.dropdown(e,clickedElement,"cart_add_products_to_cart_container",$clickedElementParent,{definedWidth: $clickedElementParent.outerWidth(), hideTimeout: 3000});
			} else {
				fn.dropdown(e, clickedElement, "cart_add_products_to_cart_container");
			}
			Cart.updateTopPanel(); 
		}
		});
	},
		
	addWithFormValidation: function(e, clickedElement, products, formName) {
		var deferred = jQuery.Deferred();
		
		deferred.done(function () {
			epoint.ow.forms2.Utils.runFormValidationSuccessActions(formName);
			
			var $cartItems = $('#cart_add_products_to_cart_container');
			var $cartItemsContent =  $cartItems.find('.drop_down_layer_content');
			var obj = {};

			$.each(products, function(productId,quantity) {
				obj["quantity_" + productId] = quantity;
			});

			var formData = jQuery.param(obj);

			$.ajax({
				type: "POST",
				url: "?action=cart.addProductsToCartWidget", 
				dataType: "json",
				data: formData,
				success: function(data) {
				if(data.result == false) return;
				$cartItemsContent.html(data.content);
				
				if($(clickedElement).parents("#orderLayer").exists()) {
					var $clickedElementParent = $(clickedElement).parents('.quick_order_container');
					fn.dropdown(e,clickedElement,"cart_add_products_to_cart_container",$clickedElementParent,{definedWidth: $clickedElementParent.outerWidth(), hideTimeout: 3000});
				} else {
					//e = $.event.fix(e);
					//e.stopPropagation();
					fn.dropdown(e, clickedElement, "cart_add_products_to_cart_container", null, {hideTimeout: 3000});
				}
				Cart.updateTopPanel();
			}
			});
		});
		
		deferred.fail(function () {
			epoint.ow.forms2.Utils.runFormValidationFailedActions(formName);
		});
		
		epoint.ow.forms2.Utils.validateForm(formName, deferred);
		//e.preventDefault();
    }
};

var CartAddProductsToVisitorsCartWidget = {
	
	add: function(e, clickedElement, products, callback) {
		var $cartItems = $('#cart_add_products_to_cart_container');
		var $cartItemsContent =  $cartItems.find('.drop_down_layer_content');
		e = $.event.fix(e);

		var obj = {};
		$.each(products, function(productId,quantity) {
			obj["quantity_" + productId] = quantity;
		});

		var formData = jQuery.param(obj);

		$.ajax({
			type: "POST",
			url: "?action=cart.addItemsToVisitorsCartWidget", 
			dataType: "json",
			data: formData,
			success: function(data) {
				if(data.result == false) {
					return;
				}
				Cart.updateTopPanel();
				callback();
			}
        });
	}
};


var CartAddItemsToCartWidget = {
    
    callback: Cart.pageReload,

    products: {},

    clickedElement: 0,
    e: 0,

    display: function(content) {    	
    	var $cartItems = $('#cart_add_items_to_cart_container');
    	var $cartItemsContent =  $cartItems.find('.drop_down_layer_content');
    	
    	$cartItemsContent.html(content);
		
    	var clickedElement = CartAddItemsToCartWidget.clickedElement;
		  var e = CartAddItemsToCartWidget.e;
		  var $trigger = $(clickedElement);
		  var __posToEl = $trigger;
		
			if($trigger.parent().hasClass("shopping_options")) {
			    __posToEl = $(clickedElement).parent();
			    $cartItems.css("marginLeft", "20px")
			}
		
			if ($(clickedElement).parents(".quick_order_container").exists()) {
				fn.dropdown(e, clickedElement, "cart_add_items_to_cart_container", $(clickedElement).parent(), "bottom");
	            var $cart_container = $("#cart_add_items_to_cart_container");
	            $cart_container.css({top: "auto", bottom: "0", position: "fixed"});
			} else if($(clickedElement).parents(".popup").exists()) {
				fn.dropdown(e, clickedElement, "cart_add_items_to_cart_container");
			} else {
				fn.dropdown(e, clickedElement, "cart_add_items_to_cart_container", __posToEl);
			}
	  },				  


    show: function(e, clickedElement, callback, agreementNumber, customerNumber, products) {
    	CartAddItemsToCartWidget.callback = callback;
    	CartAddItemsToCartWidget.products = products;

    	CartAddItemsToCartWidget.e = $.event.fix(e);
    	CartAddItemsToCartWidget.clickedElement=clickedElement;
	
    	var object = { agreementNumber: agreementNumber,
    					customerNumber: customerNumber };

      	$.each(CartAddItemsToCartWidget.products, function(productId,quantity) {
			object["quantity_" + productId] = quantity;
      	});

    	var formData = jQuery.param(object);
    	$.ajax({
    		type: "POST",
		    url: "?action=cart.addItemsToCartWidget", 
	    	dataType: "json",
		    data: formData,
		    success: function(data) {

    		  if(data.result == false) {
                          return;
              }
			  CartAddItemsToCartWidget.display(data.content);
			  Cart.updateTopPanel();
		}})
	},

    submit: function(cartId) {

		var object = { cartId: cartId };
		$.each(CartAddItemsToCartWidget.products, function(productId,quantity) {
			object["quantity_" + productId] = quantity;
	    });
	
		var formData = jQuery.param(object);
		$.ajax({
			type: "POST",
		    url: "?action=cart.addItemsToCartProcess",
	        data: formData,
	    	dataType: "json",
		    success: function(data) {
			    CartAddItemsToCartWidget.display(data.content);
			    if(data.result) {
					CartAddItemsToCartWidget.callback(cartId);
					Cart.updateTopPanel();
			    } else {
					//alert("NOT_OK");
			    }
		    }});
	},

    addPerson: function(cartId) {
    	if(cartId != null) {
    		CartChangeOrAddOwnerWidget.hide();
    		CartAddItemsToCartWidget.submit(cartId);
    	} 
    },

    hide: function() {
		$('#cart_add_items_to_cart_container').hide();
		$('#cart_add_items_to_cart_container').html("");
    },

    showWhenFormIsValid: function(e, clickedElement, callback, agreementNumber, customerNumber, products, formName) {
		var deferred = jQuery.Deferred();
		
		deferred.done(function () {
			epoint.ow.forms2.Utils.runFormValidationSuccessActions(formName);
			CartAddItemsToCartWidget.show(e, clickedElement, callback, agreementNumber, customerNumber, products);
		});
		
		deferred.fail(function () {
			epoint.ow.forms2.Utils.runFormValidationFailedActions(formName);
		});
		
		epoint.ow.forms2.Utils.validateForm(formName, deferred);
		//e.preventDefault();
    }
	
};

/**
 * Changes value of given product quantity field.
 * Function is a part of QuantityFieldComponent.
 * 
 * @param id quantity field identifier
 * @param step amount by which field is increased or decreased
 */
function changeQuantity(id, step) {
    var el = $('#' + id);
    var val = el.val();
    if(val == "") val = 0;
    if(/\d+/.test(val)) {
    	val = parseInt(val) + step;
    	if (val > 9999) {
    	   val = 9999;
    	}
        if(val > 0) {
            el.val(val);
        }
    }
    epoint.ow.forms2.Utils.fieldValueChanged(document.getElementById(id));
}

function refreshFieldsDependantOnCheckbox(checkboxId, fieldIds) {
	var checked = $('#' + checkboxId).attr('checked');
	for (var i = 0; i < fieldIds.length; i++) {
		var field = $('#' + fieldIds[i])[0];
		epoint.ow.Utils.enableDisableField(field.form.name, field.name, checked);
		if (!checked) {
			field.value = "";
		}
	}
}

/**
 * Zmiana koloru aktywnego węzła w menu globalnym
 */

function changeNodeStyle(el, color) {
	$(el).find("A.menu_l1 SPAN").css({
		color: "#"+color
	});
}
function removeNodeStyle(el) {
  $(el).find("A.menu_l1 SPAN").css({
    color: ''
  });	
}

/**
 * Contact form with options.
 */

function registerShowHideContactFormAddressFunctions(formName) {
  epoint.ow.DocumentReadyManager.addApplicationAction(function() {
    var field = epoint.ow.Utils.getField(formName, 'contact_me');
    $(field).change(function () {showOrHideContactFormAddressFields(formName);});
    
    showOrHideContactFormAddressFields(formName);
  })
}


function showOrHideContactFormAddressFields(formName) {
  var field = epoint.ow.Utils.getField(formName, 'contact_me');
  if (field.checked) {
    $('#contact_form_with_options_address_details_div').show();
  } else {
    $('#contact_form_with_options_address_details_div').hide();
  }
}

var searchEnabled = false;
function searchAll(fieldId) {
    if (searchEnabled) window.location = '?action=search.search&phrase=' + encodeURIComponent($("#" + fieldId).attr("value"));    
}

// handlers for events related to shopping list widget
epoint.ow.DocumentReadyManager.addApplicationAction(AddToShoppingListWidget.eventHandlers, 100, false);

/**
 * ON-redy functions
 */

jQuery(document).ready(function() {

	$(".disabled_link").click(function() { return false; });
	
	$('.initialHide').hide().removeClass('initialHide');
	
	$('DIV.popup.autoload').each(function() { fn.popup($(this).attr("id")); })
	
	// Otwieranie stron w nowym oknie
	$("a").live("click", function() {
	  if($(this).hasClass("new_window")) {
	    $(this).attr("target", "_blank");
	  }
	});
	
	// zamykanie ad cart layer
  $("#cart_cart_ad_layer_do_not_show_label").each(function() {
  	var $doNotShowLabel = $(this);
  	var $doNotShowField = $("#cart_cart_ad_layer_do_not_show");
  	var $doNotShowfFakeField = $("#fake_cart_cart_ad_layer_do_not_show");
  	
  	$doNotShowLabel.removeAttr('for');
  	// click fake field
  	$doNotShowfFakeField.click(function() {
  		$doNotShowField.toggleCheckbox();
  	});
  	// click label
  	$doNotShowLabel.click(function() {
  		$([$doNotShowfFakeField, $doNotShowField]).toggleCheckbox();
  	});
  });
	

	// Homepage scripts
  $('#homepageContentTeasers .content_carousel').jCarouselLite();
	
	$('.content_carousel').imagesLoaded(function() {
		$('.content_carousel LI').synchronizeHeights();
	})
	
	// Global menu
	var global_menu_timeout = null;
	var global_menu_hide_timeout = null;
	var triggerGlobalMenu = null;
	var isFirstTriggered = true;
	$("#menu_global_menu").mouseleave(function() {
		triggerGlobalMenu = false;
		isFirstTriggered = true;
	});
	$("#menu_global_menu LI.menu_l1")
		.mouseenter(function() {
			var $this = $(this);
			
			clearTimeout(global_menu_hide_timeout);
			Dropdown.hideDropdown();
			function __showGlobalMenu() {
				triggerGlobalMenu = true;
        var $submenu = $this.find("DIV.menu_l2");
        if($submenu.exists()) {
        	if(isFirstTriggered) {
        		$submenu.slideDown();
        		isFirstTriggered = false;
        	} else {
        		$submenu.show();
        	}
          var $activeSubmenu = $('#menu_global_menu .selected_submenu');
          var $activeMenu = $('#menu_global_menu .selected');
          
          $submenu.addClass("selected_submenu");

          $this.addClass("selected");
          $submenu.find("LI.menu_l2, .submenu_my_points_container, .dashboard_content").synchronizeHeights();
          $activeSubmenu.removeClass("selected_submenu").hide();
          $activeMenu.removeClass("selected");
        } else {
          $('#menu_global_menu .selected_submenu').hide().removeClass("selected_submenu");
          $('#menu_global_menu .selected').removeClass("selected");
        }
			}
			
	   if(!triggerGlobalMenu) {
	   	global_menu_timeout = setTimeout(function() {
        __showGlobalMenu();
      }, 250);
	   } else {
	   	__showGlobalMenu();
	   }
	  })
		.mouseleave(function() {
			clearTimeout(global_menu_timeout);
      var $this = $(this);
      var $submenu = $this.find("DIV.menu_l2");
      
			global_menu_hide_timeout = setTimeout(function() {
        $submenu.removeClass("selected_submenu");
        $submenu.hide();
        $this.removeClass("selected");
      }, 100);
	});

  // My account menu
  var global_account_menu_timeout = null;
  var global_account_menu_lag = null;
  $("#open_myAccountMenuLayer").mouseenter(function(e) {
  	clearTimeout(global_account_menu_lag);
  	var $this = $(this);
  	global_account_menu_lag = setTimeout(function() {
  		fn.dropdown(e, $this, 'myAccountMenuLayer');
  	}, 100);
  }).mouseleave(function() {
  	clearTimeout(global_account_menu_lag);
  	global_account_menu_timeout = setTimeout(function() { Dropdown.hideDropdown(); }, 300);
  });
  $("#myAccountMenuLayer").mouseenter(function() {
  	clearTimeout(global_account_menu_timeout);
  }).mouseleave(function() {
  	Dropdown.hideDropdown();
  });
  
  // Search panel
  var liveSearchRequest = null;
  $("#searchField").keyup(function(event) {
  	var $this = $(this);
  	
  	// unbind events
  	$('#searchPanelButton').unbind('click.searchPanelClick');
  	$('html').unbind('click.searchPanelHide');
  	clearTimeout(liveSearchRequest);
  	
  	// bind events
  	$('html').bind("click.searchPanelHide",function() { $("#live_search_box").hide(); });
    
    // common func
    function __bindSearchButton() {
      $("#searchPanelButton").bind('click.searchPanelClick', function(e) {
         e.stopPropagation();
         searchAll("searchField");
      });    	
    }
    
    // requests
    liveSearchRequest = setTimeout(function() {
    	$.ajax({type: "GET",
        url: "?action=search.liveSearch&phrase=" + encodeURIComponent($("#searchField").attr("value")),
        dataType: "html", 
        success: function(content) {
            if(content != "") {
              $("#live_search_box").show().html(content);
              // Bind events
              __bindSearchButton();
            } else {
              $("#live_search_box").hide();
              // Bind events
              __bindSearchButton();
            }
        }
      })
    }, 300)
  }).focus(function() {
    $(this).val("");
    searchEnabled = true;
    $(this).bind('keypress.runSearch', function(e) {
    	if(e.keyCode == 13) {
    		searchAll("searchField");
    	}
    }).addClass('active_field');
  }).blur(function() {
    $(this).unbind('keypress.runSearch').removeClass('active_field');
  });
  
  $("#searchFieldNotFound").focus(function() {
  	$(this).bind('keypress.searchFieldNotFound', function(e) {
      if(e.keyCode == 13) {
        clearTimeout(liveSearchRequest);
        searchAll("searchFieldNotFound");
      }
    });
  }).blur(function() {
    $(this).unbind('keypress.searchFieldNotFound');
  });
  
  // Context help
  $("#contextHelpIcon").click(function() {
  	fn.popup("contextHelpMsg");
  });
  
  // Hover - unselected cart
  $("DIV.unselected_cart").mouseenter(function() {
  	 $(this).addClass("box_selected");
  }).mouseleave(function() {
  	$(this).removeClass("box_selected");
  });
  
  // fix inline background in IE
	if (jQuery.browser.msie && jQuery.browser.version <= 7) {
	    function getLastNotEmptyTextNode(node) {
	        var $contents = node.contents();
	        var $child = $contents.last();
	        while($child.exists()) {
	            if ($child.get(0).nodeType == 3) {
	                return $child;
	            }
	             else if ($child.get(0).nodeType == 1) {
	              var $return = getLastNotEmptyTextNode($child);
	              if ($return != null) {
	                  return $return;   
	              }
	            }
	            $child = $child.prev();
	        }
	        return null;
	    }
	    
	  $(".link_dropdown, .link_style_1, .link_style_2, #welcome_message a.link_arrow").each(function(){
	      var $this = $(this);
	      var this_background_image = $this.css("background-image").replace(/^\s*url\(/, "").replace(/\).*$/, "").replace(/'|"/g,"");
	      if(this_background_image != "none") {
	      	var background_replacer = " <img src='"+ this_background_image +"' alt='' class='background_replacer'>"; 
          var lastNotEmptyTextNode = getLastNotEmptyTextNode($this);
          lastNotEmptyTextNode.get(0).data = lastNotEmptyTextNode.text().replace(/\s+$/, "");
          var text = lastNotEmptyTextNode.text();
          var fragments = text.split(/\s+/);
          var last = fragments[fragments.length-1];
          $this.css("background","none");
          lastNotEmptyTextNode.get(0).data = text.substring(0, text.length-last.length);
          lastNotEmptyTextNode.after("<span class='nowrap'>"+last+background_replacer+"</span>");
	      }
	  });
	}
	
	// toggle mini cart quick view
	var global_mini_cart_quick_view_timeout = null;
	var global_mini_cart_quick_view_lag = null;
  $("#showMiniCartQuickView").mouseenter(function(e) {
    clearTimeout(global_mini_cart_quick_view_lag);
    var $this = $(this);
    global_mini_cart_quick_view_lag = setTimeout(function(e) {
	    var $dropdownLayer = $("#miniCartQuickView");
	    fn.dropdown(e, $this,'miniCartQuickView',null, {definedWidth: function() { 
		    return $dropdownLayer.width() < $this.width() ? $this.width()-2 : null;
	    }});
    }, 100);
  }).mouseleave(function() {
  	clearTimeout(global_mini_cart_quick_view_lag);
    global_mini_cart_quick_view_timeout = setTimeout(function() { Dropdown.hideDropdown(); }, 300);
  });
  $("#miniCartQuickView").mouseenter(function() {
    clearTimeout(global_mini_cart_quick_view_timeout);
  }).mouseleave(function() { Dropdown.hideDropdown(); });
  
  
  // prevent click when autocomplete layer is opened
  fn.bindAutocompleteEvents = function() {
    var isVisibleAutocomplete = false;
    $('.ui-autocomplete-input').each(function() {
      var $this = $(this);
      
      var __onchangeFunction = this.onchange;
      this.onchange = null;

      $this.change(function(e) {
        if(__onchangeFunction != null && !isVisibleAutocomplete) {
          __onchangeFunction.call(this, e);
        }
      });        
     
      $this.bind('autocompleteopen', function(e,ui) {
        isVisibleAutocomplete = true;
        globalEnv.BLOCK_HIDING_LAYERS = true;
      });

      $this.bind("autocompletechange", function(e, ui) {
        if(__onchangeFunction != null) {
          __onchangeFunction.call(this, e);
        }
      });
      
      $this.bind( "autocompleteclose", function(e, ui) {
    	  isVisibleAutocomplete = false;
        if(e.keyCode == 13) {
          $this.change();
        }
        $this.trigger('autocompletechange');
        $this.parents('TR').first().next('TR').find('.ui-autocomplete-input').focus();
      });
    });
  }
  
  epoint.ow.DocumentReadyManager.addApplicationAction(function() {

      fn.bindAutocompleteEvents();
  
  }, 10, false);

  // Quick view product layer
  $('.quick_view_wrapper').live("mouseenter", function(e) {
  	var $this = $(this);
    var $qv = $this.find(".quick_view");
    var qv_pos_top = ($this.height()/2) - ($qv.height()/2);
    var qv_pos_left =  ($this.width()/2) - ($qv.width()/2);
    $qv.css({ 
      marginTop: qv_pos_top,
      marginLeft: qv_pos_left});
    $qv.stop(true, true).fadeIn();
  }).live("mouseleave", function() {
  	$(this).find(".quick_view").stop(true, true).fadeOut();
  });
  
  // fix breadcrumb
  $("#productNavigator").each(function() {
  	var $breadcrumb = $(".breadcrumb");
  	var $breadcrumbWidth = $breadcrumb.width();
  	$breadcrumb.width($breadcrumbWidth - $(this).outerWidth(true));
  });
  
  // synchronize partner stores boxes
  $('.ps_descriptions').synchronizeHeights();
  
  // 
  $('#incomingOrdersFilterPanel .v_fields_option .field_option, #ordersFilterPanel .v_fields_option .field_option').click(function() {
  	var $datepicker = $('#incomingOrdersFilterPanel .datepicker_wrapper, #ordersFilterPanel .datepicker_wrapper');
  	$datepicker.hide()
  	if($(this).has('[id*="GIVEN"]').exists()) {
  		$datepicker.show();
  	}
  })
  $("#incoming-orders-filter_dateRangeType_GIVEN").each(function() {
  	var $datepicker = $('#incomingOrdersFilterPanel .datepicker_wrapper');
    if($(this).is(":checked")) {
      $datepicker.show();
    }
  });
  $("#distributor-orders-filter_dateRangeType_GIVEN").each(function() {
    var $datepicker = $('#ordersFilterPanel .datepicker_wrapper');
    if($(this).is(":checked")) {
    	$datepicker.show();
    }
  });
  
  // jQuery UI combobox
  (function( $ ) {
    $.widget( "ui.combobox", {
      _create: function() {
        var self = this,
          select = this.element.hide(),
          selected = select.children( ":selected" ),
          value = selected.val() ? selected.text() : "";
        var input = this.input = $( "<input>" )
          .insertAfter( select )
          .val( value )
          .autocomplete({
            delay: 0,
            minLength: 0,
            source: function( request, response ) {
              var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
              response( select.children( "option" ).map(function() {
                var text = $( this ).text();
                if ( this.value && ( !request.term || matcher.test(text) ) )
                  return {
                    label: text.replace(
                      new RegExp(
                        "(?![^&;]+;)(?!<[^<>]*)(" +
                        $.ui.autocomplete.escapeRegex(request.term) +
                        ")(?![^<>]*>)(?![^&;]+;)", "gi"
                      ), "<strong>$1</strong>" ),
                    value: text,
                    option: this
                  };
              }) );
            },
            select: function( event, ui ) {
              ui.item.option.selected = true;
              self._trigger( "selected", event, {
                item: ui.item.option
              });
            },
            change: function( event, ui ) {
              if ( !ui.item ) {
                var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "$", "i" ),
                  valid = false;
                select.children( "option" ).each(function() {
                  if ( $( this ).text().match( matcher ) ) {
                    this.selected = valid = true;
                    return false;
                  }
                });
                if ( !valid ) {
                  // remove invalid value, as it didn't match anything
                  $( this ).val( "" );
                  select.val( "" );
                  input.data( "autocomplete" ).term = "";
                  return false;
                }
              }
            }
          })
          .addClass( "ui-widget ui-widget-content ui-corner-left" );

        input.data( "autocomplete" )._renderItem = function( ul, item ) {
          return $( "<li></li>" )
            .data( "item.autocomplete", item )
            .append( "<a>" + item.label + "</a>" )
            .appendTo( ul );
        };

        this.button = $( "<button type='button'>&nbsp;</button>" )
          .attr( "tabIndex", -1 )
          .attr( "title", "Show All Items" )
          .insertAfter( input )
          .button({
            icons: {
              primary: "ui-icon-triangle-1-s"
            },
            text: false
          })
          .removeClass( "ui-corner-all" )
          .addClass( "ui-corner-right ui-button-icon" )
          .click(function() {
            // close if already visible
            if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
              input.autocomplete( "close" );
              return;
            }

            // work around a bug (likely same cause as #5265)
            $( this ).blur();

            // pass empty string as value to search for, displaying all results
            input.autocomplete( "search", "" );
            input.focus();
          });
      },

      destroy: function() {
        this.input.remove();
        this.button.remove();
        this.element.show();
        $.Widget.prototype.destroy.call( this );
      }
    });
  })( jQuery );
  
  $("#cart_go_to_cart_for_name").combobox();
  
  // change tabindex in login layer
  $("#login_country_code").each(function() {
  	$("#login_login").attr('tabindex', 1);
  	$("#login_password").attr('tabindex', 2);
  	$(this).attr("tabindex", 3);
  	$(this).parents('#form_login').find('.button').attr("tabindex", 4);
  	
  });
  
// end onload scripts
});

function preSubmitLoginForm(formName) {
    if (document.getElementById(formName+'_login') != undefined) {
        document.getElementById(formName+'_login').value = document.getElementById(formName+'_login').value.toLowerCase();
    }
}

jsPackage("epoint.aol").Utils = {
    registerFormWithLoginSubmitEventHandler : function (formName) {
        var form = epoint.ow.Utils.getForm(formName);
        
        $(form).submit(function(e, action) {
            var deferred = jQuery.Deferred();
        
            deferred.done(function () {
                epoint.ow.forms2.Utils.runFormValidationSuccessActions(formName);
                if (action != null) {
                    form.action = action;
                }
                form.submit();
            });
            
            deferred.fail(function () {
                epoint.ow.forms2.Utils.runFormValidationFailedActions(formName);
            });
        
            preSubmitLoginForm(formName);
            epoint.ow.forms2.Utils.validateForm(formName, deferred);
            e.preventDefault();
        });
    }
};

/**
 * Refejstruje handler zdarzenia <code>submit</code>.
 * Różni się on od domyślnego, że wykonuje przed submitem dodakową funkcję preSubmitForm()
 * 
 * @param formName nazwa formularza
 */
function registerFormWithLoginSubmitEventHandler (formName) {
}


function registerDoubleAboPictureHoverEvents(smallPictureId, bigPictureId) {
	$('#' + smallPictureId).mouseenter(function (e) {
		$(this).parent().addClass("open_abo_big_picture");
		$('#' + bigPictureId).show();
	});
	$('#' + bigPictureId).mouseleave(function (e) {
		$(this).parents(".open_abo_big_picture").removeClass("open_abo_big_picture");
		$('#' + bigPictureId).hide();
	});
}

function synchronizeUserLoginLayerBox() {
	$('#userLoginLayer .box .box_inner5').synchronizeHeights();
}

function showProductQuickViewLayer(url) {
  var $catalogProductViewLayer = $('#catalog_product_quick_view');
  var $catalogProductViewContent = $catalogProductViewLayer.find(".popup_content");

  $.ajax({
      type: "GET",
      url: url, 
      dataType: "html",
      success: function(data) {
          $catalogProductViewContent.html(data);
          fn.popup("catalog_product_quick_view");
  }});
}
