$(document).ready(function() {
  Util.adjustTopMargin();
  var browser_ok = Util.browserCheck();
  if (!browser_ok) {
    $('#browser_warning').css('display', 'block');
  }
  Util.animateNavigation();
  $('.scrollpane').jScrollPane({
    showArrows:true,
    scrollbarWidth:20,
    scrollbarMargin:0
  });
  $("a[rel='gallery']").colorbox();
  Util.externalLinks();
  Util.adminNavigation();
  Util.setMaps();

  $('#order_form').hide();
  $('#order_form').css('margin-left', '0px');
  $('#show_form').click(
    function() {
      $(this).fadeOut(500);
      $('#order_form').delay(500).show(500);
    });
});



Util = {
  adminNavigation: function() {
    $(".button_edit a").toggle(
      function () {
        $(this).parent().parent().parent().children(".show").removeClass('shown').addClass('hidden');
        $(this).parent().parent().parent().children(".edit").removeClass('hidden').addClass('shown');
        return false;
      },
      function () {
        $(this).parent().parent().parent().children(".show").removeClass('hidden').addClass('hidden');
        $(this).parent().parent().parent().children(".edit").removeClass('shown').addClass('shown');
      });

    $(".button_delete a").click(function() {
      return confirm('Sind Sie sicher, dass Sie mit dem Löschen fortfahren wollen?');
    });
    
    $(".button_delete input").click(function() {
      return confirm('Sind Sie sicher, dass Sie mit dem Löschen fortfahren wollen?');
    });
  },
  setMaps: function() {
    $("#google_map_static").load(function () {
      var address = $("#google_map_static").attr('alt');
      var iframe = '<iframe id="google_map_dynamic" width="420" height="280" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?source=s_q&amp;hl=de&amp;z=15&amp;q=' + address + '&amp;output=embed'
      + "&amp;iwloc=A" +
      '"></iframe>';
      $("#google_map_static").parent().html(iframe);
    });
    $("#google_map_static").click(function () {
      var address = $("#google_map_static").attr('alt');
      var iframe = '<iframe id="google_map_dynamic" width="420" height="280" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?source=s_q&amp;hl=de&amp;z=15&amp;q=' + address + '&amp;output=embed'
      + "&amp;iwloc=A" +
      '"></iframe>';
      $("#google_map_static").parent().html(iframe);
    });
  },
  animateNavigation: function() {
    var prevent_close;
    $('#navigation_main li.main').hover(function() {
      if (!$(this).is('.open') && !$(this).is('.opened')) {
        prevent_close = true;
        //$(this).addClass('open');
        $(this).addClass('dynamic');
        $(this).addClass('opened');
        $('#navigation_main').css('z-index', (parseInt($('#navigation_main').css('z-index')) + 100));

        var padding_bottom = 90;
        var items = $(this).children('ul').children('li').length;
        var distance = ((-1) * (padding_bottom + 10 + (24 * items)));
        var background_position = ((-1) * parseInt(distance)) - 160;

        $(this).children('.bg').css('background-position', '0 ' + background_position + 'px');

        $(this).animate({
          top: distance + 'px'
        },
        750,
        function() {
          prevent_close = false;
        });
      }

    //TODO: this should be set after a delay!
      
    }, function() {
      if ($(this).is('.dynamic') && !$(this).is('.open') && !prevent_close) {
        $(this).removeClass('dynamic');
        //$(this).removeClass('open');

        $(this).delay(500).animate({
          top: 0
        },
        250,
        function() {
          //animation complete
          $(this).removeClass('opened');
          $('#navigation_main').css('z-index', (parseInt($('#navigation_main').css('z-index')) - 100));
        });
      }
    });
  },
  adjustTopMargin: function() {
    var contentHeight = 640;
    var windowHeight = $(window).height();
    if (windowHeight <= contentHeight) {
      $('#layout_wrapper').css('margin-top', '3px');
    }
    else if (windowHeight - contentHeight < 50) {
      $('#layout_wrapper').css('margin-top', windowHeight - contentHeight);
    }
    else {
  }
  },
  browserCheck: function() {
    /* inspired by http://blog.team-noir.net/2009/06/fight-old-browsers-warning-with-jquery/ - thanks! */
    if ($.browser.msie && parseInt($.browser.version) <= 6) {
      return false;
    }  //IE > 6.0
    if ($.browser.opera && ($.browser.version *10) <= 95) {
      return false;
    }     //Opera > 9.5
    if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) {
      var ffversion = new Number(RegExp.$1)
      if (ffversion <= 2) {
        return false;
      }                                    //Firefox > 2
    }
    if ($.browser.safari &&
      (navigator.appVersion.indexOf("1.") != -1) &&                           //Safari > 1.0
      (navigator.appVersion.indexOf("2.") != -1) &&                           //Safari > 2.0
      (navigator.appVersion.indexOf("3.") != -1)                              //Safari > 3.0
      ){
      return false;
    }
    return true;
  /* /inspired by http://blog.team-noir.net/2009/06/fight-old-browsers-warning-with-jquery/ - thanks! */
  },
  externalLinks: function() {
    //Source: http://www.sitepoint.com/print/standards-compliant-world/
    if (!document.getElementsByTagName) {
      return;
    }
    var anchors = document.getElementsByTagName("a");
    for (var i=0; i<anchors.length; i++) {
      var anchor = anchors[i];
      if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") {
        anchor.target = "_blank";
      }
    }
  },
  getWindowSize: function(){
    var xScroll, yScroll;

    if (window.innerHeight && window.scrollMaxY) {
      xScroll = window.innerWidth + window.scrollMaxX;
      yScroll = window.innerHeight + window.scrollMaxY;
    } else if (document.body.scrollHeight > document.body.offsetHeight) {
      xScroll = document.body.scrollWidth;
      yScroll = document.body.scrollHeight;
    } else if(document.body) {
      xScroll = document.body.offsetWidth;
      yScroll = document.body.offsetHeight;
    }

    var windowWidth, windowHeight;
    if (self.innerHeight) {
      if(document.documentElement.clientWidth){
        windowWidth = document.documentElement.clientWidth;
      } else {
        windowWidth = self.innerWidth;
      }
      windowHeight = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) {
      windowWidth = document.documentElement.clientWidth;
      windowHeight = document.documentElement.clientHeight;
    } else if (document.body) {
      windowWidth = document.body.clientWidth;
      windowHeight = document.body.clientHeight;
    }

    if(yScroll < windowHeight) {
      pageHeight = windowHeight;
    } else {
      pageHeight = yScroll;
    }

    if(xScroll < windowWidth) {
      pageWidth = xScroll;
    } else {
      pageWidth = windowWidth;
    }

    var arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);
    return arrayPageSize;
  },
  validateForm: function(id) {
    var result= true;
    $("#"+id + " input, #"+id + " textarea").each(function() {
      if($(this).attr("class") && $(this).attr("class").match("required")) {
        // trim input field
        $(this).val($(this).val().replace(/^\s+|\s+$/g, ''));
        var itemresult= Util.validate($(this).attr("id"));
        result= result && itemresult;
      }
    });

    if(result) {
      $("#form_error").removeClass("error");
    } else {
      $("#form_error").addClass("error");
    }

    return result;
  },
  validate: function(id) {
    var result= true;
    var obj= $("#"+id);
    var commands= $("#"+id).attr("class").split(" ");
    for(var i=0; i<commands.length; i++) {
      var command= commands[i].replace(/[0-9]/g, "");
      switch(command) {
        case("minlength"):
          var length= parseInt(commands[i].replace(/minlength/g, ""));
          result= result && (obj.val().length>=length);
          break;
        case("maxlength"):
          var length= parseInt(commands[i]);
          result= result && (obj.val().length<=length);
          break;
        case("email"):
          result = result && ( obj.get(0).value.match(/\S@\S.\S{2,}/)!=null )
          break;
        default:
          result= result && (obj.val().length!=0);
          break;
      }
    }
    if(!result) {
      obj.addClass("error");
    } else {
      obj.removeClass("error");
    }
    return result;
  }

}
