var scrollTime = 50;
var scrollProgress = 0;
var scrollStartPosition = 0;
var scrollAmount = 0;
var intervalId = 0;
var inputs = new Array();
var ajaxFailed = false;

function main(){
	buildSections();
	buildAddresses();
	setupForm();
	document.onmousewheel = onScroll;
	document.addEventListener("DOMMouseScroll",onScroll,false);
}

function setupForm(){
	setupInput("name");
	setupInput("email");
	setupInput("reason");
	setupInput("message");
	checkInputs();
}

function setupInput(inputName){
	var input = document.getElementById(inputName);
	inputs.push(input);
	input.onkeyup = checkInputs;
}

function checkInputs(){
	var submit = document.getElementById("submit");
	var notice = document.getElementById("submit-notice");
	for(var i=0; i<inputs.length; i++){
		if(inputs[i].value.length==0){
			submit.disabled = true;
			notice.style.visibility = "visible";
			return;
		}
	}
	submit.disabled = false;
	notice.style.visibility = "hidden";
}

function buildAddresses(){
	buildAddress("sam-address","mas");
	buildAddress("scott-address","ttocs");
}

function buildAddress(elementId,name){
	var element = document.getElementById(elementId);
	var bidi = document.createElement("div");
	bidi.innerHTML = "zn.oc.kcalbss@" + name;
	bidi.className = "address";
	element.parentNode.insertBefore(bidi,element);
	element.parentNode.removeChild(element);
}

function buildSections(){
	var sections = getSections();
	for(var i=0; i<sections.length; i++){
		var section = sections[i];

		var navContainer = document.createElement("div");
		navContainer.className = "nav-container";
		section.insertBefore(navContainer,section.firstChild);

		var anchor = document.createElement("a");
		anchor.name = section.id;
		section.insertBefore(anchor,navContainer);

		var nav = document.createElement("div");
		nav.className = "nav";
		nav.id = section.id + "-nav";

		for(var j=0; j<sections.length; j++){
			var navSection = sections[j];
			var tag = document.createElement("img");
			tag.alt = navSection.id;
			tag.id = section.id + "-nav-" + navSection .id;
			tag.src = "images/" + tag.id + ".jpg";

			if(section.id != navSection .id){
				new Image().src = "images/" + tag.id + "-hover.jpg";
				tag.onmouseover = function(){
					this.src = "images/" + this.id + "-hover.jpg";
				}
				tag.onmouseout = function(){
					this.src = "images/" + this.id + ".jpg";
				}

				var link = document.createElement("a");
				link.href = "#" + navSection.id;
				link.appendChild(tag);
				tag = link;
			}else{
				tag.className = "tag";
			}

			tag.section = navSection;
			tag.onclick = function(){
				scrollToElement(this.section);
				return false;
			}

			nav.appendChild(tag);
		}
		navContainer.appendChild(nav);
	}
}

function getSections(){
	var divs = document.getElementsByTagName("div");
	var sections = new Array();
	for(var i=0; i<divs.length; i++){
		if(divs[i].className == "section"){
			sections.push(divs[i]);
		}
	}
	return sections;
}

function onScroll(){
	if(intervalId){
		clearInterval(intervalId);
		intervalId = 0;
	}
}

function scrollToElement(element){
	scrollStartPosition = getScrollPosition();
	var position = getYPosition(element);
	var clearance = getPageHeight() - position;
	var viewportHeight = getViewportHeight();
	if(clearance < viewportHeight){
		position -= viewportHeight - clearance;
	}
	scrollAmount = position - scrollStartPosition;
	scrollProgress = 0;
	if(!intervalId){
		intervalId = setInterval("onScrollInterval()",10);
	}
}

function onScrollInterval(){
	scrollProgress++;
	window.scrollTo(0,easeOut(scrollProgress,scrollStartPosition,scrollAmount,scrollTime)); //TODO handle x scrolling
	if(scrollProgress == scrollTime){
		clearInterval(intervalId);
		intervalId = 0;
	}
}

function getScrollPosition(){
	var scroll = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
	return scroll ? scroll : 0;
}

function getYPosition(element){
	var y = element.offsetTop;
	while(element = element.offsetParent){
		y += element.offsetTop;
	}
	return y;
}

function getPageHeight(){
	var height = 0, sh, oh;
	if (document.height){
		height = document.height;
	} else if (document.body){
		if (document.body.scrollHeight) height = sh = document.body.scrollHeight;
		if (document.body.offsetHeight) height = oh = document.body.offsetHeight;
		if (sh && oh) height = Math.max(sh,oh);
	}
	return height;
}

function getViewportHeight(){
	var height = window.innerHeight || document.documentElement.clientHeight;
	return height ? height : 0;
}

function easeOut(t, b, c, d){
	return c * (-Math.pow(2, -10 * t/d) + 1) + b;
}

var request = null;

function onSubmit(){
	var submit = document.getElementById("submit");
	submit.disabled = true;
	var notice = document.getElementById("submit-notice");
	notice.innerHTML = "Sending your message...";
	notice.style.visibility = "visible";

	request = getXMLHttpRequest();
	if(!request || ajaxFailed){
		return true;
	}

	request.onreadystatechange = onRequestStateChange;
	request.open("POST","submit.php",true);
	var message = "";
	for(var i=0; i<inputs.length; i++){
		if(i>0){
			message += "&";
		}
		message += inputs[i].name + "=" + encodeURI(inputs[i].value);
		inputs[i].disabled = true;
	}

	request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
	request.setRequestHeader("Content-length",message.length);
	request.setRequestHeader("Connection","close");
	request.send(message);

	return false;
}

function onRequestStateChange(){
	if(request.readyState==4){
		if(request.status==200){
			document.getElementById("submit-notice").innerHTML = "Got it!  We'll be in touch soon."
		}else{
			ajaxFailed = true;
			document.getElementById("form").submit();
		}
	}
}

function getXMLHttpRequest(){
	var xmlhttp = false;
	try{
		xmlhttp = new XMLHttpRequest();
	}catch(e){
		var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHTTP"];
		for(var i=0; i<versions.length; i++){
			try{
				xmlhttp = new ActiveXObject(versions[i]);
			}catch(e){
				xmlhttp = false;
				continue;
			}
		}
	}
	return xmlhttp;
}
