//global variables
base_path = "/";
if (location.host.indexOf(".com") == -1) {
	base_path = "/";
}

var agent;
var is_major;
var is_ie;
var is_ie7;
var is_firefox;
var is_windows;

var current_top_nav_highlight = null;
var large_video_swf_enable = false;
var large_video_swf_content = getSlideshowPath();

function getSlideshowPath() {
	var path = null;
	var domain = document.domain;
	if (domain == 'www.nakheel.com') {
		path = 'http://media.cdn.nakheel.com/portal/nakcom/static/nakheel/swf/banners/';	
	} else if (domain == 'localhost' || domain == 'local.nakheel.com') {
		path = 'en/swf/banners/';	
	} else {
		path = '/portal/nakcom/static/nakheel/swf/banners/';
	}
	return path;
}

function init_header(){
	// determine current top-nav
	var mainnav_links = document.getElementById('nav_links').getElementsByTagName('a');
	for (var i=0; i<mainnav_links.length; i++){
		var link_list_item = $(mainnav_links[i].parentNode);
		if (link_list_item.hasClass('active')){
			current_top_nav_highlight = i-1;
			break;
		}
	}
	
	for (var i=0; i<mainnav_links.length; i++){
		mainnav_links[i].onmouseover = function(){
			swap_main_navigation_class(event, this);
		}
		mainnav_links[i].onmouseout = function(){
			swap_main_navigation_class(event, this);
		}
	}
	document.getElementById('development_selector_link').onclick= function() {
		show_hide_development_selector_dropdown(this);
		return false;
	}
	
	document.getElementById('searchboxform').onsubmit = function() {
		if (trim(document.getElementById('searchbox_query').value, " ") == "") {
			return false;
		} else {
			return true;
		}
	}
}

function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

//required browser sniffer for XmlHttp() Rss retrieval
function browser_sniffer(){
	agent = navigator.userAgent.toLowerCase();
	is_major = parseInt(navigator.appVersion);
	
	is_ie = (agent.indexOf("msie") != -1);
	is_ie7 = (is_ie && (is_major == 4) && agent.indexOf("msie 7.")!=-1);
	is_firefox = (agent.indexOf("firefox") != -1) || (agent.indexOf("safari") != -1);	
	is_windows = ((agent.indexOf("win")!=-1) || (agent.indexOf("16bit")!=-1));
}

//grab element by id, and return as object
function get_element(id){
	return document.getElementById(id);
}

//get the offsetLeft position for an object
function get_offset_left(obj){
	var x = obj.offsetLeft;
	
	if(obj.offsetParent != null) x += get_offset_left(obj.offsetParent);
	
	return x;
}

//get the offsetTop position for an object
function get_offset_top(obj){
	var y = obj.offsetTop;
	
	if(obj.offsetParent != null) y += get_offset_top(obj.offsetParent);
	
	return y;
}

//divisions drop down
var hidden_elements = null;
function show_hide_development_selector_dropdown(obj_anchor, hide_us) {
	var obj_dropdown = get_element("development_selector_dropdown");
	
	if(obj_dropdown.style.display != "block"){
		obj_dropdown.style.display = "block";
		add_event(document, 'mouseup', hide_development_selector_dropdown);
		if (hide_us){
			hidden_elements = hide_us;
			for (var i=0; i<hide_us.length; i++){
				var el = document.getElementById(hide_us[i]);
				el.style.visibility = 'hidden';
			}
		}
		toggle_selects("hidden");
	}
	else{
		obj_dropdown.style.display = "none";
		remove_event(document, 'mouseup', hide_development_selector_dropdown);
		
		if (hidden_elements){
			for (var i=0; i<hidden_elements.length; i++){
				var el = document.getElementById(hidden_elements[i]);
				el.style.visibility = 'visible';
			}
			hidden_elements = null;;
		}
		toggle_selects("visible");
	}
}


//visibility state switcher
function hide_development_selector_dropdown(e){
	var obj = e.srcElement ? e.srcElement : e.target;
	
	while(obj.id != "development_selector" && obj.tagName != "BODY"){
		obj = obj.parentNode;
	}
	if(obj.id != "development_selector"){
		get_element("development_selector_dropdown").style.display = "none";
		remove_event(document, 'mouseup', hide_development_selector_dropdown);
		
		if (hidden_elements){
			for (var i=0; i<hidden_elements.length; i++){
				var el = document.getElementById(hidden_elements[i]);
				el.style.visibility = 'visible';
			}
			hidden_elements = null;;
		}
		toggle_selects("visible");
	}
}

function toggle_selects(visibility) {
	if (window.ie && !window.ie7) {
		if (get_element("wrapper")) {
			var selects_collection = get_element("wrapper").getElementsByTagName("SELECT");
			for (var i = 0; i < selects_collection.length; i++) {
				selects_collection[i].style.visibility = visibility;
			}
		}
	}
}

//place all elements identified by the same classname into an array
function get_elements_by_class_name(str_class,tag,obj_element){
	tag = tag || "*";
	obj_element = obj_element || document;
	
	var obj_collection = obj_element.getElementsByTagName(tag);
	
	if(!obj_collection.length &&  tag == "*" &&  obj_element.all) obj_collection = obj_element.all;
	
	var arr = new Array();
	var delimeter = str_class.indexOf("|") != -1  ? '|' : ' ';
	var classes = str_class.split(delimeter);
	
	for(var i=0, j=obj_collection.length; i<j; i++){
		var obj_classes = obj_collection[i].className.split(' ');
		if(delimeter == ' ' && classes.length > obj_classes.length) continue;
	
		var c = 0;
		comparisonLoop:
	
		for(var k=0, l=obj_classes.length; k<l; k++){
			for (var m=0, n=classes.length; m<n; m++){
				if(classes[m] == obj_classes[k]) c++;
				if((delimeter == "|" && c == 1) || (delimeter == " " && c == classes.length)){
					arr.push(obj_collection[i]);
					break comparisonLoop;
				}
			}
		}
	}
	return arr;
}

//header primary navigation background shift
function swap_main_navigation_class(e, obj_anchor){
	get_element("navigation").getElementsByTagName("UL")[0].className = (e.type == "mouseover") ? "navigation_" + obj_anchor.parentNode.id : "";
}


//	--------------------------------------------------------------------
//	news and talents accordions
//	--------------------------------------------------------------------

function init_accordion() {
	try {
		if (document.getElementById("content").className.match('two_wide')) {
			//	assume news
			if (get_elements_by_class_name("news_index", "DIV") != "") {
				
				//	globally define the visible months as objects
				obj_visible_months = get_elements_by_class_name("news_index visible","DIV");
				var current_month = parseInt($$('div.first')[0].id.substring(11));
				
				var accordion_news = new Accordion(".visible h3.toggle", ".visible ul.toggle", {
					opacity: false
				}, $('content'));
		
				for (var i = 0; i <= obj_visible_months.length - 1; i++) {
					obj_visible_months[i].getElementsByTagName('h3')[0].onclick = function(){
						show_hide_news(this.parentNode.id.substring(11));
					}
				}
			
				//	update plus/minus icon for auto-expanded group
				show_hide_news(current_month);
			
			//	assume talents
			} else {
				var accordion_talents = new Accordion("h3.toggle", "div.toggle", {
					opacity: false,
					onActive: function(toggler, element){
						toggler.addClass('active');
					},
					onBackground: function(toggler, element){
						toggler.removeClass('active');
					},
					show:'none',
					alwaysHide: true
				}, $('content'));
			}
		}
	} catch(e) {
		return false;
	}
}
								   
//	toggle news group items within news listings/index page
function show_hide_news(month_index){
	//	var month_index = this.id.substring(11);
	//	alert(month_index)
	var obj_news_groups = get_elements_by_class_name("news_index", "DIV", null);
	obj_news_groups.reverse();
	var obj_img;
	
	for(var i=0; i<=obj_news_groups.length-1; i++){
		obj_img = obj_news_groups[i].getElementsByTagName("IMG")[0];
		if((month_index) == i){
			obj_img.src = obj_img.src.replace(/contracted/g,"expanded");
		}
		else{
			obj_img.src = obj_img.src.replace(/expanded/g,"contracted");
		}
	}
}




//call to load dynamic content, based on a specific Nakheel project name
function show_development(development){
	var ajax = new ajax_request();
	ajax.load_file = development + "?ms=" + new Date().getTime();
	ajax.mode = "developments";
	ajax.generate_results();
}

//add target attribute to (external) links by checking rel attribute
function add_target(parent_element, rel_value, target_value){
	var children = get_element(parent_element);
	var links = children.getElementsByTagName("A");
	
	for (var i=0; i<links.length; i++){
		if(links[i].rel == rel_value){
			links[i].target =  target_value;
		}
	}
}

function hoverClass(targetelement, targetclass, hoverclass) {

	// IE sniff
	if(!window.XMLHttpRequest) {
		// check that the elements and classes are in the page
		if (!get_elements_by_class_name(targetclass, targetelement)) return false;
		
		var links = get_elements_by_class_name(targetclass, targetelement)
		for (var i = 0, count = links.length; i < count; i++) {
			
			links[i].onmouseover = function () {
				if (this.className.indexOf(hoverclass) == -1) {
					this.className += ' ' + hoverclass;
				}
				
			}
			
			links[i].onmouseout = function () {
				if (this.className.indexOf(hoverclass) != -1) {
					var str = ' ' + hoverclass;
					this.className = this.className.replace(str, '');
				}
			}
		}
	}
}

function validate_form(form, do_if_invalid, do_if_valid){
	if (!DEBUG){ var DEBUG = false; }
	var validation_errors = false;
	var form_validation_rules = window[(form.name) ? form.name + '_validation' : form.id + '_validation'];
	
	if (!form_validation_rules){
		validation_errors = 'Validation rules not found';
		if (DEBUG) { alert(validation_errors); }
		return validation_errors;
	}
	
	if (!validation_expressions) {
		validation_expressions =  new Object();
		if (DEBUG) { alert('Default validation rules not found'); }
	}

	for (var field_name in form_validation_rules){
		var form_field = form[field_name];
		var rules = form_validation_rules[field_name].rules;
		
		var last_rule = '';
		for (var rule in rules) {
			// check if custom rule and add to validation_expressions so it only needs to be defined once
			if (!validation_expressions[rule]){
				var newRule = new Object();
				for (prop in rules[rule]){
					newRule[prop] = rules[rule][prop];
				}
				validation_expressions[rule] = newRule;
			}
			last_rule = rule;
		}
		
		var reg_exp = "^.*$";
		for (var rule in rules){
			
			if (rules[rule].reg_exp) {
			// first check for custom rule
				reg_exp = new RegExp(rules[rule].reg_exp);
			} else  if (validation_expressions[rule].reg_exp) {
			// next try default rule
				reg_exp = new RegExp(validation_expressions[rule].reg_exp);
			} else {
			// finally accept any value to prevent errors
			    if (DEBUG) { alert(field_name + ': No reg_exp found for ' + rule)}
				reg_exp = new RegExp("^.*$");
			}
			
			var custom_feedback = rules[rule].feedback;
			var feedback = custom_feedback ? custom_feedback : validation_expressions[rule].feedback;
		
			var field_validation_results = {'field_reference':form_field, 'feedback':feedback, 'friendly_name':form_validation_rules[field_name].friendly_name};
			
			if (form_field.value.search(reg_exp)==-1){
				validation_errors = true;
				if (do_if_invalid)
					do_if_invalid(field_validation_results);
				break;
			} else if (rule = last_rule){
				if (do_if_valid)
					do_if_valid(field_validation_results);
			}
		}
		
	} 
	
	return validation_errors;
}

function scroll_to_element(the_element_ref, parent_form){
	if (document.getElementById(the_element_ref)) {
		the_element = document.getElementById(the_element_ref);
	} else {
		var the_form = document.getElementById(parent_form) ? document.getElementById(parent_form) : document.forms[parent_form];
		the_element = the_form.elements[the_element_ref];
	}
	var scroll_amount = get_offset_top(the_element);
	scroll(0, scroll_amount - 10);
}


cookie_manager = {
	set_cookie: function(name, value, days){
		if(name != ''){
			document.cookie = name + '=' + value + "; expires=" + daysToGMTDate(days) + "; path=/";
		}
	},
	
	get_cookie: function(name){
		name_index = document.cookie.indexOf(name + '=');
		if (name == "" || name_index == -1) {
			return ("");
		}
		
		cookie_value =  document.cookie.substr(name_index + name.length + 1, document.cookie.length);
		end_of_cookie = cookie_value.indexOf(';');
		
		if(end_of_cookie != -1){
			cookie_value = cookie_value.substr(0, end_of_cookie);
		}
		
		space = cookie_value.indexOf('+');
		
		while(space != -1){ 
			cookie_value = cookie_value.substr(0, space) + " " + cookie_value.substr(space + 1, cookie_value.length);
			space = cookie_value.indexOf("+");
		}
		
		return(cookie_value);
	},
	
	clear_cookie: function(name){                  
		cookie_manager.set_cookie(name, "", -1);	 
	},
	
	browser_supports_cookies: function(){
		var tmpcookie = new Date();
	    var tmpcookie = (tmpcookie.getTime() + '');
		document.cookie = "tmpcookie=" + tmpcookie + "; path=/";
		if (document.cookie.indexOf(tmpcookie,0) == -1){
			return false;
		} else {
			return true;
		}
	}

}

function daysToGMTDate(numDays){
	 var today = new Date();
     var futureDate = new Date();
     if (numDays==null || numDays==0) numDays=1;
     futureDate.setTime(today.getTime() + 3600000*24*numDays);
	 
	 return futureDate.toGMTString();
}

noflash_slider = {
	init: function(){
		message_slider = new Fx.Slide('message', {
			duration: 600
		});
		
		message_slider.hide();
		var message_container = $('message_container');
		message_container.style.top = 0;
		noflash_slider.set_opacity(message_container, 80);
		
		var close_link = document.createElement('a');
		close_link.href = "#";
		close_link.className = 'close_button';
		close_link.innerHTML = "Close";
		close_link.onclick = function(){
			message_slider.slideOut();
		}
		
		var dont_ask = document.createElement('a');
		dont_ask.href = '#';
		dont_ask.className = 'dont_ask';
		dont_ask.innerHTML = "Do not ask me again"
		dont_ask.onclick = function(){
			noflash_slider.dont_ask_again(this);
		}
		
		$('message').style.width = 'auto';
		$('message').innerHTML = 'Nakheel.com is enhanced with Flash content. Please <a href="http://adobe.com/go/getflashplayer" rel="external" title="Download Adobe Flash Player">download the latest Flash player</a> to get the most from Nakheel.com</a>';
		$('message').insertBefore(close_link, $('message').firstChild);
		if (cookie_manager.browser_supports_cookies()) {
			$('message').insertBefore(dont_ask, $('message').firstChild);
		}
		
		if (!swfobject.hasFlashPlayerVersion("8.0.0") && !cookie_manager.get_cookie('ignore_flash_install_request')) {
			message_slider.slideIn();
		}
	}, 
	dont_ask_again : function(me){
		if (me.className.indexOf('checked') != -1){
			me.className = 'dont_ask';
			cookie_manager.clear_cookie('ignore_flash_install_request');
		} else {
			me.className = 'dont_ask checked';
			cookie_manager.set_cookie('ignore_flash_install_request', 'true', 365);
		}
	},
	set_opacity: function(obj,opacity){
		obj.style.filter = "alpha(opacity=" + opacity + ")";
		obj.style.opacity = (opacity/100);
	}
}

function add_swfs(selector){
	// TODO: change lang to flash_data
	
	// add swfs
	// looks for div  elements with classname of 'flash_asset'
    // creates swfOjects using div title, a child input.swf_path, and optional children input.flashvars
	
	var swfCounter = 1;
	var swf_containers = $$(selector);

	for (var i=0; i<swf_containers.length; i++){
		
		var swf_container = swf_containers[i];
		var swf_path = $$('#' + swf_container.id + ' input.swffile')[0].value;
		var alt_text = swf_container.title;
		
		var flashvars = {};
		
		var specific_flashvars = swf_container.getElements('input.flashvars');
		for (var j=0; j<specific_flashvars.length; j++){
			//	hack for large video player
			//	currently VCM will only pass paths to streaming content - it won't accept paths to SWF files
			if (large_video_swf_enable == true && swf_container.id == 'large_video_swf' && specific_flashvars[j].name == 'videos') {
				var vids = specific_flashvars[j].value.split('|||');
				flashvars[specific_flashvars[j].name] = vids[0] + '|||' + large_video_swf_content + '|||' + vids[2];
			} else {
				flashvars[specific_flashvars[j].name] = specific_flashvars[j].value;
			}
		}
		
		if (!flashvars.lang) {flashvars.lang = base_path + "en/xml/"}
		if (!flashvars.base_url){flashvars.base_url = base_path + "system/en/swf/"}
		
		swfobject.embedSWF(
			swf_path, 
			swf_container.id, 
			swf_container.offsetWidth, 
			swf_container.offsetHeight, 
			"8.0.0", 
			false,
			flashvars, 
			{"wmode": "transparent", "allowScriptAccess": "always", "scale": "noscale", "salign": "tl"},
			{"title": alt_text, "class":"flash_asset"}
		);
	}	
}


var sliding_blinds = new Object();
sliding_blinds.init = function() {
    // Collect DOM elements
    var container = $('accordion');
    var main_title = $$('h3.title')[0];
	if (main_title) {
    	var main_link = main_title.getElement('a');
	}
    var list = $$('div.content');
    var headings = $$('h4.title');
    
    // If any DOM elements were missing, fail nice
    if (!main_title || !main_link || !list || !headings) return;
    
    var collapsibles = new Array();
    // Note: Copy text is associate array that contains both English and
    // Arabic text
    var link_text = new Array();
    link_text['expand_text'] = ['Expand all venues', ''];
    link_text['collapse_text'] = ['Collapse all venues', ''];
   
    for ( var i = 0, count = headings.length; i < count; i++ ) {
            var collapsible = new Fx.Slide(list[i], {
                    duration: 400,
                    onComplete: function() {
                        
                    }
            });
            
            collapsibles[i] = collapsible;
            headings[i].setProperty('id', i);
            
            headings[i].addEvent('click', function(){
                    collapsibles[this.id].toggle(); 
                    this.getParent('li').toggleClass('active');
                    return false;
            });
            // Close all but the first slider
            if (i==0) headings[i].getParent('li').toggleClass('active');
            else collapsible.hide();
    };
    
    // Master toggle style and text copy
    main_title.getParent('li').setProperty('class', 'active');
    main_link.setText(link_text['expand_text'][0]);
	main_link.onclick = function() {
		return false;
	}
	
    // Set master toggle click events
    main_title.addEvent('click', function(e){
       //e.stop();
       if (this.getProperty('title') == 'opened') {
            main_link.setText(link_text['expand_text'][0]);
            this.setProperty('title', '');
            container.getElements('li').removeClass('active');
            for ( var i = 0, count = headings.length; i < count; i++ ) {
                collapsibles[i].slideOut();
              //  list[i].getParent('li').toggleClass('active');
            };
			return false;
			
        } else {
            main_link.setText(link_text['collapse_text'][0]);
            container.getElements('li').addClass('active');
            this.setProperty('title', 'opened');
            for ( var i = 0, count = headings.length; i < count; i++ ) {
                collapsibles[i].slideIn();
               // list[i].getParent('li').toggleClass('active');
                //console.log(list);
            };
			return false;
        }
		
        return false;
    });
};

window.addEvent('domready', function() {
    sliding_blinds.init();
});


var captcha = {
	urls	: ['/captcha/challenge', '/captcha/rechallenge'],
	target	: 'captcha_image',
	link	: 'try_again',
	active	: 0
};

captcha.init = function() {
	if (!$(captcha.target)) return false;
	captcha.span = new Element('span', {
		'class' : 'input_note'
	});
	captcha.span.appendText('Can\'t read the characters in the picture? ');
	
	captcha.anchor = new Element('a', {
		'href': '#',
		'events': {
			'click': function(e){
				e = new Event(e).stop();
				captcha.reload();
			}
		}
	});
	captcha.anchor.appendText('Try again');
	
	captcha.span.adopt(captcha.anchor);
	captcha.span.inject($(captcha.target), 'after');
};

captcha.reload = function() {
	if (!$(captcha.target)) return false;
	captcha.target = $(captcha.target);
	
	if (captcha.active == 0) {
		captcha.target.setProperty('src', captcha.urls[1]);
		captcha.active = 1;
	} else {
		captcha.target.setProperty('src', captcha.urls[0]);
		captcha.active = 0
	}
};

window.addEvent('domready', function() {
   captcha.init();
});

var sliding_blinds_hotels = new Object();
sliding_blinds_hotels.init = function() {
    // Collect DOM elements
    var container_hotels = $('accordion_hotels');
    var main_title_hotels = $$('h3.title')[0];
	if (main_title_hotels) {
    	var main_link_hotels = main_title_hotels.getElement('a');
	}
    var list_hotels = $$('div.content');
    var headings_hotels = $$('h4.title');
    
    // If any DOM elements were missing, fail nice
    if (!main_title_hotels || !main_link_hotels || !list_hotels || !headings_hotels) return;
    
    var collapsibles_hotels = new Array();
    // Note: Copy text is associate array that contains both English and
    // Arabic text
    var link_text_hotels = new Array();
    link_text_hotels['expand_text_hotels'] = ['Expand all investments', ''];
    link_text_hotels['collapse_text_hotels'] = ['Collapse all investments', ''];
   
    for ( var i = 0, count = headings_hotels.length; i < count; i++ ) {
            var collapsible_hotels = new Fx.Slide(list[i], {
                    duration: 400,
                    onComplete: function() {
                        
                    }
            });
            
            collapsibles_hotels[i] = collapsible_hotels;
            headings_hotels[i].setProperty('id', i);
            
            headings_hotels[i].addEvent('click', function(){
                    collapsibles_hotels[this.id].toggle(); 
                    this.getParent('li').toggleClass('active');
                    return false;
            });
            // Close all but the first slider
            if (i==0) headings_hotels[i].getParent('li').toggleClass('active');
            else collapsible_hotels.hide();
    };
    
    // Master toggle style and text copy
    main_title_hotels.getParent('li').setProperty('class', 'active');
    main_link_hotels.setText(link_text_hotels['expand_text_hotels'][0]);
	main_link_hotels.onclick = function() {
		return false;
	}
	
    // Set master toggle click events
    main_title_hotels.addEvent('click', function(e){
       //e.stop();
       if (this.getProperty('title') == 'opened') {
            main_link_hotels.setText(link_text['expand_text_hotels'][0]);
            this.setProperty('title', '');
            container_hotels.getElements('li').removeClass('active');
            for ( var i = 0, count = headings_hotels.length; i < count; i++ ) {
                collapsibles_hotels[i].slideOut();
              //  list[i].getParent('li').toggleClass('active');
            };
			return false;
			
        } else {
            main_link_hotels.setText(link_text['collapse_text_hotels'][0]);
            container_hotels.getElements('li').addClass('active');
            this.setProperty('title', 'opened');
            for ( var i = 0, count = headings_hotels.length; i < count; i++ ) {
                collapsibles_hotels[i].slideIn();
               // list[i].getParent('li').toggleClass('active');
                //console.log(list);
            };
			return false;
        }
		
        return false;
    });
};