var shopAction = {
  submit : function (id) {
    $('#'+id).submit();
  },

  checkoutSubmitFormOnEnter: function(id, event) {
    if (event.keyCode == 13) {
      $('#please_wait').click();
      shopAction.submit(id);
      return false;
    } else {
      return true;
    }
  },
  
  submitFormOnEnter: function(id, event) {
    if (event.keyCode == 13) {
      shopAction.submit(id);
      return false;
    } else {
      return true;
    }
  },

  submitAjax : function(formId, targetId, updateHeader) {
    var options = null;

    if (updateHeader) {
      options = {
          target:        '#'+targetId,
          cache:         false,
          success:       this.updateHeader
//          success:       this.debug
      };
    } else {
      options = {
          cache:         false,
          target:        '#'+targetId
//          success:       this.debug
      };
    }

    $('#'+formId).ajaxSubmit(options);
  },
  
  simpleAjaxRequest : function(url, targetId) {
    $.ajax({
      cache: false,
      url: url,
      success: function(transport){
        $("#"+targetId).html(transport);
      }
      });
  },

  submitAjaxWithInitStarRater : function(formId, targetId, updateHeader) {
    var options = {
        cache:         false,
        target:        '#'+targetId,
        success:      function(data) {
          var selected = $('#points :selected').val();
          var text = $('#points :selected').html();
          global.initStarRater('#article_detail_third_row div.star_rater');
          li_elem = $('#article_detail_third_row div.star_rater li');
          el_value = $('#article_detail_third_row div.star_rater div');
          li_elem.filter(':lt('+(selected)+')').addClass('active');
          el_value.text( text );



        }
    };

  $('#'+formId).ajaxSubmit(options);
  },

  submitAjaxWithValidation : function(formId, targetId, updateHeader) {
    var errors = false;
    $("#"+formId+" :input").each(function() {
      var element = $(this);
      if (element.val() == '') {
        errors = true;
        element.attr("class", "error");
        $("label[for='"+element.attr('id')+"']").attr("class", "error");
      } else {
        element.removeClass("error");
        $("label[for='"+element.attr('id')+"']").removeClass("error");
      };
    });

    if(!errors) {
      shopAction.submitAjax(formId, targetId, updateHeader);
    }
  },

  submitOnlyValid : function(id) {
    window.location = $('#'+id).attr("action") + "?" + $("#"+id+" :input[value][value!='.']").serialize();
  },

  updateHeader : function(responseText, statusText) {
    if (statusText == 'success') {
      $.ajax({
        cache: false,
        url: shop.absoluteBaseUrl+"updateHeader",
        success: function(transport){
          $("#session").html(transport);
        }
        });
    }
  },

  debug : function(responseText, statusText) {
    alert('responseText '+responseText);
    alert('statusText '+responseText);
  },

  rateReview : function(reviewId, helpfull, productId){
    $.ajax({
      url: shop.baseUrl+"productdetail/rateReview",
      data: "reviewId="+reviewId+"&helpfull="+helpfull+"&productId="+productId,
      success: function(data) {
        $('#product_review_id_'+reviewId+'_div').html(data);
      }
    });
  },

  addAjax : function(url) {
    $.ajax({
      cache: false,
      url: url,
      success: this.updateHeader
      });
  },
  openGlossary : function(id, url) {
    window.location.href=url + "/" + id;
  },

  changeFilter : function (preis) {
    var query = {};
    var search = window.location.search.replace(/^\?/, "").replace(/\+/g, "%20");

    if (search != "") {
      var t1 = search.split("&");
      for (var i=0;i<t1.length;i++) {
        var kv = t1[i].split("=", 2);
        query[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]);
      }
    }
    if (this.activeValue == null)
      delete query[this.activeFilter];
    else
      query[this.activeFilter] = this.activeValue;
    query["filter.preis"] = preis;
    if (($('#Filter_Preis').size() == 0) || (window.location.pathname.indexOf('beratung/finder') > -1)) {
      window.location.search = $.param(query);
    } else {
      var fc = $('#Filter_Preis').children('input[name=fc]').val();
      var c = $('#Filter_Preis').children('input[name=c]').val();
      if (window.location.port != "")
        window.location.href = '/pas/shop/static/beratung/finder?fc=' + fc +'&c='+ c + '&' + $.param(query);
      else
        window.location.href = '/static/beratung/finder?fc=' + fc +'&c='+ c + '&' + $.param(query);
    }
    
  },
updatePreisFilter : function (preis) {
    var range = preis.split('-');
    $('div.slider').each(function() {
      var el = $(this);
    var el_option_handle = el.find('input[name="handle"]');
    var el_option_handle2 = el.find('input[name="handle2"]');
    el_option_handle.val(range[0].split(' ')[0]);
    el_option_handle2.val(range[1].split(' ')[0]);
    });
  },
  ajaxRequestUpdateCartForm : function(itemId, index, view) {
    $.post(shop.absoluteBaseUrl+"getItemFromCartForChange", { itemId: itemId, index:index, view:view},
        function(data){
          $("#getItemFromCartForChange").html(data);
        });

  },

  addVoucher : function() {
    var code = $('#payment_method_coupon_key').val();
    if (code != null && code != '') {
      $.post(shop.absoluteBaseUrl+"addVoucher", { code: code },
          function(data){
    	  	
    	  	var vc = $("#voucherCode");
    	  	vc.empty();
    	  	
    	  	if (data.error) {
    	  		$("<div class\"error\"></div>").text(data.errorMessage).appendTo(vc);
    	       	$('#payment_method_coupon_key').val("");
    	  	} else {
    	  		$("<span></span>").html(data.infoMessage + "&nbsp;&nbsp;").appendTo(vc);
    	  		$("<a href=\"javascript:void(0)\" onclick=\"shopAction.removeVoucher('" + code + "');\"></a>").text(data.removeMessage).appendTo(vc);
    	  		$('#enterVoucher').hide();
    	  	}
          }, "json");
    }
    $('#payment_method_coupon').val("");
  },
  
  putVoucherIntoBasket : function(code) {
    if (code != null) {
      $.ajax({
        url: shop.absoluteBaseUrl+"addAffiliateVoucher?code="+code,
        success: function () {
          $('#session_flag').show();
        }
      });
    }
  },

  removeVoucher : function(code) {
    if (code != null) {
      $.post(shop.absoluteBaseUrl+"removeVoucher", { code: code },
          function(data){
            $("#voucherCode").html(data);
            $('#enterVoucher').show();
          });
    }
  },
  
  handleVoucher : function() {
    if (!$("#payment_method_coupon").attr("checked")) {      
      jQuery.each($("#voucher_code", window.parent.document), function() {
        shopAction.removeVoucher($(this).html());
      });
    }
  },
  
  addAffiliateVoucher : function(name, affiliateID) {
    $.post(shop.absoluteBaseUrl+"addAffiliateVoucher", { code: affiliateID },
        function(data){
          $("#"+name+"_response").html(data);
        });
  },

  processCheckoutPaymentBoxes : function() {
    $('input[name=payment_break]').attr('checked', false);
  },

  processRadioPaymentBoxes : function(checkbox, radiobox) {
    $('input[name=payment_break]').not(checkbox).attr('checked', false);
    $('input[name=payment_method]').attr('checked', false);
    $('#'+radiobox).attr('checked', true);
  },

  openPopUp : function(url) {
      var MyWindow;
       MyWindow = open(
         url,
         "confirmation",
         "width=800, height=700, resizable=yes, scrollbars=yes, directories=no, menubar=no, location=no");
       MyWindow.focus();
  },

  openPopUpEx : function(url, trackingAction) {
    shopAction.openPopUp(url);
    ET_Event.eventStart(escape('Service-Funktionen'), escape($('#trackingObject').attr('ref')), escape(trackingAction));
  },

  refreshIFrameById : function(iframeId) {
    jQuery.each($("#"+iframeId, window.parent.document), function() {
      $(this).attr({
        src: $(this).attr("src")
      });
    });
    return false;
  },

  refreshIFrameByJQueryObject : function(iFrame) {
      iFrame.attr({
        src: iFrame.attr("src")
      });
    return false;
  },

  closeOverlay : function(id) {
    var obj = $('#'+id);
    $(obj).find("a.overlay_close").click();
  },

  showBundles : function(productId) {
    var url = shop.absoluteBaseUrl + "displayBundles?productId=" + productId;
    $.get(url, function(text) {
      $('#carouselBody').html(text);
      global.initCarousel('div.carousel div.js');
    });
  },

  show : function(id) {
    $("#"+id).removeClass("hidden");
  },

  hide : function(id) {
    $("#"+id).addClass("hidden");
  },

  showOverlay : function(id) {
    $('#'+id).click();
  },

  refreshPackageShop : function() {
    $("#iframeShop").attr("src", "http:"==document.location.protocol ? shop.packageShopUrlHttp : shop.packageShopUrlHttps);
    return false;
  },

  showContactFormular : function (targetId) {
    $.get(shop.absoluteBaseUrl+"mail/contact", function (text) {
      $('#'+targetId).html(text);
    });
    return false;
  },
  
  showContactLightFormular : function (targetId) {
    $.get(shop.absoluteBaseUrl+"mail/contact/light", function (text) {
      $('#'+targetId).html(text);
    });
    return false;
  },

  submitContactForm : function (formId, targetId) {
    this.submitAjax(formId, targetId, false);
    return false;
  },

  initCategoryStarterTeaser : function() {
    var usedIds = "";
    $('#categoryStarterTeaser').children().each(function() {
      var found = false;
      $(this).find("div").each(function() {
        if (!found && usedIds.indexOf($(this).attr('id')) < 0) {
          usedIds += ' '+$(this).attr('id');
          found = true;
          $(this).show();
        } else {
          $(this).remove();
        }
      });
    });
  },

  submitCallback : function () {
    $('#error_box').hide();
    $('#tel0').removeClass('error');
    $('#tel1').removeClass('error');
    $('#email').removeClass('error');
    $('#callbackTime').css('border-color','#336699');
    var form = document.callbackForm;
    if (form.callbackDate.value == "") {
      $('#error_box').html(unescape("Bitte geben Sie ein R%FCckrufdatum an"));
      $('#error_box').show();
      return false;
    } else if ($('#callbackDate').hasClass('error')) {
      $('#error_box').html(unescape("Das R%FCckrufdatum darf kein Sonn- oder Feiertag sein"));
      $('#error_box').show();
      return false;
    } if (form.callbackTime.value == "") {
      $('#error_box').html(unescape("Bitte geben Sie eine R%FCckrufzeit an"));
      $('#error_box').show();
      $('#callbackTime').css('border-color','#DB1D1D');
      return false;
    } else if (form.tel0.value == "" || form.tel0.value.match(/\D/g) || !form.tel0.value.match(/^0/g) || form.tel1.value == "" || form.tel1.value.match(/\D/g)) {
      $('#error_box').html(unescape("Bitte geben Sie eine g%FCltige Telefonnummer an"));
      $('#error_box').show();
      $('#tel0').addClass('error');
      $('#tel1').addClass('error');
      return false;
    } else if ((form.tel0.value.match(/^00/g)) && (!form.tel0.value.match(/^0049/g))) {
      $('#error_box').html("Bitte geben Sie eine nationale Vorwahl an");
      $('#error_box').show();
      $('#tel0').addClass('error');
      return false;
    } else if ((form.tel0.value.match(/^(010|011|012|013|014|018|019|0310|0311|0800|00800|0900|0901|0902|0903|0904|0905)/g)) || (form.tel1.value.match(/^(110|112|116|118)/g)) || ((form.tel0.value == "06131") && (form.tel1.value == "19240")))  {
      $('#error_box').html("Bitte geben Sie keine Sonderrufnummer an");
      $('#error_box').show();
      $('#tel0').addClass('error');
      $('#tel1').addClass('error');
      return false;
    } else if (form.email.value == "") {
      $('#error_box').html(unescape("Bitte geben Sie eine E-Mail-Adresse an"));
      $('#error_box').show();
      $('#email').addClass('error');
      return false;
    } else if ((form.email.value != "") && (!EMail(form.email.value))) {
      $('#error_box').html(unescape("Ihre eingegebene E-Mail-Adresse ist ung%FCltig"));
      $('#error_box').show();
      $('#email').addClass('error');
      return false;
    }
    $('#callback_content_text').hide();
    $('#callback_loader').show();
    this.submitAjax('callbackForm', 'callback_content');
    return false;
  },
  
  hasCookiesEnabled : function() {
    $.cookie("cookiecheck", "done", { path: '/' });
    cookieValue = $.cookie("cookiecheck");
    $.cookie("cookiecheck", null, { path: '/' });
    return cookieValue == "done";
  },
  
  getIdUrl: function(formId) {
    var form = $('#'+formId);
    window.location.href=form.attr("action")+"/"+form.children('select[name=id]').val();
  }

};

function EMail(s)
{
  var a = false;
  var res = false;
  if(typeof(RegExp) == 'function')
  {
    var b = new RegExp('abc');
    if(b.test('abc') == true){a = true;}
  }

  if(a == true)
  {
    reg = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)'+
      '(\\@)([a-zA-Z0-9\\-\\.]+)'+
          '(\\.)([a-zA-Z]{2,4})$');
    res = (reg.test(s));
  }
  else
  {
    res = (s.search('@') >= 1 &&
      s.lastIndexOf('.') > s.search('@') &&
      s.lastIndexOf('.') >= s.length-5);
  }
  return(res);
}

var globalValidator;
