//Brand URLS

var url = document.location.href;
var data;
var numImages;

//Images to Display based on Location

if (url.indexOf("/auto/") > -1 || url.indexOf("_auto") > -1){
	    
	data = "/root/binary/johnson/images/brandBar/auto/";
	numImages = 2;

}else if (url.indexOf("/home/") > -1 || url.indexOf("_home") > -1){

	data = "/root/binary/johnson/images/brandBar/home/";
	numImages = 2;
	
}else if (url.indexOf("planbenefit") > -1){

	data = "/root/binary/johnson/images/brandBar/planbenefit/";
	numImages = 1;
	
}else if (url.indexOf("about_careers.jspx") > -1){

	data = "/root/binary/johnson/images/brandBar/career/";
	numImages = 1;
	
}else if (url.indexOf("about_contact") > -1){
	
	data = "/root/binary/johnson/images/brandBar/contact/";
	numImages = 1;

}else if (url.indexOf("about") > -1){
	
	data = "/root/binary/johnson/images/brandBar/about/";
	numImages = 1;
	
}else if (url.indexOf("learn") > -1){

	data = "/root/binary/johnson/images/brandBar/learn/";
	numImages = 1;

}else if (url.indexOf("claims") > -1){

	data = "/root/binary/johnson/images/brandBar/claims/";
	numImages = 1;

}else if (url.indexOf("y1004") > -1){

	data = "/root/binary/johnson/images/brandBar/pixels/";
	numImages = 1;

}else{

	data = "/root/binary/johnson/images/brandBar/";
	numImages = 1;
}


// Change Font Size 

	var sizeCount = 0;
	var sizePref = 0;
	var textSize= new Array(1, 1.2, 1.3, 1.4)

	function decreaseFontSize()
	{
		if(sizeCount != 0)
		{
			sizeCount = parseInt(sizeCount);
		}
		sizeCount = sizeCount-1;
		if(sizeCount <= 0)
		{
			sizeCount = 0;
		}
		document.getElementById("contentArea").style.fontSize = textSize[sizeCount]+"em";
		

		createCookie('textSize_pref', sizeCount, 365);
		
	}
	
	function increaseFontSize(tSize)
	{
		if(sizeCount != 0)
		{
			sizeCount = parseInt(sizeCount);
		}
		
		var textOptLength = textSize.length-1;
		
		if(tSize != null) {
			sizeCount = tSize;
		} else {
			sizeCount = sizeCount+1;
		}
		if(sizeCount >= textOptLength)
		{
			sizeCount = textOptLength;
		}	
		document.getElementById("contentArea").style.fontSize = textSize[sizeCount]+"em";
		
		createCookie('textSize_pref', sizeCount, 365);                                          
	} 
	
/* Cookie Set Up*/

	function createCookie(name,value,days) {
	  if (days) {
	    var date = new Date();
	    date.setTime(date.getTime()+(days*24*60*60*1000));
	    var expires = "; expires="+date.toGMTString();
	  }
	  else var expires = "";
	  document.cookie = name+"="+value+expires+"; path=/";
	}
	 
	function readCookie(name) {
	  var nameEQ = name + "=";
	  var ca = document.cookie.split(';');
	  for(var i=0;i < ca.length;i++) {
	    var c = ca[i];
	    while (c.charAt(0)==' ') c = c.substring(1,c.length);
	    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	  }
	  return null;
	}

/* Read Cookie */

	function textSizePref()
		{
			var cookie = readCookie("textSize_pref");
			if(cookie > 0)
			{
				increaseFontSize(cookie)
			}
		}

// guistuff.js

function Dialog(dialogId){
	this.id					= dialogId;
	this.height			= 150;
	this.width 			= 200;
	this.url				= false;
	this.title			= '';
	this.imageId		= false;
	this.onclose		= function(){};
	this.closeImg 	= 'close-small.gif';
	this.showTitle	= true;
	this.contentDiv	= false;
	this.modal 			= true;
	this.shadow			= false;
	this.backColor		= '#fff';
}

Dialog.prototype.show = function(imageId) {
	// only proceed if we haven't before
	if(document.getElementById(this.id) != null) return false;
	
	// imageId is an optional parameter
	this.imageId = (typeof imageId == 'undefined'?false:imageId);

	var bodyEl = document.getElementsByTagName("body")[0];
	var divEl = document.createElement("div");
	
	divEl.id = this.id;
	divEl.className = 'guiDialog';
	divEl.style.visibility = 'hidden';
	divEl.style.backgroundColor = this.backColor;
	
	var scrollPos = gs_getScrollingPosition();
	var viewSize = gs_getViewportSize();
	var pageDim = gs_getPageDimensions();
	
	if(viewSize[1] > pageDim[1]) pageDim[1] = viewSize[1];
	
	// create the overlay
	if(this.modal){
		var overlayEl = document.createElement("div");
		overlayEl.id = 'overlay';
		//overlayEl.style.height = ((viewSize[1] > bodyEl.offsetHeight)?viewSize[1]:bodyEl.offsetHeight + 30) + 'px';
		//overlayEl.style.width = ((viewSize[0] > bodyEl.offsetWidth)?viewSize[0]:bodyEl.offsetWidth + 30) + 'px';
		overlayEl.style.height = pageDim[1] + 'px';
		overlayEl.style.width = pageDim[0] + 'px';
	}

	// create the titlebar
	var titleBarEl = document.createElement("div");
	titleBarEl.id = this.id + '_titleBar';
	titleBarEl.className = 'guiTitlebar';
	
	// create the close button
	var closeEl = document.createElement('a');
	var closeImgEl = document.createElement('img');
	closeImgEl.src = this.closeImg;
	closeEl.style.border = 'none';
	closeEl.style.cssFloat = 'right';
	closeEl.style.styleFloat = 'right';
	closeEl.appendChild(closeImgEl);
	closeEl.href='javascript:Dialog_Dispose(\'' + this.id + '\');';
	closeEl.onclick = this.onclose;
	
	// add the titlebar text
	titleBarEl.appendChild(closeEl);
	titleBarEl.appendChild(document.createTextNode(this.title));
	
	//add the title bar
	if(this.showTitle)
		divEl.appendChild(titleBarEl);
	
	// add the dialog box to the document
	bodyEl.appendChild(divEl);
	
	//add iframe if url specified
	if(this.url != false){
		var iframe = document.createElement('iframe');
		iframe.src = this.url
		iframe.frameBorder = '0';
		iframe.scrolling = 'no';
		iframe.style.border = 'none';
		iframe.style.width = this.width + 'px';
		iframe.style.height = this.height - (this.showTitle?titleBarEl.offsetHeight:0) + 'px';
		divEl.appendChild(iframe);
	}
	
	// add image if image specified
	if(this.imageId != false){
		var imageViewEl = new Image();
		var pageImageEl = document.getElementById(this.imageId);
		imageViewEl.src = pageImageEl.src;
		imageViewEl.style.margin = '10px 10px';
		// set window size to image size
		this.height = imageViewEl.height + (this.showTitle?titleBarEl.offsetHeight:0) + 20;
		this.width = imageViewEl.width + 20;
		divEl.appendChild(imageViewEl);
	}
	
	if(this.contentDiv != false){
		var content = document.getElementById(this.contentDiv);
		if(typeof content != 'undefined'){
			var contentDiv = document.createElement('div');
			contentDiv.style.overflow = 'hidden';
			contentDiv.style.width = this.width + 'px';
			contentDiv.style.height = this.height - (this.showTitle?titleBarEl.offsetHeight:0) + 'px';
			contentDiv.innerHTML = content.innerHTML;
			divEl.appendChild(contentDiv);
		}
	}

	var top = scrollPos[1] + (viewSize[1] - this.height)/2;
	var left = scrollPos[0] + (viewSize[0] - this.width)/2;
	
	// set the size and position
	divEl.style.height = this.height + 'px';
	divEl.style.width = this.width + 'px';
	divEl.style.left = left + 'px';
	divEl.style.top = top + 'px';
	
	// drop shadow
	if(this.shadow){
		var shadowEl = document.createElement("div");
		shadowEl.className = 'guiShadow';
		shadowEl.id = 'guiShadow';
		shadowEl.style.height = this.height + 'px';
		shadowEl.style.width = this.width + 'px';
		shadowEl.style.left = left + 6 + 'px';
		shadowEl.style.top = top + 6 + 'px';
		bodyEl.appendChild(shadowEl);
	}
	
	// hide all the select elements
	gs_toggleSelects('hidden');
	
	// add the overlay to the document
	if(this.modal) 
		bodyEl.appendChild(overlayEl);
	
	// show the div element
	divEl.style.visibility = 'visible';

	// attach drag events
	titleBarEl.onmousedown = function(event){
		var event = (typeof event == 'undefined')?window.event:event;
		if((typeof this.id != 'undefined') && (gs_getEventTarget(event).id.indexOf('_titleBar') > 0)){
			document.dragObject = gs_getEventTarget(event).parentNode;
			document.dragObjectShadow = document.getElementById('guiShadow');
			if(document.dragObjectShadow == null)
				document.dragObjectShadow = {style:{left:'',top:''}};
			document.offsetX = (event.clientX + scrollPos[0]) - document.dragObject.offsetLeft;
			document.offsetY = (event.clientY + scrollPos[1]) - document.dragObject.offsetTop;
			// cancel out any text selections 
			document.body.focus();
			document.onselectstart = function(){return false;};
			// if we're dealing with an iframe it needs to be hidden
			var iframes = document.dragObject.getElementsByTagName('iframe');
			if(iframes[0] != null)iframes[0].style.display = 'none';
			document.onmousemove = function(event){
				if(document.dragObject == null){
					document.onmousemove = null;
					document.onmouseup = null;
					document.onselectstart = null;
				}else{
					var event = (typeof event == 'undefined')?window.event:event;
					document.onmouseup = function(event){
						// restore any hidden iframes
						var iframes = document.dragObject.getElementsByTagName('iframe');
						if(iframes[0] != null)iframes[0].style.display = '';
						document.dragObject = null;
					};
					document.dragObject.style.top = event.clientY + scrollPos[1] - document.offsetY + 'px';
					document.dragObject.style.left = event.clientX + scrollPos[0] - document.offsetX + 'px';
					document.dragObjectShadow.style.top = event.clientY + scrollPos[1] - document.offsetY + 6 + 'px';
					document.dragObjectShadow.style.left = event.clientX + scrollPos[0] - document.offsetX + 6 + 'px';
				}
			};
			return false;
		}
	};
	return false;
};

Dialog.prototype.dispose = function(){
	if(document.getElementById(this.id) != null)
		this.onclose();
	Dialog_Dispose(this.id);
	return false;	
};

Dialog.prototype.close = function(){
	if(document.getElementById(this.id) != null)
		this.onclose();
	Dialog_Dispose(this.id);
	return false;
};

function Dialog_Dispose(dialogId) {
	var divEl = document.getElementById(dialogId);

	if(typeof divEl != 'undefined'){
		divEl.parentNode.removeChild(divEl);
		
		var mask = document.getElementById(divEl.id + '_mask');
		if(typeof mask != 'undefined' && mask != null) mask.parentNode.removeChild(mask);
		
		// remove the overlay
		var overlayEl = document.getElementById('overlay');
		if(typeof overlayEl != 'undefined' && overlayEl != null)
			overlayEl.parentNode.removeChild(overlayEl);
			
		// remove the shadow
		var shadowEl = document.getElementById('guiShadow');
		if(typeof shadowEl != 'undefined' && shadowEl != null)
			shadowEl.parentNode.removeChild(shadowEl);
		
		// show all the select elements
		gs_toggleSelects('visible');
	}
}


function ToolTips(){
	this.bgcolor = '#fff';
	this.color = '#000';
	this.data = false;
	this.cssClass = 'tooltip';
	this.delay = 500;
}

ToolTips.prototype.init = function(){
	var labels = document.getElementsByTagName('label');
	for(var i=0; i < labels.length; i++){
		var label = labels[i];
		if(label.title != ''){
			var forEl = document.getElementById(label.htmlFor);
			forEl.toolTip = new ToolTip(label.firstChild.nodeValue, label.title, forEl);
			gs_attachEventListener(forEl, 'mouseover', showToolTip, false);
			gs_attachEventListener(forEl, 'mouseout', hideToolTip, false);
			//attachEventListener(forEl, 'click', hideToolTip, false);
		}
	}
}

function ToolTip(title, content, owner){
	this.content = content;
	this.title = title;
	this.owner = owner;
	this.div = null;
}

ToolTip.prototype.show = function(){
	var tip = document.createElement('div');
	this.div = tip;

	var titleTag = document.createElement('h1');
	titleTag.appendChild(document.createTextNode(this.title));
	tip.appendChild(titleTag);
	tip.appendChild(document.createTextNode(this.content));

	var ownerPos = findPos(this.owner);
	
	tip.className = document.toolTips.cssClass;
	tip.style.backgroundColor = document.toolTips.bgcolor;
	tip.style.position = 'absolute';

	tip.style.left = ownerPos[0] + this.owner.offsetWidth + 10 + 'px';
	tip.style.top = ownerPos[1] + 'px';

	document.getElementsByTagName('body')[0].appendChild(tip);
}

ToolTip.prototype.showDelay = function(){
	var self = this;
	this.timer = setTimeout(function(){self.show()}, document.toolTips.delay);
}

ToolTip.prototype.hide = function(){
	if(typeof this.timer != 'undefined'){
		clearTimeout(this.timer);
	}
	if(this.div != null){
		this.div.parentNode.removeChild(this.div);
		this.div = null;
	}
}

function showToolTip(){
	this.toolTip.showDelay();
}

function hideToolTip(event){
	this.toolTip.hide(event);
}

function showToolTip_old(event){
	event = (event == 'undefined')?window.event:event;
	if(document.toolTips == 'undefined') return;
	
	var tip = document.createElement('div');
	var content = document.toolTips.data[this.id];
	
	this.toolTip = tip;
	tip.id = this.id + '_tooltip';
	
	tip.appendChild(document.createTextNode(content));
	
	var scrollPos = getScrollingPosition();
	var cursorPos = [0,0];
	
	if(typeof event.pageX != 'undefined' && typeof event.x != 'undefined'){
		cursorPos[0] = event.pageX;
		cursorPos[1] = event.pageY;
	}else{
		cursorPos[0] = event.clientX + scrollPos[0];
		cursorPos[1] = event.clientY + scrollPos[1];
	}
	
	tip.style.backgroundColor = document.toolTips.bgcolor;
	tip.style.color = document.toolTips.color;
	tip.style.border = '1px solid silver';
	tip.style.padding = '5px';
	tip.style.position = 'absolute';
	tip.style.left = cursorPos[0] + 10 + 'px';
	tip.style.top = cursorPos[1] + 10 + 'px';
	document.getElementsByTagName('body')[0].appendChild(tip);
}

function hideToolTip_old(event){
	event = (event == 'undefined')?window.event:event;
	
	if(this.toolTip == null) return;
	
	this.toolTip.parentNode.removeChild(this.toolTip);
	this.toolTip = null;
}


function gs_createMask(obj){
	var iframe = document.createElement('iframe');

	iframe.src = 'javascript:false;';
	iframe.tabIndex = '-1';
	iframe.style.border = 'none';
	iframe.style.position = 'absolute';
	iframe.style.zIndex = '9998';
	iframe.id = obj.id + '_mask';
	iframe.style.top = obj.offsetTop + 'px';
	iframe.style.left = obj.offsetLeft + 'px';
	iframe.style.width = obj.offsetWidth + 'px';
	iframe.style.height = obj.offsetHeight + 'px';
	obj.parentNode.appendChild(iframe);
}

function gs_getEventTarget(event){
	if(typeof event.target == 'undefined'){
		return event.srcElement;
	}else{
		return event.target;
	}
}

function gs_getScrollingPosition(){
 var position = [0, 0];

 if (typeof window.pageYOffset != 'undefined')
 {
   position = [
       window.pageXOffset,
       window.pageYOffset
   ];
 }

 else if (typeof document.documentElement.scrollTop
     != 'undefined' && document.documentElement.scrollTop > 0)
 {
   position = [
       document.documentElement.scrollLeft,
       document.documentElement.scrollTop
   ];
 }

 else if (typeof document.body.scrollTop != 'undefined')
 {
   position = [
       document.body.scrollLeft,
       document.body.scrollTop
   ];
 }

 return position;
}

function gs_getViewportSize(){
 var size = [0, 0];

 if (typeof window.innerWidth != 'undefined')
 {
   size = [
       window.innerWidth,
       window.innerHeight
   ];
 }
 else if (typeof document.documentElement != 'undefined'
     && typeof document.documentElement.clientWidth !=
     'undefined' && document.documentElement.clientWidth != 0)
 {
   size = [
       document.documentElement.clientWidth,
       document.documentElement.clientHeight
   ];
 }
 else
 {
   size = [
       document.getElementsByTagName('body')[0].clientWidth,
       document.getElementsByTagName('body')[0].clientHeight
   ];
 }

 return size;
}

function gs_getPageDimensions() {
	var body = document.getElementsByTagName('body')[0];
	var bodyOffsetWidth = 0;
	var bodyOffsetHeight = 0;
	var bodyScrollWidth = 0;
	var bodyScrollHeight = 0;
	var pageDimensions = [0,0];
	
	if (typeof document.documentElement != 'undefined' && typeof document.documentElement.scrollWidth != 'undefined'){
			pageDimensions[0] = document.documentElement.scrollWidth;
			pageDimensions[1] = document.documentElement.scrollHeight;
	}
	
	bodyOffsetWidth = body.offsetWidth;
	bodyOffsetHeight = body.offsetHeight;
	bodyScrollWidth = body.scrollWidth;
	bodyScrollHeight = body.scrollHeight;
	
	if (bodyOffsetWidth > pageDimensions[0]) pageDimensions[0] = bodyOffsetWidth;
	
	if (bodyOffsetHeight > pageDimensions[1]) pageDimensions[1] = bodyOffsetHeight;
	
	if (bodyScrollWidth > pageDimensions[0]) pageDimensions[0] = bodyScrollWidth;
	
	if (bodyScrollHeight > pageDimensions[1]) pageDimensions[1] = bodyScrollHeight;
	
	return pageDimensions;
}

function gs_findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		// this loop will continue until offsetParent doesn't exist and obj evals to null
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function gs_attachEventListener(target, eventType, functionRef, capture){
	if(typeof target.addEventListener != 'undefined'){
		target.addEventListener(eventType, functionRef, capture);
	}else if(typeof target.attachEvent != 'undefined'){
		var functionString = eventType + functionRef;
		target['e' + functionString] = functionRef;
		
		target[functionString] = function(event){
			if(typeof event == 'undefined'){
				event = window.event;
			}
			target['e' + functionString](event);
		};
		target.attachEvent('on' + eventType, target[functionString]);
	}else{
		eventType = 'on' + eventType;
		
		if(typeof target[eventType] == 'function'){
			var oldListener = target[eventType];
			target[eventType] = function(){
				oldListener();
				return functionRef();
			};
		}else{
			target[eventType] = functionRef;
		}
	}
}

function gs_detachEventListener(target, eventType, functionRef, capture){
	if(typeof target.removeEventListener != 'undefined'){
		target.removeEventListener(eventType, functionRef, capture);
	}else if(typeof target.detachEvent != 'undefined'){
		var functionString = eventType + functionRef;
		target.detachEvent('on' + eventType, target[functionString]);
		target['e' + functionString] = null;
		target[functionString] = null;
	}else{
		target['on' + eventType] = null;
	}
}

function gs_toggleSelects(visibility){
	if(!document.all) return false;
    selects = document.getElementsByTagName('select');
    for(i = 0; i < selects.length; i++) {
        selects[i].style.visibility = visibility;
    }
}





//Dialog Control


function submitMyResume(jobId)
{
   var submitResume = new Dialog("submitResume");
   submitResume.width = 440;
   submitResume.height = 375;
   submitResume.title = "Submit Resume";
   submitResume.url = "/PWS_Site/english_content/Submit_Resume.jsp?jobno=" + jobId;
   submitResume.closeImg = "/root/binary/johnson/images/close-small.jpg";
   submitResume.showTitle = true;
   submitResume.show();
}

function viewJob(jobId)
{
   var jobDialog = new Dialog("jobDialog");
   jobDialog.width = 545;
   jobDialog.height = 570;
   jobDialog.title = "View Job";
   jobDialog.url = "/english/ViewJob?id=" + jobId;
   jobDialog.closeImg = "/root/binary/johnson/images/close-small.jpg";
   jobDialog.showTitle = true;
   jobDialog.show();
}

function viewSubscribe()
{
   var viewSubscribe = new Dialog("viewSubscribe");
   viewSubscribe.width = 545;
   viewSubscribe.height = 200;
   viewSubscribe.title = "Email Subscription";
   viewSubscribe.url = "/root/home/home_safety/email_subscription.jspx";
   viewSubscribe.closeImg = "/root/binary/johnson/images/close-small.jpg";
   viewSubscribe.showTitle = true;
   viewSubscribe.show();
}

function viewSD()
{
   var viewSD = new Dialog("viewSD");
   viewSD.width = 545;
   viewSD.height = 450;
   viewSD.title = "Smoke Detector";
   viewSD.url = "/root/home/home_safety/smoke_detector.jspx";
   viewSD.closeImg = "/root/binary/johnson/images/close-small.jpg";
   viewSD.showTitle = true;
   viewSD.show();
}

function viewCMD()
{
   var viewCMD = new Dialog("viewCMD");
   viewCMD.width = 545;
   viewCMD.height = 400;
   viewCMD.title = "Carbon Monoxide Detector";
   viewCMD.url = "/root/home/home_safety/carbon_monoxide_detector.jspx";
   viewCMD.closeImg = "/root/binary/johnson/images/close-small.jpg";
   viewCMD.showTitle = true;
   viewCMD.show();
}

function viewFE()
{
   var viewFE = new Dialog("viewFE");
   viewFE.width = 545;
   viewFE.height = 580;
   viewFE.title = "Fire Extinguisher";
   viewFE.url = "/root/home/home_safety/fire_extinguisher.jspx";
   viewFE.closeImg = "/root/binary/johnson/images/close-small.jpg";
   viewFE.showTitle = true;
   viewFE.show();
}

function viewCF()
{
   var viewCF = new Dialog("viewCF");
   viewCF.width = 545;
   viewCF.height = 500;
   viewCF.title = "Cooking Fire";
   viewCF.url = "/root/home/home_safety/cooking_fire.jspx";
   viewCF.closeImg = "/root/binary/johnson/images/close-small.jpg";
   viewCF.showTitle = true;
   viewCF.show();
}

function viewWM()
{
   var viewWM = new Dialog("viewWM");
   viewWM.width = 545;
   viewWM.height = 600;
   viewWM.title = "Washing Machines";
   viewWM.url = "/root/home/home_safety/washing_machine.jspx";
   viewWM.closeImg = "/root/binary/johnson/images/close-small.jpg";
   viewWM.showTitle = true;
   viewWM.show();
}

function viewHWH()
{
   var viewHWH = new Dialog("viewHWH");
   viewHWH.width = 545;
   viewHWH.height = 600;
   viewHWH.title = "Hot Water Heater";
   viewHWH.url = "/root/home/home_safety/hot_water_heater.jspx";
   viewHWH.closeImg = "/root/binary/johnson/images/close-small.jpg";
   viewHWH.showTitle = true;
   viewHWH.show();
}

function viewSP()
{
   var viewSP = new Dialog("viewSP");
   viewSP.width = 545;
   viewSP.height = 450;
   viewSP.title = "Sump Pump";
   viewSP.url = "/root/home/home_safety/sump_pump.jspx";
   viewSP.closeImg = "/root/binary/johnson/images/close-small.jpg";
   viewSP.showTitle = true;
   viewSP.show();
}

function viewSB()
{
   var viewSB = new Dialog("viewSB");
   viewSB.width = 545;
   viewSB.height = 600;
   viewSB.title = "Sewer Backup";
   viewSB.url = "/root/home/home_safety/sewer_backup.jspx";
   viewSB.closeImg = "/root/binary/johnson/images/close-small.jpg";
   viewSB.showTitle = true;
   viewSB.show();
}

function viewEH()
{
   var viewEH = new Dialog("viewEH");
   viewEH.width = 545;
   viewEH.height = 600;
   viewEH.title = "Exterior of the Home";
   viewEH.url = "/root/home/home_safety/exterior_of_home.jspx";
   viewEH.closeImg = "/root/binary/johnson/images/close-small.jpg";
   viewEH.showTitle = true;
   viewEH.show();
}

//Address Utils

// redirect to proper content page based on submitted postal code
// requires service variable
function contactUs(frm, postalCode, errorMsg){
	var prov = frm.elements['prov'];
	var srv = frm.elements['service'];
	srv.value = service;
        if (postalCode.match(/[A]\d[A-Z]\s?\d[A-Z]\d/i)){
  	  url = '/root/about/about_contact_nl.jspx?prov=NL&pc='+postalCode+'&svc='+service;
  	  prov.value='NL';
	} else if (postalCode.match(/[B]\d[A-Z]\s?\d[A-Z]\d/i)){
  	  url = '/root/about/about_contact_ns.jspx?prov=NS&pc='+postalCode+'&svc='+service
  	  prov.value='NS';

	} else if (postalCode.match(/[C]\d[A-Z]\s?\d[A-Z]\d/i)){
  	  url = '/root/about/about_contact_pe.jspx?prov=PE&'+postalCode+'&svc='+service
  	  prov.value='PE';

	} else if (postalCode.match(/[E]\d[A-Z]\s?\d[A-Z]\d/i)){
  	  url = '/root/about/about_contact_nb.jspx?prov=NB&pc='+postalCode+'&svc='+service
  	  prov.value='NB';

	} else if (postalCode.match(/[GHJ]\d[A-Z]\s?\d[A-Z]\d/i)){
  	  url = '/root/about/about_contact_on.jspx?prov=QU&pc='+postalCode+'&svc='+service
  	  prov.value='QU';

	} else if (postalCode.match(/[KLMNP]\d[A-Z]\s?\d[A-Z]\d/i)){
  	  url = '/root/about/about_contact_on.jspx?prov=ON&pc='+postalCode+'&svc='+service
  	  prov.value='ON';

	} else if (postalCode.match(/[R]\d[A-Z]\s?\d[A-Z]\d/i)){
  	  url = '/root/about/about_contact_ab.jspx?prov=MB&pc='+postalCode+'&svc='+service
  	  prov.value='MB';

	} else if (postalCode.match(/[S]\d[A-Z]\s?\d[A-Z]\d/i)){
  	  url = '/root/about/about_contact_ab.jspx?prov=SK&pc='+postalCode+'&svc='+service
  	  prov.value='SK';

	} else if (postalCode.match(/[T]\d[A-Z]\s?\d[A-Z]\d/i)){
	  url = '/root/about/about_contact_ab.jspx?prov=AB&pc='+postalCode+'&svc='+service
  	  prov.value='AB';

	} else if (postalCode.match(/[V]\d[A-Z]\s?\d[A-Z]\d/i)){
	  url = '/root/about/about_contact_bc.jspx?prov=BC&pc='+postalCode+'&svc='+service
  	  prov.value='BC';

	} else if (postalCode.match(/[X]\d[A-Z]\s?\d[A-Z]\d/i)){
	  url = '/root/about/about_contact_ab.jspx?prov=NU&pc='+postalCode+'&svc='+service
  	  prov.value='NU';

	} else if (postalCode.match(/[Y]\d[A-Z]\s?\d[A-Z]\d/i)){
	  url = '/root/about/about_contact_ab.jspx?prov=YT&pc='+postalCode+'&svc='+service
  	  prov.value='YT';

    } else {	
	  alert(errorMsg);
   	  prov.value='UK';
	  return false;
	}

	var location = window.location.protocol + '//' + window.location.host ;
	var newlocation = location +''+ url ;
	frm.action=newlocation;

	
	return true;
}


//Careers Interface

/*
 * Script from NETTUTS.com [by James Padolsey]
 * @requires jQuery($), jQuery UI & sortable/draggable UI modules
 */

var iNettuts = {
    
    jQuery : $,
    
    settings : {
        columns : '.column',
        widgetSelector: '.widget',
        handleSelector: '.widget-head',
        contentSelector: '.widget-content',
        widgetDefault : {
            movable: false,
            removable: false,
            collapsible: true,
            editable: false,
            colorClasses : ['color-yellow', 'color-red', 'color-blue', 'color-white', 'color-orange', 'color-green']
        },
        widgetIndividual : {
            intro : {
                movable: false,
                removable: false,
                collapsible: false,
                editable: false
            }
        }
    },

    init : function () {
        this.attachStylesheet('/root/binary/johnson/css/widget.css');
        this.addWidgetControls();
    },
    
    getWidgetSettings : function (id) {
        var $ = this.jQuery,
            settings = this.settings;
        return (id&&settings.widgetIndividual[id]) ? $.extend({},settings.widgetDefault,settings.widgetIndividual[id]) : settings.widgetDefault;
    },
    
    addWidgetControls : function () {
        var iNettuts = this,
            $ = this.jQuery,
            settings = this.settings;
            
        $(settings.widgetSelector, $(settings.columns)).each(function () {
            var thisWidgetSettings = iNettuts.getWidgetSettings(this.id);
            if (thisWidgetSettings.removable) {
                $('<a href="#" class="remove">CLOSE</a>').mousedown(function (e) {
                    e.stopPropagation();    
                }).click(function () {
                    if(confirm('This widget will be removed, ok?')) {
                        $(this).parents(settings.widgetSelector).animate({
                            opacity: 0    
                        },function () {
                            $(this).wrap('<div/>').parent().slideUp(function () {
                                $(this).remove();
                            });
                        });
                    }
                    return false;
                }).appendTo($(settings.handleSelector, this));
            }
            
            if (thisWidgetSettings.editable) {
                $('<a href="#" class="edit">EDIT</a>').mousedown(function (e) {
                    e.stopPropagation();    
                }).toggle(function () {
                    $(this).css({backgroundPosition: '-66px 0', width: '55px'})
                        .parents(settings.widgetSelector)
                            .find('.edit-box').show().find('input').focus();
                    return false;
                },function () {
                    $(this).css({backgroundPosition: '', width: ''})
                        .parents(settings.widgetSelector)
                            .find('.edit-box').hide();
                    return false;
                }).appendTo($(settings.handleSelector,this));
                $('<div class="edit-box" style="display:none;"/>')
                    .append('<ul><li class="item"><label>Change the title?</label><input value="' + $('h3',this).text() + '"/></li>')
                    .append((function(){
                        var colorList = '<li class="item"><label>Available colors:</label><ul class="colors">';
                        $(thisWidgetSettings.colorClasses).each(function () {
                            colorList += '<li class="' + this + '"/>';
                        });
                        return colorList + '</ul>';
                    })())
                    .append('</ul>')
                    .insertAfter($(settings.handleSelector,this));
            }
            
            if (thisWidgetSettings.collapsible) {
                $('<a href="#" class="collapse">COLLAPSE</a>').mousedown(function (e) {
                    e.stopPropagation();    
                }).toggle(function () {
                    $(this).css({backgroundPosition: '-14px 0'})
                        .parents(settings.widgetSelector)
                            .find(settings.contentSelector).hide();
                    return false;
                },function () {
                    $(this).css({backgroundPosition: ''})
                        .parents(settings.widgetSelector)
                            .find(settings.contentSelector).show();
                    return false;
                }).prependTo($(settings.handleSelector,this));
            }
        });
        
        $('.edit-box').each(function () {
            $('input',this).keyup(function () {
                $(this).parents(settings.widgetSelector).find('h3').text( $(this).val().length>20 ? $(this).val().substr(0,20)+'...' : $(this).val() );
            });
            $('ul.colors li',this).click(function () {
                
                var colorStylePattern = /\bcolor-[\w]{1,}\b/,
                    thisWidgetColorClass = $(this).parents(settings.widgetSelector).attr('class').match(colorStylePattern)
                if (thisWidgetColorClass) {
                    $(this).parents(settings.widgetSelector)
                        .removeClass(thisWidgetColorClass[0])
                        .addClass($(this).attr('class').match(colorStylePattern)[0]);
                }
                return false;
                
            });
        });
        
    },
    
    attachStylesheet : function (href) {
        var $ = this.jQuery;
        return $('<link href="' + href + '" rel="stylesheet" type="text/css" />').appendTo('head');
    }
  
};

iNettuts.init();

/*!
 * jQuery Cycle Plugin (with Transition Definitions)
 * Examples and documentation at: http://jquery.malsup.com/cycle/
 * Copyright (c) 2007-2009 M. Alsup
 * Version: 2.72 (09-SEP-2009)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 * Requires: jQuery v1.2.6 or later
 *
 * Originally based on the work of:
 *	1) Matt Oakes
 *	2) Torsten Baldes (http://medienfreunde.com/lab/innerfade/)
 *	3) Benjamin Sterling (http://www.benjaminsterling.com/experiments/jqShuffle/)
 */
;(function($) {

var ver = '2.72';

// if $.support is not defined (pre jQuery 1.3) add what I need
if ($.support == undefined) {
	$.support = {
		opacity: !($.browser.msie)
	};
}

function debug(s) {
	if ($.fn.cycle.debug)
		log(s);
}		
function log() {
	if (window.console && window.console.log)
		window.console.log('[cycle] ' + Array.prototype.join.call(arguments,' '));
	//$('body').append('<div>'+Array.prototype.join.call(arguments,' ')+'</div>');
};

// the options arg can be...
//   a number  - indicates an immediate transition should occur to the given slide index
//   a string  - 'stop', 'pause', 'resume', or the name of a transition effect (ie, 'fade', 'zoom', etc)
//   an object - properties to control the slideshow
//
// the arg2 arg can be...
//   the name of an fx (only used in conjunction with a numeric value for 'options')
//   the value true (only used in conjunction with a options == 'resume') and indicates
//	 that the resume should occur immediately (not wait for next timeout)

$.fn.cycle = function(options, arg2) {
	var o = { s: this.selector, c: this.context };

	// in 1.3+ we can fix mistakes with the ready state
	if (this.length === 0 && options != 'stop') {
		if (!$.isReady && o.s) {
			log('DOM not ready, queuing slideshow');
			$(function() {
				$(o.s,o.c).cycle(options,arg2);
			});
			return this;
		}
		// is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
		log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
		return this;
	}

	// iterate the matched nodeset
	return this.each(function() {
		var opts = handleArguments(this, options, arg2);
		if (opts === false)
			return;

		// stop existing slideshow for this container (if there is one)
		if (this.cycleTimeout)
			clearTimeout(this.cycleTimeout);
		this.cycleTimeout = this.cyclePause = 0;

		var $cont = $(this);
		var $slides = opts.slideExpr ? $(opts.slideExpr, this) : $cont.children();
		var els = $slides.get();
		if (els.length < 2) {
			log('terminating; too few slides: ' + els.length);
			return;
		}

		var opts2 = buildOptions($cont, $slides, els, opts, o);
		if (opts2 === false)
			return;

		var startTime = opts2.continuous ? 10 : getTimeout(opts2.currSlide, opts2.nextSlide, opts2, !opts2.rev);

		// if it's an auto slideshow, kick it off
		if (startTime) {
			startTime += (opts2.delay || 0);
			if (startTime < 10)
				startTime = 10;
			debug('first timeout: ' + startTime);
			this.cycleTimeout = setTimeout(function(){go(els,opts2,0,!opts2.rev)}, startTime);
		}
	});
};

// process the args that were passed to the plugin fn
function handleArguments(cont, options, arg2) {
	if (cont.cycleStop == undefined)
		cont.cycleStop = 0;
	if (options === undefined || options === null)
		options = {};
	if (options.constructor == String) {
		switch(options) {
		case 'stop':
			cont.cycleStop++; // callbacks look for change
			if (cont.cycleTimeout)
				clearTimeout(cont.cycleTimeout);
			cont.cycleTimeout = 0;
			$(cont).removeData('cycle.opts');
			return false;
		case 'pause':
			cont.cyclePause = 1;
			return false;
		case 'resume':
			cont.cyclePause = 0;
			if (arg2 === true) { // resume now!
				options = $(cont).data('cycle.opts');
				if (!options) {
					log('options not found, can not resume');
					return false;
				}
				if (cont.cycleTimeout) {
					clearTimeout(cont.cycleTimeout);
					cont.cycleTimeout = 0;
				}
				go(options.elements, options, 1, 1);
			}
			return false;
		case 'prev':
		case 'next':
			var opts = $(cont).data('cycle.opts');
			if (!opts) {
				log('options not found, "prev/next" ignored');
				return false;
			}
			$.fn.cycle[options](opts);
			return false;
		default:
			options = { fx: options };
		};
		return options;
	}
	else if (options.constructor == Number) {
		// go to the requested slide
		var num = options;
		options = $(cont).data('cycle.opts');
		if (!options) {
			log('options not found, can not advance slide');
			return false;
		}
		if (num < 0 || num >= options.elements.length) {
			log('invalid slide index: ' + num);
			return false;
		}
		options.nextSlide = num;
		if (cont.cycleTimeout) {
			clearTimeout(cont.cycleTimeout);
			cont.cycleTimeout = 0;
		}
		if (typeof arg2 == 'string')
			options.oneTimeFx = arg2;
		go(options.elements, options, 1, num >= options.currSlide);
		return false;
	}
	return options;
};

function removeFilter(el, opts) {
	if (!$.support.opacity && opts.cleartype && el.style.filter) {
		try { el.style.removeAttribute('filter'); }
		catch(smother) {} // handle old opera versions
	}
};

// one-time initialization
function buildOptions($cont, $slides, els, options, o) {
	// support metadata plugin (v1.0 and v2.0)
	var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
	if (opts.autostop)
		opts.countdown = opts.autostopCount || els.length;

	var cont = $cont[0];
	$cont.data('cycle.opts', opts);
	opts.$cont = $cont;
	opts.stopCount = cont.cycleStop;
	opts.elements = els;
	opts.before = opts.before ? [opts.before] : [];
	opts.after = opts.after ? [opts.after] : [];
	opts.after.unshift(function(){ opts.busy=0; });

	// push some after callbacks
	if (!$.support.opacity && opts.cleartype)
		opts.after.push(function() { removeFilter(this, opts); });
	if (opts.continuous)
		opts.after.push(function() { go(els,opts,0,!opts.rev); });

	saveOriginalOpts(opts);

	// clearType corrections
	if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
		clearTypeFix($slides);

	// container requires non-static position so that slides can be position within
	if ($cont.css('position') == 'static')
		$cont.css('position', 'relative');
	if (opts.width)
		$cont.width(opts.width);
	if (opts.height && opts.height != 'auto')
		$cont.height(opts.height);

	if (opts.startingSlide)
		opts.startingSlide = parseInt(opts.startingSlide);

	// if random, mix up the slide array
	if (opts.random) {
		opts.randomMap = [];
		for (var i = 0; i < els.length; i++)
			opts.randomMap.push(i);
		opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
		opts.randomIndex = 0;
		opts.startingSlide = opts.randomMap[0];
	}
	else if (opts.startingSlide >= els.length)
		opts.startingSlide = 0; // catch bogus input
	opts.currSlide = opts.startingSlide = opts.startingSlide || 0;
	var first = opts.startingSlide;

	// set position and zIndex on all the slides
	$slides.css({position: 'absolute', top:0, left:0}).hide().each(function(i) {
		var z = first ? i >= first ? els.length - (i-first) : first-i : els.length-i;
		$(this).css('z-index', z)
	});

	// make sure first slide is visible
	$(els[first]).css('opacity',1).show(); // opacity bit needed to handle restart use case
	removeFilter(els[first], opts);

	// stretch slides
	if (opts.fit && opts.width)
		$slides.width(opts.width);
	if (opts.fit && opts.height && opts.height != 'auto')
		$slides.height(opts.height);

	// stretch container
	var reshape = opts.containerResize && !$cont.innerHeight();
	if (reshape) { // do this only if container has no size http://tinyurl.com/da2oa9
		var maxw = 0, maxh = 0;
		for(var j=0; j < els.length; j++) {
			var $e = $(els[j]), e = $e[0], w = $e.outerWidth(), h = $e.outerHeight();
			if (!w) w = e.offsetWidth;
			if (!h) h = e.offsetHeight;
			maxw = w > maxw ? w : maxw;
			maxh = h > maxh ? h : maxh;
		}
		if (maxw > 0 && maxh > 0)
			$cont.css({width:maxw+'px',height:maxh+'px'});
	}

	if (opts.pause)
		$cont.hover(function(){this.cyclePause++;},function(){this.cyclePause--;});

	if (supportMultiTransitions(opts) === false)
		return false;

	// apparently a lot of people use image slideshows without height/width attributes on the images.
	// Cycle 2.50+ requires the sizing info for every slide; this block tries to deal with that.
	var requeue = false;
	options.requeueAttempts = options.requeueAttempts || 0;
	$slides.each(function() {
		// try to get height/width of each slide
		var $el = $(this);
		this.cycleH = (opts.fit && opts.height) ? opts.height : $el.height();
		this.cycleW = (opts.fit && opts.width) ? opts.width : $el.width();

		if ( $el.is('img') ) {
			// sigh..  sniffing, hacking, shrugging...  this crappy hack tries to account for what browsers do when
			// an image is being downloaded and the markup did not include sizing info (height/width attributes);
			// there seems to be some "default" sizes used in this situation
			var loadingIE	= ($.browser.msie  && this.cycleW == 28 && this.cycleH == 30 && !this.complete);
			var loadingFF	= ($.browser.mozilla && this.cycleW == 34 && this.cycleH == 19 && !this.complete);
			var loadingOp	= ($.browser.opera && ((this.cycleW == 42 && this.cycleH == 19) || (this.cycleW == 37 && this.cycleH == 17)) && !this.complete);
			var loadingOther = (this.cycleH == 0 && this.cycleW == 0 && !this.complete);
			// don't requeue for images that are still loading but have a valid size
			if (loadingIE || loadingFF || loadingOp || loadingOther) {
				if (o.s && opts.requeueOnImageNotLoaded && ++options.requeueAttempts < 100) { // track retry count so we don't loop forever
					log(options.requeueAttempts,' - img slide not loaded, requeuing slideshow: ', this.src, this.cycleW, this.cycleH);
					setTimeout(function() {$(o.s,o.c).cycle(options)}, opts.requeueTimeout);
					requeue = true;
					return false; // break each loop
				}
				else {
					log('could not determine size of image: '+this.src, this.cycleW, this.cycleH);
				}
			}
		}
		return true;
	});

	if (requeue)
		return false;

	opts.cssBefore = opts.cssBefore || {};
	opts.animIn = opts.animIn || {};
	opts.animOut = opts.animOut || {};

	$slides.not(':eq('+first+')').css(opts.cssBefore);
	if (opts.cssFirst)
		$($slides[first]).css(opts.cssFirst);

	if (opts.timeout) {
		opts.timeout = parseInt(opts.timeout);
		// ensure that timeout and speed settings are sane
		if (opts.speed.constructor == String)
			opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed);
		if (!opts.sync)
			opts.speed = opts.speed / 2;
		while((opts.timeout - opts.speed) < 250) // sanitize timeout
			opts.timeout += opts.speed;
	}
	if (opts.easing)
		opts.easeIn = opts.easeOut = opts.easing;
	if (!opts.speedIn)
		opts.speedIn = opts.speed;
	if (!opts.speedOut)
		opts.speedOut = opts.speed;

	opts.slideCount = els.length;
	opts.currSlide = opts.lastSlide = first;
	if (opts.random) {
		opts.nextSlide = opts.currSlide;
		if (++opts.randomIndex == els.length)
			opts.randomIndex = 0;
		opts.nextSlide = opts.randomMap[opts.randomIndex];
	}
	else
		opts.nextSlide = opts.startingSlide >= (els.length-1) ? 0 : opts.startingSlide+1;

	// run transition init fn
	if (!opts.multiFx) {
		var init = $.fn.cycle.transitions[opts.fx];
		if ($.isFunction(init))
			init($cont, $slides, opts);
		else if (opts.fx != 'custom' && !opts.multiFx) {
			log('unknown transition: ' + opts.fx,'; slideshow terminating');
			return false;
		}
	}

	// fire artificial events
	var e0 = $slides[first];
	if (opts.before.length)
		opts.before[0].apply(e0, [e0, e0, opts, true]);
	if (opts.after.length > 1)
		opts.after[1].apply(e0, [e0, e0, opts, true]);

	if (opts.next)
		$(opts.next).bind(opts.prevNextEvent,function(){return advance(opts,opts.rev?-1:1)});
	if (opts.prev)
		$(opts.prev).bind(opts.prevNextEvent,function(){return advance(opts,opts.rev?1:-1)});
	if (opts.pager)
		buildPager(els,opts);

	exposeAddSlide(opts, els);

	return opts;
};

// save off original opts so we can restore after clearing state
function saveOriginalOpts(opts) {
	opts.original = { before: [], after: [] };
	opts.original.cssBefore = $.extend({}, opts.cssBefore);
	opts.original.cssAfter  = $.extend({}, opts.cssAfter);
	opts.original.animIn	= $.extend({}, opts.animIn);
	opts.original.animOut   = $.extend({}, opts.animOut);
	$.each(opts.before, function() { opts.original.before.push(this); });
	$.each(opts.after,  function() { opts.original.after.push(this); });
};

function supportMultiTransitions(opts) {
	var i, tx, txs = $.fn.cycle.transitions;
	// look for multiple effects
	if (opts.fx.indexOf(',') > 0) {
		opts.multiFx = true;
		opts.fxs = opts.fx.replace(/\s*/g,'').split(',');
		// discard any bogus effect names
		for (i=0; i < opts.fxs.length; i++) {
			var fx = opts.fxs[i];
			tx = txs[fx];
			if (!tx || !txs.hasOwnProperty(fx) || !$.isFunction(tx)) {
				log('discarding unknown transition: ',fx);
				opts.fxs.splice(i,1);
				i--;
			}
		}
		// if we have an empty list then we threw everything away!
		if (!opts.fxs.length) {
			log('No valid transitions named; slideshow terminating.');
			return false;
		}
	}
	else if (opts.fx == 'all') {  // auto-gen the list of transitions
		opts.multiFx = true;
		opts.fxs = [];
		for (p in txs) {
			tx = txs[p];
			if (txs.hasOwnProperty(p) && $.isFunction(tx))
				opts.fxs.push(p);
		}
	}
	if (opts.multiFx && opts.randomizeEffects) {
		// munge the fxs array to make effect selection random
		var r1 = Math.floor(Math.random() * 20) + 30;
		for (i = 0; i < r1; i++) {
			var r2 = Math.floor(Math.random() * opts.fxs.length);
			opts.fxs.push(opts.fxs.splice(r2,1)[0]);
		}
		debug('randomized fx sequence: ',opts.fxs);
	}
	return true;
};

// provide a mechanism for adding slides after the slideshow has started
function exposeAddSlide(opts, els) {
	opts.addSlide = function(newSlide, prepend) {
		var $s = $(newSlide), s = $s[0];
		if (!opts.autostopCount)
			opts.countdown++;
		els[prepend?'unshift':'push'](s);
		if (opts.els)
			opts.els[prepend?'unshift':'push'](s); // shuffle needs this
		opts.slideCount = els.length;

		$s.css('position','absolute');
		$s[prepend?'prependTo':'appendTo'](opts.$cont);

		if (prepend) {
			opts.currSlide++;
			opts.nextSlide++;
		}

		if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
			clearTypeFix($s);

		if (opts.fit && opts.width)
			$s.width(opts.width);
		if (opts.fit && opts.height && opts.height != 'auto')
			$slides.height(opts.height);
		s.cycleH = (opts.fit && opts.height) ? opts.height : $s.height();
		s.cycleW = (opts.fit && opts.width) ? opts.width : $s.width();

		$s.css(opts.cssBefore);

		if (opts.pager)
			$.fn.cycle.createPagerAnchor(els.length-1, s, $(opts.pager), els, opts);

		if ($.isFunction(opts.onAddSlide))
			opts.onAddSlide($s);
		else
			$s.hide(); // default behavior
	};
}

// reset internal state; we do this on every pass in order to support multiple effects
$.fn.cycle.resetState = function(opts, fx) {
	fx = fx || opts.fx;
	opts.before = []; opts.after = [];
	opts.cssBefore = $.extend({}, opts.original.cssBefore);
	opts.cssAfter  = $.extend({}, opts.original.cssAfter);
	opts.animIn	= $.extend({}, opts.original.animIn);
	opts.animOut   = $.extend({}, opts.original.animOut);
	opts.fxFn = null;
	$.each(opts.original.before, function() { opts.before.push(this); });
	$.each(opts.original.after,  function() { opts.after.push(this); });

	// re-init
	var init = $.fn.cycle.transitions[fx];
	if ($.isFunction(init))
		init(opts.$cont, $(opts.elements), opts);
};

// this is the main engine fn, it handles the timeouts, callbacks and slide index mgmt
function go(els, opts, manual, fwd) {
	// opts.busy is true if we're in the middle of an animation
	if (manual && opts.busy && opts.manualTrump) {
		// let manual transitions requests trump active ones
		$(els).stop(true,true);
		opts.busy = false;
	}
	// don't begin another timeout-based transition if there is one active
	if (opts.busy)
		return;

	var p = opts.$cont[0], curr = els[opts.currSlide], next = els[opts.nextSlide];

	// stop cycling if we have an outstanding stop request
	if (p.cycleStop != opts.stopCount || p.cycleTimeout === 0 && !manual)
		return;

	// check to see if we should stop cycling based on autostop options
	if (!manual && !p.cyclePause &&
		((opts.autostop && (--opts.countdown <= 0)) ||
		(opts.nowrap && !opts.random && opts.nextSlide < opts.currSlide))) {
		if (opts.end)
			opts.end(opts);
		return;
	}

	// if slideshow is paused, only transition on a manual trigger
	if (manual || !p.cyclePause) {
		var fx = opts.fx;
		// keep trying to get the slide size if we don't have it yet
		curr.cycleH = curr.cycleH || $(curr).height();
		curr.cycleW = curr.cycleW || $(curr).width();
		next.cycleH = next.cycleH || $(next).height();
		next.cycleW = next.cycleW || $(next).width();

		// support multiple transition types
		if (opts.multiFx) {
			if (opts.lastFx == undefined || ++opts.lastFx >= opts.fxs.length)
				opts.lastFx = 0;
			fx = opts.fxs[opts.lastFx];
			opts.currFx = fx;
		}

		// one-time fx overrides apply to:  $('div').cycle(3,'zoom');
		if (opts.oneTimeFx) {
			fx = opts.oneTimeFx;
			opts.oneTimeFx = null;
		}

		$.fn.cycle.resetState(opts, fx);

		// run the before callbacks
		if (opts.before.length)
			$.each(opts.before, function(i,o) {
				if (p.cycleStop != opts.stopCount) return;
				o.apply(next, [curr, next, opts, fwd]);
			});

		// stage the after callacks
		var after = function() {
			$.each(opts.after, function(i,o) {
				if (p.cycleStop != opts.stopCount) return;
				o.apply(next, [curr, next, opts, fwd]);
			});
		};

		if (opts.nextSlide != opts.currSlide) {
			// get ready to perform the transition
			opts.busy = 1;
			if (opts.fxFn) // fx function provided?
				opts.fxFn(curr, next, opts, after, fwd);
			else if ($.isFunction($.fn.cycle[opts.fx])) // fx plugin ?
				$.fn.cycle[opts.fx](curr, next, opts, after);
			else
				$.fn.cycle.custom(curr, next, opts, after, manual && opts.fastOnEvent);
		}

		// calculate the next slide
		opts.lastSlide = opts.currSlide;
		if (opts.random) {
			opts.currSlide = opts.nextSlide;
			if (++opts.randomIndex == els.length)
				opts.randomIndex = 0;
			opts.nextSlide = opts.randomMap[opts.randomIndex];
		}
		else { // sequence
			var roll = (opts.nextSlide + 1) == els.length;
			opts.nextSlide = roll ? 0 : opts.nextSlide+1;
			opts.currSlide = roll ? els.length-1 : opts.nextSlide-1;
		}

		if (opts.pager)
			$.fn.cycle.updateActivePagerLink(opts.pager, opts.currSlide);
	}

	// stage the next transtion
	var ms = 0;
	if (opts.timeout && !opts.continuous)
		ms = getTimeout(curr, next, opts, fwd);
	else if (opts.continuous && p.cyclePause) // continuous shows work off an after callback, not this timer logic
		ms = 10;
	if (ms > 0)
		p.cycleTimeout = setTimeout(function(){ go(els, opts, 0, !opts.rev) }, ms);
};

// invoked after transition
$.fn.cycle.updateActivePagerLink = function(pager, currSlide) {
	$(pager).find('a').removeClass('activeSlide').filter('a:eq('+currSlide+')').addClass('activeSlide');
};

// calculate timeout value for current transition
function getTimeout(curr, next, opts, fwd) {
	if (opts.timeoutFn) {
		// call user provided calc fn
		var t = opts.timeoutFn(curr,next,opts,fwd);
		while ((t - opts.speed) < 250) // sanitize timeout
			t += opts.speed;
		debug('calculated timeout: ' + t + '; speed: ' + opts.speed);
		if (t !== false)
			return t;
	}
	return opts.timeout;
};

// expose next/prev function, caller must pass in state
$.fn.cycle.next = function(opts) { advance(opts, opts.rev?-1:1); };
$.fn.cycle.prev = function(opts) { advance(opts, opts.rev?1:-1);};

// advance slide forward or back
function advance(opts, val) {
	var els = opts.elements;
	var p = opts.$cont[0], timeout = p.cycleTimeout;
	if (timeout) {
		clearTimeout(timeout);
		p.cycleTimeout = 0;
	}
	if (opts.random && val < 0) {
		// move back to the previously display slide
		opts.randomIndex--;
		if (--opts.randomIndex == -2)
			opts.randomIndex = els.length-2;
		else if (opts.randomIndex == -1)
			opts.randomIndex = els.length-1;
		opts.nextSlide = opts.randomMap[opts.randomIndex];
	}
	else if (opts.random) {
		if (++opts.randomIndex == els.length)
			opts.randomIndex = 0;
		opts.nextSlide = opts.randomMap[opts.randomIndex];
	}
	else {
		opts.nextSlide = opts.currSlide + val;
		if (opts.nextSlide < 0) {
			if (opts.nowrap) return false;
			opts.nextSlide = els.length - 1;
		}
		else if (opts.nextSlide >= els.length) {
			if (opts.nowrap) return false;
			opts.nextSlide = 0;
		}
	}

	if ($.isFunction(opts.prevNextClick))
		opts.prevNextClick(val > 0, opts.nextSlide, els[opts.nextSlide]);
	go(els, opts, 1, val>=0);
	return false;
};

function buildPager(els, opts) {
	var $p = $(opts.pager);
	$.each(els, function(i,o) {
		$.fn.cycle.createPagerAnchor(i,o,$p,els,opts);
	});
   $.fn.cycle.updateActivePagerLink(opts.pager, opts.startingSlide);
};

$.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) {
	var a;
	if ($.isFunction(opts.pagerAnchorBuilder))
		a = opts.pagerAnchorBuilder(i,el);
	else
		a = '<a href="#">'+(i+1)+'</a>';
		
	if (!a)
		return;
	var $a = $(a);
	// don't reparent if anchor is in the dom
	if ($a.parents('body').length === 0) {
		var arr = [];
		if ($p.length > 1) {
			$p.each(function() {
				var $clone = $a.clone(true);
				$(this).append($clone);
				arr.push($clone);
			});
			$a = $(arr);
		}
		else {
			$a.appendTo($p);
		}
	}

	$a.bind(opts.pagerEvent, function(e) {
		e.preventDefault();
		opts.nextSlide = i;
		var p = opts.$cont[0], timeout = p.cycleTimeout;
		if (timeout) {
			clearTimeout(timeout);
			p.cycleTimeout = 0;
		}
		if ($.isFunction(opts.pagerClick))
			opts.pagerClick(opts.nextSlide, els[opts.nextSlide]);
		go(els,opts,1,opts.currSlide < i); // trigger the trans
		return false;
	});
	
	if (opts.pagerEvent != 'click')
		$a.click(function(){return false;}); // supress click
	
	if (opts.pauseOnPagerHover)
		$a.hover(function() { opts.$cont[0].cyclePause++; }, function() { opts.$cont[0].cyclePause--; } );
};

// helper fn to calculate the number of slides between the current and the next
$.fn.cycle.hopsFromLast = function(opts, fwd) {
	var hops, l = opts.lastSlide, c = opts.currSlide;
	if (fwd)
		hops = c > l ? c - l : opts.slideCount - l;
	else
		hops = c < l ? l - c : l + opts.slideCount - c;
	return hops;
};

// fix clearType problems in ie6 by setting an explicit bg color
// (otherwise text slides look horrible during a fade transition)
function clearTypeFix($slides) {
	function hex(s) {
		s = parseInt(s).toString(16);
		return s.length < 2 ? '0'+s : s;
	};
	function getBg(e) {
		for ( ; e && e.nodeName.toLowerCase() != 'html'; e = e.parentNode) {
			var v = $.css(e,'background-color');
			if (v.indexOf('rgb') >= 0 ) {
				var rgb = v.match(/\d+/g);
				return '#'+ hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);
			}
			if (v && v != 'transparent')
				return v;
		}
		return '#ffffff';
	};
	$slides.each(function() { $(this).css('background-color', getBg(this)); });
};

// reset common props before the next transition
$.fn.cycle.commonReset = function(curr,next,opts,w,h,rev) {
	$(opts.elements).not(curr).hide();
	opts.cssBefore.opacity = 1;
	opts.cssBefore.display = 'block';
	if (w !== false && next.cycleW > 0)
		opts.cssBefore.width = next.cycleW;
	if (h !== false && next.cycleH > 0)
		opts.cssBefore.height = next.cycleH;
	opts.cssAfter = opts.cssAfter || {};
	opts.cssAfter.display = 'none';
	$(curr).css('zIndex',opts.slideCount + (rev === true ? 1 : 0));
	$(next).css('zIndex',opts.slideCount + (rev === true ? 0 : 1));
};

// the actual fn for effecting a transition
$.fn.cycle.custom = function(curr, next, opts, cb, speedOverride) {
	var $l = $(curr), $n = $(next);
	var speedIn = opts.speedIn, speedOut = opts.speedOut, easeIn = opts.easeIn, easeOut = opts.easeOut;
	$n.css(opts.cssBefore);
	if (speedOverride) {
		if (typeof speedOverride == 'number')
			speedIn = speedOut = speedOverride;
		else
			speedIn = speedOut = 1;
		easeIn = easeOut = null;
	}
	var fn = function() {$n.animate(opts.animIn, speedIn, easeIn, cb)};
	$l.animate(opts.animOut, speedOut, easeOut, function() {
		if (opts.cssAfter) $l.css(opts.cssAfter);
		if (!opts.sync) fn();
	});
	if (opts.sync) fn();
};

// transition definitions - only fade is defined here, transition pack defines the rest
$.fn.cycle.transitions = {
	fade: function($cont, $slides, opts) {
		$slides.not(':eq('+opts.currSlide+')').css('opacity',0);
		opts.before.push(function(curr,next,opts) {
			$.fn.cycle.commonReset(curr,next,opts);
			opts.cssBefore.opacity = 0;
		});
		opts.animIn	   = { opacity: 1 };
		opts.animOut   = { opacity: 0 };
		opts.cssBefore = { top: 0, left: 0 };
	}
};

$.fn.cycle.ver = function() { return ver; };

// override these globally if you like (they are all optional)
$.fn.cycle.defaults = {
	fx:			  'fade', // name of transition effect (or comma separated names, ex: fade,scrollUp,shuffle)
	timeout:	   10000,  // milliseconds between slide transitions (0 to disable auto advance)
	timeoutFn:	 null,  // callback for determining per-slide timeout value:  function(currSlideElement, nextSlideElement, options, forwardFlag)
	continuous:	   0,	  // true to start next transition immediately after current one completes
	speed:		   1000,  // speed of the transition (any valid fx speed value)
	speedIn:	   null,  // speed of the 'in' transition
	speedOut:	   null,  // speed of the 'out' transition
	next:		   null,  // selector for element to use as click trigger for next slide
	prev:		   null,  // selector for element to use as click trigger for previous slide
	prevNextClick: null,  // callback fn for prev/next clicks:	function(isNext, zeroBasedSlideIndex, slideElement)
	prevNextEvent:'click',// event which drives the manual transition to the previous or next slide
	pager:		   null,  // selector for element to use as pager container
	pagerClick:	   null,  // callback fn for pager clicks:	function(zeroBasedSlideIndex, slideElement)
	pagerEvent:	  'click', // name of event which drives the pager navigation
	pagerAnchorBuilder: null, // callback fn for building anchor links:  function(index, DOMelement)
	before:		   null,  // transition callback (scope set to element to be shown):	 function(currSlideElement, nextSlideElement, options, forwardFlag)
	after:		   null,  // transition callback (scope set to element that was shown):  function(currSlideElement, nextSlideElement, options, forwardFlag)
	end:		   null,  // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options)
	easing:		   null,  // easing method for both in and out transitions
	easeIn:		   null,  // easing for "in" transition
	easeOut:	   null,  // easing for "out" transition
	shuffle:	   null,  // coords for shuffle animation, ex: { top:15, left: 200 }
	animIn:		   null,  // properties that define how the slide animates in
	animOut:	   null,  // properties that define how the slide animates out
	cssBefore:	   null,  // properties that define the initial state of the slide before transitioning in
	cssAfter:	   null,  // properties that defined the state of the slide after transitioning out
	fxFn:		   null,  // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag)
	height:		  'auto', // container height
	startingSlide: 0,	  // zero-based index of the first slide to be displayed
	sync:		   1,	  // true if in/out transitions should occur simultaneously
	random:		   1,	  // true for random, false for sequence (not applicable to shuffle fx)
	fit:		   0,	  // force slides to fit container
	containerResize: 1,	  // resize container to fit largest slide
	pause:		   0,	  // true to enable "pause on hover"
	pauseOnPagerHover: 0, // true to pause when hovering over pager link
	autostop:	   0,	  // true to end slideshow after X transitions (where X == slide count)
	autostopCount: 0,	  // number of transitions (optionally used with autostop to define X)
	delay:		   0,	  // additional delay (in ms) for first transition (hint: can be negative)
	slideExpr:	   null,  // expression for selecting slides (if something other than all children is required)
	cleartype:	   !$.support.opacity,  // true if clearType corrections should be applied (for IE)
	cleartypeNoBg: false, // set to true to disable extra cleartype fixing (leave false to force background color setting on slides)
	nowrap:		   0,	  // true to prevent slideshow from wrapping
	fastOnEvent:   0,	  // force fast transitions when triggered manually (via pager or prev/next); value == time in ms
	randomizeEffects: 1,  // valid when multiple effects are used; true to make the effect sequence random
	rev:		   0,	 // causes animations to transition in reverse
	manualTrump:   true,  // causes manual transition to stop an active transition instead of being ignored
	requeueOnImageNotLoaded: true, // requeue the slideshow if any image slides are not yet loaded
	requeueTimeout: 250   // ms delay for requeue
};

})(jQuery);


/*!
 * jQuery Cycle Plugin Transition Definitions
 * This script is a plugin for the jQuery Cycle Plugin
 * Examples and documentation at: http://malsup.com/jquery/cycle/
 * Copyright (c) 2007-2008 M. Alsup
 * Version:	 2.72
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 */
(function($) {

//
// These functions define one-time slide initialization for the named
// transitions. To save file size feel free to remove any of these that you
// don't need.
//
$.fn.cycle.transitions.none = function($cont, $slides, opts) {
	opts.fxFn = function(curr,next,opts,after){
		$(next).show();
		$(curr).hide();
		after();
	};
}

// scrollUp/Down/Left/Right
$.fn.cycle.transitions.scrollUp = function($cont, $slides, opts) {
	$cont.css('overflow','hidden');
	opts.before.push($.fn.cycle.commonReset);
	var h = $cont.height();
	opts.cssBefore ={ top: h, left: 0 };
	opts.cssFirst = { top: 0 };
	opts.animIn	  = { top: 0 };
	opts.animOut  = { top: -h };
};
$.fn.cycle.transitions.scrollDown = function($cont, $slides, opts) {
	$cont.css('overflow','hidden');
	opts.before.push($.fn.cycle.commonReset);
	var h = $cont.height();
	opts.cssFirst = { top: 0 };
	opts.cssBefore= { top: -h, left: 0 };
	opts.animIn	  = { top: 0 };
	opts.animOut  = { top: h };
};
$.fn.cycle.transitions.scrollLeft = function($cont, $slides, opts) {
	$cont.css('overflow','hidden');
	opts.before.push($.fn.cycle.commonReset);
	var w = $cont.width();
	opts.cssFirst = { left: 0 };
	opts.cssBefore= { left: w, top: 0 };
	opts.animIn	  = { left: 0 };
	opts.animOut  = { left: 0-w };
};
$.fn.cycle.transitions.scrollRight = function($cont, $slides, opts) {
	$cont.css('overflow','hidden');
	opts.before.push($.fn.cycle.commonReset);
	var w = $cont.width();
	opts.cssFirst = { left: 0 };
	opts.cssBefore= { left: -w, top: 0 };
	opts.animIn	  = { left: 0 };
	opts.animOut  = { left: w };
};
$.fn.cycle.transitions.scrollHorz = function($cont, $slides, opts) {
	$cont.css('overflow','hidden').width();
	opts.before.push(function(curr, next, opts, fwd) {
		$.fn.cycle.commonReset(curr,next,opts);
		opts.cssBefore.left = fwd ? (next.cycleW-1) : (1-next.cycleW);
		opts.animOut.left = fwd ? -curr.cycleW : curr.cycleW;
	});
	opts.cssFirst = { left: 0 };
	opts.cssBefore= { top: 0 };
	opts.animIn   = { left: 0 };
	opts.animOut  = { top: 0 };
};
$.fn.cycle.transitions.scrollVert = function($cont, $slides, opts) {
	$cont.css('overflow','hidden');
	opts.before.push(function(curr, next, opts, fwd) {
		$.fn.cycle.commonReset(curr,next,opts);
		opts.cssBefore.top = fwd ? (1-next.cycleH) : (next.cycleH-1);
		opts.animOut.top = fwd ? curr.cycleH : -curr.cycleH;
	});
	opts.cssFirst = { top: 0 };
	opts.cssBefore= { left: 0 };
	opts.animIn   = { top: 0 };
	opts.animOut  = { left: 0 };
};

// slideX/slideY
$.fn.cycle.transitions.slideX = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$(opts.elements).not(curr).hide();
		$.fn.cycle.commonReset(curr,next,opts,false,true);
		opts.animIn.width = next.cycleW;
	});
	opts.cssBefore = { left: 0, top: 0, width: 0 };
	opts.animIn	 = { width: 'show' };
	opts.animOut = { width: 0 };
};
$.fn.cycle.transitions.slideY = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$(opts.elements).not(curr).hide();
		$.fn.cycle.commonReset(curr,next,opts,true,false);
		opts.animIn.height = next.cycleH;
	});
	opts.cssBefore = { left: 0, top: 0, height: 0 };
	opts.animIn	 = { height: 'show' };
	opts.animOut = { height: 0 };
};

// shuffle
$.fn.cycle.transitions.shuffle = function($cont, $slides, opts) {
	var i, w = $cont.css('overflow', 'visible').width();
	$slides.css({left: 0, top: 0});
	opts.before.push(function(curr,next,opts) {
		$.fn.cycle.commonReset(curr,next,opts,true,true,true);
	});
	// only adjust speed once!
	if (!opts.speedAdjusted) {
		opts.speed = opts.speed / 2; // shuffle has 2 transitions
		opts.speedAdjusted = true;
	}
	opts.random = 0;
	opts.shuffle = opts.shuffle || {left:-w, top:15};
	opts.els = [];
	for (i=0; i < $slides.length; i++)
		opts.els.push($slides[i]);

	for (i=0; i < opts.currSlide; i++)
		opts.els.push(opts.els.shift());

	// custom transition fn (hat tip to Benjamin Sterling for this bit of sweetness!)
	opts.fxFn = function(curr, next, opts, cb, fwd) {
		var $el = fwd ? $(curr) : $(next);
		$(next).css(opts.cssBefore);
		var count = opts.slideCount;
		$el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function() {
			var hops = $.fn.cycle.hopsFromLast(opts, fwd);
			for (var k=0; k < hops; k++)
				fwd ? opts.els.push(opts.els.shift()) : opts.els.unshift(opts.els.pop());
			if (fwd) {
				for (var i=0, len=opts.els.length; i < len; i++)
					$(opts.els[i]).css('z-index', len-i+count);
			}
			else {
				var z = $(curr).css('z-index');
				$el.css('z-index', parseInt(z)+1+count);
			}
			$el.animate({left:0, top:0}, opts.speedOut, opts.easeOut, function() {
				$(fwd ? this : curr).hide();
				if (cb) cb();
			});
		});
	};
	opts.cssBefore = { display: 'block', opacity: 1, top: 0, left: 0 };
};

// turnUp/Down/Left/Right
$.fn.cycle.transitions.turnUp = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,true,false);
		opts.cssBefore.top = next.cycleH;
		opts.animIn.height = next.cycleH;
	});
	opts.cssFirst  = { top: 0 };
	opts.cssBefore = { left: 0, height: 0 };
	opts.animIn	   = { top: 0 };
	opts.animOut   = { height: 0 };
};
$.fn.cycle.transitions.turnDown = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,true,false);
		opts.animIn.height = next.cycleH;
		opts.animOut.top   = curr.cycleH;
	});
	opts.cssFirst  = { top: 0 };
	opts.cssBefore = { left: 0, top: 0, height: 0 };
	opts.animOut   = { height: 0 };
};
$.fn.cycle.transitions.turnLeft = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,false,true);
		opts.cssBefore.left = next.cycleW;
		opts.animIn.width = next.cycleW;
	});
	opts.cssBefore = { top: 0, width: 0  };
	opts.animIn	   = { left: 0 };
	opts.animOut   = { width: 0 };
};
$.fn.cycle.transitions.turnRight = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,false,true);
		opts.animIn.width = next.cycleW;
		opts.animOut.left = curr.cycleW;
	});
	opts.cssBefore = { top: 0, left: 0, width: 0 };
	opts.animIn	   = { left: 0 };
	opts.animOut   = { width: 0 };
};

// zoom
$.fn.cycle.transitions.zoom = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,false,false,true);
		opts.cssBefore.top = next.cycleH/2;
		opts.cssBefore.left = next.cycleW/2;
		opts.animIn	   = { top: 0, left: 0, width: next.cycleW, height: next.cycleH };
		opts.animOut   = { width: 0, height: 0, top: curr.cycleH/2, left: curr.cycleW/2 };
	});
	opts.cssFirst = { top:0, left: 0 };
	opts.cssBefore = { width: 0, height: 0 };
};

// fadeZoom
$.fn.cycle.transitions.fadeZoom = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,false,false);
		opts.cssBefore.left = next.cycleW/2;
		opts.cssBefore.top = next.cycleH/2;
		opts.animIn	= { top: 0, left: 0, width: next.cycleW, height: next.cycleH };
	});
	opts.cssBefore = { width: 0, height: 0 };
	opts.animOut  = { opacity: 0 };
};

// blindX
$.fn.cycle.transitions.blindX = function($cont, $slides, opts) {
	var w = $cont.css('overflow','hidden').width();
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts);
		opts.animIn.width = next.cycleW;
		opts.animOut.left   = curr.cycleW;
	});
	opts.cssBefore = { left: w, top: 0 };
	opts.animIn = { left: 0 };
	opts.animOut  = { left: w };
};
// blindY
$.fn.cycle.transitions.blindY = function($cont, $slides, opts) {
	var h = $cont.css('overflow','hidden').height();
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts);
		opts.animIn.height = next.cycleH;
		opts.animOut.top   = curr.cycleH;
	});
	opts.cssBefore = { top: h, left: 0 };
	opts.animIn = { top: 0 };
	opts.animOut  = { top: h };
};
// blindZ
$.fn.cycle.transitions.blindZ = function($cont, $slides, opts) {
	var h = $cont.css('overflow','hidden').height();
	var w = $cont.width();
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts);
		opts.animIn.height = next.cycleH;
		opts.animOut.top   = curr.cycleH;
	});
	opts.cssBefore = { top: h, left: w };
	opts.animIn = { top: 0, left: 0 };
	opts.animOut  = { top: h, left: w };
};

// growX - grow horizontally from centered 0 width
$.fn.cycle.transitions.growX = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,false,true);
		opts.cssBefore.left = this.cycleW/2;
		opts.animIn = { left: 0, width: this.cycleW };
		opts.animOut = { left: 0 };
	});
	opts.cssBefore = { width: 0, top: 0 };
};
// growY - grow vertically from centered 0 height
$.fn.cycle.transitions.growY = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,true,false);
		opts.cssBefore.top = this.cycleH/2;
		opts.animIn = { top: 0, height: this.cycleH };
		opts.animOut = { top: 0 };
	});
	opts.cssBefore = { height: 0, left: 0 };
};

// curtainX - squeeze in both edges horizontally
$.fn.cycle.transitions.curtainX = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,false,true,true);
		opts.cssBefore.left = next.cycleW/2;
		opts.animIn = { left: 0, width: this.cycleW };
		opts.animOut = { left: curr.cycleW/2, width: 0 };
	});
	opts.cssBefore = { top: 0, width: 0 };
};
// curtainY - squeeze in both edges vertically
$.fn.cycle.transitions.curtainY = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,true,false,true);
		opts.cssBefore.top = next.cycleH/2;
		opts.animIn = { top: 0, height: next.cycleH };
		opts.animOut = { top: curr.cycleH/2, height: 0 };
	});
	opts.cssBefore = { left: 0, height: 0 };
};

// cover - curr slide covered by next slide
$.fn.cycle.transitions.cover = function($cont, $slides, opts) {
	var d = opts.direction || 'left';
	var w = $cont.css('overflow','hidden').width();
	var h = $cont.height();
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts);
		if (d == 'right')
			opts.cssBefore.left = -w;
		else if (d == 'up')
			opts.cssBefore.top = h;
		else if (d == 'down')
			opts.cssBefore.top = -h;
		else
			opts.cssBefore.left = w;
	});
	opts.animIn = { left: 0, top: 0};
	opts.animOut = { opacity: 1 };
	opts.cssBefore = { top: 0, left: 0 };
};

// uncover - curr slide moves off next slide
$.fn.cycle.transitions.uncover = function($cont, $slides, opts) {
	var d = opts.direction || 'left';
	var w = $cont.css('overflow','hidden').width();
	var h = $cont.height();
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,true,true,true);
		if (d == 'right')
			opts.animOut.left = w;
		else if (d == 'up')
			opts.animOut.top = -h;
		else if (d == 'down')
			opts.animOut.top = h;
		else
			opts.animOut.left = -w;
	});
	opts.animIn = { left: 0, top: 0 };
	opts.animOut = { opacity: 1 };
	opts.cssBefore = { top: 0, left: 0 };
};

// toss - move top slide and fade away
$.fn.cycle.transitions.toss = function($cont, $slides, opts) {
	var w = $cont.css('overflow','visible').width();
	var h = $cont.height();
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,true,true,true);
		// provide default toss settings if animOut not provided
		if (!opts.animOut.left && !opts.animOut.top)
			opts.animOut = { left: w*2, top: -h/2, opacity: 0 };
		else
			opts.animOut.opacity = 0;
	});
	opts.cssBefore = { left: 0, top: 0 };
	opts.animIn = { left: 0 };
};

// wipe - clip animation
$.fn.cycle.transitions.wipe = function($cont, $slides, opts) {
	var w = $cont.css('overflow','hidden').width();
	var h = $cont.height();
	opts.cssBefore = opts.cssBefore || {};
	var clip;
	if (opts.clip) {
		if (/l2r/.test(opts.clip))
			clip = 'rect(0px 0px '+h+'px 0px)';
		else if (/r2l/.test(opts.clip))
			clip = 'rect(0px '+w+'px '+h+'px '+w+'px)';
		else if (/t2b/.test(opts.clip))
			clip = 'rect(0px '+w+'px 0px 0px)';
		else if (/b2t/.test(opts.clip))
			clip = 'rect('+h+'px '+w+'px '+h+'px 0px)';
		else if (/zoom/.test(opts.clip)) {
			var top = parseInt(h/2);
			var left = parseInt(w/2);
			clip = 'rect('+top+'px '+left+'px '+top+'px '+left+'px)';
		}
	}

	opts.cssBefore.clip = opts.cssBefore.clip || clip || 'rect(0px 0px 0px 0px)';

	var d = opts.cssBefore.clip.match(/(\d+)/g);
	var t = parseInt(d[0]), r = parseInt(d[1]), b = parseInt(d[2]), l = parseInt(d[3]);

	opts.before.push(function(curr, next, opts) {
		if (curr == next) return;
		var $curr = $(curr), $next = $(next);
		$.fn.cycle.commonReset(curr,next,opts,true,true,false);
		opts.cssAfter.display = 'block';

		var step = 1, count = parseInt((opts.speedIn / 13)) - 1;
		(function f() {
			var tt = t ? t - parseInt(step * (t/count)) : 0;
			var ll = l ? l - parseInt(step * (l/count)) : 0;
			var bb = b < h ? b + parseInt(step * ((h-b)/count || 1)) : h;
			var rr = r < w ? r + parseInt(step * ((w-r)/count || 1)) : w;
			$next.css({ clip: 'rect('+tt+'px '+rr+'px '+bb+'px '+ll+'px)' });
			(step++ <= count) ? setTimeout(f, 13) : $curr.css('display', 'none');
		})();
	});
	opts.cssBefore = { display: 'block', opacity: 1, top: 0, left: 0 };
	opts.animIn	   = { left: 0 };
	opts.animOut   = { left: 0 };
};

})(jQuery);

//Image Cube

/* http://keith-wood.name/imageCube.html
   Image Cube for jQuery v1.2.1.
   Written by Keith Wood (kbwood{at}iinet.com.au) June 2008.
   Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and 
   MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. 
   Please attribute the author if you use it. */
(function($){function ImageCube(){this._defaults={direction:'random',randomSelection:['up','down','left','right'],speed:2000,easing:'linear',repeat:true,pause:2000,selection:'forward',shading:true,opacity:0.8,imagePath:'',full3D:true,segments:20,reduction:30,expansion:10,lineHeight:[0.0,1.3],letterSpacing:[-0.4,0.0],beforeRotate:null,afterRotate:null}};var U=0;var V=1;var W=2;var X=3;var Y='imageCube';$.extend(ImageCube.prototype,{markerClassName:'hasImageCube',setDefaults:function(a){extendRemove(this._defaults,a||{})},_attachImageCube:function(b,c){b=$(b);if(b.hasClass(this.markerClassName)){return}var d=$.extend({_position:b.css('position')},this._defaults,c||{});$.data(b[0],Y,d);b.addClass(this.markerClassName).css({position:'relative'}).children().each(function(){var a=$(this);$.data(this,Y,{width:a.css('width'),height:a.css('height'),position:a.css('position'),lineHeight:a.css('lineHeight'),letterSpacing:a.css('letterSpacing')});a.css({width:b.css('width'),height:b.css('height'),position:'absolute',lineHeight:d.lineHeight[1],letterSpacing:d.letterSpacing[1]})}).not(':first').hide();this._prepareRotation(b[0])},_prepareRotation:function(b){b=$(b);b.children('.imageCubeShading,.imageCubeFrom,.imageCubeTo').remove();var c=$.data(b[0],Y);c.current=b.children(':visible')[0];var d=function(a){return(!a.length?a:a.filter(':eq('+Math.floor(Math.random()*a.length)+')'))};c.next=(c.selection=='random'?d(b.children(':hidden')):(c.selection=='backward'?$(c.current).prev():$(c.current).next()));c.next=(c.next.length?c.next:(c.selection=='random'?c.current:(c.selection=='backward'?b.children(':last'):b.children(':first'))))[0];if(c.repeat&&!c._timer){c._timer=setTimeout(function(){$.imagecube._rotateImageCube(b[0])},c.pause)}$.data(b[0],Y,c)},_rotateImageCube:function(a,b,c){if(typeof b=='function'){c=b;b=''}a=$(a);this._stopImageCube(a[0],true);var d=$.data(a[0],Y);if(b!=null){b=(typeof b=='number'?a.children(':eq('+b+')'):$(b));if(a.children().filter(function(){return this===b[0]}).length>0){d.next=b}}var e=[d.current,d.next];if(d.beforeRotate){d.beforeRotate.apply(a[0],e)}var f={};f[Y]=1.0;a.attr(Y,0.0).animate(f,d.speed,d.easing,function(){if(d.afterRotate){d.afterRotate.apply(a[0],e)}if(c){c.apply(a[0])}})},_currentImageCube:function(a){return($(a).hasClass(this.markerClassName)?$.data(a,Y).current:null)},_nextImageCube:function(a){return($(a).hasClass(this.markerClassName)?$.data(a,Y).next:null)},_stopImageCube:function(a,b){var c=$.data(a,Y);if(c._timer){clearTimeout(c._timer);c._timer=null}if(!b){c.repeat=false}$.data(a,Y,c)},_startImageCube:function(a){this._changeImageCube(a,{repeat:true})},_changeImageCube:function(a,b,c){if(typeof b=='string'){var d={};d[b]=c;b=d}var e=$.data(a,Y);extendRemove(e||{},b||{});$.data(a,Y,e);this._prepareRotation(a)},_destroyImageCube:function(a){a=$(a);if(!a.hasClass(this.markerClassName)){return}this._stopImageCube(a[0]);var b=$.data(a[0],Y);a.stop().css({position:b._position}).removeClass(this.markerClassName).children('.imageCubeShading,.imageCubeFrom,.imageCubeTo').remove();a.children().each(function(){$(this).css($.data(this,Y)).show();$.removeData(this,Y)});$.removeData(a[0],Y)},_prepareAnimation:function(d){var e=$.data(d,Y);var d=$(d);var f={left:0,top:0};d.parents().each(function(){var a=$(this);if(a.css('position')=='fixed'){f.left-=a.offset().left;f.top-=a.offset().top;return false}});var g={width:d.width(),height:d.height()};var h=(e.direction!='random'?e.direction:e.randomSelection[Math.floor(Math.random()*e.randomSelection.length)]);h=Math.max(0,$.inArray(h,['up','down','left','right']));e._curDirection=h;var j=(h==U||h==V);var k=(h==W||h==X);var l=(h==U||h==W);var m=(l?0:e.opacity);var n=$(e.current);var o=$(e.next);var q=[];var r=function(p){var b=[0,0,0,0];if(!$.browser.msie||p.css('border')){for(var i=0;i<4;i++){b[i]=p.css('border'+['Left','Right','Top','Bottom'][i]+'Width');var a=($.browser.msie?1:0);b[i]=parseFloat({thin:1+a,medium:3+a,thick:5+a}[b[i]]||b[i])}}return b};q[0]=r(n);q[1]=r(o);var s=[];s[0]=[parseFloat(n.css('padding-left')),parseFloat(n.css('padding-right')),parseFloat(n.css('padding-top')),parseFloat(n.css('padding-bottom'))];s[1]=[parseFloat(o.css('padding-left')),parseFloat(o.css('padding-right')),parseFloat(o.css('padding-top')),parseFloat(o.css('padding-bottom'))];var t=[];t[0]=[($.boxModel?q[0][0]+q[0][1]+s[0][0]+s[0][1]:0),($.boxModel?q[0][2]+q[0][3]+s[0][2]+s[0][3]:0)];t[1]=[($.boxModel?q[1][0]+q[1][1]+s[1][0]+s[1][1]:0),($.boxModel?q[1][2]+q[1][3]+s[1][2]+s[1][3]:0)];var u=[];u[0]={elem:n[0],props:{left:{start:f.left,end:f.left+(h==X?g.width:0),units:'px'},width:{start:g.width-t[0][0],end:(j?g.width-t[0][0]:0),units:'px'},top:{start:f.top,end:f.top+(h==V?g.height:0),units:'px'},height:{start:g.height-t[0][1],end:(j?0:g.height-t[0][1]),units:'px'},paddingLeft:{start:s[0][0],end:(k?0:s[0][0]),units:'px'},paddingRight:{start:s[0][1],end:(k?0:s[0][1]),units:'px'},paddingTop:{start:s[0][2],end:(j?0:s[0][2]),units:'px'},paddingBottom:{start:s[0][3],end:(j?0:s[0][3]),units:'px'},borderLeftWidth:{start:q[0][0],end:(k?0:q[0][0]),units:'px'},borderRightWidth:{start:q[0][1],end:(k?0:q[0][1]),units:'px'},borderTopWidth:{start:q[0][2],end:(j?0:q[0][2]),units:'px'},borderBottomWidth:{start:q[0][3],end:(j?0:q[0][3]),units:'px'},lineHeight:{start:e.lineHeight[1],end:(j?e.lineHeight[0]:e.lineHeight[1]),units:'em'},letterSpacing:{start:e.letterSpacing[1],end:(j?e.letterSpacing[1]:e.letterSpacing[0]),units:'em'}}};u[1]={elem:o[0],props:{left:{start:f.left+(h==W?g.width:0),end:f.left,units:'px'},width:{start:(j?g.width-t[1][0]:0),end:g.width-t[1][0],units:'px'},top:{start:f.top+(h==U?g.height:0),end:f.top,units:'px'},height:{start:(j?($.browser.msie?1:0):g.height-t[1][1]),end:g.height-t[1][1],units:'px'},paddingLeft:{start:(k?0:s[1][0]),end:s[1][0],units:'px'},paddingRight:{start:(k?0:s[1][1]),end:s[1][1],units:'px'},paddingTop:{start:(j?0:s[1][2]),end:s[1][2],units:'px'},paddingBottom:{start:(j?0:s[1][3]),end:s[1][3],units:'px'},borderLeftWidth:{start:(k?0:q[1][0]),end:q[1][0],units:'px'},borderRightWidth:{start:(k?0:q[1][1]),end:q[1][1],units:'px'},borderTopWidth:{start:(j?0:q[1][2]),end:q[1][2],units:'px'},borderBottomWidth:{start:(j?0:q[1][3]),end:q[1][3],units:'px'},lineHeight:{start:(j?e.lineHeight[0]:e.lineHeight[1]),end:e.lineHeight[1],units:'em'},letterSpacing:{start:(j?e.letterSpacing[1]:e.letterSpacing[0]),end:e.letterSpacing[1],units:'em'}}};if(e.shading){var v=function(a,b,c){return{left:{start:a.left.start,end:a.left.end,units:'px'},width:{start:a.width.start,end:a.width.end,units:'px'},top:{start:a.top.start,end:a.top.end,units:'px'},height:{start:a.height.start,end:a.height.end,units:'px'},paddingLeft:{start:a.paddingLeft.start+a.borderLeftWidth.start,end:a.paddingLeft.end+a.borderLeftWidth.end,units:'px'},paddingRight:{start:a.paddingRight.start+a.borderRightWidth.start,end:a.paddingRight.end+a.borderRightWidth.end,units:'px'},paddingTop:{start:a.paddingTop.start+a.borderTopWidth.start,end:a.paddingTop.end+a.borderTopWidth.end,units:'px'},paddingBottom:{start:a.paddingBottom.start+a.borderBottomWidth.start,end:a.paddingBottom.end+a.borderBottomWidth.end,units:'px'},opacity:{start:b,end:c,units:''}}};u[2]={elem:$(($.browser.msie?'<img src="'+e.imagePath+'imageCubeHigh.png"':'<div')+' class="imageCubeShading" style="background-color: white; opacity: '+m+'; z-index: 10; position: absolute;"'+($.browser.msie?'/>':'></div>'))[0],props:v(u[l?0:1].props,m,e.opacity-m)};u[3]={elem:$(($.browser.msie?'<img src="'+e.imagePath+'imageCubeShad.png"':'<div')+' class="imageCubeShading" style="background-color: black; opacity: '+(e.opacity-m)+'; z-index: 10; position: absolute;"'+($.browser.msie?'/>':'></div>'))[0],props:v(u[l?1:0].props,e.opacity-m,m)}}if(e.full3D){for(var i=0;i<e.segments;i++){d.append(n.clone().addClass('imageCubeFrom').css({display:'block',position:'absolute',overflow:'hidden'}));if(e.shading){d.append($(u[l?2:3].elem).clone())}}for(var i=0;i<e.segments;i++){d.append(o.clone().addClass('imageCubeTo').css({display:'block',position:'absolute',width:0,overflow:'hidden'}));if(e.shading){d.append($(u[l?3:2].elem).clone())}}n.hide();o.css({width:g.width-t[1][0],height:g.height-t[1][1]})}else{var w=function(a){return{left:a.left.start+'px',width:a.width.start+'px',top:a.top.start+'px',height:a.height.start+'px',lineHeight:a.lineHeight.start+'em',padding:a.paddingTop.start+'px '+a.paddingRight.start+'px '+a.paddingBottom.start+'px '+a.paddingLeft.start+'px',borderLeftWidth:a.borderLeftWidth.start+'px',borderRightWidth:a.borderRightWidth.start+'px',borderTopWidth:a.borderTopWidth.start+'px',borderBottomWidth:a.borderBottomWidth.start+'px',letterSpacing:a.letterSpacing.start+'em',overflow:'hidden'}};n.css(w(u[0].props));o.css(w(u[1].props)).show();if(e.shading){d.append(u[2].elem).append(u[3].elem)}}for(var i=0;i<u.length;i++){for(var x in u[i].props){var y=u[i].props[x];y.diff=y.end-y.start}}return u},_drawFull3D:function(G,H,I){var J=$.data(G,Y);if(!J.full3D){return false}var G=$(G);var K=J._curDirection;var L=(K==U||K==V);var M=(K==U||K==W);var N=G.width();var O=G.height();if(N==0||O==0){return true}var P=(1-H)*(L?O:N);var Q=J.segments;var R=J.expansion*(1-Math.abs(2*P-(L?O:N))/(L?O:N));var S=J.reduction-(J.reduction*P/(L?O:N));var T=function(a,b,c,d,e,f,g,k,l,m,n,o){var p=[d-b,f-k];var w=Math.max(p[0],p[1]);var q=[l-c,g-e];var h=Math.max(q[0],q[1]);var r=(L?(p[0]-p[1])/(Q-1)/2:w/Q);var s=(L?h/Q:(q[0]-q[1])/(Q-1)/2);var t=n.paddingLeft[o]+n.paddingRight[o]+n.borderLeftWidth[o]+n.borderRightWidth[o];var u=n.paddingTop[o]+n.paddingBottom[o]+n.borderTopWidth[o]+n.borderBottomWidth[o];var v=Math.round(b);var x=Math.round(c);var y=v;var z=x;var i=0;for(var j=0;j<G[0].childNodes.length;j++){var A=G[0].childNodes[j];if(A.className!=a){continue}var B=Math.round(b+(i+1)*r);var C=Math.round(c+(i+1)*s);var D=p[0]-(L?2*i*r:0);var E=q[0]-(L?0:2*i*s);A.style.left=(L?y:b)+'px';A.style.top=(L?c:z)+'px';A.style.width=Math.max(0,D-t)+'px';A.style.height=Math.max(0,E-u)+'px';A.style.letterSpacing=(L?D/w*(J.letterSpacing[1]-J.letterSpacing[0])+J.letterSpacing[0]:H*n.letterSpacing.diff+n.letterSpacing.start)+n.letterSpacing.units;A.style.lineHeight=(!L?E/h*(J.lineHeight[1]-J.lineHeight[0])+J.lineHeight[0]:H*n.lineHeight.diff+n.lineHeight.start)+n.lineHeight.units;A.style.clip='rect('+(!L?'auto':(z-x)+'px')+','+(L?'auto':(B-v)+'px')+','+(!L?'auto':(C-x)+'px')+','+(L?'auto':(y-v)+'px')+')';if(J.shading){var F=A.nextSibling;F.style.left=y+'px';F.style.top=z+'px';F.style.width=(L?p[0]-2*i*r:B-y)+'px';F.style.height=(L?C-z:q[0]-2*i*s)+'px';F.style.opacity=m;if($.browser.msie){F.style.filter='alpha(opacity='+(m*100)+')'}}y=B;z=C;i++}};T('imageCubeFrom',[S,-R,0,N-P][K],[0,O-P,S,-R][K],[N-S,N+R,P,N][K],[0,O-P,-R,S][K],[N+R,N-S,P,N][K],[P,O,O+R,O-S][K],[-R,S,0,N-P][K],[P,O,O-S,O+R][K],(!J.shading?0:(M?H:1-H)*I[2].props.opacity.diff+I[2].props.opacity.start),I[0].props,'start');T('imageCubeTo',[-R,J.reduction-S,P,0][K],[P,0,-R,J.reduction-S][K],[N+R,N-(J.reduction-S),N,N-P][K],[P,0,J.reduction-S,-R][K],[N-(J.reduction-S),N+R,N,N-P][K],[O,O-P,O-(J.reduction-S),O+R][K],[J.reduction-S,-R,P,0][K],[O,O-P,O+R,O-(J.reduction-S)][K],(!J.shading?0:(M?H:1-H)*I[3].props.opacity.diff+I[3].props.opacity.start),I[1].props,'end');return true}});function extendRemove(a,b){$.extend(a,b);for(var c in b){if(b[c]==null){a[c]=null}}return a}$.fn.imagecube=function(a){var b=Array.prototype.slice.call(arguments,1);if(a=='current'||a=='next'){return $.imagecube['_'+a+'ImageCube'].apply($.imagecube,[this[0]].concat(b))}return this.each(function(){if(typeof a=='string'){$.imagecube['_'+a+'ImageCube'].apply($.imagecube,[this].concat(b))}else{$.imagecube._attachImageCube(this,a)}})};$.fx.step[Y]=function(a){if(a.state==0||!a.stepProps){a.start=0.0;a.end=1.0;a.stepProps=$.imagecube._prepareAnimation(a.elem);var b=a.stepProps[0].elem;a.saveCSS={borderLeftWidth:b.style.borderLeftWidth,borderRightWidth:b.style.borderRightWidth,borderTopWidth:b.style.borderTopWidth,borderBottomWidth:b.style.borderBottomWidth,padding:b.style.padding}}if(!$.imagecube._drawFull3D(a.elem,a.pos,a.stepProps)){for(var i=0;i<a.stepProps.length;i++){var c=a.stepProps[i];for(var d in c.props){var e=c.props[d];c.elem.style[d]=(a.pos*e.diff+e.start)+e.units;if($.browser.msie&&d=='opacity'){c.elem.style.filter='alpha(opacity='+((a.pos*e.diff+e.start)*100)+')'}}}}if(a.state==1){$(a.stepProps[0].elem).hide().css(a.saveCSS);$(a.stepProps[1].elem).show();$.imagecube._prepareRotation(a.elem)}};$.imagecube=new ImageCube()})(jQuery);