$(document).ready(function() {
  
  $('a.external').attr('target', '_blank');
  
  setupServiceAnimation($('ul.childrenOverview'));
  
  setupWelcomeReferences($('#referencesContainer').find('.references ul'));
  
  setupReferenceAnimation($('#reference'));
  
  if ($('#actionBox').find('select').length > 0)
    $('#actionBox').find('select').selectreplace();
  if ($('#actionBox').find('input[type=radio]').length > 0)
    $('#actionBox').find('input[type=radio]').radioreplace();
  if ($('#actionBox').find('input[type=submit]').length > 0)
    $('#actionBox').find('input[type=submit]').hide(0);
  
  if ($('#customerVoices').find('li').length > 1) {
    $('#customerVoices').find('li').each(function() {
      $t = $(this);
      $t.css({
          visibility: 'hidden',
          display: 'block'
        })
        .height($t.height())
        .css({
          visibility: 'visible'
        });
    })
    $('#customerVoices ul').cycle({
      fx: 'fade',
      sync: false,
      timeout: 6000,
      speed: 1000,
      pause: 1,
      slideResize: 0
    });
  }
  //$.cookie('_tsm_', null);
  /*if ($('.home').length > 0 && $.cookie('_tsm_') != 'yes!') {
    $('<a href="' + wp_template_directory + 'intro.html">just some link</a>').fancybox({
      hideOnContentClick: false,
      hideOnOverlayClick: false,
      overlayOpacity: 0.95,
      overlayColor: '#000',
      showCloseButton: false,
      margin: 0,
      titleShow: false,
      width: 960,
      height: 340,
      autoDimensions: false,
      autoScale: false,
      onComplete: function() {
        $('#introBox').find('.buttonYes').click(function() {
          $.cookie('_tsm_', 'yes!', { expires: 30 });
          $.fancybox.close();
        });
        $('#introBox').find('.buttonNo').click(function() {
          $('*').hide(0);
          $.fancybox.close();
        });
      }
    }).click();
  }*/
  
  if ($('#siteIcons').length > 0) {
    $('#siteIcons').find('a').hover(function(e) {
      var txt = $(this).find('span').text();
      $.tooltip.show(txt, e);
    }, function(e) {
      $.tooltip.hide();
    })
  }
  
  if ($('p.socialIcons').length > 0) {
    $('p.socialIcons').find('a').hover(function(e) {
      var txt = $(this).find('img').attr('alt');
      $.tooltip.show(txt, e);
    }, function(e) {
      $.tooltip.hide();
    })
  }
  
});

// animate background color
(function(d){d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(f,e){d.fx.step[e]=function(g){if(!g.colorInit){g.start=c(g.elem,e);g.end=b(g.end);g.colorInit=true}g.elem.style[e]="rgb("+[Math.max(Math.min(parseInt((g.pos*(g.end[0]-g.start[0]))+g.start[0]),255),0),Math.max(Math.min(parseInt((g.pos*(g.end[1]-g.start[1]))+g.start[1]),255),0),Math.max(Math.min(parseInt((g.pos*(g.end[2]-g.start[2]))+g.start[2]),255),0)].join(",")+")"}});function b(f){var e;if(f&&f.constructor==Array&&f.length==3){return f}if(e=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(f)){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])]}if(e=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(f)){return[parseFloat(e[1])*2.55,parseFloat(e[2])*2.55,parseFloat(e[3])*2.55]}if(e=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(f)){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}if(e=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(f)){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}if(e=/rgba\(0, 0, 0, 0\)/.exec(f)){return a.transparent}return a[d.trim(f).toLowerCase()]}function c(g,e){var f;do{f=d.curCSS(g,e);if(f!=""&&f!="transparent"||d.nodeName(g,"body")){break}e="backgroundColor"}while(g=g.parentNode);return b(f)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]}})(jQuery);

(function($) {
  var tooltip = new function() {
    
    var container = null;
    var container_inner = null;
    
    this.inject = function() {
      if ($('#t_tip').length <= 0) {
        $('body').append('<div id="t_tip"><div class="inner"></div></div>');
        container = $('#t_tip');
        container_inner = container.find('.inner');
        container.hide(0).css('position', 'absolute');
      }
    }
    
    this.show = function(c, pos) {
      if (!container)
        $.tooltip.inject();
      if (c != null && c != '') {
        container_inner.text(c);
        container.css({
          left: pos.pageX + 20,
          top: pos.pageY
        })
        if (container)
          container.show(0);
        $('body').bind('mousemove.tt_move', function(e) {
          container.css({
            left: e.pageX + 20,
            top: e.pageY
          })
        });
      }
    }
    
    this.hide = function() {
      if (container);
        container.hide(0);
      $('body').unbind('mousemove.tt_move');
    }
    
  }
  
  $.tooltip = tooltip;
  
})(jQuery)

// ToDo: build in stops()
function setupServiceAnimation(sub) {
  if(sub == null || sub.length == 0)
    return;
  
  var loadingGIF = new Image();
  loadingGIF.src = wp_template_directory + 'pics/loader-container.gif';
  var fxDur = 300;
  var _fxColor = '#d2d4d9';
  
  sub.each(function() {
    var $t =$(this);
    var links = $t.find('a');
    
    $t.data('bupHeight', $t.height());
    
    links.click(function(e) {
      e.preventDefault();
      var $t = $(this);
      $t.blur();
    
      var originalContainer = $t.parents('.container').eq(0);
      
      if (originalContainer.siblings('.animating').length > 0)
        return false;
      if (originalContainer.hasClass('open')) {
        closeContainer(originalContainer);
      }
      else {
        openContainer(originalContainer);
      }
      
      return false;
    });
    
  });

  
  var openCallback = null;
  var closeCallback  = null;
  
  function openContainer(el) {
    if (!el || el.length == 0)
      return false;
    
    var _w = el.parent().width();
    
    clone = el.addClass('open').clone(true);
    
    clone.hasClass('odd') ? clone.css('left', 0) : clone.css('right', 0);
    
    el.parent().append(clone.addClass('cloned').addClass('animating').css({ display: 'none', 'position': 'absolute', 'z-index': 50, top: el.position().top }));
    
    clone.show(0);
    el.css({ visibility: 'hidden' });
    
    var c_border = parseInt(clone.css('border-left-width')) + parseInt(clone.css('border-right-width'));
    
    clone
      .append('<img class="loading" src="' + loadingGIF.src + '" />')
      .append('<div class="close"></div>')
      .stop(true, false)
      .animate({ width: _w - c_border, backgroundColor: _fxColor }, fxDur)
      .children('.content')
        .stop(true, false)
        .fadeTo(fxDur, 0, function() { $(this).hide(0); });
    
    clone.find('.close').hide(0).click(function() { $(this).parent().find('a').click(); }).stop(true, false).fadeTo(fxDur, 1);
    
    $.ajax({
      dataType: 'html',
      url: el.find('a').attr('href'),
      success: function(data, textStatus, XMLHttpRequest) {
        var c = $(data).find('#content');
        if (c.length > 0) {
          clone.append(c.css('visibility', 'hidden').removeAttr('id').removeClass('contentWide').addClass('content-sub'));
          var _h = clone.find('.content-sub').outerHeight(true);
          if (clone.parent().height() < _h)
            clone.parent().animate({ height: _h }, fxDur);
          if (_h < clone.parent().height())
            _h = clone.parent().height() - c_border;
          clone.animate({ height: _h, top: 0 }, fxDur);
          clone.find('img.loading').stop(true, false).fadeTo(fxDur, 0, function() {
            c.css({ display: 'none', visibility: 'visible' }).stop(true, false).fadeTo(fxDur, 1);
            $(this).remove();
            clone.removeClass('animating');
          });
        }
      },
      error: function(XMLHttpRequest, textStatus, errorThrown) {
        var t = clone.find('a');
        clone.find('img.loading').stop(true, false).fadeTo(fxDur, 0, function() {
          clone.addClass('error').append('<p style="display: none" class="errormsg content-sub">Seite nicht gefunden!</p>')
          clone.find('.errormsg').stop(true, false).fadeTo(fxDur, 1);
          $(this).remove();
          window.setTimeout(function() { t.click(); }, 3000);
        });
        
      }
    })
    
    if (typeof openCallback  == 'function') {
      openCallback();
      openCallback = null;
    }
  }
  
  function closeContainer(el) {
    clone = el;
    el = clone.siblings('.open');
    
    clone.addClass('animating').stop(true, false).animate({ height: el.height(), top: el.position().top },
      fxDur,
      function() {
        $(this).stop(true, false).animate({ width: el.width(), backgroundColor: el.css('backgroundColor') },
          fxDur,
          function() {
            el.css('visibility', 'visible').removeClass('open');
            clone.hide(0).remove();
          }
        )
      }
    )
      .children('.content-sub,.close')
        .stop(true, false)
        .fadeTo(fxDur, 0, function() {
          $(this).remove();
          clone.children('.content').stop(true, false).fadeTo(fxDur, 1);
        });
    
    if (el.parent().height() != el.parent().data('bupHeight'))
      el.parent().stop(true, false).animate({ height: el.parent().data('bupHeight') }, fxDur);
    
    if (typeof closeCallback  == 'function') {
      closeCallback();
      closeCallback = null;
    }
  }
  
}

function setupWelcomeReferences(el) {
  if (el == null && el.length == 0)
    return;
  
  el.addClass('referencesJS');
  
  el.after(
    '<div class="navigation nav-arrows">\
      <div class="prev"></div>\
      <div class="next"></div>\
    </div>'
  );
  el.parent().after(
    '<div class="navigation nav-thumbs">\
      <div class="centered">\
        <ul class="thumbnails"></ul>\
      </div>\
    </div>'
  );
  
  var nav = el.siblings('.navigation').add(el.parent().siblings('.navigation'));
  var nav_prev = nav.find('.prev');
  var nav_next = nav.find('.next');
  var nav_thumbs = nav.find('.thumbnails');
  
  el.find('li').each(function(i, e) {
    var $t = $(this);
    nav_thumbs.append($('<li' + (i == 0 ? ' class="first"' : '') +'><div class="inactive"></div></li>').css('background-image', $t.css('background-image')));
    if ($t.find('.bigpic').length > 0)
      $t.css('background-image', $t.find('.bigpic').css('background-image'));
  })
  
  nav_prev.add(nav_next).width(0);
  
  el.parent().mouseenter(function(e) {
    nav_prev.add(nav_next).stop(true, true).animate({ width: 42 }, 500);
  }).mouseleave(function(e) {
    var t = $(e.relatedTarget);
    if (!((t.hasClass('next') || t.hasClass('prev')) && t.parent().hasClass('arrows') && t.parent().parent().hasClass('navigation')))
      nav_prev.add(nav_next).stop(true, true).animate({ width: 0 }, 500);
  });
  
  el.cycle({
    fx: 'scrollHorz',
    timeout: 8000,
    timeoutFn: null, 
    speed: 1000,
    pause: 1,
    next: nav_next,
    prev: nav_prev,
    pager: nav_thumbs,
    pagerAnchorBuilder: function(index, domElement) {
      return nav_thumbs.find('li').eq(index);
    },
    updateActivePagerLink: function(parentContainer, index, activeClass) {
      parentContainer.children().not('eq(' + index + ')').find('.inactive').stop(true, false).fadeTo(500,0.6);
      parentContainer.children().eq(index).find('.inactive').stop(true, false).fadeTo(500,0);
    }
  });
}

function setupReferenceAnimation(el) {
  if (el == null || el.length == 0)
    return;
  var cont = el.find('.bigpics');
  var thumbCont = el.find('.thumbnails');
  
  if (thumbCont.find('.thumb').length == 0)
    return;
  
  thumbCont.prepend(cont.find('.thumb'));
  thumbCont.children('.thumb').eq(0).append(cont.find('.big,.inactive'));

  var list = $('<ul></ul>');
  thumbCont.children('.thumb').each(function() {
    list.append($('<li></li>').css('background-image', $(this).find('.big').css('background-image')));
  });
  cont.append(list);
  cont.append(
    '<div class="navigation nav-arrows">\
      <div class="prev"></div>\
      <div class="next"></div>\
    </div>'
  );
  
  var nav = cont.find('.navigation');
  var nav_prev = nav.find('.prev');
  var nav_next = nav.find('.next');
  
  nav_prev.add(nav_next).width(0);
  
  cont.mouseenter(function(e) {
    nav_prev.add(nav_next).stop(true, false).animate({ width: 42 }, 500);
  }).mouseleave(function(e) {
    nav_prev.add(nav_next).stop(true, false).animate({ width: 0 }, 500);
  });
  
  thumbCont.children().css('cursor', 'pointer');
  
  cont.find('ul').cycle({
    fx: 'scrollHorz',
    timeout: 8000,
    timeoutFn: null, 
    speed: 1000,
    pause: 1,
    next: nav_next,
    prev: nav_prev,
    pager: thumbCont,
    pagerAnchorBuilder: function(index, domElement) {
      return thumbCont.children('.thumb').eq(index);
    },
    updateActivePagerLink: function(parentContainer, index, activeClass) {
      parentContainer.children().not('eq(' + index + ')').find('.inactive').stop(true, false).fadeTo(500,0.6);
      parentContainer.children().eq(index).find('.inactive').stop(true, false).fadeTo(500,0);
    }
  });
  
}

(function($) {
  
  var querystring = new function() {
    var qs = window.location.search.substring(1);
    var qp = (qs.length > 0 ? qs.split('&') : Array());
    this.get = function(name) {
      for (var i = 0; i < qp.length; i++) {
        var a = qp[i].split('=');
        if (a[0] == name)
          return a[1];
      }
      return '';
    }
    this.set = function(name, value) {
      var temp = Array();
      var found = false;
      for (var i = 0; i < qp.length; i++) {
        var a = qp[i].split('=');
        if (a[0] == name) {
          a[1] = value;
          found = true;
        }
        temp.push(a.join('='));
      }
      if (!found)
        temp.push(name + '=' + value);
      return temp.join('&');
    }
  }
  
  $.qs = querystring;
  
  var selectReplace = new function() {
    var defaults = {
      fxDur: 500
    }
    
    this.construct = function(o) {
      return this.each(function() {
        var select = $(this);
        var options = select.find('option');
        
        var replacement = $(getSelectReplacementContainer());        
        var actval = '';
        var options_list = '';
        
        if (o != null)
          $.extend(defaults, o);
        
        options.each(function() {
          var $t = $(this);
          var classes = $t.attr('class');
          if ($t.is(':selected')) {
            actval = $t.text();
            classes += (classes == '' ? 'selected' : ' selected');
          }
          if ($t.is(':disabled'))
            classes += (classes == '' ? 'disabled' : ' disabled');
          options_list += '<li' + (classes != '' ? ' class="' + classes + '"' : '') + '>\
              <a href="' + $t.val() + '">' + $t.text() + '</a>\
            </li>';
        });
        if (actval == '' && options.length > 0)
          actval = options.eq(0).text();
        if (options_list != '')
          options_list = '<ul>' + options_list + '</ul>';
        
        replacement.attr('name', select.attr('name'));
        replacement.find('.value').text(actval);
        replacement.find('.option-list').css('display', 'none').append(options_list);
        
        replacement.click(function(e) {
          e.stopPropagation();
          
          var $ol = $(this).find('.option-list');
          
          if ($ol.hasClass('opened')) {
            $ol.stop(true, true).slideUp(defaults.fxDur);
            $ol.removeClass('opened')
          }
          else {
            $ol.stop(true, true).slideDown(defaults.fxDur);
            $ol.addClass('opened');
          }
        });
        
        $(document).click(function() {
          if(replacement.find('.option-list.opened').length > 0)
            replacement.click();
        });
        
        replacement.find('a').click(function(e) {
          e.preventDefault();
          var $t = $(this);
          if ($t.parent().hasClass('disabled')) {
            e.stopPropagation();
            return false;
          }
          
          var new_query = $.qs.set(replacement.attr('name'),$t.attr('href'));
          document.location.hash = 'actionBox';
          document.location.search = new_query;
          
          replacement.click();
          return false;
        });
        
        select.hide(0).after(replacement);
      });
    }
    
    getSelectReplacementContainer = function() {
      return '\
        <div class="select-replace">\
          <div class="value"></div>\
          <div class="option-list"></div>\
        </div>\
      ';
    }
    
  }
  
  $.fn.selectreplace = selectReplace.construct;
  
  var radioReplace = new function() {
    var defaults = {
      fxDur: 250
    }
    
    this.construct = function() {
      return this.each(function() {
        var radio = $(this);
        var label = radio.siblings('label[for=' + radio.attr('id') + ']');
        
        if (!label)
          return;
        
        label.addClass('replaced');
        
        if (radio.is(':checked'))
          label.addClass('checked');
        
        radio.change(function() {
          var $t = $(this);
          var l = $t.siblings('label[for=' + $t.attr('id') + ']');
          
          if ($t.is(':checked'))
            l.addClass('checked');
          else
            l.removeClass('checked');
            
          var others = $t.parents('form').find('input[name=' + radio.attr('name') + ']:not(#' + $t.attr('id') + ')');
          others.each(function() {
            var $t = $(this);
            var l = $t.siblings('label[for=' + $t.attr('id') + ']');
            l.removeClass('checked');
          });
          
          var new_query = $.qs.set($t.attr('name'),$t.val());
          document.location.hash = 'actionBox';
          document.location.search = new_query;
        });
        
        radio.hide(0);
      });
    }
    
  }
  
  $.fn.radioreplace = radioReplace.construct;
  
})(jQuery)

