/********************************************************************************************
* Curlypage javascript configuration file
*
* @author    Fernando San Julián
*********************************************************************************************/

/********************************************************************************************
* Curlypage parameters. This shows its acceptable values.
*
*
* swf files
*   flag_swf = 'flag.swf';
*   peel_swf = 'turn.swf';
*
* unique curlypage identifier
*   cpid;
*
* wait icon parameters
*   wait_enabled = 'true';
*   wait_url = 'wait.gif';
*   wait_width = '42';
*   wait_height = '42';
*
* flag style. Values: 'style1', 'style2'.
*   flag_style = 'style1';
* peel style. Values: 'style1', 'style2'.
*   peel_style = 'style1';
*
* flag and peel sizes
*   flag_width = 100;
*   flag_height = 100;
*   peel_width = 500;
*   peel_height = 500;
*
* Position of ear. Values: 'topleft', 'topright', 'bottomleft' or 'bottomright'.
*   peel_position = 'topright';
* Position model. Values: 'absolute' or 'fixed'.
*   peel_position_model = 'absolute';
*
* URL of small image.
*   small_url = 'small.jpg';
* URL of big image.
*   big_url = 'big.jpg';
* The image is mirrored on peel. Values: 0 (false) or 1 (true).
*   mirror = 0;
* Start transition. Values: 'none', 'Blinds', 'Fade', 'Fly', 'Iris', 'Photo', 'Rotate', 'Squeeze', 'Wipe', 'PixelDissolve', 'Zoom'.
*   in_transition = 'Photo';
* Transition duration. Values: 1-9
*   transition_duration = 4;
*
* Color of Peel. Values: 'golden', 'silver', 'custom'
*   peel_color = 'golden';
* Color of Peel Style. Values: 'flat', 'gradient'
*   peel_color_style = 'gradient';
* RGB values for a Custom Peel Color. Values: 0-255.
*   red_value = 0;
*   green_value = 0;
*   blue_value = 0;
*
* enable or disable link. Values: 0 (disabled) or 1 (enabled).
*   link_enabled = 0;
* Where to open the link. Same or New Window (tab). Values: '_self' or '_blank'.
*   link_target = '_blank';
* URL of link.
*   link = 'http://www.manfer.co.cc';
*
* URL of sound on load Peel Ad.
*   load_sound_url = '';
* URL of sound when peel is opened.
*   open_sound_url = '';
* URL of sound when peel is closed.
*   close_sound_url = '';
*
* Speed of flag movement. Values: 1-9
*   flag_speed = 4;
* Speed of peel. Values: 1-9
*   peel_speed = 4;
* Seconds till an automatic open of peel. Values: 0 (no automatic open) >0 (seconds configured).
*   automatic_open = 0;
* Seconds till an automatic close of peel. Values: 0 (no automatic close) >0 (seconds configured).
*   automatic_close = 0;
*
* Close button on open Peel. Values: 0 (disabled) or 1 (enabled).
*   close_button_enable = 0;
* Text on close button.
*   text_on_close_button = 'close';
* RGB values of close button. Values: 0-255.
*   close_red_value = 0;
*   close_green_value = 0;
*   close_blue_value = 0;
*
* Delay seconds to show the curlypage.
*   delay = 0;
*
* Amoung of time the curlypage will be shown. If 0 the curlypage would be shown forever.
*   time_slot = 0;
*
* For grouped curlypages times to repeat this curlypage. Values: 0-9.
* If it is 0, the curlypage would be repeat forever.
*   repeat_times = 1;
*
* Open curlypage with a click. Curlypage by default opens with mouseover. Values: 0 (no click/default mouseover), 1 (opens on click)
*   open_onclick = 0;
*
* Enable tracking. Values 0 (false) || 1 (true)
*   tracking = 0;
*
*********************************************************************************************/

// defaults
var curlypage_getflashplayer = 1;
var curlypage_flash_version = "9.0.0";

var curlypages = new Object();
curlypages["topleft"] = null;
curlypages["topright"] = null;
curlypages["bottomleft"] = null;
curlypages["bottomright"] = null;

/*
 *
 * Help functions to control curlypage flash versions
 * to be sure the correct versions are retrieved from
 * server and not old ones from browser cache are used.
 *
 */
function curlypage_get_flag_version(){
  return 'flag150';
}

function curlypage_get_peel_version(){
  return 'turn170';
}

/*
 * Hide the flag and show the peel
 */
function curlypage_do_peel(cpid, position){

  if (position == 'topleft' || position =='topright') {

    jQuery("#curlypage_peelDiv_" + cpid).css("top", "0px");
    jQuery("#curlypage_flagDiv_" + cpid).css("top", "-1000px");

  } else {

    jQuery("#curlypage_peelDiv_" + cpid).css("bottom", "0px");
    jQuery("#curlypage_flagDiv_" + cpid).css("bottom", "-1000px");

  }

  document.getElementById('curlypage_peel' + cpid).doPeel();

}

/*
 * Hide the peel and show the flag
 */
function curlypage_do_flag(cpid, position){

  if (position == 'topleft' || position =='topright') {

    jQuery("#curlypage_flagDiv_" + cpid).css("top", "0px");
    jQuery("#curlypage_peelDiv_" + cpid).css("top", "-1000px");

  } else {

    jQuery("#curlypage_flagDiv_" + cpid).css("bottom", "0px");
    jQuery("#curlypage_peelDiv_" + cpid).css("bottom", "-1000px");

  }

}

/*
 * Notify the flag when all peel media is loaded
 */
function curlypage_notify_peel_loaded(cpid) {
  document.getElementById('curlypage_flag' + cpid).peelLoaded();
}

/*
 * Hide flag
 */
function curlypage_hide_flag(cpid, position) {
  if (position == 'topleft' || position =='topright') {
    jQuery("#curlypage_flagDiv_" + cpid).css("top", "-1000px");
  } else {
    jQuery("#curlypage_flagDiv_" + cpid).css("bottom", "-1000px");
  }
}

/*
 * Hide peel
 */
function curlypage_hide_peel(cpid, position) {
  if (position == 'topleft' || position =='topright') {
    jQuery("#curlypage_peelDiv_" + cpid).css("top", "-1000px");
  } else {
    jQuery("#curlypage_peelDiv_" + cpid).css("bottom", "-1000px");
  }
}

/*
 * Remove wait layer, show flag and start peel
 */
function curlypage_start(cpid, position) {
  jQuery("#curlypage_waitDiv_" + cpid).remove();
  if (position == 'topleft' || position =='topright') {
    jQuery("#curlypage_flagDiv_" + cpid).css("top", "0px");
  } else {
    jQuery("#curlypage_flagDiv_" + cpid).css("bottom", "0px");
  }
  document.getElementById('curlypage_peel' + cpid).startMovie();
}

/*
 * Curlypage object
 */
function Curlypage(curlypage_vars) {

  this.curlypage_vars = curlypage_vars;

  this.flag_params = {
    play: "true",
    loop: "true",
    menu: "false",
    quality: "autohigh",
    scale: "noscale",
    wmode: "transparent",
    bgcolor: "#ffffff",
    allowScriptAccess: "sameDomain",
    allowFullScreen: "false"
  };

  this.flag_attributes = {
    id: "curlypage_flag" + this.curlypage_vars.cpid,
    name: "curlypage_flag" + this.curlypage_vars.cpid,
    styleclass: "curlypage"
  };

  this.peel_params = {
    play: "true",
    loop: "true",
    menu: "false",
    quality: "autohigh",
    scale: "noscale",
    wmode: "transparent",
    bgcolor: "#ffffff",
    allowScriptAccess: "sameDomain",
    allowFullScreen: "false"
  };

  this.peel_attributes = {
    id: "curlypage_peel" + this.curlypage_vars.cpid,
    name: "curlypage_peel" + this.curlypage_vars.cpid,
    styleclass: "curlypage"
  };

  this.write = curlypage_write;
  this.destroy = curlypage_destroy;
  this.flag_vars = curlypage_get_flag_vars;
  this.peel_vars = curlypage_get_peel_vars;
  this.flag_version = curlypage_get_flag_version;
  this.peel_version = curlypage_get_peel_version;

}

/*
 * Get curlypage flag variables
 */
function curlypage_get_flag_vars () {
  var flag_vars = {};
  flag_vars.cpid = this.curlypage_vars.cpid;
  flag_vars.flagStyle = this.curlypage_vars.flag_style;
  flag_vars.flagWidth = this.curlypage_vars.flag_width;
  flag_vars.flagHeight = this.curlypage_vars.flag_height;
  flag_vars.peelPosition = this.curlypage_vars.peel_position;
  flag_vars.smallURL = this.curlypage_vars.small_url;
  flag_vars.mirror = this.curlypage_vars.mirror;
  flag_vars.inTransition = this.curlypage_vars.in_transition;
  flag_vars.transitionDuration = this.curlypage_vars.transition_duration;
  flag_vars.peelColor = this.curlypage_vars.peel_color;
  flag_vars.peelColorStyle = this.curlypage_vars.peel_color_style;
  flag_vars.redValue = this.curlypage_vars.red_value;
  flag_vars.greenValue = this.curlypage_vars.green_value;
  flag_vars.blueValue = this.curlypage_vars.blue_value;
  flag_vars.loadSoundURL = this.curlypage_vars.load_sound_url;
  flag_vars.flagSpeed = this.curlypage_vars.flag_speed;
  flag_vars.startDelay = this.curlypage_vars.delay;
  flag_vars.timeSlot = this.curlypage_vars.time_slot;
  flag_vars.open_onclick = this.curlypage_vars.open_onclick;
  flag_vars.tracking = this.curlypage_vars.tracking;
  return flag_vars;
}

/*
 * Get curlypage peel variables
 */
function curlypage_get_peel_vars() {
  var peel_vars = {};
  peel_vars.cpid = this.curlypage_vars.cpid;
  peel_vars.peelStyle = this.curlypage_vars.peel_style;
  peel_vars.peelWidth = this.curlypage_vars.peel_width;
  peel_vars.peelHeight = this.curlypage_vars.peel_height;
  peel_vars.peelPosition = this.curlypage_vars.peel_position;
  peel_vars.bigURL = this.curlypage_vars.big_url;
  peel_vars.mirror = this.curlypage_vars.mirror;
  peel_vars.peelColor = this.curlypage_vars.peel_color;
  peel_vars.peelColorStyle = this.curlypage_vars.peel_color_style;
  peel_vars.redValue = this.curlypage_vars.red_value;
  peel_vars.greenValue = this.curlypage_vars.green_value;
  peel_vars.blueValue = this.curlypage_vars.blue_value;
  peel_vars.linkEnabled = this.curlypage_vars.link_enabled;
  peel_vars.linkTarget = this.curlypage_vars.link_target;
  peel_vars.link = this.curlypage_vars.link;
  peel_vars.openSoundURL = this.curlypage_vars.open_sound_url;
  peel_vars.closeSoundURL = this.curlypage_vars.close_sound_url;
  peel_vars.peelSpeed = this.curlypage_vars.peel_speed;
  peel_vars.automaticOpen = this.curlypage_vars.automatic_open;
  peel_vars.automaticClose = this.curlypage_vars.automatic_close;
  peel_vars.close_button_enable = this.curlypage_vars.close_button_enable;
  peel_vars.text_on_close_button = this.curlypage_vars.text_on_close_button.toLowerCase();
  peel_vars.close_redValue = this.curlypage_vars.close_red_value;
  peel_vars.close_greenValue = this.curlypage_vars.close_green_value;
  peel_vars.close_blueValue = this.curlypage_vars.close_blue_value;
  peel_vars.tracking = this.curlypage_vars.tracking;
  return peel_vars;
}

/*
 * Write curlypage layers and flash objects
 */
function curlypage_write() {

  var xPos;
  var yPos;

  // Absolute not available for bottom curlypages.
  // Set it always to fixed to prevent a wrong configuration with absolute.
  if (this.curlypage_vars.peel_position == 'bottomleft' || this.curlypage_vars.peel_position == 'bottomright') {
    this.curlypage_vars.peel_position_model = 'fixed';
  }

  // Check position of curlypage.
  if(this.curlypage_vars.peel_position == 'topleft' || this.curlypage_vars.peel_position == 'bottomleft') {
    xPos = 'left';
  } else {
    xPos = 'right';
  }

  if(this.curlypage_vars.peel_position == 'topleft' || this.curlypage_vars.peel_position == 'topright') {
    yPos = 'top';
  } else {
    yPos = 'bottom';
  }

  // Fixed not available for IE6
  if (jQuery.browser.msie && parseInt(jQuery.browser.version) <= 6) {
    if (yPos == 'bottom') {
      return;
    } else {
      this.curlypage_vars.peel_position_model = 'absolute';
    }
  }

  html = "";

  if (this.curlypage_vars.wait_enable == "1") {
    //Write wait div layer
    html += '<div class="curlypage" id="curlypage_waitDiv_' + this.curlypage_vars.cpid + '" style="position:' + this.curlypage_vars.peel_position_model + '; width:' + this.curlypage_vars.wait_width +'px; height:' + this.curlypage_vars.wait_height + 'px; z-index:9999; ' + xPos + ':0px; ' + yPos + ':0px;">';
    html += '<img src="' + this.curlypage_vars.wait_url + '" />';
    html += '</div>';
  }

  // Write peel div layer
  html += '<div class="curlypage" id="curlypage_peelDiv_' + this.curlypage_vars.cpid  + '" style="position:' + this.curlypage_vars.peel_position_model + '; width:' + this.curlypage_vars.peel_width + 'px; height:' + this.curlypage_vars.peel_height + 'px; z-index:9999; ' + xPos + ':0px; ' + yPos + ':0px;">';

  html += '<div id="curlypage_peelDivAlternative_' + this.curlypage_vars.cpid + '">';
  if(curlypage_getflashplayer) {
    html += '<a href="http://www.adobe.com/go/getflashplayer">';
    html += '<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />';
    html += '</a>';
  }
  html += '</div>';

  // Close peel div layer
  html += '</div>';


  // Write flag div layer
  html += '<div class="curlypage" id="curlypage_flagDiv_' + this.curlypage_vars.cpid  + '" style="position:' + this.curlypage_vars.peel_position_model + '; width:' + this.curlypage_vars.flag_width + 'px; height:' + this.curlypage_vars.flag_height + 'px; z-index:9999; ' + xPos + ':0px; ' + yPos + ':0px;">';

  html += '<div id="curlypage_flagDivAlternative_' + this.curlypage_vars.cpid + '">';
  if(curlypage_getflashplayer) {
    html += '<a href="http://www.adobe.com/go/getflashplayer">';
    html += '<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />';
    html += '</a>';
  }
  html += '</div>';

  // Close flag div layer
  html += '</div>';

  // Append the curlypage layers at the end of body
  jQuery("body:first").append(html);

  // Embed flag
  swfobject.embedSWF(curlypage_flag_swf + "?" + this.flag_version(), "curlypage_flagDivAlternative_" + this.curlypage_vars.cpid, this.curlypage_vars.flag_width, this.curlypage_vars.flag_height, curlypage_flash_version, "expressInstall.swf", this.flag_vars(), this.flag_params, this.flag_attributes);


  // Embed peel
  swfobject.embedSWF(curlypage_peel_swf + "?" + this.peel_version(), "curlypage_peelDivAlternative_" + this.curlypage_vars.cpid, this.curlypage_vars.peel_width, this.curlypage_vars.peel_height, curlypage_flash_version, "expressInstall.swf", this.peel_vars(), this.peel_params, this.peel_attributes);

}

/*
 * Destroy curlypage layers and flash objects
 */
function curlypage_destroy() {
  var cpid = this.curlypage_vars.cpid;
  var position = this.curlypage_vars.peel_position;
  jQuery("#curlypage_flagDiv_" + cpid).fadeOut(
    500,
    function(){
      jQuery("#curlypage_flagDiv_" + cpid).remove();
      curlypage_write_next(position);
    }
  );
  jQuery("#curlypage_peelDiv_" + cpid).fadeOut(
    500,
    function(){
      jQuery("#curlypage_peelDiv_" + cpid).remove();
    }
  );
}

/*
 * Destroy curlypage layers and flash objects on ioerror
 */
function curlypage_error_destroy(cpid, position) {
  curlypages[position].shift();
  jQuery("#curlypage_flagDiv_" + cpid).remove();
  jQuery("#curlypage_peelDiv_" + cpid).remove();
  curlypage_write_next(position);
}


/*
 * Compute next curlypage
 */
function curlypage_next(cpid, position) {

  var curlypage;

  if (curlypages[position].length == 1) {

    curlypage = curlypages[position].shift();

    if (curlypage.curlypage_vars.repeat_times == 0) {
      return;
    }

    if (curlypage.curlypage_vars.repeat_times > 1) {
      curlypage.curlypage_vars.repeat_times--;
      curlypages[position].push(curlypage);
      document.getElementById('curlypage_flag' + cpid).startTimeSlot();
      return;
    }

  }
  else {

    curlypage = curlypages[position].shift();

    if (curlypage.curlypage_vars.repeat_times == 0) {
      curlypages[position].push(curlypage);
    }

    if (curlypage.curlypage_vars.repeat_times > 1) {
      curlypage.curlypage_vars.repeat_times--;
      curlypages[position].push(curlypage);
    }

  }

  curlypage.destroy();

}

/*
 * Write next curlypage layers and flash objects
 */
function curlypage_write_next(position) {

  var curlypage;

  // check if there is another curlypage to show
  if (curlypages[position].length > 0) {

    curlypage = curlypages[position][0];
    curlypage.write();

  }

}

/*
 * Write all initial curlypages
 */
function curlypage_write_curlypages() {

  var corners = ["topleft", "topright", "bottomleft", "bottomright"];
  var position;

  for (var i=0; i<corners.length; i++) {
    position = corners[i];
    if (curlypages[position] != null) {
      curlypage_write_next(position);
    }
  }

}
;

(function ($) {
  Drupal.Panels = {};

  Drupal.Panels.autoAttach = function() {
    if ($.browser.msie) {
      // If IE, attach a hover event so we can see our admin links.
      $("div.panel-pane").hover(
        function() {
          $('div.panel-hide', this).addClass("panel-hide-hover"); return true;
        },
        function() {
          $('div.panel-hide', this).removeClass("panel-hide-hover"); return true;
        }
      );
      $("div.admin-links").hover(
        function() {
          $(this).addClass("admin-links-hover"); return true;
        },
        function(){
          $(this).removeClass("admin-links-hover"); return true;
        }
      );
    }
  };

  $(Drupal.Panels.autoAttach);
})(jQuery);
;
(function($){
	/* hoverIntent by Brian Cherne */
	$.fn.hoverIntent = function(f,g) {
		// default configuration options
		var cfg = {
			sensitivity: 7,
			interval: 100,
			timeout: 0
		};
		// override configuration options with user supplied object
		cfg = $.extend(cfg, g ? { over: f, out: g } : f );

		// instantiate variables
		// cX, cY = current X and Y position of mouse, updated by mousemove event
		// pX, pY = previous X and Y position of mouse, set by mouseover and polling interval
		var cX, cY, pX, pY;

		// A private function for getting mouse position
		var track = function(ev) {
			cX = ev.pageX;
			cY = ev.pageY;
		};

		// A private function for comparing current and previous mouse position
		var compare = function(ev,ob) {
			ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
			// compare mouse positions to see if they've crossed the threshold
			if ( ( Math.abs(pX-cX) + Math.abs(pY-cY) ) < cfg.sensitivity ) {
				$(ob).unbind("mousemove",track);
				// set hoverIntent state to true (so mouseOut can be called)
				ob.hoverIntent_s = 1;
				return cfg.over.apply(ob,[ev]);
			} else {
				// set previous coordinates for next time
				pX = cX; pY = cY;
				// use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)
				ob.hoverIntent_t = setTimeout( function(){compare(ev, ob);} , cfg.interval );
			}
		};

		// A private function for delaying the mouseOut function
		var delay = function(ev,ob) {
			ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
			ob.hoverIntent_s = 0;
			return cfg.out.apply(ob,[ev]);
		};

		// A private function for handling mouse 'hovering'
		var handleHover = function(e) {
			// next three lines copied from jQuery.hover, ignore children onMouseOver/onMouseOut
			var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget;
			while ( p && p != this ) { try { p = p.parentNode; } catch(e) { p = this; } }
			if ( p == this ) { return false; }

			// copy objects to be passed into t (required for event object to be passed in IE)
			var ev = jQuery.extend({},e);
			var ob = this;

			// cancel hoverIntent timer if it exists
			if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); }

			// else e.type == "onmouseover"
			if (e.type == "mouseover") {
				// set "previous" X and Y position based on initial entry point
				pX = ev.pageX; pY = ev.pageY;
				// update "current" X and Y position based on mousemove
				$(ob).bind("mousemove",track);
				// start polling interval (self-calling timeout) to compare mouse coordinates over time
				if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout( function(){compare(ev,ob);} , cfg.interval );}

			// else e.type == "onmouseout"
			} else {
				// unbind expensive mousemove event
				$(ob).unbind("mousemove",track);
				// if hoverIntent state is true, then call the mouseOut function after the specified delay
				if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout( function(){delay(ev,ob);} , cfg.timeout );}
			}
		};

		// bind the function to the two event listeners
		return this.mouseover(handleHover).mouseout(handleHover);
	};
	
})(jQuery);;
/* Copyright (c) 2006 Brandon Aaron (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.
 *
 * $LastChangedDate: 2007-06-19 20:25:28 -0500 (Tue, 19 Jun 2007) $
 * $Rev: 2111 $
 *
 * Version 2.1
 */
(function($){$.fn.bgIframe=$.fn.bgiframe=function(s){if($.browser.msie&&parseInt($.browser.version)<=6){s=$.extend({top:'auto',left:'auto',width:'auto',height:'auto',opacity:true,src:'javascript:false;'},s||{});var prop=function(n){return n&&n.constructor==Number?n+'px':n;},html='<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+'style="display:block;position:absolute;z-index:-1;'+(s.opacity!==false?'filter:Alpha(Opacity=\'0\');':'')+'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+'"/>';return this.each(function(){if($('> iframe.bgiframe',this).length==0)this.insertBefore(document.createElement(html),this.firstChild);});}return this;};if(!$.browser.version)$.browser.version=navigator.userAgent.toLowerCase().match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)[1];})(jQuery);;

/*
 * Superfish v1.4.8 - jQuery menu widget
 * Copyright (c) 2008 Joel Birch
 *
 * Dual licensed under the MIT and GPL licenses:
 * 	http://www.opensource.org/licenses/mit-license.php
 * 	http://www.gnu.org/licenses/gpl.html
 *
 * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt
 */

;(function($){
	$.fn.superfish = function(op){

		var sf = $.fn.superfish,
			c = sf.c,
			$arrow = $(['<span class="',c.arrowClass,'"> &#187;</span>'].join('')),
			over = function(){
				var $$ = $(this), menu = getMenu($$);
				clearTimeout(menu.sfTimer);
				$$.showSuperfishUl().siblings().hideSuperfishUl();
			},
			out = function(){
				var $$ = $(this), menu = getMenu($$), o = sf.op;
				clearTimeout(menu.sfTimer);
				menu.sfTimer=setTimeout(function(){
					o.retainPath=($.inArray($$[0],o.$path)>-1);
					$$.hideSuperfishUl();
					if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);}
				},o.delay);	
			},
			getMenu = function($menu){
				var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
				sf.op = sf.o[menu.serial];
				return menu;
			},
			addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };
			
		return this.each(function() {
			var s = this.serial = sf.o.length;
			var o = $.extend({},sf.defaults,op);
			o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){
				$(this).addClass([o.hoverClass,c.bcClass].join(' '))
					.filter('li:has(ul)').removeClass(o.pathClass);
			});
			sf.o[s] = sf.op = o;
			
			$('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
				if (o.autoArrows) addArrow( $('>a:first-child',this) );
			})
			.not('.'+c.bcClass)
				.hideSuperfishUl();
			
			var $a = $('a',this);
			$a.each(function(i){
				var $li = $a.eq(i).parents('li');
				$a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
			});
			o.onInit.call(this);
			
		}).each(function() {
			var menuClasses = [c.menuClass];
			if (sf.op.dropShadows  && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass);
			$(this).addClass(menuClasses.join(' '));
		});
	};

	var sf = $.fn.superfish;
	sf.o = [];
	sf.op = {};
	sf.IE7fix = function(){
		var o = sf.op;
		if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined)
			this.toggleClass(sf.c.shadowClass+'-off');
		};
	sf.c = {
		bcClass     : 'sf-breadcrumb',
		menuClass   : 'sf-js-enabled',
		anchorClass : 'sf-with-ul',
		arrowClass  : 'sf-sub-indicator',
		shadowClass : 'sf-shadow'
	};
	sf.defaults = {
		hoverClass	: 'sfHover',
		pathClass	: 'overideThisToUse',
		pathLevels	: 1,
		delay		: 800,
		animation	: {opacity:'show'},
		speed		: 'normal',
		autoArrows	: true,
		dropShadows : true,
		disableHI	: false,		// true disables hoverIntent detection
		onInit		: function(){}, // callback functions
		onBeforeShow: function(){},
		onShow		: function(){},
		onHide		: function(){}
	};
	$.fn.extend({
		hideSuperfishUl : function(){
			var o = sf.op,
				not = (o.retainPath===true) ? o.$path : '';
			o.retainPath = false;
			var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass)
					.find('>ul').hide().css('visibility','hidden');
			o.onHide.call($ul);
			return this;
		},
		showSuperfishUl : function(){
			var o = sf.op,
				sh = sf.c.shadowClass+'-off',
				$ul = this.addClass(o.hoverClass)
					.find('>ul:hidden').css('visibility','visible');
			sf.IE7fix.call($ul);
			o.onBeforeShow.call($ul);
			$ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); });
			return this;
		}
	});

})(jQuery);
;

/*
 * Supersubs v0.2b - jQuery plugin
 * Copyright (c) 2008 Joel Birch
 *
 * Dual licensed under the MIT and GPL licenses:
 * 	http://www.opensource.org/licenses/mit-license.php
 * 	http://www.gnu.org/licenses/gpl.html
 *
 *
 * This plugin automatically adjusts submenu widths of suckerfish-style menus to that of
 * their longest list item children. If you use this, please expect bugs and report them
 * to the jQuery Google Group with the word 'Superfish' in the subject line.
 *
 */

;(function($){ // $ will refer to jQuery within this closure

	$.fn.supersubs = function(options){
		var opts = $.extend({}, $.fn.supersubs.defaults, options);
		// return original object to support chaining
		return this.each(function() {
			// cache selections
			var $$ = $(this);
			// support metadata
			var o = $.meta ? $.extend({}, opts, $$.data()) : opts;
			// get the font size of menu.
			// .css('fontSize') returns various results cross-browser, so measure an em dash instead
			var fontsize = $('<li id="menu-fontsize">&#8212;</li>').css({
				'padding' : 0,
				'position' : 'absolute',
				'top' : '-999em',
				'width' : 'auto'
			}).appendTo($$).width(); //clientWidth is faster, but was incorrect here
			// remove em dash
			$('#menu-fontsize').remove();
			// cache all ul elements
			$ULs = $$.find('ul');
			// loop through each ul in menu
			$ULs.each(function(i) {	
				// cache this ul
				var $ul = $ULs.eq(i);
				// get all (li) children of this ul
				var $LIs = $ul.children();
				// get all anchor grand-children
				var $As = $LIs.children('a');
				// force content to one line and save current float property
				var liFloat = $LIs.css('white-space','nowrap').css('float');
				// remove width restrictions and floats so elements remain vertically stacked
				var emWidth = $ul.add($LIs).add($As).css({
					'float' : 'none',
					'width'	: 'auto'
				})
				// this ul will now be shrink-wrapped to longest li due to position:absolute
				// so save its width as ems. Clientwidth is 2 times faster than .width() - thanks Dan Switzer
				.end().end()[0].clientWidth / fontsize;
				// add more width to ensure lines don't turn over at certain sizes in various browsers
				emWidth += o.extraWidth;
				// restrict to at least minWidth and at most maxWidth
				if (emWidth > o.maxWidth)		{ emWidth = o.maxWidth; }
				else if (emWidth < o.minWidth)	{ emWidth = o.minWidth; }
				emWidth += 'em';
				// set ul to width in ems
				$ul.css('width',emWidth);
				// restore li floats to avoid IE bugs
				// set li width to full width of this ul
				// revert white-space to normal
				$LIs.css({
					'float' : liFloat,
					'width' : '100%',
					'white-space' : 'normal'
				})
				// update offset position of descendant ul to reflect new width of parent
				.each(function(){
					var $childUl = $('>ul',this);
					var offsetDirection = $childUl.css('left')!==undefined ? 'left' : 'right';
					$childUl.css(offsetDirection,emWidth);
				});
			});
			
		});
	};
	// expose defaults
	$.fn.supersubs.defaults = {
		minWidth		: 9,		// requires em unit.
		maxWidth		: 25,		// requires em unit.
		extraWidth		: 0			// extra width can ensure lines don't sometimes turn over due to slight browser differences in how they round-off values
	};
	
})(jQuery); // plugin code ends
;

