if (!String.prototype.supplant) {
    String.prototype.supplant = function (o) {
        return this.replace(/{([^{}]*)}/g,
            function (a, b) {
                var r = o[b];
                return typeof r === 'string' || typeof r === 'number' ? r : a;
            }
        );
    };
}

jQuery.fn.disableSelection = function() {
    jQuery(this).attr('unselectable', 'on')
           .css('-moz-user-select', 'none')
           .each(function() { 
               this.onselectstart = function() { return false; };
            });
};

function getPropertyCount (o) {
    var count = 0;
    for (var m in o) {
        if (o.hasOwnProperty(m)) {
            count++;
        }
    }
    return count;
}



jQuery(function ($) {
    
  function getMenuData(clickedMLID, structure) {
    
    for (var menu in structure) {
      if (structure.hasOwnProperty(menu)) {
        if (structure[menu].link.mlid == clickedMLID) {
          return structure[menu].below;
        }
      }
    }
  }
  
  function buildMenu(menuData) {
    var menu = [];
    var element;
    
    for (var m in menuData) {
      if (menuData.hasOwnProperty(m)) {
        if (menuData[m].link.hidden === "1") {
          continue;
        }

        element = '<li rel="{mlid}"> \n\
           <a href="{href}" class="{active}" title="{link_title}">{title}</a> \n\
         </li>'.supplant({
          "title": menuData[m].link.title,
          "href": Drupal.settings.basePath + (menuData[m].link.href === '<front>' ? '' :
                                              menuData[m].link.path_alias ? menuData[m].link.path_alias : menuData[m].link.href),
          "link_title": menuData[m].link.link_title,
          "active": menuData[m].link.in_active_trail ? 'active' : '',
          "mlid": menuData[m].link.mlid
        });
      
        menu[menu.length] = element;
      }
    }
    
    return '<ul class="submenu">' + menu.join('') + '</ul>';
  }
 
  var firstTime = true;
  var subbarTimeout, currentMLID = null;
  function generateSubmenu () {

    var mlid = $(this).attr('rel');
    var $lower  = $('.subbar-lower');
    
    $(this).addClass('selected');

    if (mlid !== currentMLID) {
      
        var subMenu = getMenuData(mlid, MenuStructure);
        var menu    = buildMenu(subMenu);
        var $submenuContent = $(menu);
        
        if (currentMLID) {
          $('ul#main-menu > li[rel="'+ currentMLID + '"]').removeClass('selected');
        }
        
        // Solutions
        if (mlid === '381') {
          $lower.css('overflow', 'hidden');
          $submenuContent = $(BusinessAreaHierarchy.content);
        }
        else if (mlid === '376') {
          $lower.css('overflow', 'hidden');
          $submenuContent = $(BusinessAreas.content);
          $submenuContent.css({position: 'absolute', left: ($(this).position().left + $('ul#main-menu').position().left - 11) + 'px'});
        }
        else if (mlid === '405') {
          $lower.css('overflow', 'hidden');
          $submenuContent = $(ProductsList.content);
        }
        else if (mlid === '407') {
          $lower.css('overflow', 'hidden');
          $submenuContent = $(ServicesList.content);
        }
        else if (mlid === '504') {
          $lower.css('overflow', 'hidden');
          $submenuContent = $(SearchForm.content);
        }
        else {
          $lower.css('overflow', 'hidden');
          subMenu = getMenuData(mlid, MenuStructure);
          menu    = buildMenu(subMenu);
          $submenuContent = $(menu);
          $submenuContent.css({position: 'absolute', left: ($(this).position().left + $('ul#main-menu').position().left - 12) + 'px'});
        }

        var submenuHeight = 0;

        clearTimeout(subbarTimeout);

        currentMLID = mlid;

        $lower.html('');

        $submenuContent.hide();
        $lower.append($submenuContent);
        submenuHeight = $submenuContent.outerHeight();
        
        if ($.browser.msie && $.browser.version === '7.0' && firstTime && (mlid === '382' || mlid === '376' || mlid === '379')) {
          submenuHeight = submenuHeight * (.6);
        }
        firstTime = false;

        $submenuContent.show();

        $lower.removeClass('noBottomBorder').animate({height: (submenuHeight ? submenuHeight : 0) + 'px'}, 300, '', function () {
          if (mlid === '504') {
            $('.search-form input.form-text').focus();
          }
        });

    }
    else {
        $(this).removeClass('selected');
        currentMLID = null;
        if (false/*$('.topbar table.menu td.active, .topbar table.menu td.active-trail').length*/) {
          var rel = $('.topbar table.menu .active, .topbar table.menu .active-trail').attr('rel');
          generateSubmenu.call($('li[rel="'+rel+'"]').get(0));
        }
        else {
          $lower.animate({height: '0px'}, 300, 'jswing', function () {$(this).addClass('noBottomBorder');});
        }
    }
    return false;
 
  }
  
  $('.subbar-lower').hover(function () {
    clearTimeout(subbarTimeout);
  },
  function () {
    if ($.inArray($('li.selected').attr('rel'), ['381', '405']) === -1) {
      clearTimeout(subbarTimeout);
      subbarTimeout = setTimeout(function () {
        generateSubmenu.call($('li.selected').get(0));
      }, 2000);
    }
  });
  
  $('ul#main-menu li').hover(function () {
    if ($(this).is('.selected')) {
      clearTimeout(subbarTimeout);
    }
  },
  function () {
    if ($(this).is('.selected') && $.inArray($('li.selected').attr('rel'), ['381', '405']) === -1) {
      clearTimeout(subbarTimeout);
      subbarTimeout = setTimeout(function () {
        generateSubmenu.call($('li.selected').get(0));
      }, 2000);
    }
  });
  
  $('body').click(function (e) {
    if (this === e.target && $('li.selected').length > 0) {
      generateSubmenu.call($('li.selected').get(0));
    }
  });

  $('ul#main-menu > li').click(function () {
    // if "login" link
    if ($(this).is('[rel=505]') ||
        $(this).is('[rel=383]') ||
        $(this).is('[rel=551]') ||
        $(this).is('[rel=585]') ||
        $(this).is('[rel=554]')) {
      return true;
    }
    
    
    return generateSubmenu.call(this);
  });
  
  function flip(section_selector, $this) {
    if ($this.parent().is('.open')) {
      $this.parent().removeClass('open');
      $this.siblings('ul').hide();
      $this.attr('src', Drupal.settings.basePath + 'sites/default/themes/agt/images/plus.png');
    }
    else {
      $(section_selector + ' .open ul').hide();
      $(section_selector + ' .open img').attr('src', Drupal.settings.basePath + 'sites/default/themes/agt/images/plus.png');
      $(section_selector + ' .open').removeClass('open');
      $this.parent().addClass('open');
      $this.siblings('ul').show();
      $this.attr('src', Drupal.settings.basePath + 'sites/default/themes/agt/images/minus.png');
    }
  }

  $('.subbar-lower ul.submenu ul .plus').live('click', function () {
    flip('.subbar-lower', $(this));
    $('.subbar-lower').css({height: $('.subbar-lower > div').outerHeight() + 'px'});
  });
  $('.region-sidebar-second ul.submenu ul .plus').live('click', function () {
    flip('.region-sidebar-second', $(this));
  });
  
  $('.my-search-form').live('submit', function () {
    window.location.href = Drupal.settings.basePath + 'search/node/' + escape($('.my-search-form input.form-text').val());
    return false;
  });
  $('.topbar li.menuitem').disableSelection();

});
;
/*
 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
 *
 * Uses the built in easing capabilities added In jQuery 1.1
 * to offer multiple easing options
 *
 * TERMS OF USE - jQuery Easing
 * 
 * Open source under the BSD License. 
 * 
 * Copyright © 2008 George McGinley Smith
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
*/

// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];

jQuery.extend( jQuery.easing,
{
	def: 'easeOutQuad',
	swing: function (x, t, b, c, d) {
		//alert(jQuery.easing.default);
		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
	},
	easeInQuad: function (x, t, b, c, d) {
		return c*(t/=d)*t + b;
	},
	easeOutQuad: function (x, t, b, c, d) {
		return -c *(t/=d)*(t-2) + b;
	},
	easeInOutQuad: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t + b;
		return -c/2 * ((--t)*(t-2) - 1) + b;
	},
	easeInCubic: function (x, t, b, c, d) {
		return c*(t/=d)*t*t + b;
	},
	easeOutCubic: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t + 1) + b;
	},
	easeInOutCubic: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t + b;
		return c/2*((t-=2)*t*t + 2) + b;
	},
	easeInQuart: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t + b;
	},
	easeOutQuart: function (x, t, b, c, d) {
		return -c * ((t=t/d-1)*t*t*t - 1) + b;
	},
	easeInOutQuart: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
		return -c/2 * ((t-=2)*t*t*t - 2) + b;
	},
	easeInQuint: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t*t + b;
	},
	easeOutQuint: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t*t*t + 1) + b;
	},
	easeInOutQuint: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
		return c/2*((t-=2)*t*t*t*t + 2) + b;
	},
	easeInSine: function (x, t, b, c, d) {
		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
	},
	easeOutSine: function (x, t, b, c, d) {
		return c * Math.sin(t/d * (Math.PI/2)) + b;
	},
	easeInOutSine: function (x, t, b, c, d) {
		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
	},
	easeInExpo: function (x, t, b, c, d) {
		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
	},
	easeOutExpo: function (x, t, b, c, d) {
		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
	},
	easeInOutExpo: function (x, t, b, c, d) {
		if (t==0) return b;
		if (t==d) return b+c;
		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
	},
	easeInCirc: function (x, t, b, c, d) {
		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
	},
	easeOutCirc: function (x, t, b, c, d) {
		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
	},
	easeInOutCirc: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
	},
	easeInElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
	},
	easeOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
	},
	easeInOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
	},
	easeInBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*(t/=d)*t*((s+1)*t - s) + b;
	},
	easeOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
	},
	easeInOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158; 
		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
	},
	easeInBounce: function (x, t, b, c, d) {
		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
	},
	easeOutBounce: function (x, t, b, c, d) {
		if ((t/=d) < (1/2.75)) {
			return c*(7.5625*t*t) + b;
		} else if (t < (2/2.75)) {
			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
		} else if (t < (2.5/2.75)) {
			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
		} else {
			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
		}
	},
	easeInOutBounce: function (x, t, b, c, d) {
		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
	}
});

/*
 *
 * TERMS OF USE - EASING EQUATIONS
 * 
 * Open source under the BSD License. 
 * 
 * Copyright © 2001 Robert Penner
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
 */;

