

/***********************************  Globals  ******************************************/

// used for building out the master navigation links and footer links.
// UPDATED: added subnav capability
// each tab is an associative array with 3 items (a variable name, the text inside the link, and the href)
// the name of each array cannot contain invalid variable names
// eg.    navigation = [ ["page_name", "the text to display", "/the_href_to_the_page.html", "/src_to_optional_banner.jpg", [optional sub nav]] ]
var navigation = [
	["home", "home", "/", "/graphics/banner1.jpg"],
	["solutions", "solutions", "/solutions.html", "/graphics/banner_solutions.jpg", [
	  ["solutions", "Solutions Overview", "/solutions.html"],
	  ["appdev", "Application Development &amp; Test", "/appdev.html"],
	  ["projectmanage", "Project &amp; Program Management", "/projectmanage.html"],
	  ["datamanage", "Data Resource Management", "/datamanage.html"],
	  ["itinfra", "IT Infrastructure", "/itinfra.html"],
	  ["recruit", "Recruiting<br /> &amp; Staff-Augmentation", "/recruiting.html"]
	]],
	["clients", "clients", "/clients.html", "/graphics/banner_clients.jpg"],
	["ourteam", "our team", "/our_team.html", "/graphics/banner_ourteam.jpg", [
	  ["taft", "Thomas H. Taft", "/our_team.html"],
	  ["hibbert", "Jeffory D. Hibbert", "/hibbert.html"],
	  ["monahan", "J.T. Monahan", "/monahan.html"],
		["gruender", "John Gruender", "/gruender.html"],
	  ["mtaft", "Michael Taft", "/taft.html"],
		["pierce", "Alena Pierce", "/pierce.html"]
	]],
	["contact", "contact", "/contact.html", "/graphics/banner_contact.jpg"]
];

var homePageLogos = [
	["/graphics/logos/microsoft.jpg", "http://www.microsoft.com/"],
	["/graphics/logos/expedia.jpg", "http://www.expedia.com/"],
	["/graphics/logos/clear.jpg", "http://www.clear.com/"],
	["/graphics/logos/starbucks.jpg", "http://www.starbucks.com/"],
	["/graphics/logos/premera.jpg", "http://www.premera.com/"],
	["/graphics/logos/bluenile.jpg", "http://www.bluenile.com/"],
	["/graphics/logos/grouphealth.jpg", "http://www.ghc.org/"],
	["/graphics/logos/allrecipes.jpg", "http://www.allrecipes.com/"],
	["/graphics/logos/att.jpg", "http://www.att.com/"],
	["/graphics/logos/allstardir.jpg", "http://www.allstardirectories.com/"],
	["/graphics/logos/bline.jpg", "http://www.blinellc.com/"],
	["/graphics/logos/corbis.jpg", "http://www.corbisimages.com/"],
	["/graphics/logos/becu.jpg", "http://www.becu.org/"],
	["/graphics/logos/alaskaairlines.jpg", "http://www.alaskaair.com/"],
	["/graphics/logos/regence.jpg", "http://www.regence.com/"],
	["/graphics/logos/airbiquity.jpg", "http://www.airbiquity.com/"],
	["/graphics/logos/daptiv.jpg", "http://www.daptiv.com/"],
	["/graphics/logos/tmobile.jpg", "http://www.t-mobile.com/"],
	["/graphics/logos/onvia.jpg", "http://www.onvia.com/"],
	["/graphics/logos/seattlechildrens.jpg", "http://www.seattlechildrens.org/"],
	["/graphics/logos/isilon.jpg", "http://www.isilon.com/"],
	["/graphics/logos/gatesfoundation.jpg", "http://www.gatesfoundation.org/"],
	["/graphics/logos/fhlbanks.jpg", "http://www.fhlbanks.com/"],
	["/graphics/logos/vertafore.jpg", "http://www.vertafore.com/"],
	["/graphics/logos/disney.jpg", "http://disney.go.com/disneyinteractivestudios/"],
	["/graphics/logos/rei.jpg", "http://www.rei.com/"],
	["/graphics/logos/coinstar.jpg", "http://www.coinstar.com/"]
];

var rotatorParent = null;
var rotatorContainer = null;
var tableCounter = 0;
var currentLeft = 0;
var clientLogos = null;
var currentOpacity = 0;
var overallWidth = 0;

/***********************************  End Globals  ******************************************/



/***********************************  Utility Functions  ******************************************/
var CookieUtil = {
	get: function(name) {
		var cookieName = encodeURIComponent(name) + "=",
			cookieStart = document.cookie.indexOf(cookieName),
			cookieValue = null;
			
		if (cookieStart > -1) {
			var cookieEnd = document.cookie.indexOf(";", cookieStart);
			if(cookieEnd == -1) cookieEnd = document.cookie.length;
			cookieValue = decodeURIComponent(document.cookie.substring(cookieStart+cookieName.length, cookieEnd));
		}
		return cookieValue;
	},
	
	set: function(name, value, expires, path, domain, secure) {
		var cookieText = encodeURIComponent(name) + "=" + encodeURIComponent(value);
		
		if(expires instanceof Date) cookieText += "; expires=" + expires.toGMTString();
		if(path) cookieText += "; expires=" + path;
		if(domain) cookieText += "; domain="+domain;
		if(secure) cookieText += "; secure";
		
		document.cookie = cookieText;
	},
	
	unset: function(name, path, domain, secure) {
		this.set(name, "", new Date(0), path, domain, secure);
	}
};

function __$(str) { return document.getElementById(str); }
function hideMe(obj) { addCSSClass(obj, 'hide_me'); }
function unHideMe(obj) { removeCSSClass(obj, 'hide_me'); }
function addCSSClass(e,c) {
	if(!e || !c) return;
	var css_class_string = e.className;
	var css_class_array;
 
	if(css_class_string) css_class_array = css_class_string.split(/\s+/);
 
	var string_ip = ""; /*strip out nulls*/
	for (var css_class in css_class_array) {
		if (css_class_array[css_class] == c) { return; }
		if(css_class_array[css_class] !=null)
			string_ip += css_class_array[css_class] + " ";
	}
	string_ip += c;
	e.className = string_ip;
}
 
function removeCSSClass(e, c) {
	if(!e || !c) return;
	var css_class_string = '';
	var css_class_array = e.className;
	if( css_class_array ) css_class_array = css_class_array.split(/\s+/);
 
	var first = 1;
	for (var css_class in css_class_array) {
		if (css_class_array[css_class] != c) {
			if (first == 1) {
				css_class_string = css_class_array[css_class];
				first = 0;
			} else {
				css_class_string = css_class_string + ' ' + css_class_array[css_class];
			}
		}
	}
	e.className = css_class_string;
}

function attachEvt(type, el, evt) { // object, function
	if(window.addEventListener) {
	  if(type.toLowerCase()=='mousewheel') el.addEventListener('DOMMouseScroll', evt, false);
	  el.addEventListener(type, evt, false);  // standard event attaching
	}
	else if(window.attachEvent) el.attachEvent('on'+type, evt);  // IE 5+
	else el['on'+type] = evt;  // if all else fails...
}

function elem(tag, attribs, text) { // string, object, string
	var el = null;
	var iebug = false;
	if(tag.toLowerCase()=='img' && typeof attribs.src != 'undefined')
		try {el = document.createElement("<img src='"+attribs.src+"'>"); iebug=true; }
		catch(e) { el = document.createElement(tag); }
	else el = document.createElement(tag);
	if(!el) return null;
	
	if(attribs) for(var i in attribs) {
		if(iebug && i.toLowerCase()=='src') continue;
		el.setAttribute(i, attribs[i]);
	}
	if(text) el.innerHTML = text;
	return el;
}

function shuffle(array) {
	var tmp, current, top = array.length;
	if(top) while(--top) {
		current = Math.floor(Math.random() * (top + 1));
		tmp = array[current];
		array[current] = array[top];
		array[top] = tmp;
	}
	return array;
} 
/*********************************  End Utility Functions  *********************************************/


function body_load() {
	buildNavigation();
	buildFooterLine();
	fadeClientLogos();
	buildHPLogoRotator();
	
	if(window.location.href.match(/contact\.html\?submitted/)) {
		var tr = __$('message_sent');
		if(tr) unHideMe(tr);
	}
}

function buildNavigation() {
	var page = CookieUtil.get("currentPage");
	var parent = __$('top_nav');
	var footer = __$('footer_links');
	var banner = __$('banner');
	if(!parent) return;
	if(!page) page = "home";
	var file = window.location.pathname;
	if(file=="/index.html" || file=="") file = "/";
	
	// direct url detection and correction
	for(var n in navigation) {
		var nav = navigation[n];
		if(nav[4]) {
			for(var g in nav[4]) {
				var subnav = nav[4][g];
				var subreg = RegExp(subnav[2]+"$");
				if(file.match(subreg)) { page = nav[0]; CookieUtil.set("currentPage", nav[0]); }
			}
		}
		var reg = RegExp(nav[2]+"$");
		if(file.match(reg) && nav[0]!=page) { page = nav[0]; CookieUtil.set("currentPage", nav[0]); }
	}
	
	for(var i in navigation) {
		var t = navigation[i];
		var el = elem('a', {"href":t[2], "pageName":t[0]}, t[1]);
		if(t[0]==page) {
			addCSSClass(el, "top_selected");
			if(banner && t[3]) banner.setAttribute("src", t[3]);
		}
		attachEvt('click', el, changingPage);
		parent.appendChild(el);
		
		if(footer) {
			var el2 = el.cloneNode(true);
			attachEvt('click', el2, changingPage);
			footer.appendChild(el2);
			if(i<navigation.length-1) footer.appendChild(elem('span', null, '&nbsp;&nbsp;|&nbsp;&nbsp;'));
		}
		if(t[4] && t[0]==page) buildSubNav(i);
	}
	
	footer.appendChild(elem('span', null, '&nbsp;&nbsp;|&nbsp;&nbsp;'));
	footer.appendChild(elem('a', {"target":"_blank", "id":"fgi_link", "href":"http://www.fgi.com/"}, 'web design fgi'));
}

function buildSubNav(parent) {
	var page = CookieUtil.get("subNavPage");
	var parent = navigation[parent];
	if(!parent || !parent[4] || !parent[4].length) return;
	var sub_navs = parent[4];
	if(!page) page = sub_navs[0][0];
	var container = __$('sub_nav');
	if(!container) return;
	var breadcrumb = __$('breadcrumb');
	var file = window.location.pathname;
	if(file=="/index.html" || file=="") file = "/";
	
	// direct url detection and correction
	for(var n in sub_navs) {
		var nav = sub_navs[n];
		var reg = RegExp(nav[2]+"$");
		if(file.match(reg) && nav[0]!=page) { page = nav[0]; CookieUtil.set("subNavPage", nav[0]); }
	}
	
	for(var i in sub_navs) {
		var t = sub_navs[i];
		var el = elem('a', {"href":t[2], "subpageName":t[0]}, t[1]);
		if(t[0]==page) {
			addCSSClass(el, "sub_selected");
			var tmp = elem('div', null, t[1]);  // used for striping html
			if(breadcrumb) breadcrumb.innerHTML = tmp.textContent||tmp.innerText;
		}
		if(i=="0") {
			el.style.borderTop="none";
			el.style.paddingTop="9px";
		}
		attachEvt('click', el, changingPage);
		container.appendChild(el);
	}
}

function buildFooterLine() {
	var footerLine = __$('footer_line');
	var myDate= new Date();
	var a = myDate.getFullYear();
	
	if(footerLine) footerLine.innerHTML = "Laurel Group &nbsp;|&nbsp; 6 Nickerson St., Suite 301, Seattle WA 98109 &nbsp;|&nbsp; 206.729.7772 &nbsp;|&nbsp; Copyright "+a+" &#xB7; All rights Reserved";
}

function buildHPLogoRotator() {
	rotatorParent = __$('rotator_wrapper');
	if(!rotatorParent) return;
	rotatorContainer = __$('hp_closes');
	if(!rotatorContainer) return;
	var howMany = Math.ceil(homePageLogos.length/3);
	var width = rotatorContainer.offsetWidth;
	var height = rotatorContainer.offsetHeight;
	tableCounter = howMany;
	
	// a little fun =D  -  sort logos randomly
	shuffle(homePageLogos);
	overallWidth = (width*(howMany+1));
	rotatorParent.style.width=overallWidth+"px";
	
	for(var i=0, n=0; i<howMany; i++, n+=3) {
		var table = elem('table', {"cellpadding":"0", "cellspacing":"0", "border":"0", "width":width, "height":height});
		var tbody = elem('tbody');
		var tr = elem('tr');
		
		for(var t=0; t<3; t++) {
		    var td=elem('td', {"align":"center", "width":(t==1?Math.floor(width/3)+(width%3):Math.floor(width/3))});
		    var logo=homePageLogos[n+t];
			
		    if(logo) {
			  var link = elem('a', {"href":logo[1], "target":"_blank"});
			  var img = elem('img', {"src":logo[0]});
			  link.appendChild(img);
			  td.appendChild(logo[1]?link:img);
			  tr.appendChild(td);
		    }
		    tr.appendChild(td);
		}
		
		tbody.appendChild(tr);
		table.appendChild(tbody);
		rotatorParent.appendChild(table);
	}
	
	//if(!navigator.userAgent.match(/AppleWebKit/))
		rotatorParent.appendChild(rotatorParent.childNodes[0].cloneNode(true));
	//currentLeft = rotatorContainer.offsetWidth * -1;
	//setTimeout(fadeIn, 500);
	//setInterval(rotateLogos, 5000);
	setTimeout(function(){
		$(rotatorParent).fadeIn(1000, function(){
			setInterval(rotateLogos, 5000);
		});
	}, 500);
}



function rotateLogos() {
	var width = rotatorContainer.offsetWidth;
	var current = parseInt(rotatorParent.style.left.match(/^\-?\d*/));
	var newLeft = current - width;
	if(newLeft <= overallWidth*-1) {
		rotatorParent.style.left="0px";
		newLeft = width*-1;
	}
	$(rotatorParent).animate({'left':newLeft+'px'});
	return;

	if(navigator.userAgent.match(/AppleWebKit/)) {
		left = currentLeft;
		currentLeft += rotatorContainer.offsetWidth * -1;
		if(currentLeft<=(rotatorParent.offsetWidth * -1)) { currentLeft = rotatorContainer.offsetWidth * -1; left=0; }
		rotatorParent.style.left=left+"px";
		return;
	}
	
	var left = parseInt(rotatorParent.style.left.match(/^\-?\d*/)) - 20;
	if(left <= currentLeft) {
		left = currentLeft;
		currentLeft += rotatorContainer.offsetWidth * -1;
		if(currentLeft<=(rotatorParent.offsetWidth * -1)) { currentLeft = rotatorContainer.offsetWidth * -1; left=0; }
	} else setTimeout(rotateLogos, 20);
	rotatorParent.style.left=left+"px";

}

function changingPage(evt, el) {  // event, string/object
	if(el) el = typeof el=="string" ? __$(el) : el;
	else el = evt.srcElement || evt.target;
	if(!el || (el && el.tagName.toLowerCase()!='a')) return;
	var subpage = false;
	var page = el.getAttribute("pageName");
	if(!page) { page = el.getAttribute("subpageName"); subpage = true; }
	else CookieUtil.unset("subNavPage");
	if(!page) return;
	CookieUtil.set((subpage?"subNavPage":"currentPage"), page);
}

function fadeClientLogos() {
	var parent = __$('client_logos');
	if(!parent) return;
	
	clientLogos = elem('img', {"src":"/graphics/logos/clients.jpg", "usemap":"#Map", "id":"client_logos_img"});
	parent.appendChild(clientLogos);
	setTimeout(fadeIn, 500);
}

function fadeIn() {
	var element = clientLogos || rotatorParent;
	if(!element || currentOpacity>1) return;
	// moblie device detection (anything that supports webkit transitions)
	if(navigator.userAgent.match(/AppleWebKit/)) {
		//alert(navigator.userAgent);
		element.style.opacity=1;
		return;
	}
	currentOpacity+=0.04;
	if (element.filters && element.filters[0]){ //IE syntax
	if (typeof element.filters[0].opacity=="number") //IE6
		element.filters[0].opacity=currentOpacity*100;
	else //IE 5.5
		element.style.filter="alpha(opacity="+currentOpacity*100+")";
	}
	else if (typeof element.style.MozOpacity!="undefined") //Old Mozilla syntax
		element.style.MozOpacity=currentOpacity;
	else if (typeof element.style.opacity!="undefined") //Standard opacity syntax
		element.style.opacity=currentOpacity;
		
	setTimeout(fadeIn, 40);
}

function checkForm(form) {
	if(!form) return false;
	var btn = __$('submitBtn');
	if(!btn) return;
	hideMe(btn);

	if(form.name.value=="") {
		alert("Please enter your name");
		unHideMe(btn);
		form.name.focus();
		return false;
	}
	if(form.addy.value=="") {
		alert("Please enter your E-mail address");
		unHideMe(btn);
		form.addy.focus();
		return false;
	}
	__$('submitBtn_wrapper').appendChild(document.createTextNode('Uploading, please wait...'));
	return true;
}

attachEvt('load', window, body_load);









