/* Global */
function $(id) {
	return document.getElementById(id);
}

/* Scroll Control */
var Scroll = {
	ul_id : "",
	timeout : 0,
	
	doScroll : function(scroll_pos, inc) {
		var scroll_top, scroll_y, scroll_max;
		
		if (document.all) {
			scroll_top = document.documentElement.scrollTop;
			scroll_y = scroll_top + document.documentElement.clientHeight;
		} else {
			scroll_top = document.body.scrollTop || window.pageYOffset;
			scroll_y = window.scrollY;
		}
		
		if (window.scrollMaxY) {
			scroll_max = window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight) {
			scroll_max = document.body.scrollHeight - window.innerHeight;
		} else {
			scroll_max = document.body.offsetHeight;
		}
		
		if (scroll_pos > scroll_top) {
			if ((scroll_pos - scroll_top) < 5) {
				inc = 1;
			} else if ((scroll_pos - scroll_top) < 100) {
				inc = Math.floor((scroll_pos - scroll_top) / 2);
			}
		} else {
			if ((scroll_top -scroll_pos) < 5) {
				inc = 1;
			} else if ((scroll_top - scroll_pos) < 100) {
				inc = Math.floor((scroll_top - scroll_pos) / 2);
			}
		}
		
		if ((scroll_top < scroll_pos) && (scroll_y < scroll_max)) {
			scrollTo(0, scroll_top + inc);
			this.timeout = setTimeout("Scroll.doScroll("+scroll_pos+", "+inc+")", 1);
		} else if (scroll_top > scroll_pos) {
			scrollTo(0, scroll_top - inc);
			this.timeout = setTimeout("Scroll.doScroll("+scroll_pos+", "+inc+")", 1);
		} else {
			clearTimeout(this.timeout);
		}
	},
	
	scroll : function(event) {
		Event.stopClick(event);
		
		var clicked_elem = (event.srcElement) ? event.srcElement : event.target;
		var stop_elem = $(clicked_elem.hash.replace("#", ""));
		var stop_pos = this.getPosition(stop_elem);
		
		this.doScroll(stop_pos - 10, 50);
	},
	
	getPosition : function(obj) {
		var top = 0;
		
		if (obj.offsetParent) {
			top = obj.offsetTop;
			
			while (obj = obj.offsetParent) {
				top += obj.offsetTop;
			}
		}
		
		return top;
	}
};

/* Event Control */
var Event = {
	addListener : function(obj, event, func) {
		var isIE = document.attachEvent ? true : false;
		
		if (isIE) {
			obj.attachEvent("on" + event, func);
		} else {
			obj.addEventListener(event, func, false);
		}
	},
	
	stopClick : function(event) {
		if (event.srcElement) {
			event.cancelBubble = true;
			event.returnValue = false;
		} else {
			event.stopPropagation();
			event.preventDefault();	
		}
	}
}

/* Input Control */
var Input = {
	id : "q",
	msg : "Search for Bonus Codes",
	
	handleFocus : function() {
		var obj = $(Input.id);
		if (obj.value == Input.msg) {
			obj.value = "";
		}
	},
	handleBlur : function() {
		var obj = $(Input.id);
		if (obj.value == "") {
			obj.value = Input.msg;
		}
	}
}

/* Clipboard Control */
var Clipboard  = {
	clip : null,
	prefix : "",
	copy : function(event) {
		var id = event.domElement.id;
		var index = id.replace(Clipboard.prefix, "");
		
		Clipboard.clip[index].setText(event.domElement.innerHTML);
		Tooltip.updateMsg();
		
		//Delayed redirect
		Link.timeout = setTimeout(function(){Link.redirect(event.domElement.href);}, 500);
	},
	copyIE : function(event) {
		window.clipboardData.setData('Text', event.srcElement.innerHTML);
		Tooltip.updateMsg();
		
		//Delayed redirect
		Link.timeout = setTimeout(function(){Link.redirect(event.srcElement.href);}, 500);
	},
	setup : function(prefix, count) {
		var browser = navigator.appName;

		if (browser != "Microsoft Internet Explorer") {
			Clipboard.clip = new Array();
			Clipboard.prefix = prefix;
		}
		
		for (var i=0; i<count; i++) {
			var obj = $(prefix + i);
			if (obj == null) { break; }
			
			if (browser == "Microsoft Internet Explorer") {
				Event.addListener(obj, "mousedown", function(event){Clipboard.copyIE(event);});
				Event.addListener(obj, "mouseover", function(event){Tooltip.show(event.srcElement);});
				Event.addListener(obj, "mouseout", Tooltip.hide);
			} else {
				Clipboard.clip[i] = new ZeroClipboard.Client();
				Clipboard.clip[i].addEventListener("mousedown", function(event){Clipboard.copy(event);});
				Clipboard.clip[i].addEventListener("mouseover", function(event){Tooltip.show(event.domElement);});
				Clipboard.clip[i].addEventListener("mouseout", Tooltip.hide);
				Clipboard.clip[i].glue(prefix + i);
			}
		}
		
	}
}

/* Tooltip Control */
var Tooltip = {
	id : "copy-tooltip",
	msg1 : "CLICK TO COPY",
	msg2 : "COPIED!",
	show : function(obj) {		
		//Find position for tooltip
		var position = Tooltip.getPosition(obj);
		var left_pos = position[0] + obj.offsetWidth + 2;
		var top_pos = position[1];
		
		var tooltip = $(Tooltip.id);
		tooltip.style.left = left_pos + "px";
		tooltip.style.top = top_pos + "px";
		tooltip.style.display = "block";
	},
	hide : function() {
		var tooltip = $(Tooltip.id);
		tooltip.style.display = "none";
		tooltip.innerHTML = "<span>" + Tooltip.msg1 + "</span>";
	},
	updateMsg : function() {
		var tooltip = $(Tooltip.id);
		tooltip.innerHTML = "<span>" + Tooltip.msg2 + "</span>";
	},
	getPosition : function(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			do {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			} while (obj = obj.offsetParent);
		}
		return [curleft,curtop];
	}
}

/* Link Control */
var Link = {
	timeout : null,
	redirect : function(link) {
		clearTimeout(Link.timeout);
		window.open(link);
	}
}

/* Tab Conrol */
var Tab = {
	change : function(event, tab_number) {
		switch (tab_number) {
			case 1:
				tab1 = $('tab-casinos');
				tab2 = $('tab-poker-rooms');
				tab1.className = "selected";
				tab2.className = "";
				
				content1 = $('content1');
				content2 = $('content2');
				content1.style.display = "block";
				content2.style.display = "none";
			break;
			case 2:
				tab1 = $('tab-casinos');
				tab2 = $('tab-poker-rooms');
				tab1.className = "";
				tab2.className = "selected";
				
				content1 = $('content1');
				content2 = $('content2');
				content1.style.display = "none";
				content2.style.display = "block";
			break;
		}
		Event.stopClick(event);
	}
}

function setup() {
	//Top button listener
	Event.addListener($("top-button"), "click", function(event){Scroll.scroll(event);});
	
	//Search input listener
	Event.addListener($("q"), "focus", Input.handleFocus);
	Event.addListener($("q"), "blur", Input.handleBlur);
	
	//Set up copy listeners
	Clipboard.setup("code", 10);
	
	//Tab listeners
	Event.addListener($("link-casinos"), "click", function(event){Tab.change(event, 1);});
	Event.addListener($("link-poker-rooms"), "click", function(event){Tab.change(event, 2);});
}

window.onload = setup;