/* NAKHEEL HOMEPAGE */

/* Individual Modules
   ------------------
   - inits called from html page 
 */

video_panel = {
	
    large_video_links: [],
	
	setup:function(parent_obj){
		try {
			// TODO: remove id reference
			video_panel.large_video_links = $(parent_obj).getElements("li");
		} catch (e) {
		}
	   
		if (swfobject.hasFlashPlayerVersion('8.0.0')) {
			video_panel.init(parent_obj);
		} else {
			video_substitute_panel.init();
		}
	},
	
	init :function(parent_obj){
		var video_controls = $(parent_obj).getElementsByTagName('a');
		
		for (var i=0; i<video_controls.length; i++){
			video_controls[i].parentNode.value = i;
			video_controls[i].title = "Watch the " + video_controls[i].firstChild.nodeValue + " video or slides."
			video_controls[i].onclick = function(){
				
				this.href = 'JavaScript:void(0);';
				
				video_panel.change_video('large_video_swf',this.parentNode.value,this);
				// video_panel.change_tab("large", this.parentNode.value);
				for (var i=0; i<video_controls.length; i++){
					if (this.parentNode.value == i){
						video_controls[i].parentNode.className = "active";
					} else {
						video_controls[i].parentNode.className = "";
					}
				}
				return false;
			}
		}
	},
	//switch video content by panning left/right
	change_video:function (video_holder,video_number, url_obj){
		try{
			get_element(video_holder).change_video(video_number);
		}
		catch (e){
			window.location.href = url_obj.href;
		}
	},
	
	//dynamically switch content, based on user-input
	change_tab: function(size_mode, video_number){
		if (!large_video_links){
			large_video_links = $("large_video_links").getElementsByTagName("li");
		}
		var video_collection = (size_mode == "large") ? large_video_links : small_video_links;
		
		for(var i=0; i<video_collection.length; i++){
			video_collection[i].className = (video_number == i) ? "active" : ""
		}
	}
}

video_substitute_panel = {
	
	// large_video_links : null,
	
	xfade: {
		'frequency':50,
		'increment':25,
		'images':{}
	},
	
	init: function(){
		
		try {

			var video_substitutes = get_elements_by_class_name("video_substitute", "img", get_element('large_video'));
			var triggers = document.getElementById('large_video_links').getElementsByTagName('li');
			
			for (var i = 0; i < 3; i++) {
	
				var movie_button = triggers[i];
				var image_ref = movie_button.id;
				
				video_substitute_panel.xfade.images[image_ref] = {
					"opacity": 0,
					"el": video_substitutes[i],
					"interval_obj": null
				}
				
				movie_button.onmouseover = function(){
					video_substitute_panel.start_fade_video_images(this.id);
					video_panel.change_tab("large", this.id.substring(8) - 1);
				}
				
				if (i > 0) {
					fader.set_opacity(video_substitutes[i], 0);
				} else {
					fader.set_opacity(video_substitutes[i], 100);
				}
			}
		
		} catch (e) {
		}
	},
	
	 start_fade_video_images: function(image_ref){
		// fix positioning
		video_substitute_panel.xfade.images['trigger_2'].el.style.left = video_substitute_panel.xfade.images['trigger_3'].el.style.left = video_substitute_panel.xfade.images['trigger_1'].el.offsetLeft  + "px";
		video_substitute_panel.xfade.images['trigger_2'].el.style.top = video_substitute_panel.xfade.images['trigger_3'].el.style.top = video_substitute_panel.xfade.images['trigger_1'].el.offsetTop  + "px";
		
		for(var prop in video_substitute_panel.xfade.images){
			video_substitute_panel.xfade.images[prop].el.style.display = "inline";
			interval_obj = video_substitute_panel.xfade.images[prop].interval_obj;
			clearInterval(interval_obj)
			
			if(prop == image_ref){
				var functn = "fader.fade_image('video_substitute_panel.xfade.images." + prop + "', 1)"; 
				video_substitute_panel.xfade.images[prop].interval_obj = setInterval(functn , video_substitute_panel.xfade.frequency);
			} else{
				var functn = "fader.fade_image('video_substitute_panel.xfade.images." + prop + "', -1)"; 
				video_substitute_panel.xfade.images[prop].interval_obj = setInterval(functn , video_substitute_panel.xfade.frequency);
			}
		}
	}
}

interactive_map_selector = {
	the_form: {},
	setup: function(parent_obj){
		// NOTE: depends on the id reference of the form
		interactive_map_selector.the_form = $(parent_obj).getElement('form'); 
		// hide the submit button
		// NOTE: depends on the name of the form submit button
		page.hide_element(interactive_map_selector.the_form.elements['interactive_map_submit'])
		var map_selector = interactive_map_selector.the_form.elements['new_page'];
		map_selector.onchange = function(){
			interactive_map_selector.load_development(this);
		}
	},
	
	load_development: function(obj){
		var value = obj[obj.selectedIndex].value;
		
		if(value != ""){
			interactive_map_selector.the_form.submit();
			// document.location.href = "developments/?" + value;
		}
	}
	
}

news_panel = {
	// ids to remove
	/* form
	 * image_overlay
	 * lis
	 */
	the_news_form:{},
	image_overlay:{},
	xfade: {
		'from_image':'',
		'to_image':'',
		'interval_obj':null,
		'controls':[],
		'images':{},
		'frequency':40,
		'increment':25
	},

	setup: function(parent_obj){
		news_panel.the_news_form = $(parent_obj).getElement('form');
		// hide the submit button
		// NOTE: Depends upon the name of the form submit button
		page.hide_element(news_panel.the_news_form.elements['news_form_submit']);
		
		var archive_selector = news_panel.the_news_form.elements['years_dropdown'];
		archive_selector.onchange = function(){
			news_panel.load_news(this);
		}
		
		// TODO: remove id reference
		news_panel.xfade.controls = parent_obj.getElementsByTagName("LI");
		if (news_panel.xfade.controls.length == 0) {
			return;
		}
		var images_array = $(parent_obj).getElements('img[class^=news_thumbnail]');
		news_panel.xfade.to_image = news_panel.xfade.controls[0].id;
		
		// provide fall back for no images
		if (images_array.length == 0){
			return null;
		}
		// position overlay
		var overlay_image = $(parent_obj).getElement('div.news-preview-mask');
			overlay_image.style.top = "-165px";
		overlay_image.style.marginTop = "0px";
		
		// add link
		var clickable_area = overlay_image.getElementsByTagName('img')[0];
		clickable_area.style.cursor = "pointer";
		clickable_area.style.height = '100%';
		clickable_area.style.width = '100%';
		clickable_area.title = "View this news article";
		clickable_area.onclick = function(){
			var current_link = document.getElementById(news_panel.xfade.to_image);
			document.location.href = current_link.getElementsByTagName('a')[0].href;
		}
		
		for (var i = 0; i < news_panel.xfade.controls.length; i++) {
			// create fade image properties
			var image_ref = news_panel.xfade.controls[i].id;
			news_panel.xfade.images[image_ref] = {
				"opacity": 100,
				"el": images_array[i],
				"interval_obj": null
			}
			
			// hide all but first image
			if (i > 0) {
				images_array[i].style.display = 'none';
			}
			
			// reset margin for ie
			 images_array[i].style.marginBottom = '0px';
			
			news_panel.xfade.controls[i].num = i;
			
			//li events
			news_panel.xfade.controls[i].onclick = function(){
				var url = this.getElementsByTagName("A")[0].href;
				
				if (url != null) {
					document.location.href = url;
				}
			}
			
			news_panel.xfade.controls[i].onmouseover = function(){
				this.style.cursor = "pointer";
				var article_num = this.id;
				
				//swap li classname
				for (var i = 0; i < news_panel.xfade.controls.length; i++) {
					news_panel.xfade.controls[i].className = news_panel.xfade.controls[i].className.replace("active", "");
					if (news_panel.xfade.controls[i] == this) {
						news_panel.xfade.controls[i].className += " active";
					}
				}
				
				news_panel.xfade.from_image = news_panel.xfade.to_image;
				news_panel.xfade.to_image = this.id;
				
				// set bg to to_image
				var to_image = news_panel.xfade.images[news_panel.xfade.to_image];
				var from_image = news_panel.xfade.images[news_panel.xfade.from_image];
				
				$('news_image_area').style.backgroundImage = "url(" + to_image.el.src + ")";
				
				// reset opacity of from_image.
				from_image.opacity = 100;
				fader.set_opacity(from_image.el, 100);
				
				// fade out from_image
				if (!news_panel.xfade.interval_obj) {
					var functn = "fader.fade_image('news_panel.xfade.images." + news_panel.xfade.from_image + "', -1, news_panel.end_fade)";
					news_panel.xfade.interval_obj = setInterval(functn, news_panel.xfade.frequency);
				}
			}
		}
	},
	
	end_fade:function(){
		news_panel.xfade.interval_obj = null;
		news_panel.xfade.fading = 0;
		fade_obj.el.style.display = 'none';
		news_panel.xfade.images[news_panel.xfade.to_image].el.style.display = 'inline';
	},
	
	//send browser to news page (inclusive of deep-linking paramater)
	 load_news: function(obj){
		var value = obj[obj.selectedIndex].value;
		
		if(value != ""){
			news_panel.the_news_form.submit();
		}
	}
}

promo_panel = {
	swf_obj_id:'',
	parent_obj:{},
	num_promos:0,
	promo_links: null,
	
	setup:function(parent_obj){
		promo_panel.parent_obj = parent_obj;
		promo_panel.swf_obj_id = $(parent_obj).getElement('.flash_asset').id;
	},
	
	init: function(num){
		promo_panel.num_promos = num;
		if (promo_panel.num_promos > 1){
			 promo_panel.promo_links = promo_panel.parent_obj.getElement('div.promo_controls');
			
			var back_link = promo_panel.parent_obj.getElement('div.promo_controls a.left');
			back_link.onclick = promo_panel.step_back;
			
			var next_link = promo_panel.parent_obj.getElement('div.promo_controls a.right');
			next_link.onclick = promo_panel.step_forward;
		
			for (var i = 0; i < promo_panel.num_promos; i++) {
				var promo_link = document.createElement('a');
				promo_link.href = "#";
				promo_link.innerHTML = (i + 1);
				if (i == 0) {
					promo_link.className = 'active';
				}
				
				promo_link.onclick = promo_panel.step_to;
				promo_panel.promo_links.insertBefore(promo_link, next_link);
			}
		
		}
	},
	step_back:function(){
		var link_siblings = promo_panel.promo_links.getElementsByTagName('a');
		var active_promo = promo_panel.get_current_active(link_siblings);
		
		if (active_promo > 1) {
			var new_promo = active_promo - 1;
		}
		else {
			new_promo = promo_panel.num_promos;
		}
		
		link_siblings[new_promo].className = 'active';
		link_siblings[active_promo].className = '';
		document.getElementById(promo_panel.swf_obj_id).nGotoAndPlay(new_promo-1);
		return false;
	},
	step_forward:function(){
		var link_siblings = promo_panel.promo_links.getElementsByTagName('a');
		var active_promo = promo_panel.get_current_active(link_siblings);
		
		if (active_promo < promo_panel.num_promos) {
			var new_promo = active_promo + 1;
		} else {
			new_promo = 1;
		}
		
		link_siblings[active_promo].className = '';
		link_siblings[new_promo].className = 'active';
		// TODO: remove id reference
		document.getElementById(promo_panel.swf_obj_id).nGotoAndPlay(new_promo-1);
		return false;
	},
	step_to:function(){
		var link_siblings = promo_panel.promo_links.getElementsByTagName('a');
		var active_promo = promo_panel.get_current_active(link_siblings);
		var new_num = parseInt(this.innerHTML)-1;
		link_siblings[active_promo].className = '';
		link_siblings[parseInt(this.innerHTML)].className = 'active';
	    document.getElementById(promo_panel.swf_obj_id).nGotoAndPlay(new_num);
		return false;
	},
	
	get_current_active: function(collection){
		// returns first element with className 'active' in a collection
		var active_index = -1;
		for (var i=0; i<collection.length; i++){
			if (collection[i].className.indexOf('active') != -1){
				active_index = i;
				break;
			}
		}
		return (active_index);
	},
	
	set_current: function(num){
		var link_siblings = promo_panel.promo_links.getElementsByTagName('a');
		var active_promo = promo_panel.get_current_active(link_siblings);
		try {
			link_siblings[active_promo].className = '';
		} catch (e) {
		}
		link_siblings[num].className = 'active';
		return false;
	}
}



quicklinks_accordion = {
	// requires the following xhtml to be in the page
	/*
	 <div class="accordion">
			<div class="scroll">
				<h3 class="toggle">Our divisions</h3>
				<ul class="toggle two_col">
					<li><a href="alinktoapage">Developments</a></li>
				</ul>
			</div>
		</div>
    */
	
	setup: function(parent_container){
		// add class for differences between JS and non-JS
		var accordions = $$("div.accordion");
		for (var i = 0; i < accordions.length; i++) {
			accordions[i].addClass('live')
		}
		
		// give lis position class for backgrounds
		var mini_accordion_uls = $$(".one_wide .accordion ul.toggle");
		for (var i = 0; i < mini_accordion_uls.length; i++) {
			if (mini_accordion_uls[i].hasClass('two_col')) {
				var lis = mini_accordion_uls[i].getElements("li");
				for (var j = 0; j < lis.length; j++) {
					lis[j].className = "pos" + j;
				}
			}
		}
		
		// intiialise the accordion
		var accordion_links = new Accordion("h3.toggle", "ul.toggle", {
			opacity: false,
			onBackground: function(){
				for (var i = 0; i < this.togglers.length; i++) {
					this.togglers[i].removeClass('active');
				}
				this.togglers[this.previous].addClass('active');
			}
		}, $(parent_container));
	}
}

/* **************** Common Objects and Functions *************** */
page = {
	hide_element: function(element){
		element.style.display = "none";
	},
	hide_elements: function(css_selector){
		var elements_to_hide = $$(css_selector);
		for (var i = 0; i < elements_to_hide.length; i++) {
			elements_to_hide[i].style.display = "none";
		}
	}
}

fader = {
	 fade_image: function(fade_obj_ref, dir, callbackFn){
		fade_obj = get_obj_from_string_ref(fade_obj_ref);
		
		// if not per image use global
		if (!fade_obj.interval) {
			var fade_obj_parent = fade_obj_ref.substring(0, fade_obj_ref.lastIndexOf('.'));
			var fade_obj_grandparent = fade_obj_parent.substring(0, fade_obj_parent.lastIndexOf('.'));
			interval_obj = get_obj_from_string_ref(fade_obj_grandparent + ".interval_obj");
		} else {
			interval_obj = fade_obj.interval_obj;
		}
		
		opacity = fade_obj.opacity;
		
		if(dir == 1 && opacity >= 100){
			fade_obj.opacity = opacity = 100;
			clearInterval(interval_obj); 
		} else if(dir == -1 && opacity <= 0){
			fade_obj.opacity = opacity = 0;
			fader.set_opacity(fade_obj.el, 0);
			clearInterval(interval_obj);
			
			if (callbackFn) {
				callbackFn();
			}
		} else{
			fade_obj.opacity = opacity += news_panel.xfade.increment*dir;
			fader.set_opacity(fade_obj.el, opacity);
		}
	},
	
	set_opacity: function(obj,opacity){
		//if(is_ie){
			obj.style.filter = "alpha(opacity=" + opacity + ")";
		//}
		//else{
			obj.style.opacity = (opacity/100);
		//}
	}
}

function get_obj_from_string_ref(str_obj_ref){
	var object_levels = str_obj_ref.split('.');
	var obj = window[object_levels[0]];
	
	for (var i=1; i<object_levels.length; i++){
		obj = obj[object_levels[i]];
	}
	return obj;
}

