/**
 * siteRequirements
 * @param {type} param 
 */
Browser.Plugins = {}
Browser.Plugins.Flash = (function(){
	var version = ($try(function(){
		return navigator.plugins['Shockwave Flash'].description;
	}, function(){
		return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
	}) || '0 r0').match(/\d+/g);
	return {version: parseInt(version[0] || 0 + '.' + version[1] || 0), build: parseInt(version[2] || 0)};
})();

 function siteRequirements() {
 	window.addEvent('onSiteRequire',launchOverlay.bindWithEvent({'href':'index.cfm?event=site.requirements'}));
 }Onload.add(siteRequirements);
function getSwiffVersion(){
	var version = Swiff.getVersion();
	if(Browser.Engine.webkit) version = version + 1;
	return version;
}
function loadMarquee(){
	if($('marquee')){
   	  
   	  var marqueeSwiff = new Swiff('./resources/swf/home.swf',{
   	  	id:'marqueeSwiff',
   	  	width: 1030,
   	  	height: 624,
   	  	params:{
   	  		'wMode':'opaque',
   	  		'bgColor':'#141414'
   	  	}
   	  });
   	  if(getSwiffVersion() >= 9){
	   	  $('marquee').empty();
	   	  $('marquee').adopt(marqueeSwiff);
   	  }else{
   	  	window.fireEvent('onSiteRequire');
   	  }
   	  if(marqueeSwiff.addEvent){
		   marqueeSwiff.addEvent('mousewheel',function(e){
		   		var event= new Event(e).stop();
		   });
		   marqueeSwiff.addEvent('click',function(e){
		   		var event= new Event(e).stop();
		   });
   	  }
   }
}
 
/**
 * loadMediaPlayer
 * @param {type} param 
 */
 function loadMediaPlayer(videoFile) {
	Onload.add(playVideo.bind([videoFile]));
	
 }
 function playVideo(){
 	var videoFile = "../.."+this[0];
 	if($('mediaPlayer')){
   	  var mPlayer = new Swiff('./resources/swf/videoPlayer.swf?videoURL='+videoFile,{
   	  	id:'mPlayer',
   	  	width: 412,
   	  	height: 264,
   	  	params:{
   	  		'allowFullScreen': 'true',
   	  		'wMode':'opaque',
   	  		'bgColor':'#141414'
   	  	}
   	  });
   	  if(getSwiffVersion() >= 9){
   	 	$('mediaPlayer').empty();
   	 	$('mediaPlayer').adopt(mPlayer);
   	  }else{
   	  	window.fireEvent('onSiteRequire');
   	  }
   }
 }
/**
 * requestFlashPlayerUpdate
 * @param {type}  
 */
 function requestFlashPlayerUpdate() {
 	console.log('site requires flash');
 	window.fireEvent('onSiteRequire');
 }
function initPw(){
	if($('pw')){
		var query = location.search;
		var gripType = "";
		if(query !=""){
			if(query.contains('gripType=')){
				gripType = query.split('gripType=')[1];
			}
			else{
				gripType = "wood_iron"
			}
		}
		else{
			gripType = "wood_iron"
		}
   	  var productSets = new Swiff('./resources/swf/productWall.swf?gripType='+gripType,{
   	  	id:'productwall',
   	  	width: 932,
   	  	height: 423,
   	  	params:{
   	  		'wMode':'opaque',
   	  		'bgColor':'#141414'
   	  	}
   	  });
   	  if(getSwiffVersion() >= 8){
	   	 $('pw').empty();
	   	 $('pw').adopt(productSets);
   	  }else{
   	  	window.fireEvent('onSiteRequire');
   	  }
   }
}

function initPdp(){
	if($('productDetailImage')){
	  var productInfo = $('productDetailImage').className.split('|');
	  productInfo = $H({
		'subheading':productInfo[0],
	  	'heading':productInfo[1],
		'imageURL':productInfo[1]+".png",
	  	'firmness':productInfo[2]
	  });
	  productInfo = productInfo.toQueryString();
   	  var productImage = new Swiff('./resources/swf/hero.swf?'+productInfo,{
   	  	id:'lgProductImage',
   	  	width: 735,
   	  	height: 190,
   	  	params:{
   	  		'wMode':'transparent',
   	  		'bgColor':'#141414'
   	  	}
   	  });
   	  if(getSwiffVersion() >= 9){
   	 	$('productDetailImage').empty();
   	 	$('productDetailImage').adopt(productImage);
   	  }
   }
}

function primaryNav(){
	if($('navPrimary')){
	   var navSwiff = new Swiff('./resources/swf/mainnav.swf',{
   	  	id:'primaryNavSwiff',
   	  	width: 1030,
   	  	height: 66,
   	  	params:{
   	  		'wMode':'opaque',
   	  		'bgColor':'#141414'
   	  	}	
   	  });
   	  if(getSwiffVersion() >= 9){
		  $('navPrimary').empty();
		  $('navPrimary').adopt(navSwiff)
   	  }
   }
}Onload.add(primaryNav);

function gripTipsTout(){
	if($('gripTipTout')){
	   var toutSwiff = new Swiff('./resources/swf/touts/butchToutPDP.swf',{
   	  	id:'gripTipToutSwf',
   	  	width: 203,
   	  	height: 132,
   	  	params:{
   	  		'wMode':'transparent'
   	  	}	
   	  });
   	  if(getSwiffVersion() >= 9){
		  $('gripTipTout').empty();
		  $('gripTipTout').adopt(toutSwiff)
   	  }
   }
}Onload.add(gripTipsTout);

/**
 * initToolTips
 * @param {NULL}  
 */
 function initToolTips() {
 	var myTips = new Tips('.resultItem');
 	
 	myTips.addEvent('onShow',function(tip){
 		tip.fade('in');
 	});
 	myTips.addEvent('onHide',function(tip){
 		tip.fade('out');
 	});
 	
 }Onload.add(initToolTips);
 
 
/**
 * initTextInputs
 * @param {Null}  
 */
 function getTextInputs() {
 	var frame = $('frame');
 	var textInputs = frame.getElements('input[type=text]');
 	textInputs.each(addInputEvents);
 }Onload.add(getTextInputs);

function addInputEvents(el,index,group){
 	var initValue = el.getValue();
	if(!el.hasClass("omitMemory")) {
	 	el.addEvents({
	 		'focus':clearInputValue.bindWithEvent(initValue),
	 		'blur':restoreInputValue.bindWithEvent(initValue)
	 	});
	}
 }
function clearInputValue(e){
 	var initValue = this;
 	var event = new Event(e);
 	if (initValue == event.target.getValue()) {
 		event.target.value="";
 	}
}
function restoreInputValue(e){
 	var event = new Event(e);
 	var initValue = this;
 	if($type(initValue) != 'string'){
 		initValue = "";
 	}
 	if (event.target.getValue().trim() == "") {
 		event.target.value = initValue;
 	}
 	
}

/*Create Overlay Event Functions*/
function createOverlay(){
	var triggers = $ES('.launchOverlay');
	if(triggers){
		triggers.each(triggerOverlayEvent);
	}
}Onload.add(createOverlay);
function triggerOverlayEvent(el,index,group){
	el.addEvent('click',launchOverlay.bindWithEvent(el));
}
function launchOverlay(event){
	if(typeof event !="undefined") new Event(event).stop();
	var path = this.href;
	var content = new Request.HTML({url:path,onComplete:showOverlay});
	content.get();
}
function showOverlay(responseTree,responsElements,responseHTML,responseJS){
	var dimmer = createDimmer();
	dimmer.inject($E('body'),'bottom');
	dimmer.setStyle('opacity',0);
	dimmer.set('tween', {duration: 'short'});
	
	var overlayContent = createOverlayContent(responsElements,responseHTML);
	overlayContent.inject($E('body'),'bottom');
	overlayContent.setStyle('opacity',0);
	overlayContent.set('tween', {duration: 'short'});
	centerElement(overlayContent.getFirst());
	dimmer.tween('opacity', .5);
	overlayContent.tween('opacity', 1);
	
	initLoginBtn(overlayContent)
	
	var closeBtn = $E('.close',overlayContent);
	if(closeBtn){
		closeBtn.addEvent('click',removeOverlay.bindWithEvent([overlayContent,dimmer]));
	}
	dimmer.addEvent('click',removeOverlay.bindWithEvent([overlayContent,dimmer]));
	/*
	 * WE will need to show and hide select boxes in IE6 and also the mapContainer for the yahooMap API in all browsers.
	 */
	 
	window.addEvent('resize',function(){
		centerElement(overlayContent.getFirst());
	});
}
function createDimmer(){
	var windowSize = window.getScrollSize();
	var dimmer = new Element('div',{id:"dimmer"});
	dimmer.setStyles({
		width: windowSize.x,	
		height: windowSize.y,
		opacity: .5
	});
	window.addEvent('resize',function(){
		windowSize = window.getScrollSize();
		dimmer.setStyles({
			width: windowSize.x,	
			height: windowSize.y,
			opacity: .5
		});
	});
	return dimmer;
}
function createOverlayContent(nodes,html){
	var overlayContentContainer = new Element('div',{id:'overlayContentContainer'});
	overlayContentContainer.setHTML(html);
	return overlayContentContainer;
}
function centerElement(el){
	el = $(el);
	if(el){
		var elDemensions = el.getSize();
		var windowDemensions = window.getSize();
		
		var topDiff = (windowDemensions.y - elDemensions.y)/2;
		var leftDiff = (windowDemensions.x - elDemensions.x)/2;
		if(topDiff < 0) topDiff = 0;
		if(leftDiff < 0) leftDiff = 0;
		el.setStyles({
			top: topDiff,
			left: leftDiff
		});
	}
}
function removeOverlay(event){
	new Event(event).stop();
	this.each(function(el){
		el.remove();
	});	
}

/**
 * submitContactForm
 * @param {string - ID}  
 */
 function submitContactForm() {
 	$('submitContact').addEvent('click',function(e){
 		new Event(e).stop();
 		$('contactForm').submit();
 	})
 }

function initLoginBtn(parentEl){
	if(typeof parentEl != "undefined"){
		$ES('.submit',parentEl).each(addLoginSubmitFunction);
	}
	else{
		$ES('.submit').each(addLoginSubmitFunction);
	}
}
function addLoginSubmitFunction(el,index,group){
	el.addEvent('click',function(event){
		new Event(event).stop();
		var formID = el.id.split('submit-');
		var form = $(formID[1]);
		var loadingImage = new Asset.image('/resources/images/backgrounds/loaderDark.gif',{id:'loadingImage'});
		if(form){
			form.set('send',{
				headers: {'X-Request': 'JSON'},
				onRequest: function(){
					var target = $('loginMessage');
					target.empty();
					target.adopt(loadingImage);
				},
				onComplete: function(text){
					var userLogin = JSON.decode(text,true);
					
					if(userLogin) { // userLogin will be null if an error response
						if(userLogin.response.success){
							window.location = "index.cfm?event=media.partner";
						}
						else if(!userLogin.response.success){
							var message = userLogin.response.message;
							var target = $('loginMessage');
							target.empty();
							
							var body = new Element('p');
							if(message.test(':')) {
								message = message.split(':');
								
								var header = new Element('h2');
								header.setText(message[0]);
								body.setText(message[1]);
								header.inject(target,'top');
							} else {
								body.setText(message);
							}
							body.inject(target,'inside');
						}
					}
				}				
			});
			form.send();
		}
	});
}

function positionAthlete(){
	if($E('.athleteFeature')){
		var athlete = $E('.athleteFeature');
		var primary = $('primary');
		var pCoords = primary.getCoordinates();
		var aCoords = athlete.getCoordinates();
		
		if(pCoords.height <= aCoords.height){
			primary.setStyle('height',aCoords.height+25);
			pCoords.height = aCoords.height+25;
		}	
		
		var pBottom = pCoords.top + pCoords.height;
		var aBottom = aCoords.top + aCoords.height;
		
		athlete.setStyle('top',aCoords.top + (pBottom - aBottom));
		 
		
	}
}


/*
 * 
 * dealer locator
 * 
 * 
 * */
 /**
  * loadGMap
  */
  var dealerLocatorMap = null;
  var geoEncoder = null;
  var baseIcon = null;
  function loadGMap() {
  	dealerLocatorMap = new google.maps.Map2(document.getElementById("mapContainer"));
    var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,10));
    var topLeft = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10,10));

	dealerLocatorMap.addControl(new GSmallMapControl(),topRight);
    var mapControl = new GMapTypeControl();
	dealerLocatorMap.addControl(mapControl, topLeft);
	
	geoEncoder = new GClientGeocoder();
	geoEncoder.getLatLng("15648 Computer Lane Huntington Beach, CA 92649",function(latLon){
		var dealer = {
			"dealerName":"Winn, Inc.",
			"index":0,
			"address":"15648 Computer Lane",
			"city":"Huntington Beach",
			"stateProvince":"CA",
			"postalCode":"92649",
			"phone":"(714) 373-6271",
			"website":""
		};
		var marker = createMarker(latLon,'default',dealer);
		dealerLocatorMap.setCenter(latLon, 5);
		dealerLocatorMap.addOverlay(marker);
	});
    
    
    
  }
  /**
 * initLocator
 * @param {null}  
 */
 function initLocator() {
 	var locator = $('locatorSubmitBtn');
	if(locator){
		//ADD FORM EVENTS
		window.addEvent('autoSubmitLocator',submitLocatorForm.bindWithEvent($('locatorForm')));
 		 $('locatorForm').addEvent('submit',submitLocatorForm.bindWithEvent($('locatorForm')));
 		 locator.addEvent('click',submitLocatorForm.bindWithEvent($('locatorForm')));
 		 if($('postalCode').value != "") window.fireEvent('autoSubmitLocator');
	}
	
 }Onload.add(initLocator);
 
 /**
 * locSubmit
 * @param {event} e 
 */
 function submitLocatorForm(e) {
 	if(typeof e !="undefined"){
 		new Event(e).stop();
 	}
 	var form = this;
 	form.set('send',{
 		onRequest: locatorFormSent,
 		onSuccess: locatorFormComplete,
 		onException: locatorFormSent
 		
	});
	form.send();
 }
 /**
  * locatorFormSent
  * @param {REQUEST INSTANCE} requestObj 
  */
  function locatorFormSent() {
  	var requestObj = this;
  }
 
/**
  * locatorFormComplete
  * @param {text/JSON} txt 
  */
  function locatorFormComplete(txt) {
		var object = JSON.decode(txt.clean(), true);
		var dealers = [];
		if(object.recordcount<=0){
			$('resultsContainer').addClass('show');
			$('results').set('text','No Results Found');
		}
		else{
			for(var i=0; i<object.recordcount; i++) {
				var dealer = {};
				dealer.index = i + 1;
				dealer.dealerName = object.data.DEALERNAME[i];
				dealer.address = object.data.ADDRESS[i];
				dealer.city = object.data.CITY[i];
				dealer.stateProvince = object.data.STATEPROVINCE[i];
				dealer.postalCode = object.data.POSTALCODE[i];
				dealer.phone = object.data.PHONE[i];
				dealer.website = object.data.WEBSITE[i];
				dealer.latitude = object.data.LATITUDE[i];
				dealer.longitude = object.data.LONGITUDE[i];
				dealers.push(dealer);
			}
			$('results').empty();
			var markers = [];
			var marker;
			dealer.latlon = null;
			dealer.marker = null;
			dealers.each(function(dealer,index,group){
				geoEncoder.getLatLng(dealer.address.clean()+" "+dealer.city+", "+dealer.stateProvince+" "+dealer.postalCode,function(LATLON){
					if(LATLON != null){
						marker = createMarker(LATLON,index,dealer);
						dealerLocatorMap.addOverlay(marker);
						dealer.latlon = LATLON;
						dealer.marker = marker;
						
						if(index == 0){
							dealerLocatorMap.panTo(LATLON);
							//dealerLocatorMap.zoomIn();
						}
					}
				});
				
				createDealerEntry(dealer,dealer.marker,dealer.latlon,dealer.index);
			});
		}
  }
  function createMarker(point, index, dealer) {
	// Create a base icon for all of our markers that specifies the
	// shadow, icon dimensions, etc.
	baseIcon = new GIcon();
	baseIcon.shadow = "/resources/images/map/shadow.png";
	baseIcon.iconSize = new GSize(20, 26);
	baseIcon.shadowSize = new GSize(38, 36);
	baseIcon.iconAnchor = new GPoint(9, 26);
	baseIcon.infoWindowAnchor = new GPoint(9, 2);
	baseIcon.infoShadowAnchor = new GPoint(18, 25);
		var letter = "";
		if(index != "default"){
	  		// Create a lettered icon for this point using our icon class
	  		letter = String.fromCharCode("A".charCodeAt(0) + index);
		}else{
			letter = "Default";
		}
	  var letteredIcon = new GIcon(baseIcon);
	  letteredIcon.image = "/resources/images/map/marker" + letter + ".png";
	  // Set up our GMarkerOptions object
	  markerOptions = { icon:letteredIcon };
	  var marker = new GMarker(point, markerOptions);
		var dealerInfo = "<strong>"+dealer.dealerName+"</strong><p>"+dealer.address+"<br />"+dealer.city+", "+dealer.stateProvince+" "+dealer.postalCode+"<br /><span class='phoneNumber'>"+dealer.phone+"</span><br /></p>"
		dealerInfo +="<a href='http://maps.google.com/maps?f=d&hl=en&geocode=&saddr=&daddr="+dealer.address+" "+dealer.city+", "+dealer.stateProvince+" "+dealer.postalCode+"&ie=UTF8&z=14' target='_blank'>Get Directions</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
		if(dealer.website !=""){
			dealerInfo +="<a href='"+dealer.website+"' target='_blank'>View Site</a>";
		}
	  GEvent.addListener(marker, "click", function() {
	    marker.openInfoWindowHtml(dealerInfo);
	  });
	  return marker;
	}
  /**
   * createDealerEntry
   * @param {JSON} dealer 
   */
   function createDealerEntry(dealer) {
	$('resultsContainer').addClass('show');
	var clear = new Element('div');
	clear.setHTML('&nbsp;');
	var dealerEntry = new Element('div',{
		events:{
			'click':goToAndOpenMarker.bindWithEvent(dealer)
		}
	});
	dealerEntry.addClass('dealer');
	var dealerName = new Element('span');
	
	// Create a lettered icon for this point using our icon class
	var letter = String.fromCharCode("A".charCodeAt(0) + (dealer.index - 1));
	
	dealerName.setText(letter);
	var link = new Element('a',{
		events:{
			'click': goToAndOpenMarker.bindWithEvent(dealer)
		},
		href:"#"
		
	});
	link.setText(dealer.dealerName);
	
	link.inject(dealerName);
	dealerName.inject(dealerEntry);
	if(dealer.address !=""){
		var address = dealer.address +"\n";
	}
	else{
		var address = dealer.address;
	}
	var addressContainer = new Element('div');
	addressContainer.addClass('address');
	addressContainer.setText(address+dealer.city+", "+ dealer.stateProvince+" "+dealer.postalCode );
	addressContainer.inject(dealerEntry);

	var phone = new Element('span');
	phone.addClass('phone');
	phone.setText("t. "+dealer.phone);
	phone.inject(dealerEntry);
	
	if(dealer.website != ""){
   		var website = new Element('a',{"href":dealer.website,"target":"_blank"});
   		website.addClass('website');
   		website.setText("view site");
   		website.inject(dealerEntry);
	}
	
	dealerEntry.inject($('results'),'inside');
	clear.inject($('results'),'inside');
	
	
	/*
   		<div class="dealer">
			<span>#currentROw# <a href="#Website###" class="moreInfo">#dealerName#</a></span>
			<div class="address">
				#paragraphFormat(address)#
				#city#, #stateProvince# #postalCode#
			</div>
			<span class="phone">t: #phone#</span>
		</div>
		<div class="clear">&nbsp;</div>
	*/
}
  function goToAndOpenMarker(e){
  	var marker,index,latLon;
  	
  	if(!e.target.hasClass('website')){
		var event = new Event(e).stop();
	}
	if(this.latlon) dealerLocatorMap.setCenter(this.latLon,11);
	var dealer = this;
	
	// Create a lettered icon for this point using our icon class
	var letter = String.fromCharCode("A".charCodeAt(0) + (dealer.index - 1));
	
	var dealerInfo = "<strong>"+letter+". "+dealer.dealerName+"</strong><p>"+dealer.address+"<br />"+dealer.city+", "+dealer.stateProvince+" "+dealer.postalCode+"<br /><span class='phoneNumber'>"+dealer.phone+"</span><br /></p>"
	dealerInfo +="<a href='http://maps.google.com/maps?f=d&hl=en&geocode=&saddr=&daddr="+dealer.address+" "+dealer.city+", "+dealer.stateProvince+" "+dealer.postalCode+"&ie=UTF8&z=14' target='_blank'>Get Directions</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
	if(dealer.website !=""){
		dealerInfo +="<a href='"+dealer.website+"' target='_blank'>View Site</a>";
	}
	if(this.marker) this.marker.openInfoWindowHtml(dealerInfo);
  }
  
  /**
   * locatorFormFailed
   * @param {REQUEST INSTANCE} requestObj 
   */
   function locatorFormFailed() {
   	var requestObj = this;
   }


  
 /**
   showInternational
  * @param {null}  
  */
  function showInternational() {
  	if($('international')){
	  	$('international').addEvent('click',function(e){
	  		new Event(e).stop();
		  	$('countrySection').toggleClass('hide');
	  	});
  	}
  }Onload.add(showInternational);
 

/**
 * intiSearchResult
 * @param {type}  
 */
 function intiSearchResult() {
 	var searchContainer = $("searchResults");
 	if (searchContainer) {
 		var upButton = $('scrollResultsUp');
 		var downButton = $('scrollResultsDown');
 		
 		var container = new Fx.Scroll($("results"), {
            offset: {
	            'x': 0,
	            'y': 0
            }
	    }).toTop();
	    $("results").addEvent('mousewheel',addScrollWheel.bindWithEvent([$('results'),container]));

		if(window.ie){
	 		upButton.addEvent('click',scrollResultsUp.bindWithEvent([upButton,container]));
	 		downButton.addEvent('click',scrollResultsDown.bindWithEvent([downButton,container]));
		    upButton.addEvent('controlclick',function(event){
		    	new Event(event).stop();
		    	container.toTop();
			});
		    downButton.addEvent('controlclick',function(event){
		    	new Event(event).stop();
		    	container.toBottom();
		    	
			});
		}else{
		    upButton.addEvent('controlclick',function(event){
		    	new Event(event).stop();
		    	container.toTop();
			});
		    downButton.addEvent('controlclick',function(event){
		    	new Event(event).stop();
		    	container.toBottom();
		    	
			});
	 		upButton.addEvent('click',scrollResultsUp.bindWithEvent([upButton,container]));
	 		downButton.addEvent('click',scrollResultsDown.bindWithEvent([downButton,container]));
		}
 	}
 }
/**
 * createShiftClickEvent
 * @param {type} param 
 */
 function createControlClickEvent() {
 	Element.Events.controlclick = {
	    base: 'click', //we set a base type
	    condition: function(event){ //and a function to perform additional checks.
	        return (event.control== true); //this means the event is free to fire
	    }
	};
 }Onload.add(createControlClickEvent);
 
function addScrollWheel(event){
	new Event(event).stop();
	var container = this[1];
	container.set(0,container.element.scrollTop + (event.wheel * 10)* -1);
} 
function scrollResultsUp(e){
	new Event(e).stop();
	var container = this[1];
	container.start(0,container.element.scrollTop - 79);
}

function scrollResultsDown(e){
	new Event(e).stop();
	var container = this[1];
	container.start(0,container.element.scrollTop + 79);
}

function initSubmitBtns() {
	var buttons = $ES('.submitter');
	if(buttons) {
		buttons.each(addSubmitEvent);
	}
}Onload.add(initSubmitBtns);

function addSubmitEvent(el,index,group) {
	el.addEvent('click',submitForm);
}

function submitForm(e) {
	e = new Event(e).stop();
	// the 'this' scope refers to the link that was clicked and thus broadcasts the event (e)
	var targetForm = this.href.substring(this.href.indexOf('#')+1,this.href.length);
	if(targetForm) {
		$(targetForm).submit();
	}
}
