/* -------------------------------------

Begin Common Javascript Functions

Reference Article:
Dustin Diaz:
http://www.dustindiaz.com/top-ten-javascript/

------------------------------------- */

/* addEvent: simplified event attachment */
// written by Dean Edwards, 2005
// with input from Tino Zijdel

// http://dean.edwards.name/weblog/2005/10/add-event/

function addEvent(element, type, handler) {
	// assign each event handler a unique ID
	if (!handler.$$guid) handler.$$guid = addEvent.guid++;
	// create a hash table of event types for the element
	if (!element.events) element.events = {};
	// create a hash table of event handlers for each element/event pair
	var handlers = element.events[type];
	if (!handlers) {
		handlers = element.events[type] = {};
		// store the existing event handler (if there is one)
		if (element["on" + type]) {
			handlers[0] = element["on" + type];
		}
	}
	// store the event handler in the hash table
	handlers[handler.$$guid] = handler;
	// assign a global event handler to do all the work
	element["on" + type] = handleEvent;
};
// a counter used to create unique IDs
addEvent.guid = 1;

function removeEvent(element, type, handler) {
	// delete the event handler from the hash table
	if (element.events && element.events[type]) {
		delete element.events[type][handler.$$guid];
	}
};

function handleEvent(event) {
	var returnValue = true;
	// grab the event object (IE uses a global event object)
	event = event || fixEvent(window.event);
	// get a reference to the hash table of event handlers
	var handlers = this.events[event.type];
	// execute each event handler
	for (var i in handlers) {
		this.$$handleEvent = handlers[i];
		if (this.$$handleEvent(event) === false) {
			returnValue = false;
		}
	}
	return returnValue;
};

function fixEvent(event) {
	// add W3C standard event methods
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	event.target = event.srcElement;
	return event;
};
fixEvent.preventDefault = function() {
	this.returnValue = false;
};
fixEvent.stopPropagation = function() {
	this.cancelBubble = true;
};
var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();
addEvent(window,'unload',EventCache.flush);

/* window 'load' attachment */
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	}
	else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

/* grab Elements from the DOM by className */
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

/* -------------------------------
Begin Custom Javascript
-------------------------------- */

// Set to run function on page load
addLoadEvent(init);

// Add events
function init(){
	var oLinks=getElementsByClass('lgrImg');
	for(var iNum=oLinks.length-1;iNum>=0;iNum--){
		addEvent(oLinks[iNum],'click',overlayLarger);
	}	
	var oThumbGroups=getElementsByClass('thumbImgs');
	var oThumbnails;
	for(var iLength=oThumbGroups.length-1;iLength>=0;iLength--){
		oThumbs=oThumbGroups[iLength].getElementsByTagName('img');
		for(var iCount=oThumbs.length-1;iCount>=0;iCount--){
			addEvent(oThumbs[iCount],'click',showLarger);
		}
	}
	if(document.getElementById('wcg')){
		wcg.init();	
	}
}

// PT-04/PT-05 Pages - Show larger image from thumbnail
function showLarger(event){
	if(handleEvent(event)){
		var oThumb=event.target;
		var oLargeImageDiv = oThumb.parentNode.parentNode.previousSibling;
		if(oLargeImageDiv.className!=="detailImg"){
			oLargeImageDiv=oLargeImageDiv.previousSibling;
		}
		var oImg=oLargeImageDiv.lastChild;
		oImg.src=oThumb.parentNode.href;
		return false;
	}
	return true;	
}


// Start Functions for 'Lightbox'
// Reconstructed from 'Lightbox Gone Wild' - http://particletree.com/features/lightbox-gone-wild/
function overlayLarger(event){
	if(handleEvent(event)){
		var oLink=event.target;
		var oImg=new Image();
		var oLgrImg=document.getElementById('lrgImg');
		var oUnderlay=document.getElementById('underlay');
		
		if(!oLgrImg||!oUnderlay){
			var oLgrImg=document.createElement('div');
			var oUnderlay=document.createElement('div');
			
			oLgrImg.id="lrgImg";
			oUnderlay.id="underlay";
			
			document.body.appendChild(oUnderlay);
			document.body.appendChild(oLgrImg);
		}
		
		while(oLgrImg.getElementsByTagName('img').length>0){
			oLgrImg.removeChild(oLgrImg.getElementsByTagName('img')[0]);
		}
		
		oImg.onload=function(){
			oLgrImg.appendChild(oImg);
		}
		oImg.src=oLink.href;
		
		// Get Page Dimensions
		var arrayPageSize = getPageSize();
		var arrayPageScroll = getPageScroll();
		
		// set height of Underlay to take up whole page and show
		oUnderlay.style.height=(arrayPageSize[1] + 'px');
		oUnderlay.style.display="block";
		
		oLgrImg.style.top=(arrayPageScroll[1] + ((arrayPageSize[3] - 205) / 2))+"px";
		oLgrImg.style.left=((arrayPageSize[0] - 225) / 2)+"px";
		
		oLgrImg.style.display="block";
		
		event.stopPropagation();
		addEvent(document.body,"click",hideLgrImg);
		addEvent(document.body,"keypress",hideLgrImg);
		document.body.style.cursor="pointer";
		return false;
	}
	return true;
}
function hideLgrImg(){
	var oLgrImg=document.getElementById('lrgImg');
	oLgrImg.style.display="none";
	document.getElementById('underlay').style.display="none";
		
	removeEvent(document.body,"click",hideLgrImg);
	removeEvent(document.body,"keypress",hideLgrImg);
	document.body.style.cursor="auto";
}
function getPageScroll(){
	var yScroll;
	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}
	arrayPageScroll = new Array('',yScroll) 
	return arrayPageScroll;
}
function getPageSize(){	
	var xScroll, yScroll;	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}
	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}
	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}
// End 'Lightbox' Functions


// Form Validation
function IsEmailAddress (string)	{
	var addressPattern = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
	return addressPattern.test(string);
}

function validate(theForm) {
	if(theForm.elements["name*"].value == "")	{
		alert("Please enter your NAME.");
		theForm.elements["name*"].focus();
		return false;
	}
	if((parseInt(navigator.appVersion) >= 4 && IsEmailAddress(theForm.elements["email*"].value) == false) || (parseInt(navigator.appVersion) < 4 && (theForm.elements["email*"].value.length < 7 || theForm.email.value.indexOf("@") == -1 || theForm.elements["email*"].value.indexOf(".") == -1))) {
		alert("Please enter a valid EMAIL ADDRESS.");
		theForm.elements["email*"].focus();
		return false;
	}
	if(theForm.elements["email*"].value !== theForm.elements["confirmEmail*"].value) {
		alert("The supplied e-mail addresses do not match.");
		theForm.elements["email*"].focus();
		return false;
	}
	if(theForm.elements["mail_subject*"].value == "")	{
		alert("Please enter your SUBJECT.");
		theForm.elements["mail_subject*"].focus();
		return false;
	}
	if(theForm.elements["message*"].value == "")	{
		alert("Please enter your MESSAGE.");
		theForm.elements["message*"].focus();
		return false;
	}
}

var wcg=new Object;
wcg.init=function(){
	if (!document.getElementById || !document.createElement || !document.insertBefore || typeof document.getElementsByTagName("head")[0].innerHTML == "undefined") return false;
	//	 Hide Divs
	var oWCG = document.getElementById('wcg');
	oWCG.className="jsOn";
	
	// Create Tabs
	var oTabs = document.createElement('p');
	oTabs.id = "wcgTabs";
	var oProd = document.createElement('a');
	var oComf = document.createElement('a');
	var oExer = document.createElement('a');
	oProd.href=oComf.href=oExer.href="javascript:void(0);";
	oProd.innerHTML = "Products";
	oProd.className="wcgActive";
	oProd.id = "wcgProducts";
	oComf.innerHTML = "Comfort Tips";
	oComf.id = "wcgComfort";
	oExer.innerHTML = "Exercises";
	oExer.id = "wcgExercises";
	oTabs.appendChild(oProd);
	oTabs.appendChild(oComf);
	oTabs.appendChild(oExer);
	oWCG.insertBefore(oTabs, document.getElementById('wcgContent'));

	// Declare Object Variables
	this.sSection="eyes";
	this.oActive=document.getElementById(wcg.sSection);
	this.sActive="wcgActive";
	this.oContent=document.getElementById('wcgContent');
	this.oExercise=getElementsByClass('wcgExercise',wcg.oActive)[0];
	this.sClass="wcgProducts";	
	this.oTabs=document.getElementById('wcgTabs');
	this.aTabs=oTabs.getElementsByTagName('a');
	this.bFirstTime = true;

	// add Events
	for(var iNum=this.aTabs.length-1;iNum>=0;iNum--){
		addEvent(this.aTabs[iNum],'click',this.changeTab);
	} 
	var oAreas=document.getElementsByTagName('area');
	for(iNum=oAreas.length-1;iNum>=0;iNum--){
		addEvent(oAreas[iNum],'click',this.changeSection);
	}	
	var oEx=getElementsByClass('wcgEx');
	for(iNum=oEx.length-1;iNum>=0;iNum--){
		addEvent(oEx[iNum],'click',this.changeExercise);
	}
	addEvent(document.forms["wcgPDF"],"submit",this.getPDF);	
};
wcg.changeTab=function(event){
	if(handleEvent(event)){
		var oTarget=event.target;
		if(oTarget.className==wcg.sActive){
			return false;
		}
		else{
			// Hide Old Sections
			getElementsByClass(wcg.sActive,wcg.oTabs)[0].className="";
			getElementsByClass(wcg.sActive,wcg.oActive,'div')[0].className=wcg.sClass;
			
			// Show New Sections
			wcg.sClass=oTarget.id;
			oTarget.className=wcg.sActive;
			getElementsByClass(wcg.sClass,wcg.oActive,'div')[0].className=wcg.sClass+" "+wcg.sActive;
		}
		return false;
	}
};
wcg.changeSection=function(event){
	if(handleEvent(event)){
		wcg.sSection=(event.target.href).split('#')[1];
		
		// Hide Old Section
//		getElementsByClass(wcg.sActive,wcg.oTabs,'a')[0].className="";
		getElementsByClass(wcg.sActive,wcg.oActive,'div')[0].className=wcg.sClass;
		wcg.oActive.className="";
		
		// Rename Variables
		wcg.oExercise=getElementsByClass('wcgExercise',wcg.oActive)[0];
		wcg.oActive=document.getElementById(wcg.sSection);
//		wcg.sClass='wcgProducts';
		
		// Show Selected Section
	//	wcg.aTabs[0].className=wcg.sActive;
		wcg.oActive.className=wcg.sActive;
//		wcg.oActive.getElementsByTagName('div')[0].className=wcg.sClass+" "+wcg.sActive;
		getElementsByClass(wcg.sClass,wcg.oActive,'div')[0].className=wcg.sClass+" "+wcg.sActive;
		
		// Don''t jump section user has already changed a section
		if(!wcg.bFirstTime){
			return false;
		}
		wcg.bFirstTime = false;
	}
	return true;
};
wcg.changeExercise=function(event){
	if(handleEvent(event)){
		var oTarget=event.target;
		getElementsByClass('exercise '+wcg.sActive, wcg.oActive, 'div')[0].className="exercise";
		document.getElementById((oTarget.href).split('#')[1]).className="exercise "+wcg.sActive;
		return false;
	}
}
wcg.getPDF=function(event){
	if(handleEvent(event)){
		var oList = document.getElementById('height');
		var oForm = document.getElementById('wcgPDF');
		
		event.stopPropagation();
		event.preventDefault();
		
		if(oList.selectedIndex!=0){
			var newWin=window.open("/3MContentRetrievalAPI/BlobServlet?locale=en_US&univid="+oList.options[oList.selectedIndex].value+"&fallback=true&assetType=MMM_Image&blobAttribute=ImageFile",'popUp','height=600,width=610,location=no,menubar=yes,status=yes,toolbar=no,scrollbars=yes,resizable=yes');
			if(window.focus){newWin.focus()}
			return false;
//		oForm.action="";
//		oForm.submit();
		}
		else {
			alert('Please select a height');
			return false;
		}
	}
	return true;
};

function DcsDynamicSearch(cid){
	// private members
	var cname="WT_DSAI";
	var wt=(typeof(WT)=="object")?WT:{};

	// private methods
	function setAdInfo(){
		var value=getQueryParam("cshift_ck");
		if (value.length>0){
			var cur=new Date();
			var exp=new Date(cur.getTime()+315360000000);
			document.cookie=cname+"="+value+"; expires="+exp.toGMTString()+"; path=/";
		}
	}
	function getQueryParam(key){
		var qry=window.location.search.substring(1);
		if (qry.length>0){
			var params=qry.split("&");
			var count=params.length;
			for (var i=0;i<count;i++){
				var p=params[i].split("=");
				if (p[0]==key){
					return p[1];
				}
			}
		}
		return "";
	}
	function dcsGetCookie(name){
		var cookies=document.cookie.split("; ");
		var cmatch=[];
		var idx=0;
		var i=0;
		var namelen=name.length;
		var clen=cookies.length;
		for (i=0;i<clen;i++){
			var c=cookies[i];
			if ((c.substring(0,namelen+1))==(name+"=")){
				cmatch[idx++]=c;
			}
		}
		var cmatchCount=cmatch.length;
		if (cmatchCount>0){
			idx=0;
			if ((cmatchCount>1)&&(name==dcsInit.fpc)){
				var dLatest=new Date(0);
				for (i=0;i<cmatchCount;i++){
					var lv=parseInt(dcsGetCrumb(cmatch[i],"lv"));
					var dLst=new Date(lv);
					if (dLst>dLatest){
						dLatest.setTime(dLst.getTime());
						idx=i;
					}
				}
			}
			return unescape(cmatch[idx].substring(namelen+1));
		}	
		else{
			return null;
		}
	}	
	function dcsGetCrumb(cval,crumb){
		var aCookie=cval.split(":");
		for (var i=0;i<aCookie.length;i++){
			var aCrumb=aCookie[i].split("=");
			if (crumb==aCrumb[0]){
				return aCrumb[1];
			}
		}
		return null;
	}
	// privileged methods
		this.getClientId=function(){
			return cid;
		};
		this.getAdInfo=function(){
			return dcsGetCookie(cname)||"";
		};
		this.getIsNew=function(){
			return 1;
		};
	setAdInfo();
}
var dcsDS=new DcsDynamicSearch(5149);