var NewsItem = {
	toggleNewsItem: function(parent) {
		if(parent.toggled) {
			// hide this
			this.hideNewsItem(parent);
		} else {
			// hide all 
			this.hideAllNewsItems(parent);
			// show clicked news item
			this.showNewsItem(parent);
		}
	},
	showNewsItem: function(parent) {
		if(!parent.toggled) {
			var newsAnim = new Accelimation(parent.style, "height", parent.maxHeight, 500, 1);
			newsAnim.onend = function() {
				parent.toggled = true;
			}
			newsAnim.start();
		}
	},
	hideNewsItem: function(parent) {
		if(parent.toggled) {
			var targetHeight = parent.getElementsByTagName('h4')[0].offsetHeight + 10;
			var newsAnim = new Accelimation(parent.style, "height", targetHeight, 500, 1);
			newsAnim.onend = function() {
				parent.toggled = false;
			}
			newsAnim.start();
		}
	},
	hideAllNewsItems: function(parent) {
		var allDivs = parent.parentNode.getElementsByTagName('div');
		var allNewsItems = [];
		// write into an array
		for (var i = 0; i < allDivs.length; i++) {
			if (allDivs[i].className == 'news_item') {
				// hide item
				this.hideNewsItem(allDivs[i]);
			}
		}
	}
}

var TickerTape = {
	tickerTapeHolder: $('news'),
	tickerAnim: null,
	start: function() {
		this.tickerTapeHolder.style.marginLeft = '1000px';
		var targetLeft = (this.tickerTapeHolder.offsetWidth * -1) - 10;
		var tickerAnim = new Accelimation(this.tickerTapeHolder.style, "marginLeft", targetLeft, 40000, 1);
		tickerAnim.onend = function() {
			this.start();
		}
		tickerAnim.start();
		this.tickerAnim = tickerAnim;
	}
}

// Event-selectors
var rules = {
	'div.news_item' : function (element) {
		// set original styles to inline styles for animation
		element.style.height = element.offsetHeight + 'px';
		element.maxHeight = element.offsetHeight;
		// hide item
		element.toggled = true;
		NewsItem.hideNewsItem(element);
	},
	//  Upload form display
	'div.news_item:click' : function (element) {
		NewsItem.toggleNewsItem(element);
	},
	// Sub navigation menus
	'a#nav_about_us:mouseover, a#nav_whats_on:mouseover, a#nav_development:mouseover, a#nav_mirvac_group:mouseover, a#nav_services:mouseover, a#nav_leasing:mouseover, a#nav_clubs:mouseover': function (element) {
	  Navigation.cancelNavAnim = true;
	  if (Navigation.navAnim)
			Navigation.navAnim.stop();
		Navigation.showSubForName(element);
	},
	// Close the sub navigation items
	'a#nav_about_us:mouseout, a#nav_whats_on:mouseout, a#nav_development:mouseout, a#nav_mirvac_group:mouseout, a#nav_services:mouseout, a#nav_leasing:mouseout, a#nav_clubs:mouseout': function (element, event) {
		Navigation.cancelNavAnim = false;
	  Navigation.navTimeout = setTimeout(function() {
	    Navigation.hideSubForName(element);
    }, 1000);
	},
	// Sub navigation should stay over when mouseover itself
	'div#sub_nav_about_us:mouseover, div#sub_nav_whats_on:mouseover, div#sub_nav_development:mouseover, div#sub_nav_mirvac_group:mouseover, div#sub_nav_services:mouseover, div#sub_nav_leasing:mouseover': function (element) {
		// Show self
		element.style.display = 'block';
		element.style.height = '25px';
		
		// Stop the animation for closing if its running
		Navigation.cancelNavAnim = true;
		if (Navigation.navAnim) {
			Navigation.navAnim.stop();
		}
		
		// Get the parent item
		var parentId = Navigation.getSubParentId(element);
		document.getElementById(parentId).parentNode.className = 'selected';
	},
	// Sub navigation should close when moused off itself
	'div#sub_nav_about_us:mouseout, div#sub_nav_whats_on:mouseout, div#sub_nav_development:mouseout, div#sub_nav_mirvac_group:mouseout div#sub_nav_services:mouseout, div#sub_nav_leasing:mouseout': function (element) {
		Navigation.cancelNavAnim = false;
	  	Navigation.navTimeout = setTimeout(function() {
	    	Navigation.hideSubForName($(Navigation.getSubParentId(element)));
    	}, 1000);
	}
	
};
var Navigation = {
	sub_menus: $$('.sub_navigation'),
	separated_elements: $$('li.separated'),
	splitElementName: function (element) {
		// Split the name into an array
		var name = element.id.split("_");
		
		// Remove the first element in the array
		delete name[0];
		
		// Prepend sub_nav_ to the name
		name = name.join("_");
		
		// Return it
		return "sub_nav" + name;
	},
	showSubForName: function (element) {
		var name = this.splitElementName(element);
		var node = document.getElementById(name);
		
		var otherVisible = false;
		for (var i = 0; i < this.sub_menus.length; i++) {
		  if (this.sub_menus[i].style.display && this.sub_menus[i].style.display != "none")
		    otherVisible = true;
		}
		
		node.style.display = 'block';
		
		if (otherVisible) {
		  node.style.height = '25px';
	  } else {
  		node.style.height = '1px';
  		Navigation.navAnim = new Accelimation(node.style, "height", 25, 250, 1, 'px');
  		Navigation.navAnim.onend = function () {
  			Navigation.navAnim = undefined;
  		}
  		Navigation.navAnim.start();
  	}
		
		this.hideAllExceptName(name);
		this.shiftSubToParent(name, element);
		this.selectParent(element);
	},
	hideSubForName: function (element) {
	  if (Navigation.cancelNavAnim) return;
	  
	  var name = this.splitElementName(element);
		Navigation.navAnim = new Accelimation(document.getElementById(name).style, "height", 1, 250, 1, 'px');
		Navigation.navAnim.onend = function () {
			document.getElementById(name).hide();
			Navigation.navAnim = undefined;
		}
		Navigation.navAnim.start();
		this.deselectParent(element);
	},
	hideAllExceptName: function (name) {
		// Get all the other sub nav items, hide them all except for this one
		for(var i = 0; i < this.sub_menus.length; i++) {
			if(this.sub_menus[i].id != name) {
				this.sub_menus[i].hide();
			}
		}
	},
	selectParent: function (element) {
		element.parentNode.className = 'selected';
		var nodes = element.parentNode.parentNode.getElementsByTagName("li");
		var count = nodes.length;
		for (var i = 0; i < count; i++) {
		  if (nodes[i] != element.parentNode)
		    nodes[i].className = '';
		}
		this.addSeparator();
	},
	deselectParent: function (element) {
		element.parentNode.className = '';
		this.addSeparator();
	},
	addSeparator: function () {
		for(var i = 0; i < this.separated_elements.length; i++) {
			if(this.separated_elements[i].className == '') {
				this.separated_elements[i].className = 'separated';
			}
		}
	},
	getSubParentId: function (child) {
		var parentId = child.id.split("_");
		delete parentId[0];
		parentId = parentId.join('_');
		parentId = parentId.substring(1, parentId.length);
		return parentId;
	},
	shiftSubToParent: function (sub_id, parent_element) {
	  // ignore if it's the first menu
	  var menu_item = parent_element.parentNode
	  if (menu_item == menu_item.parentNode.getElementsByTagName("li")[0])
	    return;
	  
	  // find first ul, add padding-left to it
	  lists = $(sub_id).getElementsByTagName("ul");
	  if (lists[0] != null)
	    lists[0].style.paddingLeft = parent_element.parentNode.offsetLeft.toString() + "px";
	}
};

startEventSelectors = function() {
	// register rules
	Navigation.sub_menus = $$('.sub_navigation');
	var Rules = new EventSelectors();
	Rules.start(rules);
	// start tickertape
	if(document.getElementById('tickertape')) {
		TickerTape.start();
	}
}

if(!$('loading_nav')){
	Event.observe(window, 'load', startEventSelectors, false);
}
