/*!
 * rexbo GmbH
 * http://www.rexbo.de
 *
 * Copyright 2012, Gerd Weitenberg
 */


/**
* Config
*/

var ps = new Object();

ps["template"] = "ts24";
ps["server_origin"] = true;


/**
* Init
*/

$(function() {

  if (document.location.hostname != fnGetDomain($('#logo').attr('href'))) {
    ps.server_origin = false;
  }

  $("button, input:button, input:submit, a.button").button();

  if ($("#search_quickie").val() == '') {
    $("#search_quickie").defaultvalue($("#search_quickie").attr('title'));
  }

  vehicleBoard();
  cartBoard();

  $('a.facebox').click(function() {
    var page = $(this).attr('href');
    var dialog = $("<div id='shop_dialog'></div>").insertAfter('#footer');
    $(dialog).dialog({
      resizable: false,
      modal: true,
      width: 750,
      height: 450,
      title: $(this).attr('title'),
      open: function(event, ui) {
       $(dialog).load(page);
      },
      close: function() {
        $(dialog).remove();
      }
    });
    return false;
  });

  $('a.list_slider').click(function() {
    $("ul#" + $(this).attr('rel')).slideToggle('fast', function ($list_slider) {
	    if ($(this).css('display')=='block') {
        $(this).next().children(':first').hide();
        $(this).next().children(':last').show();
	    } else {
	      $(this).next().children(':first').show();
        $(this).next().children(':last').hide();
	    }
    });
    return false;
  });

  if ($('#quick_vehicle').length > 0) {

    $("#vehicle_maker").selectmenu({menuWidth: 207});
    $("#vehicle_model").selectmenu({menuWidth: 400, format: selectVehicleFormatting});
    $("#vehicle_type").selectmenu({menuWidth: 400, format: selectVehicleFormatting});

    $("#vehicle_maker").change(function(){
      $("#vehicle_model").selectmenu('disable');
      $("#vehicle_type").selectmenu('disable');

      $.getJSON('/' + $(this).val(), {}, function(j){
        var options = '<option value="">' + $('#vehicle_model option:first').html() + '<\/option>';
        for (var i in j) {
          options += '<optgroup label="' + i + '">';
          for (var m = 0; m < j[i].length; m++) {
            options += '<option value="' + j[i][m].value + '">' + j[i][m].name + '<\/option>';
          }
          options += '</optgroup>';
        }

        $("#vehicle_model").html(options).selectmenu().selectmenu('enable');
      })
    });

    $("#vehicle_model").change(function(){
      $("#vehicle_type").selectmenu('disable');

      $.getJSON('/'+ $("select#vehicle_maker").val() + '/' + $(this).val(), {}, function(j){
        var options = '<option value="">' + $('#vehicle_type option:first').html() + '<\/option>';
        for (var i = 0; i < j.length; i++) {
          options += '<option value="' + j[i].value + '">' + j[i].name + '<\/option>';
        }
        $("#vehicle_type").html(options).selectmenu().selectmenu('enable');
      })
    });

    $("#vehicle_type").change(function(){
      self.location.href="/" + $("#vehicle_maker").val() + '/' + $("#vehicle_model").val() + '/' + $("#vehicle_type").val();
    });

  }
/*
  if ($('#search_vehicle').length > 0) {

    $("#vehicle_maker").selectmenu({menuWidth: 207});
    $("#vehicle_model").selectmenu({menuWidth: 400, format: selectVehicleFormatting});
    $("#vehicle_type").selectmenu({menuWidth: 400, format: selectVehicleFormatting});

    if ($("#vehicle_type").children().size() > 1) {
      $("#vehicle_type").focus();
    }
    else if ($("#vehicle_model").children().size() > 1) {
      $("#vehicle_model").focus();
    }
    else if ($("#vehicle_maker").children().size() > 1) {
      $("#vehicle_maker").focus();
    }

    $('#search_vehicle select').change(function(){

      switch($(this).attr('name'))
      {
        case 'am':
        $("#vehicle_model").attr("disabled","disabled");
        $("#vehicle_type").attr("disabled","disabled");
        break;

        case 'as':
        $("#vehicle_type").attr("disabled","disabled");
        break;
      }
      this.form.submit();
    });
  }
*/
});



var selectVehicleFormatting = function(text){
	var newText = text;

	if (newText.search(/\[/) != -1) {
    //array of find replaces
  	var findreps = [
  		{find:/^([^\[]+)/g, rep: '<span class="ui-selectmenu-item-name">$1</span>'},
  		{find:/\[([^\]]+)\]/g, rep: '<span class="ui-selectmenu-item-info">$1</span>'}
  	];

  	for(var i in findreps){
  		newText = newText.replace(findreps[i].find, findreps[i].rep);
  	}
	}

	return newText;
}


/**
* Homepage
*/
var banner_timer = false;

function bannerSlideShow()
{
  $('#banner_slider .banner:first').addClass('active');
  $('#banner_button li:first').addClass('button_active');

  bannerSlideTime();
}

function bannerSlideTime()
{
  banner_timer = window.setTimeout( 'bannerSlideSwitch()', 5000 );
}

function bannerSlideSwitch(banner_id)
{
  var banner_active = $('#banner_slider .active');
  if (banner_active.length == 0) {
    banner_active = $('#banner_slider .banner:last');
    banner_active.addClass('active');
  }

  if(typeof banner_id === 'undefined') {
    var banner_next = (banner_active.next('.banner').length == 1) ? banner_active.next('.banner') : $('#banner_slider .banner:first');
  } else {
    var banner_next = $('#banner' + banner_id);
    window.clearTimeout(banner_timer);
  }

  banner_active.addClass('active_last');

  $('#banner_button li').removeClass('button_active');
  $('#' + banner_next.attr('id') + '_button').addClass('button_active');

  banner_next.addClass('active')
  .css({opacity: 0.0})
  .animate({opacity: 1.0}, 1000, function() {
    banner_active.removeClass('active active_last');

    if(typeof banner_id === 'undefined') {
      bannerSlideTime();
    }
  });
}


/**
* cart
*/
function vehicleBoard()
{
  $("#vehicles_brief").mouseout(function () {
    $("#vehicles_brief_details").hide();
    $("#vehicles_brief>a").removeClass("over_head");
  });

  $("#vehicles_brief").mouseover(function () {
    if ($('#vehicles_brief_details').length == 0) {
      $("#vehicles_brief").append('<div id="vehicles_brief_details"></div>');
      $("#vehicles_brief_details").show();

      var url = '/vehicles?cmd=load';
      if ($("#search_quick input[name='at']").length > 0) {
        url += '&at=' + $("#search_quick input[name='at']").val();
      }
      if (ps.server_origin == false) {
        url += '&callback=?';
      }
      $.getJSON(url, {}, function (j) {
        vehicleBoardHTML(j);
      });
    } else {
      $("#vehicles_brief_details").show();
    }
    $("#vehicles_brief>a").addClass("over_head");
  });
}

function vehicleBoardHTML(data)
{
  var html = '';
  for (var block in data) {
    if (data[block].title) {
      html += '<h4 class="' + block + ' ui-widget-header ui-helper-clearfix"><span class="ui-icon ui-icon-triangle-1-s"></span>';
      if (data[block].link) {
        html += '<a href="' + data[block].link + '">' + data[block].title + '</a>';
      } else {
        html += data[block].title;
      }
      html += '</h4>';
    }
    html += '<ul class="' + block + '">';
    for (var j = 0; j < data[block].items.length; j++) {
      html += '<li>';
      if (data[block].items[j].link) {
        html += '<a href="' + data[block].items[j].link + '" title="' + data[block].items[j].name + '"';
        if (data[block].items[j].func) {
          html += ' class="' + data[block].items[j].func + '"';
        }
        html += '>' + data[block].items[j].name + '</a>';
      } else {
        html += data[block].items[j].name;
      }
      html += '</li>';
    }
    html += '</ul>';
  }

  $("#vehicles_brief_details").html(html);

  parkingAdd();
}

function parkingAdd() {

  $(".vehicle-parking").click(function() {

	  var page = $(this).attr('href');
	  var dialog = $("<div id='shop_dialog'></div>").insertAfter('#footer');
    $(dialog).dialog({
      resizable: false,
      modal: true,
      width: 500,
      height: 250,
      title: $(this).attr('title'),
      open: function(event, ui) {
        $(dialog).load(page, function () {
          $("#shop_dialog .btn-widget").button();

          $.getScript("/templates/ts24/js/validate/jquery.validate.min.js", function () {

            $("#vehicle_add").validate({
              rules: {
                vehicle_name: {
                  required: true
                }
              },
              messages: {
                vehicle_name: "Bitte wählen Sie einen Namen für Ihr Fahrzeug"
              }
            });
          });
        });
      },
      close: function() {
        $(dialog).remove();
      }
    });

	  return false;
	});
}

function cartBoard()
{
  $("#cart_brief").mouseout(function () {
    $("#cart_brief_details").hide();
    if ($("#cart_brief a").hasClass('filled')) {
      $("#cart_brief>a").removeClass("over_filled");
    } else {
      $("#cart_brief>a").removeClass("over_head");
    }
  });

  $("#cart_brief").mouseover(function () {
    if ($('#cart_brief_details').length == 0) {
      $("#cart_brief").append('<div id="cart_brief_details"></div>');
      $("#cart_brief_details").show();

      var url = $("#cart_brief a").attr("href") + '?action=load';
      if (ps.server_origin == false) {
        url += '&callback=?';
      }
      $.getJSON(url, {}, function (j) {
        cartBoardHTML(j);
      });
    } else {
      $("#cart_brief_details").show();
    }
    if ($("#cart_brief a").hasClass('filled')) {
      $("#cart_brief>a").addClass("over_filled");
    } else {
      $("#cart_brief>a").addClass("over_head");
    }
  });
}

function cartBoardHTML(data)
{
  var cart_html = '';

  if (data.items) {
    $("#cart_brief a").addClass("filled");
    $("#cart_total").html('(' + data.items.length + ')');

    cart_html += '<table class="products">';
    for (var i = 0; i < data.items.length; i++) {
      cart_html += "<tr id='cart_item_" + data.items[i].id + "'><td class='qty'>" + data.items[i].qty + " x</td><td><a href='" + data.items[i].link + "'>" + data.items[i].name + "</a></td><td class='price'>" + data.items[i].price + "</td></tr>";
    }
    cart_html += '</table>'

    cart_html += '<ul class="calculation">';
    for (var i = 0; i < data.totals.length; i++) {
      cart_html += '<li class="ui-helper-clearfix"><span class="total_price">' + data.totals[i].text + '</span><span class="total_title">' + data.totals[i].title + '</span></li>';
    }
    /* cart_html += '<li class="shipping">' + data.shipping + '</li>'; */
    cart_html += '</ul>';

    cart_html += '<p style="margin:10px 0" class="sunny">';
    cart_html += '<a href="' + data.link_cart + '" class="button">' + data.text_cart + '</a>&nbsp;';
    cart_html += '<a href="' + data.link_checkout + '" class="button">' + data.text_checkout + '</a>';
    cart_html += '</p>';
  } else {
    cart_html += '<p style="padding:10px;"><b>' + data.text_empty + '</b></p>';
  }

  $("#cart_brief_details").html(cart_html);

  $("#cart_brief_details a.button").button();
}

/**
* Part
*/
function viewPart()
{
  part_tabs = $('#product-details').tabs();

	$(".product-images-big").click(function(){
	  return openPartImage();
	});
	$("#product-images-more").click(function(){
	  return openPartImage();
	});
	$(".product-images-thumb img").click(function(){
	  return openPartImage();
	});

  $(".product-images-thumb img").mouseover(function(){

    $(".product-images-big").attr("src", $(this).attr("src").replace("/30/", "/200/"));

    $(".product-images-thumb img").removeClass("active");
    $(this).addClass("active");
  });

  $(".cart_add").submit(function() {
    if ($('#cart_brief_details').length == 0) {
      $("#cart_brief").append('<div id="cart_brief_details"></div>');
    }
    $(".product-buy").effect("transfer", { to: $("#cart_brief") }, 500, function () {
      $.post($(".cart_add").attr("action"), $(".cart_add").serialize(), function (data) {
        cartBoardHTML(data);
        $('#cart_brief').trigger('mouseover');
        $('#cart_item_' + data.success_add).effect("highlight", {}, 1500);
      }, "json");
    });
    return false;
  });


  $('#product-vehicles').tabs();
  $(".vehicle-models").accordion({
    autoHeight: false,
    active: false,
    header: '.vehicle-models-item',
    collapsible: true,
    changestart: function (event, ui) {

      if (ui.newContent.children().size() == 0 && ui.newHeader.children("a").size() == 1) {
        $(".vehicle-models").accordion( "option", "icons", { 'header': 'ui-icon-triangle-1-e', 'headerSelected': 'ui-icon-ajax' } );

        var model = ui.newHeader.children('a').attr('name').split("_");

        $.getJSON(self.location.protocol + '//' + self.location.host + '/' + model[1] + '/' + model[2] + '?raw=1&part=' + $("input[name='products_id']").val(), {}, function(j){

          var parameter = '?';
          if (self.location.search != '') {
            parameter = '&';
          }

          var table = '<ul class="vehicle-types vehicle-types-head ui-helper-clearfix" id="vehicle-type-table-' + ui.newHeader.attr('id') + '"><li class="icon">&nbsp;</li><li class="type">' + j.head.name + '</li><li class="kw">' + j.head.kw + '</li><li class="ps">' + j.head.ps + '</li><li class="ccm">' + j.head.ccm + '</li><li class="motor">' + j.head.mcode + '</li><li class="bj">' + j.head.by + '</li></ul>';
          for (var i = 0; i < j.body.length; i++) {
            table += '<a href="' + self.location.protocol + '//' + self.location.host + self.location.pathname + self.location.search + parameter +  'at=' + j.body[i].id + '" class="vehicle-types ui-state-default ui-corner-all by-first-' + j.body[i].first_year + ' by-last-' + j.body[i].last_year + '"><ul class="ui-helper-clearfix"><li class="icon"><span class="ui-icon ui-icon-triangle-1-e"></span></li><li class="type">' + j.body[i].name + '</li><li class="kw">' + j.body[i].kw + '</li><li class="ps">' + j.body[i].ps + '</li><li class="ccm">' + j.body[i].ccm + '</li><li class="motor">' + j.body[i].mcode + '&nbsp;</li><li class="bj">' + j.body[i].first + ' -> ' + j.body[i].last + '</li></ul></a>';
          }
          ui.newContent.html(table);

          viewVehicleTypes();

        }).complete(function() {
          $(".vehicle-models").accordion( "option", "icons", { 'header': 'ui-icon-triangle-1-e', 'headerSelected': 'ui-icon-triangle-1-s' } );
        });
      }
    }
  });

  loadRecommend();
  loadAddReview();
  loadAddReviewComment();
}

function viewVehicleTypes()
{
  $("a.vehicle-types").mouseover(function() {
    $(this).addClass('ui-state-hover');
  });
  $("a.vehicle-types").mouseout(function() {
    $(this).removeClass('ui-state-hover');
  });
  $("a.vehicle-types").click(function() {
    $(this).find('.ui-icon').removeClass('ui-icon-triangle-1-e').addClass('ui-icon-ajax');
    $(this).addClass('ui-state-active');
  });
}

function openPartImage()
{
  var thumb = $('#product-images').clone();

  thumb.children('.product-images-big').attr("src", thumb.children('.product-images-big').attr("src").replace("/200/", "/500/"));
  thumb.children('.product-images-big').attr("height", 500).attr("width", 500);

  thumb.children('.product-images-thumb').children('img').each(function(index) {
    $(this).attr("src", $(this).attr("src").replace("/30/", "/110/"));
    $(this).attr("height", 110).attr("width", 110);
  });

  thumb.children('#product-images-more').remove();

  thumb = "<div id='product-images-popup' class='ui-helper-clearfix'>" + thumb.html() + '</div>';

  var dialog = $(thumb).insertAfter('#footer');
  $(dialog).dialog({
    resizable: false,
    modal: true,
    width: 780,
    height: 550,
    title: $("#product-images .product-images-big").attr('alt'),
    open: function(event, ui) {

      $("#product-images-popup .product-images-thumb img").click(function(){

        $("#product-images-popup .product-images-big").attr("src", $(this).attr("src").replace("/110/", "/500/"));

        $("#product-images-popup .product-images-thumb img").removeClass("active");
        $(this).addClass("active");

        return false;
      });
    },
    close: function() {
      $(dialog).remove();
    }
  });

	return false;
}


function loadShipping(country)
{
  $("#shipping-table").load( '/shipping?country=' + country + '&table=1' );
}

/**
* Recommend
*/
function loadRecommend()
{
  $('a.recommend').click(function() {

    if (!$.fn.validate) {
      $.getScript("/templates/" + ps.template + "/js/validate/jquery.validate.min.js", function () { $('a.recommend').trigger('click'); });
      return false;
    }

    var page = $(this).attr('href');
    var dialog = $("<div id='shop_dialog'></div>").insertAfter('div#footer');

    $(dialog).dialog({
      resizable: false,
      modal: true,
      width: 400,
      height: 330,
      title: $(this).attr('title'),
      open: function(event, ui) {

       $(dialog).load(page, function () {

         $("button, input:button, input:submit, a.button").button();

         $("#recommend_form").validate({
          rules: {
            email: {
      				required: true,
      				email: true
      			},
      			to_email: {
      				required: true,
      				email: true
      			}
          },
          messages: {
            email: "Geben Sie bitte eine gültige eMail-Adresse ein",
            to_email: "Geben Sie bitte eine gültige eMail-Adresse ein"
          },
          submitHandler: function(form) {
            $.post($(form).attr("action"), $(form).serialize(), function (responseText) {
              $("#recommend_form").hide();
              $("#recommend_success").show();
            });
      		},
          errorLabelContainer: "#recommend_error",
          wrapper: "p"
         });

         $("#recommend_close").click(function () {
           $(dialog).remove();
           return false;
         });

         $("#recommend_reopen").click(function () {
           $("#recommend_form").show();
           $("#recommend_success").hide();
           return false;
         });
       });
      },
      close: function() {
        $(dialog).remove();
      }
/*      ,
      buttons: {
        "Schließen": function() { $(this).dialog("close"); },
        "Absenden": function() {
        }
      }
*/
    });
    return false;
  });
}


/**
* Reviews
*/
function loadAddReview()
{
  $(".reviews-add").click(function() {

    if (!$.fn.validate) {
      $.getScript("/templates/" + ps.template + "/js/validate/jquery.validate.min.js", function () { $('.reviews-add').trigger('click'); });
      return false;
    }

    $("#reviews_add").load( $(this).attr('href'), function() {

      if (!$.fn.rating) {
        $.getScript("/templates/" + ps.template + "/js/rating/jquery.rating.pack.js");
      }

      part_tabs.tabs('select', part_tabs.tabs( 'length' ) - 1);

      if ($("#product_reviews_write>input[name=type]").val() == "question") {
        var msg_text = "Frage";
      } else {
        var msg_text = "Meinung";
      }

      $("#product_reviews_write").validate({
        rules: {
          rating: {
    				required: true
    			},
    			review: {
    				required: true,
    				minlength: 10
    			}
        },
        messages: {
          rating: "Bitte vergeben Sie 1 bis 5 Sterne.",
          review: {
    				required: "Geben Sie bitte Ihre " + msg_text + " ein",
    				minlength: "Ihre " + msg_text + " muss mindesten 10 Zeichen enthalten"
    			}
        },
        highlight: function(element, errorClass) {
           $(element).addClass(errorClass);
        },
        unhighlight: function(element, errorClass) {
           $(element).removeClass(errorClass);
        },
        errorLabelContainer: "#reviews_error",
        wrapper: "li"
    	});

      $("#reviews_add").show();
      $("#reviews_list").hide();
    });

    return false;
  });
}

function loadAddReviewComment()
{
  $(".review_write_comment").click(function() {
    var review_id = $(this).attr('id').split('_');
    review_id = review_id[3];

    $("#review_comment_" + review_id).toggle();

    $("#review_comment_form_" + review_id).validate({
      rules: {
  			comment: {
  				required: true,
  				minlength: 10
  			}
      },
      messages: {
        comment: {
  				required: "Bitte geben Sie ein Kommentar ein",
  				minlength: "Ihr Kommentar muss mindesten 10 Zeichen enthalten"
  			}
      }
  	});

    return false;
  });
}

function review_delete(link)
{
  var review_id = $(link).attr('id').split('_');

  $("#reviews_delete-dialog").dialog({
		bgiframe: true,
		resizable: false,
		autoOpen: false,
		height:140,
		modal: true,
		overlay: {
			backgroundColor: '#000',
			opacity: 0.5
		}
	});
  $('#reviews_delete-dialog').dialog('option', 'buttons', {
    "Nein": function() { $(this).dialog("close"); },
    "Ja": function() {
      $("#reviews_edit_result").load( $(link).attr('href') + '&confirm=1' );

      $(this).dialog("close");
      $("#review_" + review_id[2]).fadeOut('slow', function() {
        $("#review_" + review_id[2]).remove();
        $("#reviews_edit_result").fadeIn(function() {
          setTimeout( function() {
             $("#reviews_edit_result").fadeOut("fast");
          }, 5000);
        });
      });
    }
  });
  $('#reviews_delete-dialog').dialog('option', 'title', $(link).attr('title'));
  $('#reviews_delete-dialog').dialog('open');

  return false;
}


/**
* Wishlist
*/
function wishlist_delete(link)
{
  var wish_id = $(link).attr('id').split('_');

  $("#dialog").dialog({
		bgiframe: true,
		resizable: false,
		autoOpen: false,
		height:140,
		modal: true,
		overlay: {
			backgroundColor: '#000',
			opacity: 0.5
		}
	});

  $('#dialog').dialog('option', 'buttons', {
    "Nein": function() { $(this).dialog("close"); },
    "Ja": function() {
      $("#result").load( $(link).attr('href') + '&confirm=1' );

      $(this).dialog("close");
      $("#wish_" + wish_id[2]).fadeOut('slow', function() {
        $("#wish_" + wish_id[2]).remove();
        $("#result").fadeIn(function() {
          setTimeout( function() {
             $("#result").fadeOut("fast");
          }, 5000);
        });
      });
    }
  });
  $('#dialog').dialog('open');

  return false;
}


/**
* Tools
*/
function installSearchEngine(url) {
  if (window.external && ("AddSearchProvider" in window.external)) {
    window.external.AddSearchProvider(url);
  } else {
    alert("Das funktioniert mit Ihrem Browser leider nicht.");
  }
}

function fnGetDomain(url) {
  return url.match(/:\/\/(.[^/]+)/)[1];
}


// Default Value
// http://plugins.jquery.com/project/defaultvalue

(function($) {

	$.fn.defaultvalue = function() {

		// Scope
		var elements = this;
		var args = arguments;
		var c = 0;

		return(
			elements.each(function() {

				// Default values within scope
				var el = $(this);
				var def = args[c++];

				el.val(def).focus(function() {
					if(el.val() == def) {
						el.val("");
					}
					el.blur(function() {
						if(el.val() == "") {
							el.val(def);
						}
					});
				});

			})
		);
	}
})(jQuery)

