/*		global.js

by Paul Novitski - JuniperWebcraft.com
20 January 2006
last revised 14 May 2009
*/

//=========================
// execute on page load
//=========================
AddEvent(window, "load", jsExtLinks);
AddEvent(window, "load", rcInit);


// this class identifies blocks to be transformed into rounded corner boxes
var sRcClass = "rc";

// this is the markup inserted into each .rc box.  Pre-existing content is inserted into div.rcInner:
var sRcInner =  '\n<div class="rcTL"></div>' +
				'\n<div class="rcTR"></div>' +
				'\n<div class="rcInner">' +
				'\n</div>' +
				'\n<div class="rcBL"></div>' +
				'\n<div class="rcBR"></div>' +
				'\n';

//=========================
// run initialization function on page load 
//=========================
/*
var loadRC = window.onload;

window.onload = function()
{
		if (loadRC) loadRC();

		// check for DOM-awareness
		if (!document.getElementById) return;
		if (!document.getElementsByTagName) return;
		if (!document.createElement) return;

	//heightInit();
	rcInit();
}

	//alert("hi");
*/

//=========================
function InitializeAll()
//=========================
{
		// check for DOM-awareness
		if (!document.getElementById) return;
		if (!document.getElementsByTagName) return;
		if (!document.createElement) return;

	//heightInit();
	rcInit();
	contactInit();
}


//=========================
function contactInit()
//=========================
{
	//alert("function contactInit()");

		// make sure we're on the contact page
		if (!document.body.id || (document.body.id != "how")) return;// alert("Not body#how");
	//alert(document.body.id);

	var oForm = document.getElementById("formContact");
		if (!oForm) return; // alert("Form[0] not found");
	//alert(oForm.id);
	oForm.onsubmit = jsContactSubmit;
}


//=========================
function jsContactSubmit(evt)
//=========================
{
	// cancel event-bubbling
		if (evt) { event = evt; }
	event.cancelBubble = true;

	//alert("function jsContactSubmit(evt)");

	// validate input
	
	// validate name
	var oObj = document.getElementById("contactName");
	var sText = oObj.value;
		if (!sText || sText == "")
		{
			alert("Please enter your name");
			return false;
		}

	// validate email address
	var oObj = document.getElementById("contactEmail");
	var sText = oObj.value;
		if (!sText || sText == "")
		{
			alert("Please enter your email address");
			return false;
		}

	reEmail1 = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9])+(\.[a-zA-Z0-9_-]+)+$/;
	reEmail2 = /@juniperwebcraft.com$/;

		if (!reEmail1.test(sText) || reEmail2.test(sText))
		{
			alert('Please enter a valid email address');
			return false;
		} 

	// validate subject
	var oObj = document.getElementById("contactSubject");
	var sText = oObj.value;
		if (!sText || sText == "")
		{
			alert("Please enter a subject");
			return false;
		}

	// validate message
	var oObj = document.getElementById("contactMessage");
	var sText = oObj.value;
		if (!sText || sText == "")
		{
			alert("Please enter a message");
			return false;
		}

	return true;
}


//=========================
function heightInit()
//=========================
{
		if (document.getElementById("pageWrap"))
		{
			window.onresize = adjustHeight;
			window.onload = adjustHeight;
		}
}

//=========================
function adjustHeight()
//=========================
{
	var oDiv = document.getElementById("pageWrap");

	// browser-sniff (*sigh*)
	var isIE5 = navigator.userAgent.toUpperCase().indexOf("MSIE 5")!=-1;

	var elementOffset = 0;
	var styleOffset = 0;
	var documentHeight;
	var totalOffset;

		if (oDiv && document.documentElement.offsetHeight && oDiv.offsetHeight)
		{
			documentHeight = document.documentElement.offsetHeight;
				if (oDiv.offsetHeight < documentHeight - elementOffset)
				{
						if (isIE5)
						{
							totalOffset = elementOffset;
						}else{
							totalOffset = elementOffset + styleOffset;
						}

					oDiv.style.height = String(documentHeight - totalOffset) + 'px';
				}
		}
	//alert("oDiv.style.height = " + oDiv.style.height);
}


/*
This script snippet found on http://www.ampsoft.net/webdesign-l/making-web-pages-extend-to-bottom.html
by Alberto Martinez Perez

function adjustHeight() {
  if (document.getElementById) {
      var targetElement=document.getElementById("contents"),
          elementOffset=45, styleOffset=80, documentHeight, totalOffset;

      if (targetElement && document.documentElement.offsetHeight
          && targetElement.offsetHeight) {
          documentHeight=document.documentElement.offsetHeight;
          if (targetElement.offsetHeight<documentHeight-elementOffset) {
              if (isIE5)
                  totalOffset=elementOffset;
                  else totalOffset=elementOffset+styleOffset;
              targetElement.style.height=String(documentHeight-totalOffset)+'px';
          }
      }
  }
}

window.onresize=adjustHeight;
window.onload=adjustHeight;
*/


//=========================
function rcInit()
//=========================
{
	//alert("function rcInit()");

		// check for DOM-awareness
		if (!document.getElementById) return;
		if (!document.getElementsByTagName) return;
		if (!document.createElement) return;

	var aEls = document.getElementsByTagName("*");

	rRegexp = new RegExp("(^| )" + sRcClass + "0( |$)");

	do
	{
		bFoundOne = false;

		for (var iEl = 0; iEl < aEls.length; iEl++)
		{
			if (aEls[iEl].className && rRegexp.test(aEls[iEl].className))
			{
				bFoundOne = true;
				rcApplyRC(aEls[iEl]);
			}
		}
	} while (bFoundOne == true);
}


//=========================
function rcApplyRC(argBox)
//=========================
{
	//alert("function rcApplyRC(" + argBox.tagName + "." + argBox.className + ")");

	// copy the box but not its content
	var oNewBox = argBox.cloneNode(false);
	
	// correct the class name
	oNewBox.className = oNewBox.className.replace(/(^| )rc0( |$)/, "$1rc$2");	
	
	var oChild = document.createElement("div");
	oChild.className = "rcTL";
	oNewBox.insertBefore(oChild, null);
	//alert("added " + oChild.tagName + "." + oChild.className);

	var oChild = document.createElement("div");
	oChild.className = "rcTR";
	oNewBox.insertBefore(oChild, null);
	//alert("added " + oChild.tagName + "." + oChild.className);

	var oChild = document.createElement("div");
	oChild.className = "rcInner";
	var oInner = oNewBox.insertBefore(oChild, null);
	//alert("added oInner " + oChild.tagName + "." + oChild.className);

	var oChild = document.createElement("div");
	oChild.className = "rcBL";
	oNewBox.insertBefore(oChild, null);
	//alert("added " + oChild.tagName + "." + oChild.className);

	var oChild = document.createElement("div");
	oChild.className = "rcBR";
	oNewBox.insertBefore(oChild, null);
	//alert("added " + oChild.tagName + "." + oChild.className);


	// copy old box contents into new box
	var aOldChildren = argBox.childNodes;
	//alert("Copying " + aOldChildren.length + " old children");
	var bFirst = true;
	
	for (var iOld = 0; iOld < aOldChildren.length; iOld++)
	{
		// clone child node with all its contents
		var oNewChild = aOldChildren[iOld].cloneNode(true);
		//alert("oNewChild.tagName = " + oNewChild.tagName);

			if (oNewChild.tagName)
			{
				var oLastChild = oNewChild;
					if (bFirst)
					{
						rcAppendClassName(oNewChild, "rcInnerTop");
						bFirst = false;
					}
			}
		// add cloned child to new inner div
		oInner.insertBefore(oNewChild, null);
	}

	// add class to last child
	rcAppendClassName(oLastChild, "rcInnerBottom");
	
	// replace old box with new
	argBox.parentNode.replaceChild(oNewBox, argBox);

	//alert(oNewBox.innerHTML);
}


//=========================
function rcAppendClassName(argObj, argClassname)
//=========================
{
		if (!argObj.className)
		{
			argObj.className = argClassname;
		}else{
			argObj.className += " " + argClassname;
		}
}


/*		externallinks.js
		by Paul Novitski - www.juniperwebcraft.com
		February 2007

This script converts all absolute URL hyperlinks to open in a new window.
19 April 2007 - also any link with the class "external"
*/

//=========================
function jsExtLinks()
//=========================
{
	//alert("function jsExtLinks()");

		// check for DOM-awareness
		if (!document.getElementById) return;
		if (!document.getElementsByTagName) return;

	var sPrompt = "(Opens in a new window)";

	var aLinks = document.getElementsByTagName("A");
	
	//alert("aLinks.length = " + aLinks.length);
	
	for (var iLink = 0; iLink < aLinks.length; iLink++)
	{
		var bExternal = false;
		var bPopup = false;
		
		var sClass = aLinks[iLink].className;		
		//var sClass = aLinks[iLink].getAttribute("class");
			if (sClass && sClass == 'popup')
			{
				bPopup = true;
			}
			else if (sClass && sClass == 'external')
			{
				bExternal = true;
			}
			else
			{		
				var sHref = aLinks[iLink].getAttribute("href");
				//alert(iLink + ": " + sHref);
				
					if (!sHref) continue;
					if (sHref == "") continue;

					if (sHref.substring(0, 4) == "http") bExternal = true;
					
					// don't open new window for any page in this website family
					if (sHref.indexOf("juniperwebcraft.com") >= 0
					)
					{
						bExternal = false;
					}
			}
		
			if (!bExternal && !bPopup) continue;
		
			if (bExternal)
			{
				var sClickFunction = jsExtLinksClick;
			}
			else if (bPopup)
			{
				var sClickFunction = jsPopupLinksClick;
			}
			else
			{
				continue;
			}
		
		aLinks[iLink].onclick = sClickFunction;

		var sTitle = aLinks[iLink].getAttribute("title");
		
			if (!sTitle) sTitle = '';
			if (sTitle.indexOf("new window") >= 0) continue;

			if (sTitle == "")
			{
				sTitle = sPrompt;
			}
			else
			{
				sTitle = sTitle + " " + sPrompt;
			}
		
		aLinks[iLink].setAttribute("title", sTitle);
		//alert("title: " + iLink + ": " + sTitle);
	}
}


//=========================
function jsExtLinksClick(evt)
//=========================
{
	// cancel event-bubbling
		if (evt) { event = evt; }
	event.cancelBubble = true;

	var sHref = this.getAttribute("href");

	window.open (sHref, "_blank");	

	return false;
}



//=========================
function jsPopupLinksClick(evt)
//=========================
{
	// cancel event-bubbling
		if (evt) { event = evt; }
	event.cancelBubble = true;
	
	// see if it's an image
	var rCheckImage = /\.(jpg|jpeg|gif|png)$/i;
	var rGetDims = /-(\d+)x(\d+)\.(jpg|jpeg|gif|png)$/i;
	
	var sPopupHref = 'popupImage.php?img=';
	
	var sHref = this.getAttribute("href");

	var bIsImage = rCheckImage.test(sHref);
	
	//alert((bIsImage) ? 'An image' : 'Not an image');

		if (bIsImage)
		{
			var aMatches = rGetDims.exec(sHref);
			//alert(aMatches.join('\n'));
			sHref = sPopupHref + encodeURIComponent(sHref);
			var sWindowName = "Image Pop-up";
			var sFeatures = "menubar=no,toolbar=no,directories=no,personalbar=no,scrollbars=no";
				if (aMatches) sFeatures += ",width=" + aMatches[1] + ",height=" + aMatches[2];
		}
		else
		{
			var sWindowName = "New Window";
			var sFeatures = '';
		}

	window.open(sHref, sWindowName, sFeatures);

	return false;
}


//=========================
function AddEvent(oElement, sEventName, fnFunction)
//=========================
{
	if (oElement)
	{
		if (oElement.attachEvent)
		{
			oElement.attachEvent("on" + sEventName, fnFunction);
		}
		else
		{
			oElement.addEventListener(sEventName, fnFunction, true);
		}
	}
}


