// Плавный скролинго по якорям
// работает только на якоря, поставленные в теге <a> пр.: <a name="anchor"></a>
function filter(link){
  return link.href && link.hash && ( /.*#.+/.test(link.href) ); 
};

$(document).ready(function(){
						 
  $(document).mousewheel(function(){
    $('html, body').stop();
  });
  
  $('a[href*=#]').each(function() {							
    if ( filter(this) ) {
      var $targetId = $(this.hash);
      var $targetAnchor = $('a[name=' + this.hash.slice(1) +']');
      var $target = $targetId.length ? $targetId : $targetAnchor.length ? $targetAnchor : false;
        if ($target) {
          $(this).click(function() {
            var targetOffset = $target.offset().top;
            var linkOffset = $(this).offset().top;
            var duration = Math.abs(targetOffset - linkOffset);         
            $('html, body').animate({scrollTop: targetOffset}, duration*.8, 'easeOutQuint');
            return false;
         });
      }
    }
  }); 
});

// Основное меню
$(document).ready(function(){

  $('#tpl_menu_main').each(function(){
    $(this).find('td>a').each(function(){
      var $link = $(this);
      var $tdc = $link.parent('td');
      var $tdl = $tdc.prev('td');
      var $tdr = $tdc.next('td');
      var $list = $link.next('ul').clone();
      var left_fix = ( $.browser.msie || $.browser.safari || $.browser.opera ) ? 1 : 0;
      var top_fix = ( $.browser.safari ) ? -6 : 0;
      if ( $list.length < 1 ) return false;
      var $block = $('<div class="dropdown-container"><a href="'+ $link.attr('href') +'" title="" class="dropdown-close">'+ $link.text() +'</a></div>');
      var $li_a = $list.find('li>a');
      var $block_link = $block.find('>a');
            
      var calculate = function () {
        var tdcw = $tdc.get(0).offsetWidth,
            tdlw = $tdl.get(0).offsetWidth,
            tdrw = $tdr.get(0).offsetWidth;
        var pos = getPosition($tdl.get(0));
        //loadFirebugConsole();
        //console.log("l:%d c:%d r:%d",tdlw,tdcw,tdrw);
        
        $li_a
            .css({
              paddingLeft: tdlw,
              paddingRight: tdlw
            });
        $block
          .css({
            top: pos.y - 6 + top_fix, 
            left: pos.x + left_fix
          });
        $block_link       
          .css({
            paddingLeft: tdlw,
            width: tdcw + tdrw - 1
          });
      }
      
      var close = function($block) {
       $block
         .hide()
         .remove();
       $(document).unbind('mousemove',overControl);
      }
      
        var overControl = function(evt) {
          var mouse = getMouseXY(evt);
          var left = parseInt($block.css('left')),
              top = parseInt($block.css('top'));
          if ( mouse.x < left ||
               mouse.x > left + $block.width() || 
               mouse.y < top ||
               mouse.y > top + $block.height() )
            close($block);  
             
          if ( ( mouse.x < left ||
               mouse.x > left + $block_link.get(0).offsetWidth ) && 
               mouse.y > top && 
               mouse.y < top + $block_link.height() )
            close($block);
          //loadFirebugConsole();
          //console.log("l:%d t:%d w:%d h:%d m_x:%d m_y:%d",left,top,$block_link.width(),$block_link.height(),mouse.x,mouse.y);
        }

      $(this).bind('mouseover',function(){
        
        calculate();
        
        $(document).mousemove(overControl);
      
        $list
          .appendTo($block)
          .css({display: 'block'});        
        $block
          .appendTo('body')
          .show();
        if ( $.browser.msie && ( $.browser.version < 7 )  ) {
          var tdlw = $tdl.get(0).offsetWidth;
          $li_a.css('width',$block.width() - 2*tdlw);
        };    
        return false;
      });
    });
  });
  
});

/* ----- jquery.mousewheel.js ------------------------------------------------------------------------ */

/* Copyright (c) 2006 Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
 * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
 *
 * $LastChangedDate: 2007-12-14 23:57:10 -0600 (Fri, 14 Dec 2007) $
 * $Rev: 4163 $
 *
 * Version: 3.0
 * 
 * Requires: $ 1.2.2+
 */
(function($){$.event.special.mousewheel={setup:function(){var handler=$.event.special.mousewheel.handler;if($.browser.mozilla)$(this).bind('mousemove.mousewheel',function(event){$.data(this,'mwcursorposdata',{pageX:event.pageX,pageY:event.pageY,clientX:event.clientX,clientY:event.clientY});});if(this.addEventListener)this.addEventListener(($.browser.mozilla?'DOMMouseScroll':'mousewheel'),handler,false);else
this.onmousewheel=handler;},teardown:function(){var handler=$.event.special.mousewheel.handler;$(this).unbind('mousemove.mousewheel');if(this.removeEventListener)this.removeEventListener(($.browser.mozilla?'DOMMouseScroll':'mousewheel'),handler,false);else
this.onmousewheel=function(){};$.removeData(this,'mwcursorposdata');},handler:function(event){var args=Array.prototype.slice.call(arguments,1);event=$.event.fix(event||window.event);$.extend(event,$.data(this,'mwcursorposdata')||{});var delta=0,returnValue=true;if(event.wheelDelta)delta=event.wheelDelta/120;if(event.detail)delta=-event.detail/3;if($.browser.opera)delta=-event.wheelDelta;event.data=event.data||{};event.type="mousewheel";args.unshift(delta);args.unshift(event);return $.event.handle.apply(this,args);}};$.fn.extend({mousewheel:function(fn){return fn?this.bind("mousewheel",fn):this.trigger("mousewheel");},unmousewheel:function(fn){return this.unbind("mousewheel",fn);}});})(jQuery);

/*
 * jQuery EasIng v1.1.2 - http://gsgd.co.uk/sandbox/jquery.easIng.php
 *
 * Uses the built In easIng capabilities added In jQuery 1.1
 * to offer multiple easIng options
 *
 * Copyright (c) 2007 George Smith
 * Licensed under the MIT License:
 *   http://www.opensource.org/licenses/mit-license.php
 */
 
jQuery.extend( jQuery.easing,
{
  easeOutQuint: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t*t*t + 1) + b;
	}
}
);

/**
 *
 * Utilities
 * Author: Stefan Petre www.eyecon.ro
 * 
 */
	getPosition = function(e, forceIt)
	{
		var x = 0;
		var y = 0;
		var es = e.style;
		var restoreStyles = false;
		if (forceIt && jQuery.curCSS(e,'display') == 'none') {
			var oldVisibility = es.visibility;
			var oldPosition = es.position;
			restoreStyles = true;
			es.visibility = 'hidden';
			es.display = 'block';
			es.position = 'absolute';
		}
		var el = e;
		if (el.getBoundingClientRect) { // IE
			var box = el.getBoundingClientRect();
			x = box.left + Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) - 2;
			y = box.top + Math.max(document.documentElement.scrollTop, document.body.scrollTop) - 2;
		} else {
			x = el.offsetLeft;
			y = el.offsetTop;
			el = el.offsetParent;
			if (e != el) {
				while (el) {
					x += el.offsetLeft;
					y += el.offsetTop;
					el = el.offsetParent;
				}
			}
			if (jQuery.browser.safari && jQuery.curCSS(e, 'position') == 'absolute' ) {
				x -= document.body.offsetLeft;
				y -= document.body.offsetTop;
			}
			el = e.parentNode;
			while (el && el.tagName.toUpperCase() != 'BODY' && el.tagName.toUpperCase() != 'HTML') 
			{
				if (jQuery.curCSS(el, 'display') != 'inline') {
					x -= el.scrollLeft;
					y -= el.scrollTop;
				}
				el = el.parentNode;
			}
		}
		if (restoreStyles == true) {
			es.display = 'none';
			es.position = oldPosition;
			es.visibility = oldVisibility;
		}
		return {x:x, y:y};
	}
	
	getSize = function(e)
	{
		var w = parseInt(jQuery.curCSS(e,'width'), 10);
		var h = parseInt(jQuery.curCSS(e,'height'), 10);
		var wb = 0;
		var hb = 0;
		if (jQuery.curCSS(e, 'display') != 'none') {
			wb = e.offsetWidth;
			hb = e.offsetHeight;
		} else {
			var es = e.style;
			var oldVisibility = es.visibility;
			var oldPosition = es.position;
			es.visibility = 'hidden';
			es.display = 'block';
			es.position = 'absolute';
			wb = e.offsetWidth;
			hb = e.offsetHeight;
			es.display = 'none';
			es.position = oldPosition;
			es.visibility = oldVisibility;
		}
		return {w:w, h:h, wb:wb, hb:hb};
	}

// Координаты мыши
function getMouseXY(evt) {
  if ( evt.pageX && evt.pageY ) 
   return [{x: evt.pageX, y: evt.pageY}][0];
  else if ( evt.clientX && evt.clientY )
   return [{
   x: evt.clientX + (document.documentElement.scrollLeft ?
      document.documentElement.scrollLeft :
      document.body.scrollLeft),
   y: evt.clientY + (document.documentElement.scrollTop ?
      document.documentElement.scrollTop :
      document.body.scrollTop)}][0];
  else return null;
}