/* -------------------------------------------------------------
	Guns & Ammo
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	Description:	Primary ECMA Script File
	Filename:		script_main.js
	Version:		1.4
	Date:			17 March 2008
	Dependencies:	script_mootools.js, script_custom_classes.js, script_swfobject.js
------------------------------------------------------------- 

Table of Contents (subject to change):
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

	+ SWF Embedding
	+ MOOTools Extensions
	+ Browser Bug Patches
	+ Miscellaneous

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
*/


if(!console) var console = { log : function(){} } //TODO:  Remove all console references (R.T.)

var iframeShim;
window.addEvent('domready', function()
{
	iframeShim = $('iframe_shim');
	
	// If iframe shim does not exist, create one
	if (!iframeShim)
	{
		iframeShim = new Element('iframe',
		{
			id : 'iframe_shim',
			
			styles : {
				position : 'absolute',
				width : '1px',
				height : '1px',
				left : '-9000px',
				display : 'none'
			}
		});
		iframeShim.injectInside($('index'));
	}
});


/* -------------------------------------------------------------
	SWF Embedding
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

window.addEvent('domready', function()
{	
	// Create function for generic SWF embedding (R.T.)
	function createGenericSWFObject(path, elementID, width, height, flashvars)
	{
		// Verify that element exists
		if ($(elementID))
		{			
			var params = {
				wmode : "transparent"
			};
			var attributes = {
				id : elementID + "_swf",
				name : elementID + "_swf"
			};
			
			swfobject.embedSWF(path, elementID, width, height, "8.0.0", "/cs/IMO_GA/flash/expressInstall.swf", flashvars, params, attributes);
		}
	}
	
	// Create function for directory SWF embedding (R.T.)
	function createDirectorySWFObject(path, elementID, width, height, flashvars)
	{
		// Verify that element exists
		if ($(elementID))
		{			
			var params = {};
			var attributes = {
				id : elementID + "_swf",
				name : elementID + "_swf"
			};
			
			swfobject.embedSWF(path, elementID, width, height, "8.0.0", "/cs/IMO_GA/flash/expressInstall.swf", flashvars, params, attributes);
		}
	}
	
	// createGenericSWFObject(path, elementID, width, height)
	createGenericSWFObject("/cs/IMO_GA/flash/featuredModule.swf", "rotator_module", "606", "336", { "dataFile" : "/cs/Satellite?pagename=IMO_GA/FeaturedArticles" });
	createGenericSWFObject("/cs/IMO_GA/flash/handgunModule.swf", "handgun_module", "600", "300");
	createGenericSWFObject("/cs/IMO_GA/flash/videoModule.swf", "video_module", "227", "218");
	
	// createDirectorySWFObject(path, elementID, width, height, flashvars, params)
	createDirectorySWFObject("/cs/IMO_GA/flash/gunDirectory.swf", "gunDirectoryModule", "970", "262");

});



/* -------------------------------------------------------------
	MOOTools Extensions
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */


/* --- Sliders --- */

window.addEvent('domready', function()
{
	var newsletterSlider = new Fx.Slide('slider_newsletter').hide();
	$('slider_newsletter').setStyle('visibility', 'visible');
	var newsletterSliderClose = $$('#slider_newsletter .close_button')[0];
	
	var subscribeSlider = new Fx.Slide('slider_subscribe').hide();
	$('slider_subscribe').setStyle('visibility', 'visible');
	var subscribeSliderClose = $$('#slider_subscribe .close_button')[0];
	 	 
	$('nav_secondary_newsletter').addEvent('click', function(e)
	{
		e = new Event(e).stop();
		newsletterSlider.slideIn();
		
		// Verify that only one slide is open
		subscribeSlider.slideOut();
	});
	
	subscribeSliderClose.addEvent('click', function(e){
		e = new Event(e).stop();
		subscribeSlider.slideOut();
	});
	
	$('nav_secondary_subscribe').addEvent('click', function(e)
	{
		e = new Event(e).stop();
		subscribeSlider.slideIn();

		// Verify that only one slide is open
		newsletterSlider.slideOut();
	});
	
	newsletterSliderClose.addEvent('click', function(e){
		e = new Event(e).stop();
		newsletterSlider.slideOut();
	});
	
});


/* --- Bubble Dialogs --- */

window.addEvent('domready', function()
{	
	if ($('dialog_link_get_started'))
	{
		new function()
		{
			var trigger = $('dialog_link_get_started');		
			var bubbledElement = $('dialog_link_get_started_bubble');
			var bubbleStyleClass = 'bubble_dialog';
			var isVisible = false;
			var useAnimation = false;
			var alignAbove = false;
			
			new BubbleDialog(trigger, bubbledElement, bubbleStyleClass, useAnimation, isVisible, alignAbove);
		}();
	}
	
	if($('dialog_link_sign_in'))
	{
		new function()
		{
			var trigger = $('dialog_link_sign_in');		
			var bubbledElement = $('dialog_link_sign_in_bubble');
			var bubbleStyleClass = 'bubble_dialog';
			var isVisible = false;
			var useAnimation = false;
			var alignAbove = false;
			
			var dialog = new BubbleDialog(trigger, bubbledElement, bubbleStyleClass, useAnimation, isVisible, alignAbove);
			
			if (window.ie || window.webkit420)
			{
				dialog.xOffset = -100;
			}
		}();
	}
	
	if($('dialog_link_sign_up'))
	{
		new function()
		{
			var trigger = $('dialog_link_sign_up');		
			var bubbledElement = $('dialog_link_sign_up_bubble');
			var bubbleStyleClass = 'bubble_dialog';
			var isVisible = false;
			var useAnimation = false;
			var alignAbove = false;
			var alignWithElement = $('dialog_link_get_started'); // Align with this element instead of trigger
			
			new BubbleDialog(trigger, bubbledElement, bubbleStyleClass, useAnimation, isVisible, alignAbove, alignWithElement);
		}();
	}
	
	if ($('dialog_link_forgot_password'))
	{
		new function()
		{
			var trigger = $('dialog_link_forgot_password');		
			var bubbledElement = $('dialog_link_forgot_password_bubble');
			var bubbleStyleClass = 'bubble_dialog';
			var isVisible = false;
			var useAnimation = false;
			var alignAbove = false;
			var alignWithElement = $('dialog_link_sign_in'); // Align with this element instead of trigger
			
			var dialog = new BubbleDialog(trigger, bubbledElement, bubbleStyleClass, useAnimation, isVisible, alignAbove, alignWithElement);
			
			if (window.ie || window.webkit)
			{
				dialog.xOffset = -100;
			}
		}();
	}
});




/* --- "What's This" Links --- */
window.addEvent('domready', function()
{
	// Make "What's This" links visible for JavaScript enabled browsers only (R.T.)
	$$('.whats_this_link').each(function(element)
	{
		element.setStyle('display', 'block');
		
		defineBubbleDialogs(element);
	});
	
	function defineBubbleDialogs(element)
	{
		var trigger = element;		
		var bubbledElement = null;
		var bubbleStyleClass = 'bubble_dialog';
		var isVisible = false;
		var useAnimation = false;
		var alignAbove = true;
		
		bubbledElement = String(element.id + "_bubble");
		
		new BubbleDialog(trigger, bubbledElement, bubbleStyleClass, useAnimation, isVisible, alignAbove);
	}
	
});



/* --- Custom Selects --- */

window.addEvent('domready', function(){
	// Find and Instantiate CustomSelects
	$$('select').each(function(element, i)
	{
		new CustomSelect(element, i);
	});
});



/* --- Custom File Input Handlers --- */

window.addEvent('domready', function(){
	$$('.input_file').each(function(element, i)
	{
		element.addEvent('change', function()
		{
			var readOnlyField;
			
			var readOnlyParent = this.parentNode.parentNode;
			
			readOnlyField = $ES('.input_readonly', readOnlyParent)[0];
			readOnlyField.value = element.value;
		});
	});
});



/* --- Search Field Enhancement --- */

window.addEvent('domready', function()
{
	// Search field functionality for JavaScript enabled browsers only (R.T.)
	
	var toggleCollection = $$('#SearchField, #guide_search_term, #slider_newsletter fieldset input, #search_form_guide input');
	
	toggleCollection.each(function(element, i)
	{
		textToggle(element);
	});
	/*modifying the inclusion of textToggle to make sure that it doesn't overwrite text. - jacob*/
	if($chk($$('.two_column_form textarea')[0])){
		if( $$('.two_column_form textarea')[0].getValue().trim() == "Describe this model" ) {
			textToggle($$('.two_column_form textarea')[0], "Describe this model");
	}}
	/*end j modifcations */
	
	function textToggle(element, defaultValue)
	{
		if (element)
		{
			if (defaultValue)
			{
				element.defaultValue = defaultValue;
			}
			else
			{
				element.defaultValue = element.value;
			}
			
			element.addEvent('click', function()
			{
				if (this.value === this.defaultValue)
				{
					this.value = '';
				}
			});
			
			element.addEvent('blur', function()
			{
				if (this.value === '')
				{
					this.value = this.defaultValue;
				}
			});
		}
	}
	
});


/* --- Image Caption Implementation --- */

window.addEvent('domready', function()
{
	var captionedElements = $$('.float_left', '.float_right');
	var tableCaptions = $$('.table_caption, .table_caption_float_right, .table_caption_float_left');
	
	captionedElements.each(function(element, i)
	{
		// Generate caption only if title attribute exists
		if (element.getProperty('title'))
		{
			var captionWrapperClass = 'caption_wrapper';
			var createRoundedEdgeContainers = true;
			
			var floatLeftClass = 'float_left';
			var floatRightClass = 'float_right';
			
			var adoptedClass = '';
			
			// Check class and store reference
			if (element.hasClass(floatLeftClass))
			{
				adoptedClass = floatLeftClass;
			}
			else if (element.hasClass(floatRightClass))
			{
				adoptedClass = floatRightClass;
			}
			
			// Create new CustomCaption instance
			new CustomCaption(element, captionWrapperClass, adoptedClass, createRoundedEdgeContainers);
		}
		
	});
	
	tableCaptions.each(function(element, i)
	{
		var tableCaption = new CustomCaption(null);
		tableCaption.generateRoundedEdgeContainers(element);
	});
	
});


/* --- Custom Scrollbars --- */

window.addEvent('domready', function()
{
	//scrollbar_tv, handle_tv
	if ($('episodes_wrapper') && $('scrollbar_tv') && $('handle_tv'))
	{
		makeScrollbar( $('episodes_wrapper'), $('scrollbar_tv'), $('handle_tv') );
	}
	
	//gun_directory_listing
	if ($('directory_list') && $('scrollbar_listing') && $('handle_listing'))
	{
		makeScrollbar( $('directory_list'), $('scrollbar_listing'), $('handle_listing') );
	}
});


/* --- Simple Slide Show --- */

window.addEvent('domready',function()
{
	if ($('photos'))
	{
		var imageSlideshow = new mooSimpleSlide($('photos'),{period:2500});
		imageSlideshow.displayImage();
	}
	
	/*var imageSlideshow2 = new mooSimpleSlide($('photos2'),{period:5000});
	imageSlideshow2.displayImage();*/
});


// ====== SCROLLBARS: Add Slider Scrollers for each category ========================
function makeScrollbar(content,scrollbar,handle){
	var steps = content.getSize().scrollSize.y - content.getSize().size.y;
	var step = 0;
	if(steps > 0){
		$(scrollbar).setStyle('display','block').removeEvents();
		$(handle).setStyle('display','block').removeEvents();
		var active = $(content).getElement('.active');
		if(active){
			var pad = 0
			$(content).getElements('li').each(function(li, i){
				if(li.hasClass('active')) pad = i;
			});
			var activePos = Math.ceil(((active.getPosition().y - content.getPosition().y + pad) - content.getSize().size.y)/active.getCoordinates().height);
			step = (activePos * active.getCoordinates().height);
		}
		var slider = new Slider(scrollbar, handle, {	
			steps: steps,
			mode:'vertical',
			onChange: function(step){
				content.scrollTo(0,step);
				if(!isNaN(step)) content.scrolled = step;
			}
		}).set(step);
		slider.scrolled = step;
		// Stops the handle dragging process when the mouse leaves the document body.
		$(document.body).addEvent('mouseleave',function(){
			slider.drag.stop();
			content.scrollTo(0,content.scrolled);
		});
	} else {
		$(scrollbar).setStyle('display','none');
		$(handle).setStyle('display','none');
	}
	return slider;
};

/* --- Vertically align ads --- 
window.addEvent('domready', function()
{
	var ads = $$('.advertisement_large');
	
	ads.each(function(element)
	{
		element.addClass('hideChildren');
	});
});

window.addEvent('load', function()
{
	var ads = $$('.advertisement_large');
	
	ads.each(function(element)
	{
		var childElements = element.getChildren();
		element.removeClass('hideChildren');
		
		// Verify that element has children
		childElements.each(function(childElement)
		{
			var childProperties = childElement.getCoordinates();
			
			var marginLeft = -(childProperties.width / 2);
			var marginTop = -(childProperties.height / 2);
			
			childElement.setStyles({
				'position' : 'absolute',
				'left' : '50%',
				'top' : '50%',
				'margin-left' : marginLeft,
				'marginTop' : marginTop
			});
		});
	});
});
*/




/* -------------------------------------------------------------
	Browser Bug Patches
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

/* --- IE6 "OVER" State & IFrame Shim Fix --- */

window.addEvent('domready', function()
{
	// Enumerate all :over elements (R.T.)
	var overElements = $$('#nav li');
	
	// Select instance to hide
	var searchSelectElement = $$('#search_form select');
	
	// Array containing elements that trigger hidden state
	var selectHideTriggers = ['nav_handguns', 'nav_rifles', 'nav_shotguns', 'nav_ammo', 'nav_gear', 'nav_more'];
	
	function coversSelect(elementID)
	{
		var returnValue = false;
		
		for (var i = 0; i < selectHideTriggers.length; i++)
		{
			var currentTriggerID = selectHideTriggers[i];
			if (elementID === currentTriggerID)
			{
				returnValue = true;
				break;
			}
		}
		
		return returnValue;
	}
	
	overElements.each(function(element)
	{
		element.addEvent('mouseover', function()
		{
			this.addClass('over');
			if (coversSelect(this.id))
			{
				var childElement = $E('div', this);
				var elementProperties = childElement.getCoordinates();
				$('SearchField').blur();
				
				iframeShim.setStyles({
					width : elementProperties.width,
					height : elementProperties.height,
					left : elementProperties.left,
					top : elementProperties.top,
					display : 'block',
					visibility : 'visible',
					background : '#fff'
				});
				iframeShim.setStyle('z-index', '10000');
			}
		});
		
		element.addEvent('mouseleave', function()
		{
			this.removeClass('over');
			if (coversSelect(this.id))
			{
				iframeShim.setStyles({
					visibility : 'hidden'
				});
			}
		});
	});
});


/* --- Safari Adjustments --- */
/* modified by j for test */
window.addEvent('domready', function()
{
	if (window.webkit420)
	{
		
/*		$$('.sIFR-active #messaging ul').each(function(element, i){
			element.setStyle('margin-top', '-2.7em');
		});
		
		$$('.sIFR-active .comments fieldset em, .sIFR-active .browse_all_link').each(function(element, i){
                        element.setStyle('margin-top', '-4em');
                });
*/
                $$('.sIFR-active .browse_all_link').each(function(element, i){
			element.setStyle('margin-top', '-4em');
		});
		
		$$('.sIFR-active .article_subcontent em').each(function(element, i){
			element.setStyle('margin-top', '-3.8em');
		});
/*
		$$('#slider_newsletter label input').each(function(element, i){
			element.setStyle('margin-top', '1px');
		});
		
		$$('.two_column_form fieldset input').each(function(element, i){
			element.setStyle('bottom', '-5px');
		});
		
		$$('.two_column_form textarea').each(function(element, i){
			element.setStyle('height', '647px');
		});
		
		$$('.page_actions .sponsor_link').each(function(element, i){
			element.setStyle('margin-top', '-1.8em');
		});
		
		$$('#content_wide .page_actions .sponsor_link').each(function(element, i){
			element.setStyle('margin-top', '-2.9em');
		});
*/		
		$$('#user_profile_form .subsection input').each(function(element, i){
			element.setStyle('top', '-2px');
		});
/*		
		$$('.subsection .checkbox').each(function(element, i){
			element.setStyle('top', '-1px');
		});
*/	}
});
/*j - */


/* -------------------------------------------------------------
	Miscellaneous
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

// IE Background image flicker fix (R.T.)
try {
	document.execCommand('BackgroundImageCache', false, true);
} catch(e) {}
String.extend({
    removeHTML: function(){
        return this.replace(/<[^>]*>/g,"");
    },
    encodeQueryString: function(){
        return (encodeURIComponent)? encodeURIComponent(this) : escape(this);
    }
});
