/**
 * 
 * Routes Online - Site.js
 * Copyright © Fluid Creativity 2008
 *
 * Main site Javascript functionality. Dependent on Mootools 1.2 SVN
 *
 */

Site = {
	init: function () {
		Site.rememberMe();
		Site.rollOvers();
		Site.clearDefaults();
		Site.navigation('mainNav');
		Site.navigation('breadcrumb');
		Site.uploadDocuments();
		Site.initRouteList();
		Site.homepageFlash();
		Site.confirmDelete();
		Site.EventPRC();
		Site.initRevealBidProfileBlocks();
		Site.initSearchMenuBehaviour();
		
		$(document.body).removeClass('nonJS');
		
		if ($('meetingRequests')) {
			// preload loading image
			var preload = new Image();
			preload.src = "/images/ajax-loader.gif";
			
			// replace submit button with loading icon
			$('meetingRequests').adopt(
				new Element('img', {
					'src': '/images/ajax-loader.gif',
					'alt': 'Loading meeting requests'
				})
			).getElement('#meetingSubmit').destroy();
			
			$('meetingRequests').submit();
		}
	},

	rememberMe: function() {
		el = $('rememberme');
		if (!$defined(el)) { return; }
		el.addEvent('click', function(el) {
			label = $('remembermelabel');
			if ($defined(label)) {
				if (label.hasClass('checked')) {
					label.removeClass('checked');
				} else {
					label.addClass('checked');
				}
			}
		});
	},

	clearDefaults: function () {
		var loginInput = $('loginUsername');
		if ($defined(loginInput)) {
			this.keepMenuOpen(loginInput);
		}
		$$('.hasDefault').applyClearDefault('active');
	},
	
	initSearchMenuBehaviour: function () {
		var searchInput = $('queryText');
		if ($defined(searchInput)) {
			this.keepMenuOpen(searchInput);
		}
	},
	
	keepMenuOpen: function (subjectInput) {
		var menuItem = subjectInput.getParent('li');
		var menuItemLink = menuItem.getChildren('a');
		subjectInput.addEvent('focus', function(e) {
			$$('#mainNav li').removeClass('open');
			menuItem.addClass('open');
		});
		menuItemLink.addEvent('click', function(e) {
			var menuClass = menuItem.get('class');
			if( menuClass.contains('open') ){
				e.preventDefault();
				menuItem.removeClass('open');
			}
		});
	},

	rollOvers: function () {		
		$$('.rollOver').applyRollOver();
					},
					
	// purely for visual effects.
	navigation: function (menuName) {
		var mainNav = $(menuName);
		if (mainNav) {
			var menuItems = mainNav.getElements('li.dropDown');
			if (menuItems) {
				menuItems.each(function (el) {
					el.addEvents({
						'mouseenter': function (e) {
							el.addClass('hover');
						},
						
						'mouseleave': function (e) {
							el.removeClass('hover')
						}
					});
				});
			}
		}

		/*
		sectionNav = $('sectionNav');
		
		if (sectionNav) {
			sectionNav.getElements('li > a').each(function (el, i) {
				if (el.getParent().hasClass('selected')) return;
				
				el.store('morphInst', new Fx.Morph(el, {
					duration: 170,
					link: 'cancel'
				}));
				
				if (el.getParent().getParent().hasClass('firstLevel')) {
					el.addEvent('mouseenter', function () {
						el.setStyle('border-left', '5px solid #b1d1e4');
						el.retrieve('morphInst').start({
							'border-color': ['#b1d1e4', '#39839f'],
							'color': '#C90D19'
						});
					}).addEvent('mouseleave', function () {
						el.retrieve('morphInst').start({
							'border-color': ['#39839f', '#b1d1e4'],
							'color': '#6f6f6f'
						});
					});
				} else if (el.getParent().getParent().hasClass('secondLevel')) {		
					el.addEvent('mouseenter', function () {
						el.setStyle('border-left', '5px solid #e2e2e2');
						el.retrieve('morphInst').start({
							'border-color': ['#e2e2e2', '#bdbdbd'],
							'color': '#87a0af'
						})
					}).addEvent('mouseleave', function () {
						el.retrieve('morphInst').start({
							'border-color': ['#bdbdbd', '#e2e2e2'],
							'color': '#3983af'
						})
					});
				}			
			});
		}
		*/
	},
	
	uploadDocuments: function () {
		if ($('uploadDocuments')) {
			$('uploadDocuments').adopt(new Element("fieldset").addClass("firstItem").adopt($('uploadDocuments').getChildren()));
			new Element("legend", { text: MultiLingual.getString('js_uploaddocuments') }).inject($('uploadDocuments'), 'top');
			
			$('uploadDocuments').adopt(new Element("div", { id: 'addLink' }).adopt(new Element("a", { href: '#', text: MultiLingual.getString('js_adddocument') }).addEvent("click", function(e) {
				e.stop();

				var fieldset = $('uploadDocuments').getElement("fieldset").clone().inject(this.getParent(), 'before');
				fieldset.removeClass("firstItem").getElements("input").set({ value: '', styles: { height: 'auto' }});

		                fieldset.adopt(new Element("a", { href: '#', text: MultiLingual.getString('js_remove') }).addEvent("click", function(e) {
		                	e.stop();
		                	
		                	$(this.parentNode).dispose();
				}));
			})));
		}
	},

	displaySurveyDialog: function() {	
		new Request.HTML({
			url: '/ajax/survey.php',
			onSuccess: function(tree, elements, html) {				
				var dialogHTML = new Element("div", { 'id': 'surveyDialog', 'class': 'popupDialog' }).adopt(tree);
				$(document.body).adopt(dialogHTML);
									
				var opportunityDialog = new PopupDialog(dialogHTML);
				opportunityDialog.closeCallback = function() {
					Cookie.write('survey_status', 'delayed', { 'duration': 2 });
				};			
				opportunityDialog.openDialog()
			}
		}).get({ lang: MultiLingual.langCode });
	},

	initRouteList: function () {
		if ($('routeList')) {
			var triggers = $('routeList').getElements("dt + dd").getPrevious();
			var contentBlocks = $('routeList').getElements("dd").setStyle('overflow', 'hidden');
	
			contentBlocks.each(function(el) {
				el.store('origHeight', el.getSize().y);
				el.store('tweenFx', new Fx.Tween(el).set('height', 0));
				el.store('open', false);
			});
			
			triggers.each(function(el) {
				if (el.getNext().hasChildNodes()) {
					el.adopt(new Element("a", { 'href': '#', 'class': 'viewLink', 'text': MultiLingual.getString('js_viewdetails') }).addEvent("click", function(e) {
						e.stop();
						
						var content = el.getNext();
						var open = content.retrieve('open');
						var fx = content.retrieve('tweenFx');
						var origHeight = content.retrieve('origHeight');
	
						this.toggleClass("open");
			
						if (!open) {
							fx.start('height', origHeight);
							content.store('open', true);
						} else {
							fx.start('height', 0);
							content.store('open', false);
						}	
					}));
				}
			});
		}
	},
	
	homepageFlash: function () {
		var staticBase = "http://static.routesonline.com";

		if ($('promoVideo')) {
			var swf = new Swiff(staticBase + '/flash/promo.swf', {
				container: 'promoVideo',
				width: 656,
				height: 369
			});
		}
		
		if ($('uploadPromo')) {
			var swf = new Swiff(staticBase + '/flash/uploadPromo.swf', {
				container: 'uploadPromo',
				width: 576,
				height: 112
			});
		}
	},
	
	confirmDelete: function (e) {
		var linkDeletes  = $$('a.delete');
		
		linkDeletes.addEvent('click', function(e) {
			if(!confirm('Are you sure you want to delete this section?')) {
				e.stop();
			}
		});
	},
	
	EventPRC: function (e) {
		$$('label.useOtherSurname').each(function(el) {
			var checkbox = el.getElement('input[type=checkbox]');
			
			checkbox.addEvent('click', function(e) {
				el.getNext('label.labelOtherSurname').setStyle('display', ((!e.target.checked) ? 'none' : ''));
			});

			el.getNext('label.labelOtherSurname').setStyle('display', ((!checkbox.checked) ? 'none' : ''));
		});		
	},
	
	initRevealBidProfileBlocks: function() {
		var trigger = $('bidSubject');
		if ($defined(trigger)) {
			trigger.addEvent('click', function(e) {
				this.toggleClass('downward');
				var revealBlock = $('revealBlock');
				revealBlock.get('reveal').toggle();
			});
			var revealBlock = $('revealBlock');
			revealBlock.set('reveal', {
				duration: 1000
			}).dissolve();
		}
	}
}



Element.implement({
	applyRollOver: function() {
		if (this.src.test(/\.(gif|jpg|jpeg|png)$/i)) {
			// preload image
			var preload = new Image();
			preload.src = this.src.replace(/\.(gif|jpg|jpeg|png)/, '-over.$1');

			this.addEvents({
				mouseover: function() {
					this.src = this.src.replace(/\.(gif|jpg|jpeg|png)/, '-over.$1');
				},

				mouseout: function() {
					this.src = this.src.replace(/-over\.(gif|jpg|jpeg|png)/, '.$1');
				}
			});
		}

		return this;
	},

	applyClearDefault: function(className) {
		this.addEvents({
			'focus': function() {
				if (this.value == this.defaultValue && !this.retrieve('cleared')) {
					this.value = '';
					this.store('cleared', true);

					this.removeClass(className);
	}

			},
			'blur': function() {
				if (this.value == '' && this.retrieve('cleared')) {
					this.value = this.defaultValue;
					this.eliminate('cleared');

					this.addClass(className);
				}
			}
		});

		return this;
	}
});

String.prototype.truncate = function (length) {
	return (this.length > length ? this.substr(0, length) + '...' : this).replace(/^\s+|\s+$/g, '');
};

window.addEvent('domready', Site.init);

