﻿/// <reference path="jquery-1.3.2-vsdoc.js" />
var divElem = 'AlertDiv';
var messageElem = 'AlertMessage';
var bodyTag = 'bodytag';

function ClearErrorState() {
	$.unblockUI();	                  
}

function EndRequestHandler(sender, args)
{
   if (args.get_error() != undefined)
   {
       var errorMessage;
       if (args.get_response().get_statusCode() == '200')
       {
           errorMessage = args.get_error().message;
       }
       else
       {
           // Error occurred somewhere other than the server page.
           errorMessage = 'An unspecified error occurred. ';
       }
       args.set_errorHandled(true);
       $get(messageElem).innerHTML = errorMessage;
       $.blockUI({ message: $get(divElem) });
   }
}


/*
*   Custom Site Scripts
*	@author mjjames
*	@requires jquery
*/

var mjjames = window.mjjames || {};
mjjames.data = window.mjjames.data || {};

mjjames.helpers = window.mjjames.helpers || {};
mjjames.controls = window.mjjames.controls || {};
mjjames.timeouts = window.mjjames.timeouts || {};

mjjames.controls.callbackForm = function() {
	var validateForm = function(e) {
		var valid = true;

		$("div.callbackForm input.txtInput").each(function() {
			valid = String(this.value).length > 0;
		});

		if (!valid) {
			alert("Please Ensure You Have Filled Out All The Fields Before Clicking Call Me");
		}
		return valid;
	};

	return {
		init: function() {
			$("div.callbackForm input.submit").click(mjjames.controls.callbackForm.validate);
		},
		validate: function() {
			return validateForm();
		}
	};
}();


mjjames.controls.navigationSlider = function() {
	///<summary>Creates a "Slidable" navigation with optional overlays</summary>

	var _container, _moveLeft, _moveRight, _moveLeftHover, _moveRightHover, _viewer, _scrollAmount, _mouseoverImageContainer, _mouseoverTextContainer;

	var setupNavigation = function() {
		///<summary> Sets up the Navigation</summary>
		var $container = $(_container);
		var $moveLeft = $container.find(_moveLeft);
		var $moveRight = $container.find(_moveRight);

		var $elements = $container.find("li");

		if (typeof (_mouseoverImageContainer) !== "undefined" || typeof (_mouseoverTextContainer) !== "undefined") {
			$elements.mouseover(mouseOver);
		}

		var elementSize = Number(String($elements.css("width")).replace("px", "")) * $elements.length + 25;

		$.scrollTo.defaults.axis = 'x';

		$container
			.find(_viewer)
			.css("overflow", "hidden")
			.scrollTo(0)
			.find("ul")
			.css("width", elementSize);

		$moveLeft
			.css("cursor", "pointer")
			.mouseover(function() {
				var $img = $(this);
				var originalImage = $img.attr("src");
				$img.attr("src", _moveLeftHover);
				$img.mouseleave(function() {
					$(this).attr("src", originalImage);
				});
			})
			.click(function() {
				$(_container).find(_viewer).stop().scrollTo('-=' + _scrollAmount, 800);
			});

		$moveRight
			.css("cursor", "pointer")
			.mouseover(function() {
				var $img = $(this);
				var originalImage = $img.attr("src");
				$img.attr("src", _moveRightHover);
				$img.mouseleave(function() {
					$(this).attr("src", originalImage);
				});
			})
			.click(function() {
				$(_container).find(_viewer).stop().scrollTo('+=' + _scrollAmount, 800);
			});
		
	};

	var mouseOver = function() {
		///<summary>On Mouse Over swaps an image and text for the navigational items image and text</summary>
		var $this = $(this);

		if (typeof (_mouseoverImageContainer) !== "undefined") {
			var $imageContainer = $(_mouseoverImageContainer);
			var $image = $this.find("a.thumb img");

			var originalAlt = $imageContainer.attr("alt");
			var originalSrc = $imageContainer.attr("src");

			var oldImage = originalSrc.split("&");
			var newImage = String($image.attr("src")).split("&");

			newImage[1] = oldImage[1];
			newImage[2] = oldImage[2];
			newImage[3] = oldImage[3];

			$imageContainer.attr("alt", $image.attr("alt"));
			$imageContainer.attr("src", newImage.join("&"));

			$this.bind("mouseout", { alt: originalAlt, src: originalSrc }, function(event) {
				$(_mouseoverImageContainer).attr("alt", event.data.alt).attr("src", event.data.src);
			});
		}

		if (typeof (_mouseoverTextContainer) !== "undefined") {
			var $textContainer = $(_mouseoverTextContainer);
			var $text = $this.find("a:not(.thumb)");

			var originalTitle = $textContainer.find("h1").text();
			var originalDesc = $textContainer.find("p.desc").text();

			$textContainer.find("h1").text($text.text());
			$textContainer.find("p.desc").text($text.attr("title"));

			$this.bind("mouseout", { title: originalTitle, desc: originalDesc }, function(event) {
				$(_mouseoverTextContainer).find("h1").text(event.data.title).end().find("p.desc").text(event.data.desc);
			});


		}
	};

	return {
		init: function(params) {
			///<summary> Initialises the JS </summary>
			//<param name="params">Object containing all our properties</param>
			_container = params.container || "";
			_moveLeft = params.moveleft || "";
			_moveRight = params.moveright || "";
			_moveLeftHover = params.movelefthover || "";
			_moveRightHover = params.moverighthover || "";
			_viewer = params.viewer || "";
			_scrollAmount = params.scrollamount || "100px";
			_mouseoverImageContainer = params.mouseoverImageContainer || null;
			_mouseoverTextContainer = params.mouseoverTextContainer || null;

			if ($.scrollTo !== undefined) {
				setupNavigation();
			}
		}
	};
} ();

mjjames.controls.articleGrouping = function() {
    var _container, _showhideelement, _showhidecontainer;
    var setup = function() {
        var $container = $(_container);
        $container
			.find(_showhideelement)
			.css("cursor", "pointer")
			.click(function() {
			    var $this = $(this);
			    $this.next().toggle();
			    //$this.parent().parent().height($this.parent().height());
			    if (typeof (curvyCorners) !== "undefined") {
			        //curvyCorners.redraw();
			    }
			})
			.end()
			.find(_showhidecontainer)
			.not(":first")
			.hide();

    };

    return {
        init: function(params) {
            _container = params.container || "";
            _showhidecontainer = params.showhidecontainer || "";
            _showhideelement = params.showhideelement || "";
            setup();
        }
    };
} ();

mjjames.helpers.columnfixer = function() {
	var _column1, _column2;

	var resizeColumn = function() {
		var minheight = $(_column1).height();
		$(_column2).css("min-height", minheight);
	};

	return {
		init: function(params) {
			_column1 = params.column1 || "";
			_column2 = params.column2 || "";
			resizeColumn();
		}
	};
}();

/// <reference path="jquery-1.3.2-vsdoc.js" />

/*
*   Auto Content Slider
*	@author mjjames
*	@requires jquery
*/



mjjames.controls.Banners = function() {
	//private
	var _$container;
	var _iTimer;
	var _galleryData;
	var _iBannerKey;
	var _iTotalBanners;

	var setupBanners = function() {
		if (_$container.length > 0 && _galleryData !== undefined) {
			_iTotalBanners = _galleryData.length;
			_iBannerKey = 0;
			if (_iTotalBanners > 1) {
				setInterval(mjjames.controls.Banners.rotateBanner, _iTimer);
			}
		}
	};

	var rotateBanner = function() {
		_iBannerKey = _iBannerKey + 1;
		if (_iBannerKey >= _iTotalBanners) {
			_iBannerKey = 0;
		}
		var data = _galleryData[_iBannerKey];
		var img = _$container.find("div.image");
		var text = _$container.find("div.text");
		text.html("<h2>" + data.BannerTitle + "</h2><p>" + data.BannerDescription + "</p>");
		img
			.find("a")
			.attr("title", data.BannerTitle)
			.attr("href", data.BannerLink)
			.find("img")
			.fadeOut(function() {
				$(this)
				.attr("title", data.BannerTitle)
				.attr("alt", data.BannerTitle)
				.attr("src", data.BannerPath)
				.fadeIn();
			});
	};

	return {
		init: function(params) {
			_$container = $(params.container);
			_iTimer = params.timeout * 1000 || 5000;
			_galleryData = params.data;
			setupBanners();
		},
		rotateBanner: function() {
			rotateBanner();
		}
	};
}();

/*
*   Auto Content Slider
*	@author mjjames
*	@requires jquery
*/

var mjjames = window.mjjames || {};
mjjames.controls = window.mjjames.controls || {};
mjjames.timeouts = window.mjjames.timeouts || {};
mjjames.data = window.mjjames.data || {};

mjjames.controls.slider = function() {
	//private stuff
	var _contents1, _contents2, _showhide, _iTimer, _cookieName;

	var setupSlider = function() {
		$('<a href="#" title="Show / Hide Contents" class="showhide">+/-</a>')
			.appendTo($(_showhide))
			.click(toggleSlider); //setup the show hide link

		if (getCookie()) {
			toggleSlider();
		}
		else { //if we dont have a cookie set default to normal behaviour
			mjjames.timeouts.contentSlider = window.setTimeout(toggleSlider, _iTimer); //setup default content hide
		}
		//if a user mouses over the text area stop the banners from showing until they have stopped looking at it
		$(_contents1).mouseenter(function () {
			window.clearTimeout(mjjames.timeouts.contentSlider);
		}).mouseleave(function () {
			mjjames.timeouts.contentSlider = window.setTimeout(toggleSlider, _iTimer); //setup default content hide
		});

	};

	var toggleSlider = function() {
		window.clearTimeout(mjjames.timeouts.contentSlider);

		$(_contents1).slideToggle("slow");
		$(_contents2).slideToggle("slow");

		$.cookie(_cookieName, { content: "hidden" }); //set the cookie
		return false;
	};

	var getCookie = function() {
		var showContent = false;
		var cookie = $.cookie(_cookieName);
		if (cookie !== null) {
			if (cookie.content === "hidden") {
				showContent = true;
			}
		}
		return showContent;
	};

	//public
	return {
		init: function(params) {
			_contents1 = params.contents1 || "";
			_contents2 = params.contents2 || "";
			_showhide = params.showhide || "";
			_iTimer = params.timeOut * 1000 || 10000;
			_cookieName = params.cookieName || "contentSlider";

			setupSlider();
		}
	};
}();

/*
	IE Rounded Corners
*/
mjjames.controls.roundedCorners = function() {

	var cornersHTML = '<span class="tl corner">&nbsp;</span> <span class="tr corner">&nbsp;</span> <span class="bl corner">&nbsp;</span> <span class="br corner">&nbsp;</span>';

	var setupCorners = function(container) {
		$(container).append(cornersHTML);
	};

	return {
		init: function(container) {
			setupCorners(container);
		}
	};
}();


/* error handling */

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);

$(function() {
	var resizeParams = {
		column1: "div.left",
		column2: "div.main"
	};
	mjjames.helpers.columnfixer.init(resizeParams);

	mjjames.controls.callbackForm.init();




});


/* Have to load this on load due to the CurvyCorners in IE messing around with everything */
$(window).load(function(){
    var articleParams = {
	    container: "div.articles",
	    showhideelement: "h3.year",
	    showhidecontainer: "ul.sideListing"
    };

    mjjames.controls.articleGrouping.init(articleParams);
});
