/* Medialocate interactivity */

medialocate = {};

$(document).ready(function(){
	medialocate.ui.jsIndicator();
 	medialocate.ui.nav();
	medialocate.ui.roundedCorners();
	medialocate.ui.slideShow();
	medialocate.ui.maps();
	medialocate.ui.expand();
	medialocate.ui.testimonials();
	medialocate.ui.zebratables();
	medialocate.ui.services();
	medialocate.ui.externalLinks();
	medialocate.ui.servicePage();
	medialocate.ajax.login();
	medialocate.forms.customMultiSelect();
	medialocate.forms.customRadio();
	medialocate.forms.customFile();
	medialocate.forms.datePicker();
	medialocate.forms.validate();
	medialocate.ie.formHelper();
	medialocate.ie.fixPngs();
	medialocate.ie.cssHelper();
});

medialocate.config = {
	businessSectors: new Array('Consumer Goods', 'Education', 'Finance and Law', 'Healthcare', 'Information Technology', 'Manufacturing', 'Marketing', 'Telecommunications', 'Video Games'),
	blankSrc: '/images/spacer.gif',
	zoomLevel: 0
}

medialocate.ui = {
	jsIndicator: function() {
		$('body').removeClass('jsOff').addClass('jsOn');
	},

	nav: function()	{
		$('#nav li').not(':last-child').hover(
			function(){
				$(this).addClass('open');
			},
			function(){
				$(this).removeClass('open');
			}
		);
		$('#nav>li:first-child').hover(
			function(){
				$(this).addClass('first-child-open');
			},
			function(){
				$(this).removeClass('first-child-open');
			}
		);
	},
	
	roundedCorners: function() {
		$('.contentBox div.n').wrapInner('<div class="e"><div class="s"><div class="w"><div class="nw"><div class="ne"><div class="se"><div class="sw"></div></div></div></div></div></div></div>');
	},
	
	slideShow: function() {
		var promotes = $('#slideShow li');

		$('#slideShow').css({ overflow:'hidden', position: 'relative' });
		promotes.css({ position: 'absolute', top:0, left:0, zIndex:100 });
		
		//set up
		promotes.hide().filter(':first').show();
		$('#slideShow').append('<ul id="pagination"></ul>');
		for (i=1; i<=promotes.length; i++)	{
			$('#pagination').append('<li><a href="#slide' + i + '">' + i + '</a></li>');
		}
		$('#pagination li').filter(':first').addClass('firstPage currentPage').end().filter(':last').addClass('lastPage');
		
		//bind click event to page numbers
		$('#pagination a').bind('click', function() {
			promotes.fadeOut().filter(this.hash).fadeIn();
			$(this).parents('li').siblings().removeClass('currentPage');
			$(this).parents('li').addClass('currentPage');
			return false;
		});
		
		var rotateInt = '';
		function startRotation() {
			if (rotateInt == '') {
				rotateInt = window.setInterval('medialocate.ui.slideShowAnimate()', 5000);
			} else {
				stopRotation();
			}
		}
		function stopRotation()	{
			if (startRotation != '') {
				window.clearInterval(rotateInt);
				rotateInt='';
			}
		}
		startRotation();
		
		$('#slideShow').hover(
			function() {
				stopRotation();
			},
			function() {
				startRotation();
			}
		);
	},
	
	slideShowAnimate: function() {
		var $current = $('#pagination li.currentPage');
		if ($current.hasClass('lastPage')) {
			var $next = $current.parents('ul').find('li:first a').click();
		} else {
			var $next = $current.next('li').find('a').click();
		}
	},
	
	maps: function() {
		var maps = $('#mapViews li');
		
		$('#map').append("<img id='mapZoomIn' src='/images/btnZoomIn.gif' alt='zoom in'/><img id='mapZoomOut' src='/images/btnZoomOut.gif' alt='zoom out'/>");
		
		$('#mapZoomIn').bind('click', function() {
			medialocate.config.zoomLevel++;
			medialocate.ui.changeZoom();
		});
		
		$('#mapZoomOut').bind('click', function() {
			medialocate.config.zoomLevel--;
			medialocate.ui.changeZoom();
		});
	},
	
	changeZoom: function() {
		var zoomIn = $('#mapZoomIn');
		var zoomOut = $('#mapZoomOut');
		var mapViews = $('#mapViews li');
		var defaultView = $('#defaultView');
		var zoomInView = $('#zoomInView');
		var zoomOutView = $('#zoomOutView');
		switch(medialocate.config.zoomLevel) {
			case -1:
				zoomOut.hide();
				mapViews.css('zIndex', 100);
				zoomOutView.css('zIndex', 150);
				break;
			case 1:
				zoomIn.hide();
				mapViews.css('zIndex', 100);
				zoomInView.css('zIndex', 150);
				break;
			default:
				zoomOut.show();
				zoomIn.show();
				mapViews.css('zIndex', 100);
				defaultView.css('zIndex', 150);
				break;
		}
	},
	
	expand: function() {
		var showText;
		var hideText;
		var list = $('dl.expand');
		list.find('dd').hide();
		if (list.hasClass('faq')) {
			showText = ' (Show Answer)';
			hideText = ' (Hide answer)'
		} else if (list.hasClass('employment')) {
			showText = ' (Click for Details)';
			hideText = ' (Click to Close)';
		} else {
			showText = ' (Click to Open)';
			hideText = ' (Click to Close)';
		}
		$('dl.expand dt').append('<span class="expandToggle">' + showText + '</span>');
		$('dl.expand span.expandToggle').toggle(
			function(){
				$(this).text(hideText).parents('dt').next('dd').slideDown();
			},
			function(){
				$(this).text(showText).parents('dt').next('dd').slideUp();
			}
		);
	},
	
	testimonials: function()	{
		$('#testimonials div.sw').append('<div id="sort"><h4>View by business sector</h4><p id="selected">All</p><ul id="select"><li class="all">All</li></ul></div>');
		for (i=0; i<medialocate.config.businessSectors.length; i++) 	{
			var sectorClass = medialocate.config.businessSectors[i].toLowerCase().replace(/\s/g, '-');
			$('#select').append('<li class="' + sectorClass + '">' + medialocate.config.businessSectors[i] + '</li>');
		}
		$('p#selected').bind('click', function() {
			if ( $('#sort').hasClass('open') ) {
				$('ul#select').slideUp();
				$('#sort').removeClass('open');
			} else {
				$('ul#select').slideDown();
				$('#sort').addClass('open');
			}
		});
		$('#select li').bind('click', function() {
			var filterVal = $(this).attr('class');
			var selectedText = $(this).text();
			if ( $(this).hasClass('all') ) {
				$('#testimonials .testimonials li.hidden').fadeIn('slow').removeClass('hidden');
			} else {
				$('#testimonials .testimonials li').each(function() {
					if ( !$(this).hasClass(filterVal) ) {
						$(this).fadeOut('normal').addClass('hidden');
					} else {
						$(this).fadeIn('slow').removeClass('hidden');
					}
				});
			}
			$('p#selected').text(selectedText);
			$('ul#select').slideUp();
			$('#sort').removeClass('open');
		});
	},
	
	zebratables: function() {
		$('.article table tr:odd').addClass('alt');
	},
	
	services: function() {
		var hash = window.location.hash;
		if (hash) {
			$(hash).find('span.expandToggle').click();
		}
	},
	
	externalLinks: function() {
		$('a[rel="external"]').click(function(){
			window.open(this.href);
			return false;
		});
	},
	
	servicePage: function() {
		$('#ourServices #navServices').find('a').bind('click', function() {
			var definition = $(this.hash).next('dd');
			if (definition.is(':hidden'))	{
				$(this.hash).find('span.expandToggle').click();
			}
		});
	}
}

medialocate.ajax = {
	login: function() {
		$('#login a').toggle(
			function() {
				$(this).after('<div id="loginPage"><div id="loginPageTop"></div><div id="loginPageBody"></div><div id="loginPageBottom"></div></div>');
				var href = $(this).attr('href');
				var selector = '.contentBox div.n p';
				$('#loginPage').fadeIn('fast');
				$('#loginPageBody').load(href + ' ' + selector, function(){
					$('#loginPage p.buttons').append('<img src="/images/btnCancel.gif" alt="Cancel" class="cancelButton"/>');
					$('#loginPage img.cancelButton').bind('click', function(){
						$('#login a').click();
					});
				});
				return false;
			},
			function(){
				$('#loginPage').fadeOut('fast', function(){$(this).remove()});
			}
		);
	},
	
	loadMap: function(xml) {
		alert('loadMap');
		var src = $(xml).find('Result').text();
		$('#map').empty().append('<img src="' + src + '" alt="Click for driving directions">');
	}
}

medialocate.forms = {
	customMultiSelect: function()	{
		$('form select[multiple]').each(function(i){
			var opts = $(this).find('option');
			var selectId = $(this).attr('id');
			$(this).hide().after('<div class="customMultiSelect" id="faux_' + selectId + '" style="width:205px;height:125px;"><ul class="options"></ul></div>');
			var optionList = $('#faux_' + selectId).find('ul.options');
			opts.each(function(i){
				var optionText = $(this).text();
				if (this.selected) {
					optionList.append('<li class="selected" name="' + i + '">' + optionText + '</li>');
				} else {
					optionList.append('<li name="' + i + '">' + optionText + '</li>');
				}
			});
		});
		$('.customMultiSelect li').bind('click', function() {
			var select = $(this).parents('div.jScrollPaneContainer').prev('select');
			var index = $(this).attr('name');
			var option = select.find('option:eq(' + index + ')');
			if ($(this).hasClass('selected')) {
				$(this).removeClass('selected');
				option.attr('selected', '');
			} else {
				$(this).addClass('selected');
				option.attr('selected', 'selected');
			}
		});
		$('.customMultiSelect').jScrollPane({
			scrollbarWidth: 17,
			scrollbarMargin: 0,
			showArrows: true,
			arrowSize: 19
		});
	},
	
	customRadio: function() {
		var radios = $('input[type="radio"]');
		var labels = $('label.radioLabel');
		radios.each(function() {
			$(this).css('opacity', 0);
			if ( $(this).is(':checked') ) {
				$(this).parents('label').addClass('selected');
			}
		});
		radios.bind('change', function() {
			var name = $(this).attr('name');
			var radioGroup = radios.filter('input[name="' + name + '"]');
			radioGroup.parents('label').removeClass('selected');
			if ( $(this).is(':checked') ) 	{
				$(this).parents('label').addClass('selected');
			}
		});
	},
	
	customFile: function() {
		var fileContainer = $('#fileInput');
		var fileInput = $('#DBFile');
		var loadVal = fileInput.val();
		$('#fauxText').text(loadVal);
		fileInput.css('opacity', 0).wrap('<span id="fauxFile"></span>');
		$('#fauxFile').append('<span id="fauxText"></span>');
		fileInput.bind('change', function() {
			var fileVal = $(this).val();
			fileVal = fileVal.replace(/\s/g, '_');
			$('#fauxText').text(fileVal);
		});
		$('#fauxText').bind('click', function() {
			$(this).text('');
			fileInput.val('');
		});
	},
	
	datePicker: function() {
		$('#startDate, #endDate').datepicker();
	},
	
	validate: function() {
		$('#quoteForm').validate();
	}
}

medialocate.ie = {
	cssHelper: function() {
		$('.contentBox h2+p').addClass('firstPara');
	},
	
	formHelper: function(){
		$('input[type="text"]').addClass('typeText');
		$('input[type="radio"]').addClass('typeRadio');
		$('input[type="checkbox"]').addClass('typeCheck');
		$('input[type="file"]').addClass('typeFile');
		$('input[type="password"]').addClass('typePassword');
		$('input[type="submit"]').addClass('typeSubmit');
		$('input[type="image"]').addClass('typeImage');
		$('input[type="reset"]').addClass('typeReset');
		$('select[multiple="multiple"]').addClass('multiple');
	},
	
	fixPngs: function() {
		var type, background_image, background_repeat;

		$('.pngfix').each(function() {
			type = this.tagName.toLowerCase();

			if ( type == 'input' || type == 'img' ) {
				if ( (type == 'input' && this.getAttribute('type') == 'image') || this.src.toLowerCase().search(/\.png$/) ) {
					medialocate.iehelper.fixPng(this);
					$(this).bind('propertychange', function() {
						medialocate.iehelper.fixPng(this);
					});
				}
			}

			background_image = $(this).css('background-image');

			if ( background_image.toLowerCase().search(/\.png"\)$/) < 0 ) return;

			background_image = background_image.substring(5, background_image.length-2);
			background_repeat = $(this).css('background-repeat');
			this.style.background = 'none';

			if ( background_repeat == 'no-repeat' ) {
				this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + background_image + "', sizingMethod='crop')";
			} else {
				this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + background_image + "', sizingMethod='scale')";
			}
		});
	},

	fixing: false,
	fixPng: function(obj) {
		if ( medialocate.iehelper.fixing ) return;

		medialocate.iehelper.fixing = true;

		var src = obj.src;

		if ( new RegExp(medialocate.config.blankSrc).test(src) ) {
			medialocate.iehelper.fixing = false;
			return;
		}

		obj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src  + "', sizingMethod='image')";

		$(obj).bind('beforeprint', function(imgObjSrc) {
			return function() {
				this.src = imgObjSrc;
			}
		}(obj.src));

		$(obj).bind('afterprint', function() {
			this.src = medialocate.config.blankSrc;
		});

		obj.src = medialocate.config.blankSrc;
		medialocate.iehelper.fixing = false;
	}
}