// remove the "$" namespace from jQuery, avoids conflicts with other libraries
jQuery.noConflict();

// closure, mapping jQuery to $, window, document and undefined - useful for minifing tools
(function($, window, document, undefined){

// document ready method
$(function(){
	$('#slideshow-fade1 .slides li').css('display', 'block');	

	if ($.fn.equalHeights)
	{
		if ($('body.contact').length)
		{
			$('#side1, #content, #map-container').equalHeights();
		}
		$('.product-list > li:has(.product-image)').each(function(){
			$(this).children().equalHeights()
		});
	}

	if ($.fn.boxLinks)
	{
		$('#news-articles li, .product-list li, .article-list li, #product-categories .main, #categories-boxes li').boxLinks();
	}

	var lp = $('#landing-image');
	if (lp.length) {
		setTimeout(function(){
			lp.find('h3').fadeIn('slow');
			setTimeout(function(){
				lp.find('.landing-detail').fadeIn('slow');
		setTimeout(function(){
	lp.find('img').fadeIn('slow');
			}, 1500);
		}, 1500);
	}, 1500);
	}


	var mc = $('#map-container');
	if (mc.length)
	{
		var openMap = $('#open-map'), closeMap = $('#close-map'), 
			locations = $('.location'), bullets = locations.find('.bullet'), 
			closeBox = locations.find('.close-box');

		mc.height(mc.height() + 4);

		locations.each(function(){
			 $(this).find('.content').removeClass('content').addClass('content2').wrap('<div class="content"><div class="content1"></div></div>');
		});

		openMap.click(function(){
			mc.css({left: '50%'});
			return false;
		});
		closeMap.click(function(){
			mc.css({left: '-999em'});
			return false;
		});

		bullets.click(function(){
			mc.find('.location').removeClass('location-open');
			$(this).parent().addClass('location-open');
		});
		closeBox.click(function(){
			$(this).parents('.location').removeClass('location-open');
			return false;
		});

	}
	
	if ($.fn.slideshowFade)
	{
		var sf1 = $('#slideshow-fade1');
		sf1.slideshowFade({
			slides: ' .slides > li'
			//speed: 600, // default 600
			//auto: 5000 // default 5000
		});
	}
	
	if ($.fn.tabs)
	{
		$('.tab-area').tabs();
	}
	



	function setSel(w){
		w = w || $('div.select1');
		tSel = setTimeout(function(){
//			w.removeClass('select1Active');
		}, 150);
	}
	var zi = 99;
	$.each(['select1'], function(index, select){
		$('.'+select).each(function(){
			if ((select == 'select1') && $.browser.msie && $.browser.version == 6)
				return;

			var s = $(this).hide();
			s.wrap('<div class="custom-select selectArea-' + s[0].name + ' ' + s[0].className + ' cf"></div>');
			var w = s.parents('.'+select).css({ zIndex: zi-- });
			if (select == 'select1')
			{
				w.append('<a class="trigger" href="#"><span></span></a><div class="scroll popup"><ul></ul></div>');
				var popup = w.find('.scroll');
			}
			else
			{
				w.append('<a class="trigger" href="#"><span></span></a><ul></ul>');
				var popup = w.find('ul');
			}
			var a = w.find('a.trigger'), ul = w.find('ul'), l = 0, i = 0;
			for (; i < this.options.length; i++)
			{
				ul.append('<li><a href="#" class="index-' + i + '">' + this.options[i].text + '</a></li>');
				l = Math.max(l, this.options[i].text.length);
			}

			a.click(function(){
				$('.select1Active').removeClass('select1Active');
				w.toggleClass(select + 'Active');
				return false;
			});
			$(a).add(popup).hover(function(){
				if (w.hasClass(select + 'Active'))
					cancelSel();
			}, function(){
				setSel(w);
			});
			ul.find('a').click(function(){
				var i = parseInt(this.className.split('-')[1]);
				s[0].selectedIndex = i;
				a.find('span').html(this.innerHTML);
				w.removeClass(select + 'Active');
				return false;
			});
			a.find('span').html(this.options[this.selectedIndex].text);
		});
	});

	slider.init();



});

// slideshowFade - jQuery plugin - creates a fading slideshow - by Valentin Agachi http://agachi.name
$.fn.slideshowFade = function(args)
{
	if (!this.length) return this;

	var opts = $.extend({
		slides: '> ul > li',	// slides selector
		buttons: true,			// show buttons
		speed: 900,				// speed of transition
		auto: 8000				// speed of auto transition
	}, args || {});

	return this.each(function(){
		var parent = $(this), slides = parent.find(opts.slides), buttons = parent.find('.buttons a'), timer = null, currentSlideClass = parent.find('.buttons li').first().attr('class');
		
		parent.addClass(currentSlideClass);

		if (opts.buttons)
		{
			buttons.click(function(){
				var hash = this.hash.substr(1);
				parent.triggerHandler('slideChange', [slides.filter('#' + hash)]);
				return false;
			});
		}

		function change(next)
		{
			var active = slides.filter('.active');
			if (!next || !next.jquery)
				next = active.next();
			if (!next.length)
				next = slides.eq(0);

			var stop = parent.triggerHandler('slideChanging', [parent, slides, opts, active, next]);
			if (!stop)
			{
				next.addClass('next');
				active.fadeOut(opts.speed, function(){
					next.addClass('active').removeClass('next');
					active.removeClass('active').fadeIn(opts.speed, function(){
						active.find('h3').hide();
						active.find('.title-1').hide();
					});
					
					parent.removeClass(currentSlideClass);
					currentSlideClass = buttons.removeClass('active').filter('[href="#' + next[0].id + '"]').addClass('active').parent().attr('class');
					parent.addClass(currentSlideClass);

					setTimeout(function(){
						next.find('h3').fadeIn('slow');
						setTimeout(function(){
							next.find('.title-1').fadeIn('slow');
						}, 500);
					}, 500);					
				});
			}
			else
			{
				buttons.removeClass('active').filter('[href="#' + next[0].id + '"]').addClass('active');
			}

			parent.trigger('slideChanged', [parent, slides, next]);
		}

		function changeNow(next)
		{
			slides.removeClass('active');
			next.addClass('active').fadeIn(opts.speed, function(){
				next.find('h3').hide();
				next.find('.title-1').hide();
			});

			parent.removeClass(currentSlideClass);
			currentSlideClass = buttons.removeClass('active').filter('[href="#' + next[0].id + '"]').addClass('active').parent().attr('class');
			parent.addClass(currentSlideClass);

			setTimeout(function(){
				next.find('h3').fadeIn('slow');
				setTimeout(function(){
					next.find('.title-1').fadeIn('slow');
				}, 500);
			}, 500);
			parent.trigger('slideChanged', [parent, slides, next]);
		}

		function auto()
		{
			if (opts.auto)
				timer = setInterval(change, opts.speed + opts.auto);
		}

		parent.bind('slideChange', function(ev, slide, now){
			clearInterval(timer);
			now ? changeNow(slide) : change(slide);
			auto();
		});
		parent.bind('slideAdvance', function(ev, delta){
			var dir = (delta > 0), cnt = Math.abs(delta),
				active = slides.filter('.active'), next = active;
			while (cnt--)
			{
				next = active[(dir ? 'next' : 'prev')]();
				if (!next.length)
					next = slides.eq(dir ? 0 : slides.length - 1);
			}
			parent.trigger('slideChange', [next]);
		});
		parent.bind('changeAuto', function(ev, time){
			clearInterval(timer);
			opts.auto = time;
			auto();
		});

		if ((a = slides.filter('.active')) && !a.length)
			changeNow(slides.eq(0));
		else
			changeNow(a);

		auto();
	});
};

// tabs - jQuery plugin - creates a tab area - by Valentin Agachi http://agachi.name
$.fn.tabs = function(args)
{
	if (!this.length) return this;

	var opts = $.extend({
		triggers: '.tabs a',
		tabs: '.tab'
	}, args || {});

	return this.each(function(){
		var parent = $(this), triggers = parent.find(opts.triggers), tabs = parent.find(opts.tabs);

		triggers.click(function(){
			var id = this.hash.substr(1), tab = $('#' + id);
			if (!tab.length)
				return false;

			parent.trigger('tabsChange', [triggers, tabs, tab]);

			tabs.hide();
			tab.show();

			triggers.removeClass('active');
			$(this).addClass('active');

			return false;
		});
		tabs.hide();

		var active = (triggers.filter('.active').length) ? triggers.filter('.active') : triggers.eq(0);
		active.click();
	});
};

// selects plugin helper
$.selects = {
	zIndex: 99,
	timer: null,
	cancelTimer: function()
	{
		if ($.selects.timer)
		{
			clearTimeout($.selects.timer);
			$.selects.timer = null;
		}
	},
	setTimer: function(parent, active)
	{
		$.selects.timer = setTimeout(function(){
			parent.removeClass(active);
		}, 150);
	},
	height: function(ul, max)
	{
		setTimeout(function(){
			if (ul.height() > max)
				ul.addClass('scroll').css('height', max);
		}, 10);
	}
};

// selects - jQuery plugin - creates custom select elements from <select> elements - by Valentin Agachi http://agachi.name
$.fn.selects = function(args)
{
	if (!this.length) return this;

	var opts = $.extend({
			className: '',
			markup: '<a class="trigger" href="#"><span></span></a><div class="popup"><ul></ul></div>',
			skipFirst: false,
			maxHeight: 0
		}, args || {});

	return this.each(function(){
		var sel = $(this), 
			type = opts.className.length ? opts.className : this.className.split(' ')[0],
			actives = ['custom-select-active', type + '-active'],
			active = actives.join(' ');

		sel.hide().wrap('<div class="custom-select select-' + sel[0].name + ' ' + type + ' cf"></div>');

		var parent = sel.parent().css({ zIndex: $.selects.zIndex-- }).append(opts.markup),
			trigger = parent.find('.trigger'), popup = parent.find('.popup'), ul = parent.find('ul'),
			i = opts.skipFirst ? 1 : 0, s = '';

		for (; i < this.options.length; i++)
			s += '<li><a href="#" class="index-' + i + '">' + this.options[i].text + '</a></li>';
		ul.append(s);

		if (opts.maxHeight)
			$.selects.height(ul, opts.maxHeight);
		
		trigger
			.find('span').html(this.options[this.selectedIndex].text).end()
			.click(function(){
				$('.' + actives[0]).removeClass(active);
				var d = sel.triggerHandler('selectOpening', [sel, parent]) || 0;
				popup.css('width', trigger.outerWidth() - d);
				parent.toggleClass(active);
				return false;
			});

		popup.css('width', trigger.outerWidth());

		$(trigger).add(popup).hover(function(){
			if (parent.hasClass(actives[0]))
				$.selects.cancelTimer();
		}, function(){
			$.selects.setTimer(parent, active);
		});

		ul.find('a').click(function(){
			var i = parseInt(this.className.split('-')[1]);
			sel[0].selectedIndex = i;
			trigger.find('span').html(this.innerHTML).end().focus();
			parent.removeClass(active);
			sel.triggerHandler('selectClosed', [sel, parent, i]);
			return false;
		});

	});
};



// plugins
var slider = {
	wheel: false,
	init: function(){
		$('.scroll').removeClass('scroll').addClass('scrollWrap').wrapInner('<div class="scrollArea"></div>');
		$('.scrollWrap').each(function(){
			var ha = $('.scrollArea', this).height();
			var hw = $(this).height();
			if (ha > hw)
			{
				$('.scrollWrap').append('<div class="scrollBar"><div class="scrollBarIn"></div></div>');
				var sb = $('.scrollBarIn', this)[0];
				$.data(sb, 'ha', ha);
				$.data(sb, 'hw', hw);
				$('.scrollBarIn', this).css({ height: (hw - 50) + 'px' }).slider({
					orientation: 'vertical',
					min: 0,
					max: 100,
					slide: slider.slide,
					change: slider.slide
				}).slider('value', 100);
				$('.scrollBar a.dn', this).click(slider.dn);
				$('.scrollBar a.up', this).click(slider.up);
			}
		}).bind('updateScroll', function(){
			var ha = $('.scrollArea', this).height();
			var sb = $('.scrollBarIn', this)[0];
			$.data(sb, 'ha', ha);
		}).bind('mousewheel', function(ev, delta){
			var sb = $('.scrollBarIn', this)[0];
			slider.wheel = true;
			slider[(delta > 0 ? 'up' : 'dn')].apply(sb);
			slider.wheel = false;
			return false;
		});
	},
	reset: function()
	{
		$('.scrollWrap').each(function(){
			var ha = $('.scrollArea', this).height();
			var hw = $(this).height();
			var sb = $('.scrollBarIn', this);
			$.data(sb[0], 'ha', ha);
			$.data(sb[0], 'hw', hw);
			sb.slider('value', 100);
			$('.scrollArea', this).css('top', 0);
		});
	},
	slide: function(event, ui)
	{
		var sl = $(ui.handle.parentNode);
		var ha = $.data(sl[0], 'ha');
		var hw = $.data(sl[0], 'hw');
		var hs = ha - hw;
		var t = (- hs * (100 - ui.value) / 100);
		if (hs > 0)
			$('.scrollArea', sl.parents('.scrollWrap')).css('top', t + 'px');
	},
	up: function(){
		var sl = $(this).parents('.scrollBar').find('.scrollBarIn');
		var val = sl.slider('value');
		sl.slider('value', val + 5 * (slider.wheel ? 3 : 1));
		return false;
	},
	dn: function(){
		var sl = $(this).parents('.scrollBar').find('.scrollBarIn');
		var val = sl.slider('value');
		sl.slider('value', val - 5 * (slider.wheel ? 3 : 1));
		return false;
	}
};





// equalHeights - jQuery plugin - forces elements to have the same height (maximum)
$.fn.equalHeights = function(add)
{
	var m = 0;
	this.each(function(){
		m = Math.max(m, $(this).outerHeight());
	});
	return this.each(function(){
		var t = $(this), p = 0;
		$.each(['borderTopWidth', 'paddingTop', 'paddingBottom', 'borderBottomWidth'], function(i,n){
			var v = parseInt(t.css(n));
			p += (isNaN(v) ? 0 : v);
		});
		var h = m - p;
		if (add && add[this.id])
			h += add[this.id];
		if ($.browser.msie && $.browser.version <= 6) 
			t.css('height', h);
		t.css('min-height', h); 
	});
};


// FAQ slide for each question

  
    $('#faqs .question').each(function() {
    var text = $(this), state = false, answer = text.next('div').hide().css('height','auto').slideUp();
    text.click(function() {
      state = !state;
      answer.slideToggle(state);
      text.toggleClass('active',state);
    });
  });


// boxLinks - jQuery plugin - transforms block elements into clickable items - by Valentin Agachi http://agachi.name
$.fn.boxLinks = function(args)
{
	if (!this.length) return this;

	var opts = $.extend({
		trigger: 'a',
		classHover: 'hover',
		classFocus: 'focus',
		onEnter: null,
		onLeave: null,
		onClick: function(){
			window.location = $(this).attr('href');
		}
	}, args || {});

	this.has(opts.trigger)
		.each(function(){
			var self = $(this), t = self.css('cursor', 'pointer').find(opts.trigger);
			$.data(this, 'trigger', t);		
			$.data(t[0], 'parent', self);
		}).bind('mouseenter', function(){
			var t = $.data(this, 'trigger'), self = $(this).addClass(opts.classHover);
			opts.onEnter && opts.onEnter(self);
			window.status = t.attr('href');
		}).bind('mouseleave', function(){
			var self = $(this).removeClass(opts.classHover);
			opts.onLeave && opts.onLeave(self);
			window.status = '';
		}).bind('click', function(ev){
			var t = $.data(this, 'trigger');
			t.trigger('click');
			ev.stopPropagation();
			return false;
		});

	this.find(opts.trigger).addClass('trigger')
		.bind('focus', function(){
			var p = $.data(this, 'parent');
			p.addClass(opts.classFocus);
		}).bind('blur', function(){
			var p = $.data(this, 'parent');
			p.removeClass(opts.classFocus);
		}).click(function(ev){
			opts.onClick.apply(this);
			ev.stopPropagation();
			return false;
		});

	this.find('a').not(opts.trigger).click(function(ev){
		ev.stopPropagation();
	});

	return this;
};


//contact form start

//<![CDATA[	

	$(document).ready(function(){
		var regexp = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
		
		if($('#contactForm').length > 0){
		
			$('#contactForm')[0].reset();
			
			$('#submitContactForm').click(function(){
				var error = false;
				var required_fields = new Array('first_name', 'last_name', 'address', 'city', 'state', 'office_phone', 'email');
				
				for(var i in required_fields){
					if(required_fields[i] == 'email'){
						if($('#' + required_fields[i]).val().replace(/\s+/g,"").length == 0){
							error = true;
						}
						else if($('#' + required_fields[i]).val().search(regexp) == -1){
							error = true;
						}
					}
					else{
						if($('#' + required_fields[i]).val().replace(/\s+/g,"").length == 0){
							error = true;
						}
					}
				}
				
				if(error){
					$('#process').html('Please fill out all required fields. Form will not process unless all required fields are complete and valid.');
				}
				else{
					$('#submitForm').attr('disabled', 'true');
					$('#process').html('Processing... please wait. ');
					
					var formData = '';
					var sep = '';
					
					$('#contactForm input, #contactForm select, #contactForm textarea').each(function(){
						formData += sep + $(this).attr('name') + '=' + encodeURIComponent($(this).val());
						sep = '&';
					});
					
					$.ajax({
						type: 'POST',
						url: $('#contactUrl').val() + 'inc/php/contact-process.php',
						cache: false,
						data: formData,
						dataType: "xml",
						timeout: 10000,
						error: function(ob, status){
							$('#submitForm').attr('disabled', '');
							$('#process').html('Error: ' + status + '. Please try again.');
						},
						success: function(xml){
							$('#submitForm').attr('disabled', '');
							var root = xml.getElementsByTagName('root')[0];
							var response_code = root.getElementsByTagName("error")[0].firstChild.nodeValue
							if(response_code == 'captcha'){
								$('#process').html('The verification code you have entered is not valid. Please try again.');
							}
							else if(response_code == 'false'){
								$('#contactForm')[0].reset();
								$('#formContent').html('<span id="confirm">Thank you! Your message has been successfully sent.</span>');
								$('#contact-right').html('');
							}
							else{
								$('#process').html('Error. Please try again.');
							}
						}
					});	
				}
			});
		}
	});

//]]>

//contact form end

})(jQuery, window, document);

