/*
	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
	Available via Academic Free License >= 2.1 OR the modified BSD license.
	see: http://dojotoolkit.org/license for details
*/

var sorts = new Array();
sorts[0] = new Array('innovation', 0);
sorts[1] = new Array('strategy', 0);
sorts[2] = new Array('creative', 0);
sorts[3] = new Array('culinary', 0);

var offset = 0;

function init_secondary(){

	// format
	dojo.query(".sort").style("opacity", "0");
	dojo.query(".sort").style("display", "none");
		
	set_slideshows();
	
	var num = dojo.query(".entry").length-1;
	var last = dojo.query(".entry")[num];
    
	// run
	check_hash();
    
	// listeners
	dojo.query("#view_list").connect("onclick", "on_view_list");
	dojo.query("#view_expanded").connect("onclick", "on_view_expanded");
	
	dojo.query(".services li").connect("onclick", "on_tout_item");
	dojo.query(".sort li").connect("onclick", "on_sort_item");
	dojo.query(".clear_selections").connect("onclick", "on_clear_selections");

	init_listeners();
	
	toutSlider.init();
}

////////////////////////////////////////////////////////////////////////////////////////////////////
/////     CLASSES
////////////////////////////////////////////////////////////////////////////////////////////////////

var toutSlider = {
	slider: Object,
	slides: Object,
	slideButtons: Object,
	slideButton: Object,
	currentSlide: 0,
	timer: Object,
	slideSpeed: 7000,
	
	init: function() {
		var _this = this;
		this.slider = dojo.query(".tout_slides")[0];
		this.slides = dojo.query("li", this.slider);
		this.slideButtons = dojo.query(".slide_bar ul")[0];
		this.positionSlides();
		this.addButtons();

		this.timer = new Timer(function() {
			_this.progressSlide();
		}, this.slideSpeed);

	},
	
	positionSlides: function() {
		var _this = this;
		for(i = 0; i < this.slides.length; i++) {
			dojo.style(this.slides[i], "left", (i*1000) + "px");
			dojo.connect(this.slides[i], "onmouseover", function() {
				_this.timer.pause();
			});

			dojo.connect(this.slides[i], "onmouseout", function() {
				_this.timer.resume();
			});
		}
	},
	
	addButtons: function() {
		for (i = 0; i < this.slides.length; i++) {
			this.slideButtons.innerHTML += "<li><a>" + (i+1) + "</a></li>";
			dojo.style(this.slideButtons, "width", ((i+1)*12)-4 + "px");
		}
		
		this.slideButton = dojo.query("li", this.slideButtons);

		for (i = 0; i < this.slides.length; i++) {
			dojo.style(this.slideButton[i], "left", i*12 + "px");
		}
		
		var _this = this;
		dojo.query(".slide_bar ul li a").connect("onclick", function(evt) {
			_this.currentSlide = (evt.target.innerHTML-1);
			_this.timer.stop();
			_this.moveSlide();
		});
		
		dojo.style(this.slideButton[0], "backgroundColor", "#FFFFFF");
	},
	
	moveSlide: function() {
		var _this = this;
		dojo.fx.slideTo({
			node: _this.slider,
			left: -_this.currentSlide* 1000, 
			unit:"px"
		}).play();
		for (i=0; i<this.slideButton.length; i++) {
			if (i == this.currentSlide) {
				dojo.style(this.slideButton[i], "backgroundColor", "#FFFFFF");
			} else {
				dojo.style(this.slideButton[i], "backgroundColor", "#7d7d7d");
			}
		}
		this.timer = new Timer(function() {
			_this.progressSlide();
		}, this.slideSpeed);
	},
	
	progressSlide: function() {
		this.timer.stop();
		if(this.currentSlide < this.slides.length-1) {
			this.currentSlide++;
		} else {
			this.currentSlide = 0;
		}
		this.moveSlide();
	}
};

function Timer(callback, delay) {
    var timerId, start, remaining = delay;

    this.pause = function() {
        window.clearTimeout(timerId);
        remaining -= new Date() - start;
    };

    this.resume = function() {
        start = new Date();
        timerId = window.setTimeout(callback, remaining);
    };

    this.stop = function() {
	    window.clearTimeout(timerId);
    };

    this.resume();
}

////////////////////////////////////////////////////////////////////////////////////////////////////
/////     LISTENERS
////////////////////////////////////////////////////////////////////////////////////////////////////

function on_tout_item(evt){
	var button = evt.target;
	if (evt.target.id == "") {
		button = evt.target.parentNode;	
	}
	
	hide_tout(button.id);
}

function on_sort_item(evt) {
	offset = 0;
	
	var button = evt.target;
	var sort = dojo.query(".sort")[0];
	
	if (evt.target.id == "") {
		button = evt.target.parentNode;	
	}
	
	if(button.className == "sel") {
		button.className = "";
		remove_category(button.id);
	} else {
		button.className = "sel";
		add_category(button.id);
	}
}

function on_clear_selections(evt) {
	dojo.query(".sort li").forEach(function(node) {
		node.className = "";
	});
	
	for(i=0; i < sorts.length; i++) {
		sorts[i][1] = 0;
	}
	
	get_feed();
}

function on_view_list(evt){
	dojo.byId("view_list").setAttribute("class", "sel");
	dojo.byId("view_expanded").setAttribute("class", "");
	dojo.query(".entry").forEach(function(entry){
		contract_entry(entry);
		entry.open = false;
		dojo.query(".show_hide", entry).style("backgroundPosition", "-85px -325px");
	});
}

function on_view_expanded(evt){
	dojo.byId("view_list").setAttribute("class", "");
	dojo.byId("view_expanded").setAttribute("class", "sel");
	dojo.query(".entry").forEach(function(entry){
		expand_entry(entry);
		entry.open = true;
		dojo.query(".show_hide", entry).style("backgroundPosition", "-85px -345px");
	});
}

function on_slide_thumb(evt) {
	var slide_ul = evt.target.parentNode.parentNode;
	var img_src = evt.target.getAttribute("src");
	
	dojo.query("img", evt.target.parentNode.parentNode.parentNode.parentNode)[0].setAttribute("src", img_src);
	
	dojo.query("li img", slide_ul).forEach(function(node){
		if (node == evt.target) {
			dojo.style(node, "opacity", ".25");
		} else {
			dojo.style(node, "opacity", "1");
		}
	});
}

function on_slide_left(evt) {
	var slideshow = evt.target.parentNode;
	var multi = dojo.query(".thumbs_multi", slideshow)[0];
	
	if (multi.si > 0) {
		multi.si--;
		gallery_slide(multi);
	}
}
function on_slide_right(evt) {
	var slideshow = evt.target.parentNode;
	var multi = dojo.query(".thumbs_multi", slideshow)[0];

	if (multi.si < multi.sl) {
		multi.si++;
		gallery_slide(multi);
	}
}

function get_more_posts(evt) {
	offset++;
	
	var copy = dojo.query(".body_copy")[0];
	copy.innerHTML += "<div class=\"loader\"></div>";
	dojo.query(".see_more_posts").style("display", "none");
	
	var sort_array = new Array();
	
	for(i=0; i < sorts.length; i++) {
		if (sorts[i][1] == 1) {
			sort_array.push(sorts[i][0]);
		}
	}
	
	purl = "/ajax/get-five-index/n/" + encodeURI(sort_array) + "/o/"+offset;
		
	dojo.xhrGet({
		url: purl,
		handleAs: "text",
		load: function(data){
			copy.innerHTML += data;
			init_entries_format();
			format_index();
			init_listeners();
			set_slideshows();

			var entries = dojo.query(".entry");
						
			if (entries.length % 5 == 0 && data != "") {
			   	dojo.query(".see_more_posts").style("display", "block");
			}
			
			var loader = dojo.query(".loader")[0];
			copy.removeChild(loader);
		}
	});
}

////////////////////////////////////////////////////////////////////////////////////////////////////
/////     FUNCTIONS
////////////////////////////////////////////////////////////////////////////////////////////////////
function check_hash() {
	if(window.location.hash) {
		var h = window.location.hash;
		hide_tout(h.substring(2));
	}
}

function hide_tout(n) {
	var tout = dojo.query(".tout")[0];
	var sort = dojo.query(".sort")[0];
	
	add_category(n);
	
	dojo.query("li", sort).forEach(function(node) {
		if (node.id == n) {
			node.className = "sel";
		} else {
			node.className = "";
		}
	});
	
	dojo.style(sort, "display", "block");
	
	
	dojo.fx.wipeOut({
			node: tout,
			duration: 500, 
			onEnd: function() {
				dojo.fadeIn({node: sort}).play();
			}
	}).play();
}

function gallery_slide(multi) {
	dojo.query("ul", multi).slideTo({
		left: -432*multi.si, 
		unit:"px"
	}).play();
	
	check_gallery_buttons(multi);
}

function check_gallery_buttons(multi) {
	var slideshow = multi.parentNode;
	if (multi.si == multi.sl) {
		dojo.query(".right", slideshow).fadeOut().play();
		dojo.query(".right", slideshow).style("cursor", "default");
	} else {
		dojo.query(".right", slideshow).fadeIn().play();
		dojo.query(".right", slideshow).style("cursor", "pointer");
	}
	
	if (multi.si == 0) {
		dojo.query(".left", slideshow).fadeOut().play();
		dojo.query(".left", slideshow).style("cursor", "default");
	} else {
		dojo.query(".left", slideshow).fadeIn().play();
		dojo.query(".left", slideshow).style("cursor", "pointer");
	}
}

function add_category(n) {
	for(i=0; i < sorts.length; i++) {
		if (sorts[i][0] == n) {
			sorts[i][1] = 1;
		}
	}
	
	get_feed();
}

function remove_category(n) {
	for(i=0; i < sorts.length; i++) {
		if (sorts[i][0] == n) {
			sorts[i][1] = 0;
		}
	}
		
	get_feed();
}

function get_feed() {
	var copy = dojo.query(".body_copy")[0];
	
	var divs = dojo.query(".entry", copy);
	
	for(i=divs.length-1; i > 4; i--) {
		divs[i].parentNode.removeChild(divs[i]);
	}
		
	dojo.query("div", copy).forEach(function(node, i) {
		dojo.fadeOut({
			node: copy,
			onEnd: function(){
				copy.innerHTML = "<div class=\"loader\"></div>";
				dojo.query(".see_more_posts").style("display", "none");
				dojo.fadeIn({node: copy, duration: 1}).play();
			}
		}).play();
	});
	
	var sort_array = new Array();
	
	for(i=0; i < sorts.length; i++) {
		if (sorts[i][1] == 1) {
			sort_array.push(sorts[i][0]);
		}
	}
	
	purl = "/ajax/get-five-index/n/" + encodeURI(sort_array) + "/o/0";
	
	if (this.xhr) {
		this.xhr.cancel();
	}
	
	this.xhr = dojo.xhrGet({
		url: purl,
		handleAs: "text",
		failOk: true,
		load: function(data){
			dojo.fadeOut({
				node: copy,
				duration: 1,
				onEnd: function() {
					copy.innerHTML = data;
					init_entries_format();
					format_index();
					init_listeners();
					set_slideshows();
					dojo.fadeIn({ node: copy }).play();
				}
			}).play();

			var entries = dojo.query(".entry");
			if (entries.length % 5 == 0 && data != "") {
			   	dojo.query(".see_more_posts").style("display", "block");
			} else {
				dojo.style(entries[entries.length-1], "marginBottom", "0px");		
			}
		}
	});
}

function set_slideshows() {
	dojo.query(".slideshow_left ul").forEach(function(node) {
		var first = dojo.query("li img", node)[0];
		dojo.style(first, "opacity", ".25");
	});
	
	dojo.query(".thumbs_multi").forEach(function(node){
		node.si = 0;
		node.sl = 0;

		var sw = dojo.query("ul li, node").length * 105;
		node.sl = Math.ceil(dojo.query("ul li", node).length/4)-1;
		
		check_gallery_buttons(node);
	});
}

