var mySWFObj = "";

String.prototype.trim = function () {
  return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
};

function playVideo(thisAnchor, thisHref){
	if(selectedLink) selectedLink.className = "visitedVideo";
	selectedLink = thisAnchor;
	mySWFObj.addVariable('videoPath',thisHref); 
	mySWFObj.write('flashContent');
	thisAnchor.className = 'activeVideo';
}


function adsPageInit(){
	var thumbnails = "";
	var thisLink = "";
	var ULs = $("thumbs").getElementsByTagName("UL");
	for (var i=0; i<ULs.length; i++){
		thumbnails =  ULs[i].getElementsByTagName("li");
		for (var x=0; x<thumbnails.length; x++){
			thisLink = thumbnails[x].getElementsByTagName("a")[0];
			thisLink.onclick = function(){
				showImg(this);
				return false;
			}
		}
	}
}

function showImg(thumb){
	//used by ads page
	var tempSrc = "";
	var tempExt = "";
	tempSrc = thumb.getElementsByTagName("img")[0].src;
	tempExt = tempSrc.substr(tempSrc.length - 4,tempSrc.length)
	tempSrc = tempSrc.substr(0,tempSrc.indexOf('_tn'));
	$("bigImage").src = tempSrc + tempExt
	$("transparentDiv").style.display = "";
	$("bigImageDiv").style.display = "";
}

function hideImg(){
	//used by ads page
	$("bigImage").src = "";
	$("bigImageDiv").style.display = "none";
	$("transparentDiv").style.display = "none";
}

function findPosition(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function getWindowHeight(){
	var myHeight = 0;
	if( typeof( window.innerWidth ) == 'number' ) {
	//Non-IE
		myHeight = window.innerHeight;
	}else if( document.documentElement && document.documentElement.clientHeight ) {
	//IE 6+ in 'standards compliant mode'
		myHeight = document.documentElement.clientHeight;
	}else if( document.body && document.body.clientHeight ) {
	//IE 4 compatible
		myHeight = document.body.clientHeight;
	}
	  
	var scrollOffset = 0;
	if(typeof( window.pageYOffset ) == 'number' ) {
	//Netscape compliant
		scrollOffset = window.pageYOffset;
	}else if( document.body && document.body.scrollTop ) {
	//DOM compliant
		scrollOffset = document.body.scrollTop;
	}else if( document.documentElement && document.documentElement.scrollTop ) {
	//IE6 standards compliant mode
		scrollOffset = document.documentElement.scrollTop;
	}
	return [myHeight + scrollOffset, scrollOffset];
}

function removeBigImg(thisAnchor){
	var thisNode = "";
	for(var n=document.body.childNodes.length - 1;n>=0;n--){
		thisNode = document.body.childNodes[n];
		if(thisNode.className == 'bigImage_popup' || thisNode.className == 'bigImage_shim'){
			document.body.removeChild(thisNode);
		}
	}
}

function createBigImg(thisAnchor){
	var path = thisAnchor.href;
	var thumbImage = thisAnchor.getElementsByTagName("img")[0];
	var thisImage = new Image();
	
	thisAnchor.onclick = function(){return false;}; 
	thisImage.className = "bigImage_popup";
	thisImage.thumbNail = thumbImage;
	thisImage.style.margin = '0px 0px 0px 0px';
	thisImage.style.padding = '0px 0px 0px 0px';
	thisImage.style.position = 'absolute';
	thisImage.style.zIndex = "501";
	thisImage.style.border = '1px solid #000000';
	thisImage.style.display = 'none';
	thisImage.onload = function(){showBigImg(this)};
	thisImage.src=thisAnchor.href;
	document.body.appendChild(thisImage);
}

function showBigImg(thisImage){
	var pageSize = getWindowHeight();
	var pageHeight = pageSize[0];
	var pageOffset = pageSize[1];
	var thumbImage = thisImage.thumbNail;
	var thumbTop = findPosition(thumbImage)[1];
	//var pixelsFromLeft = (findPosition(thumbImage)[0] - 20 - thisImage.width);
	var pixelsFromLeft = findPosition(thumbImage)[0] + 20 + thumbImage.width;
	var pixelsFromtop = thumbTop;
	thisImage.style.left = pixelsFromLeft + "px";

	if((pageHeight - thumbTop) < thisImage.height){
		//theres not enough room under the thumbnail - put it on top
		pixelsFromtop = (thumbTop + thumbImage.height - thisImage.height);
		if((pageOffset + 15) > pixelsFromtop){
			//there is not enough room on top so move it down 15 px from the top
			pixelsFromtop = (pageOffset + 15);
		}
	}
	thisImage.style.top = pixelsFromtop + "px";
	
	//this adds an Iframe shim under the image so it goes over dropdown menus 
	if (document.all){
		var iframeShim = document.createElement("IFRAME");
		thumbImage.parentNode.focus();
		iframeShim.className = "bigImage_shim";
		iframeShim.style.position = 'absolute';
		iframeShim.style.left = pixelsFromLeft + "px";
		iframeShim.style.height = thisImage.height;
		iframeShim.style.width = thisImage.width;
		iframeShim.style.zIndex = "500";
		iframeShim.style.top = pixelsFromtop + "px";
		thisImage.parentNode.appendChild(iframeShim);
	}
	thisImage.style.display = '';
}

function numbersOnly(myfield, e, dec){
	var key;
	var keychar;
	if (window.event) {
		key = window.event.keyCode;
	} else if (e) {
		key = e.which;
	} else {
		return true;
	}
	keychar = String.fromCharCode(key);
	if ((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27) ) {
		return true;
	} else if ((("0123456789").indexOf(keychar) > -1)) {
		return true;
	} else if (dec && (keychar == ".")) {
		myfield.form.elements[dec].focus();
		return false;
	} else {
		return false;
	}
}

function showError(message, errorDiv){
	errorDiv.className += " validationError";
	var siblings = errorDiv.parentNode.childNodes
	for(var n=siblings.length-1; n >= 0; n--){
		if(siblings[n].className == 'error_line'){
			siblings[n].appendChild(document.createTextNode(message));
			siblings[n].style.display = "block";
		}
	}
}

function resetError(errorDiv){
	errorDiv.className = errorDiv.className.replace("validationError", "");
	var siblings = errorDiv.parentNode.childNodes
	for(var n=siblings.length-1; n >= 0; n--){
		if(siblings[n].className == 'error_line'){
			while(siblings[n].hasChildNodes()){
				siblings[n].removeChild(siblings[n].firstChild);
			}
			siblings[n].style.display = "none";
		}
	}
	return true;
}

function validateZip(inputId ,message){
	var inputDiv = $(inputId);
	//alert(inputId + " = " + $(inputId));
	var inputValue = inputDiv.value.trim();
	resetError(inputDiv);
	inputDiv.errorMessage = message;
	inputDiv.onchange = function(){validateZip(this.id,this.errorMessage)};
	if(isNaN(inputValue) || inputValue.length != 5){
		showError(message,inputDiv);
		return false;
	}
	return true
}

function validateEmail(inputId, message, max){
	var inputDiv = $(inputId);
	var inputValue = inputDiv.value.trim();
	var re = /[a-z_]*[a-z0-9._%-]?[a-z0-9]+@[a-z0-9][a-z0-9._-]+\.[a-z0-9]+/i;
	resetError(inputDiv);
	inputDiv.errorMessage = message; //This statement endded with a double semi-colon, so it was removed
	inputDiv.onchange = function(){validateEmail(this.id,this.errorMessage)};
	if (inputValue.search(re) == -1){
		showError(message,inputDiv);
		return false;
	}
	if(inputValue.length > max){
		showError(message,inputDiv);
		return false;
	}
	return true;
}

function validateLength(inputId, message, min, max){
	var inputDiv = $(inputId);
	//alert(inputId + " = " + $(inputId));
	var inputValue = inputDiv.value.trim();
	resetError(inputDiv);
	inputDiv.errorMessage = message;
	inputDiv.min = min;
	inputDiv.max = max;
	inputDiv.onchange = function(){validateLength(this.id,this.errorMessage,this.min, this.max)};
	if(inputValue.length < min){
		showError(message,inputDiv);
		return false;
	}
	if(inputValue.length > max){
		showError(message,inputDiv);
		return false;
	}
	return true;
}



function validateCatalogForm(){
	var errorMessage = ""
	var message = "Please enter a valid first name.";
	if(!validateLength('catalogFirstName',message,1,50)){errorMessage += message + "\n";}
	message = "Please enter a valid last name.";
	if(!validateLength('catalogLastName',message,1,50)){errorMessage += message + "\n";}
	message = "Please enter a valid address.";
	if(!validateLength('catalogAddress1',message,1,150)){errorMessage += message + "\n";}
	message = "Please enter a valid city.";
	if(!validateLength('catalogCity',message,1,50)){errorMessage += message + "\n";}
	message = "Please enter a valid state.";
	if(!validateLength('catalogState',message,2,2)){errorMessage += message + "\n";}
	message = "Please enter a valid zip.";
	if(!validateZip('catalogZip',message)){errorMessage += message + "\n";}
	message = "Please enter a valid email address.";
	if(!validateEmail('catalogEmail',message,50)){errorMessage += message + "\n";}
	
	if(errorMessage.length > 0){
		alert(errorMessage);
		return false;
	}else{
		return true;
	}
}

function validateContactForm(){
	var errorMessage = "";
	var message = "Please enter a valid first name.";
	if(!validateLength('mail_fromname',message,1,50)){errorMessage += message + "\n";}
	message = "Please enter a valid email address.";
	if(!validateEmail('mail_fromemail',message,50)){errorMessage += message + "\n";}
	message = "Please write a message of no more than 500 characters.";
	if(!validateLength('mail_message',message,1,500)){errorMessage += message + "\n";}
	
	if(errorMessage.length > 0){
		alert(errorMessage);
		return false;
	}else{
		return true;
	}
}

function validateContestForm(){
	var errorMessage = "";
	var message = "Please enter a valid first name.";
	if(!validateLength('contest_fromname',message,1,50)){errorMessage += message + "\n";}
	message = "Please enter a valid email address.";
	if(!validateEmail('contest_fromemail',message,50)){errorMessage += message + "\n";}
	
	if(errorMessage.length > 0){
		alert(errorMessage);
		return false;
	}else{
		return true;
	}
}

function validateNewsletterForm(e){
	Event.stop(e);
	var errorMessage = "";
	var message = "Please enter a valid email address.";
	if(!validateEmail('contactEmail',message,50)){errorMessage += message + "\n";}
	
	if(errorMessage.length > 0){
		alert(errorMessage);
		return false;
	}else{
		
		var inputs = document.getElementsByTagName("input");
		var boxes = new Array();
		var count = 0;
		var submitSuccess = true;
		
		for(var i in inputs) {
			if(inputs[i].className == 'newsletter_type' && inputs[i].checked == true) {
				boxes[count] = inputs[i].id;
				count++;
			}
		}
		
		var contactTextField = $('contactEmail').value;
		var spinner = $('newsletter_loading');
		var updateMsg = $('newsletter_message');

		for(b=0;b<boxes.length;b++) {
			var brandSiteId = document.getElementById(boxes[b]).value;

			var fromNameList = {
			    "12" : "MUD NRA E-News",
			    "22" : "Moose Racing E-News",
			    "Default" : "MUD E-News"
			}

			var from = fromNameList[brandSiteId] || fromNameList["Default"];
			var subject = "New " + from + " Subscriber";
			
			new Ajax.Request('newsletter_response.jsp',{
				method:'post',
				//parameter 'email' sends value of 'contactTextField' as ajax request to newsletter_respose.jsp
				parameters: {
					bsId: brandSiteId,
					fromName: from,
					email: contactTextField,
					sub: subject
				},
				evalJS: false,
				evalJSON: false,
				onCreate: function(){
					spinner.style.visibility = 'visible';
					updateMsg.style.visibility = 'hidden';
				},
				onSuccess: function(transport){
				},
				//server/network issue
				onFailure: function(transport){
					//Enable below code to send Ajax message into alert();
						//onFailure: function(transport){
							//var mySuccessResponse = transport.responseText || "no response text";
					      	//alert("Success! \n\n" + mySuccessResponse);
					submitSuccess = false;
				}
			});
		}
		
		if(submitSuccess) {
			spinner.style.visibility = 'hidden';
			updateMsg.className = 'success';
			updateMsg.innerHTML = 'Thanks again for joining and welcome!';
			updateMsg.style.visibility = 'visible';
		} else {
			spinner.style.visibility = 'hidden';
			updateMsg.className = 'validationError';
			updateMsg.innerHTML = 'Error, please try again.';
			updateMsg.style.visibility = 'visible';
		}
	
		$('contactEmail').value = '';
		$('moose').checked = false;
		$('mudnra').checked = false;
		return false;
	}
}

function validateLocatorForm(){
	var errorMessage = "";
	var message = "Please enter a valid zip code.";
	if(!validateZip('dealerSearchZipCode',message)){errorMessage += message + "\n";}
	
	if(errorMessage.length > 0){
		alert(errorMessage);
		return false;
	}else{
		return true;
	}
}

function initialize(){
	if($('contactForm')){
		$('contactForm').onsubmit = validateContactForm;
	}

	if($('CatalogRequestForm')){
		 $('CatalogRequestForm').onsubmit = validateCatalogForm;
	}
	
	if($('dealerSearch')){
		 $('dealerSearch').onsubmit = validateLocatorForm;
	}
	
	if($('newsletterForm')){
		Event.observe('newsletterForm','submit', validateNewsletterForm);
	}
	
	if($('newsSignup')) {
		$('contactEmail').onfocus = function() {
			$('contactEmail').value = '';
		}
	}

	if($('contestForm')) {
		$('contest_message').onkeyup = function() {
			if ($('contest_message').value.length >= 3000) {
				$('contest_message').value = $('contest_message').value.substring(0,3000);
			}
			$('charCount').innerHTML = 3000 - parseInt($('contest_message').value.length); 

		};
		$('contestForm').onsubmit = validateContestForm;
	}
	
	// enable the thumbnail links (if js is enabled, simply swap out the images as opposed to refreshing the entire page
	//this is used on the product page
	if ($("thumbnails") && $("bigImage")){
		var bigImage = $("bigImage").getElementsByTagName("img")[0];
		var bigImageSrc = bigImage.src.substr(0,bigImage.src.indexOf('&rank='))
		if(bigImage.src.indexOf('&',bigImageSrc.length+1) > 0){
			bigImageSrc = bigImage.src.substr(bigImage.src.indexOf('&',bigImageSrc.length+1),bigImage.src.length);
		}
	
		var thumbnails = $("thumbnails").getElementsByTagName("li");
		for (var i=0; i<thumbnails.length; i++){
			thisLink = thumbnails[i].getElementsByTagName("a")[0];
			thisImage = thumbnails[i].getElementsByTagName("img")[0];
			thisLink.onclick = function(){
				bigImage.src = bigImageSrc + '&rank='+ this.id;
				return false;
			}
		}
	}
	
	//this is for the thumbnails on the ads page
	if ($("thumbs") && $("bigImageDiv")){
		adsPageInit();
	}
	
	
	if($('flashContent')){
		mySWFObj = new SWFObject("videos/videoplayer.swf", "index", "240", "230", "7", "#000000"); 
		mySWFObj.addVariable("videoPath", "06commercial.flv");
		mySWFObj.write('flashContent');
		
		var videoLinks = $("videoLinks").getElementsByTagName("a");
		selectedLink = videoLinks[0]; // -this is used in the playVideo function below
		for (var i=0; i<videoLinks.length; i++){
			videoLinks[i].onclick = function(){
				selectedLink.className = "visitedVideo";
				selectedLink = this;
				this.className = 'activeVideo';
				thisHref = this.href.substr(this.href.indexOf('#')+1,this.href.length);
				mySWFObj.addVariable('videoPath',thisHref); 
				mySWFObj.write('flashContent');
			}
		}
	}
	
	$('zipCode').onclick = function(){ if(this.value=='Zip Code') this.value = ''}
	if($('dealerSearchZipCode')){
		$('dealerSearchZipCode').onclick = function(){ if(this.value=='Zip Code') this.value = ''};
	}
	
	if($('dealerList')){
		var anchors = $('dealerList').getElementsByTagName('a');
		for(var i = 0; i<anchors.length; i++ ){
			if(anchors[i].className == 'dealerImg'){
				anchors[i].onmouseover = function(){createBigImg(this)};
				anchors[i].onmouseout = function(){removeBigImg(this)};
			}
		}
	}
	
}

Event.observe(window, "load", initialize, false);