/*-------------------------------------------------
Title:		Stroik JavaScript Utilities
Author:		John Reed, john@studiobonito.com
Updated:	October 9 2008
------------------------------------------------- */





// add load event function
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}



/*
    returns array with all elements with specified class name
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/ 
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {returnElements.push(current);}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {returnElements.push(node);}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {break;}
				}
				if (match) {returnElements.push(current);}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};





// function to find X position of a specific element
function findPosX(obj) {
	var curleft = 0;
	
	if(obj.offsetParent) {
		while(1) {
			curleft += obj.offsetLeft;
			if(!obj.offsetParent) {break;}
			obj = obj.offsetParent;
		}
	} else if(obj.x) {
		curleft += obj.x;
	}
	return curleft;
}




// prepares links based on XML "rel" attribute
function prepareLinks() {
	if (!document.getElementsByTagName) return;
	var anchors = document.getElementsByTagName("a");
	
	for (var i=0; i<anchors.length; i++) {
		var anchor = anchors[i];
		
		// prepare external links
		if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") {
			anchor.target = "_blank";
		}

		// prepare close window links
		if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "close") {
			anchor.onclick = function() {window.close();}
		}
	}
}





// prepares tab navigation
function prepareTabs() {
	if (!document.getElementById) return;
	
	var navs = getElementsByClassName('tabs');
	var details = getElementsByClassName('detail');
	
	if(navs.length > 0) {
	
		// get the tabs
		for (var i=0; i<navs.length; i++) {
			var tabs = navs[i].getElementsByTagName('LI');
		}

		// get the links
		for (var i=0; i<navs.length; i++) {
			var links = navs[i].getElementsByTagName('A');
		}
		
		for (var i=0; i<links.length; i++) {
			
			if(links[i].parentNode.id !== 'n-send') {
				links[i].onclick = function() {
					
					this.blur();
	
					// mute tabs
					for (var i=0; i<tabs.length; i++) {
						tabs[i].className = '';
					}
				
					// active the tab!
					this.parentNode.className = 'active';
					
					// parse the URL
					var ids = this.href.split('#');
					
					// hide other detail elements
					for (var i=0; i<details.length; i++) {
						details[i].style.display = 'none';
					}
					
					// show the active detail element
					document.getElementById(ids[1]).style.display = 'block';
					
					return false;
				}
			}
			else {
				links[i].onclick = function() {
					document.getElementById('send').submit();
					return false;
				}
			}
		}
	}
}





// prepares copy show/hide
function prepareCopy() {
	if (!document.getElementById) return;
	
	var lead = document.getElementById('lead');
	var detail = document.getElementById('detail');
	
	if(lead && detail) {
		var leadP = lead.getElementsByTagName('P');
		var lastP = leadP.length - 1;
		leadP[lastP].innerHTML = leadP[lastP].innerHTML + ' <a class="more" id="more" href="#" onclick="$(this).fade({ duration: 0 }); $(\'detail\').blindDown(); $(\'less\').appear({ duration: 0.25 }); return false;">View more</a><a class="less" id="less" href="#" onclick="$(this).fade({ duration: 0 }); $(\'detail\').blindUp(); $(\'more\').appear({ duration: 0.25 }); return false;" style="display: none;">View less</a>';
	}
}





// simple function to return an element's id
function get(id) {
	return document.getElementById(id);
}




// simple show
function show(id) {
	if (!document.getElementById) return;
		
	var element = document.getElementById(id);
	
	if(navigator.appName.indexOf("Microsoft") > -1) {
		element.style.display = 'block';
	}

	else {
		if(element.nodeName == 'TABLE') {
			element.style.display = 'table';
		}
		
		else if(element.nodeName == 'TR') {
			element.style.display = 'table-row';
		}

		else if(element.nodeName == 'TBODY') {
			element.style.display = 'table-row-group';
		}
		
		else {
			element.style.display = 'block';
		}
	}
}




// simple hide
function hide(id) {
	if (!document.getElementById) return;
		
	var element = document.getElementById(id);
	
	if(element) {
		element.style.display = 'none';
	}
	else {
		id.style.display = 'none';
	}
}




// simple toggle
function toggle(id) {
	if (!document.getElementById) return;
	
	var element = document.getElementById(id);
	
	if(element.style.display == 'none') {
		if(navigator.appName.indexOf("Microsoft") > -1) {
			element.style.display = 'block';
		}

		else {
			if(element.nodeName == 'TBODY') {
				element.style.display = 'table-row-group';
			}
			
			else {
				element.style.display = 'block';
			}
		}
	} else {
		element.style.display = 'none';
	}
}





// popup function
function popup(url,w,h,type) {
	var winl = (screen.width - w) / 2;
	var wint = (screen.height - h) / 2;
	var popupProps = 'width='+w+',height='+h+',left='+winl+',top='+wint;
	
	switch(type) {
		case 1:
			popupProps += 'resizable=yes,status=1,menubar=1,toolbar=1,scrollbars=1,location=1,directories=1';
			break; 
		
		case 2:
			popupProps += 'resizable=yes,toolbar=1,scrollbars=1,location=1';
			break; 
		
		case 3:
			popupProps += 'scrollbars=1';
			break;
		
		default:
			popupProps += '';
	}
	
	window.open(url,'popup',popupProps);
}





// set the logo position
function setLogo() {
	if (!document.getElementById) return;
	
	var masthead = document.getElementById('masthead');
	
	if(masthead.className=='inner') {
		var wrap = document.getElementById('wrap');
		var wrapX = findPosX(wrap);

		var logo = document.getElementById('logo');
		logo.style.position='absolute';
		logo.style.paddingLeft = wrapX + 'px';
		logo.style.paddingRight = '46px';
		logo.style.backgroundPosition = (wrapX + 34) + 'px ' + '16px';
		
		window.onresize = function() {
			var wrapX = findPosX(wrap);
			logo.style.paddingLeft = wrapX + 'px';
			logo.style.backgroundPosition = (wrapX + 34) + 'px ' + '16px';
		}
	}
}



// load events
addLoadEvent(setLogo);
addLoadEvent(prepareLinks);
addLoadEvent(prepareTabs);
addLoadEvent(prepareCopy);

