// page init
$(function() {
	initAjaxTabs();
	initSlideShow();
	initSmoothHover();
	initQuoteForm();
});

// smooth hover
function initSmoothHover() {
	var _defaultOpacity = 1;
	var _fadeSpeed = 350;
	$('div.music-sample').each(function(){
		var _holder = $(this);
		var _overlay = _holder.find('.overlay');
		if(!_holder.hasClass('active')) {
			if($.browser.msie) {
				_overlay.show();
				_holder.hover(function(){
					_overlay.hide();
				},function(){
					_overlay.show();
				});
			} else {
				_overlay.css({display:'block',opacity:_defaultOpacity});
				_holder.hover(function(){
					_overlay.stop().animate({opacity:0},{duration:_fadeSpeed,queue:true,complete:function(){
						_overlay.hide();
					}});
				},function(){
					_overlay.stop().show().animate({opacity:_defaultOpacity},{duration:_fadeSpeed,queue:true});
				});
			}
		}
	});
}

// quote form function
function initQuoteForm() {
	var _animSpeed = 300;
	var _activeClass = 'active';

	$('div.quote-form').each(function(){
		var _holder = $(this);
		var _form = _holder.find('form').eq(0);
		var _stepsIndex = _holder.find('.tabset a');
		var _steps = _holder.find('.steps-holder > div');
		var _stepsNav = _steps.find('a.next');
		_steps.hide().eq(0).show();

		// steps top control
		_stepsIndex.each(function(_ind){
			$(this).click(function(){
				_stepsIndex.removeClass(_activeClass).filter(':lt('+(_ind+1)+')').addClass(_activeClass);
				_steps.hide().eq(_ind).show();
				return false;
			});
		})

		// next step buttons
		_stepsNav.each(function(_ind){
			$(this).click(function(){
				if(validateStep(_ind)) {
					_stepsIndex.removeClass(_activeClass).filter(':lt('+(_ind+2)+')').addClass(_activeClass);
					_steps.hide().eq(_ind+1).show();
				}
				return false;
			});
		});

		// validate function
		var _validating = false;
		var _errorClass = 'error';
		function validateStep(_num) {
			_validating = true;
			var _step = _steps.eq(_num);
			var _items = _step.find('ul:eq(0) > li');
			var _formValid = true;

			_items.each(function(){
				var _flag = true;
				var _item = $(this).removeClass(_errorClass);
				switch (_item.attr('class'))
				{
					case 'validate-empty':
						_item.find('input.validate-field').each(function(){
							if(!$(this).val().length) addError();
						});
						break;
					case 'validate-email':
						_item.find('input.validate-field').each(function(){
							if(!$(this).val().match(new RegExp('^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$'))) addError();
						});
						break;
					case 'validate-phone':
						_item.find('input.validate-field').each(function(){
							if($(this).val().length != parseInt($(this).attr('maxlength')) || $(this).val() != parseInt($(this).val())) addError();
						});
						break;
					case 'time validate-clock':
						_item.find('input.validate-field').each(function(){
							if($(this).val().length != parseInt($(this).attr('maxlength')) || $(this).val() != parseInt($(this).val())) addError();
						});
						break;
					default:
				}
				function addError() {
					_item.addClass(_errorClass);
					_formValid = _flag = false;
				}
			});
			_validating = false;
			if(!_formValid) _stepsIndex.eq(_num).trigger('click');
			return _formValid;
		}

		// form actions
		_holder.find('.check-holder').each(function(){
			var _holder = $(this);
			var _opener = _holder.find('input.opener').attr('checked','');
			var _slider = _holder.find('.check-content').hide();
			_opener.click(function(){
				if($(this).is(':checked')) {
					_slider.slideDown(_animSpeed);
				} else {
					_slider.slideUp(_animSpeed);
				}
			});
		});
		_holder.find('.select-tabs').each(function(){
			var _holder = $(this);
			var _opener = _holder.find('select.tab-selector');
			var _tabs = _holder.find('.tabs-wrapper').children().hide();
			_opener.get(0).selectedIndex = 0;
			_opener.change(function(){
				_tabs.hide().eq(_opener.get(0).selectedIndex).show();
			});
		});

		// focus state
		var _focusClass = 'onfocus';
		_form.find('input, textarea, select').focus(function(){
			if(_validating) return;
			_form.find('li').removeClass(_focusClass);
			$(this).parents('li').addClass(_focusClass);
		});
		_form.find('input, textarea, select').blur(function(){
			$(this).parents('li').removeClass(_focusClass);
		});

		// validate form on submit
		_form.submit(function(){
			var _valid = true;
			_stepsIndex.each(function(_cur){
				if (!validateStep(_cur)) _valid = false;
			})
			if(!_valid) return false;
		});

	});
}

// ajax tabs function
function initAjaxTabs() {
	var _activeClass = 'active';
	var _animSpeed = 300;

	$('.ajax-tabs').each(function(){
		var _holder = $(this);
		var _tabset = _holder.find('.tabset a');
		var _tabsHolder = _holder.find('.ajax-holder');

		// tabs control
		_tabset.click(function(){
			var _opener = $(this);
			var _target = _opener.attr('href');
			var _currentTab = _tabsHolder.children().filter('[rel="'+_target+'"]');
			if(_currentTab.length) {
				switchTab(_currentTab, _opener);
			} else {
				$.ajax({
					type: "GET",
					url: _target,
					dataType: "html",
					success: function(msg){
						var _content = $(msg).hide().attr('rel',_target);
						_tabsHolder.append(_content);
						switchTab(_content, _opener);
					},
					error: function(msg){
						alert('AJAX Error!');
						return false;
					}
				});
			}
			return false;
		});

		function switchTab(_tab, _opener) {
			var _allTabs = _tabsHolder.children();
			if(_allTabs.filter('.'+_activeClass).length) {
				_allTabs.filter('.'+_activeClass).fadeOut(_animSpeed,function(){
					_tabsHolder.animate({height:_tab.outerHeight(true)},{duration:_animSpeed,queue:false});
					_tab.fadeIn(_animSpeed);
				});
			} else {
				_tabsHolder.animate({height:_tab.outerHeight(true)},{duration:_animSpeed,queue:false});
				_tab.fadeIn(_animSpeed);
			}
			// add active tab class
			_allTabs.removeClass(_activeClass);
			_tab.addClass(_activeClass);

			// add active tabset class
			_tabset.removeClass(_activeClass);
			_opener.addClass(_activeClass);
		}

		_tabset.filter('.'+_activeClass).trigger('click');
	});
}

// tabs function
function initTabs() {
	$('.tabset').each(function(){
		var _list = $(this);
		var _links = _list.find('a.tab');

		_links.each(function() {
			var _link = $(this);
			var _href = _link.attr('href');
			var _tab = $(_href);

			if(_link.hasClass('active')) _tab.show();
			else _tab.hide();

			_link.click(function(){
				_links.filter('.active').each(function(){
					$($(this).removeClass('active').attr('href')).hide();
				});
				_link.addClass('active');
				_tab.show();
				return false;
			});
		});
	});
}

// slideshow function
function initSlideShow() {
	$('div.gallery').slideShow({
		numElementLink:'div.swicher ul a',
		slideEl:'div.gallery-holder > ul > li',
		autoSlideShow:false,
		switchTime:3000,
		duration:500
	});
}

// slideshow plugin
jQuery.fn.slideShow = function(_options){
	var _options = jQuery.extend({
		slideEl:'div.img-hold img',
		linkNext:'a.next',
		linkPrev:'a.prev',
		linkPause:'a.pause',
		numElementLink:'div.nav li a',
		duration:500,
		pauseOnHover:true,
		autoSlideShow:false,
		autoHeight:false,
		switchTime:3000,
		event:'click',
		currentEl:'#footer span.cur',
		allEl:'#footer span.all'
	},_options);

	return this.each(function(){
		var _THIS = jQuery(this);
		var _slideEl = $(_options.slideEl, _THIS);
		var _elTagName = _options.slideEl;
		var _linkNext = $(_options.linkNext, _THIS).length ? $(_options.linkNext, _THIS) : false;
		var _linkPrev = $(_options.linkPrev, _THIS).length ? $(_options.linkPrev, _THIS) : false;
		var _linkPause = $(_options.linkPause, _THIS).length ? $(_options.linkPause, _THIS) : false;
		var _numElementLink = $(_options.numElementLink, _THIS).length ? $(_options.numElementLink, _THIS) : false;
		var _numElement = $(_options.numElementLink, _THIS).length ? _numElementLink.parent() : false;
		var _duration = _options.duration;
		var _switchTime = _options.switchTime;
		var _numElActive, _n, _timer = false, _hover = false;

		if (!_slideEl.filter('.active').length)
			_slideEl.eq(0).addClass('active');
		$(_slideEl).not(".active").css('display','none');

		if ($(_numElement).length) {activeNumEl()}

		if (_options.autoSlideShow) {
			_timer = setTimeout(function(){nextEl()},_switchTime);
			contentHover();
		}
		if (_linkNext) {
			$(_linkNext).click(function(){
				if (_timer) {
					clearTimeout(_timer);
					_timer = setTimeout(function(){nextEl()},_switchTime);
				}
				if ($(_slideEl).filter(".active").next().is(_elTagName)) {
					$(_slideEl).filter(".active").next().addClass("next");
				} else {
					$(_slideEl).eq(0).addClass("next");
				}
				fadeElement();
				activeNumEl();
				return false;
			});
		}
		if (_linkPrev) {
			$(_linkPrev).click(function(){
				if (_timer) {
					clearTimeout(_timer);
					_timer = setTimeout(function(){nextEl()},_switchTime);
				}
				if ($(_slideEl).filter(".active").prev().is(_elTagName)) {
					$(_slideEl).filter(".active").prev().addClass("next");
				} else {
					$(_slideEl).filter(":last-child").addClass("next");
				}
				fadeElement();
				activeNumEl();
				return false;
			});
		}
		if (_linkPause) {
			if (!_options.autoSlideShow) {
				_linkPause.addClass('play');
				_options.autoSlideShow = true;
				if (!_hover) contentHover();
			}
			$(_linkPause).click(function(){
				if (!_linkPause.is('.play')) {
					clearTimeout(_timer);
					_linkPause.addClass('play');
				} else {
					_linkPause.removeClass('play');
					_timer = setTimeout(function(){nextEl()},_switchTime);
				}
				return false;
			});
		}
		if (_numElementLink) {
			$(_numElementLink).bind(_options.event, function(){
				if (_timer) {
					clearTimeout(_timer);
					_timer = setTimeout(function(){nextEl()},_switchTime);
				}
				_n = _numElement.index($(this).parent());
				if (!$(_slideEl).eq(_n).hasClass("active")){
					$(_slideEl).eq(_n).addClass("next");
					fadeElement();
					activeNumEl();
				}
				return false;
			});
		}
		if (_options.currentEl || _options.allEl) {
			_THIS.all = _slideEl.length;
			$(_options.allEl, _THIS).html(_THIS.all);
			function currentNum() {
				var _index = _slideEl.index(_slideEl.filter('.active')) + 1;
				$(_options.currentEl, _THIS).html(_index);
			}
			currentNum();
		}
		function contentHover() {
			if(!_options.pauseOnHover) return;
			_hover = true;
			_slideEl.hover(function() {
				if (_timer) clearTimeout(_timer);
			}, function(){
				if (_linkPause && !_linkPause.is('.play'))
					_timer = setTimeout(function(){nextEl()},_switchTime);
				else if (!_linkPause)
					_timer = setTimeout(function(){nextEl()},_switchTime);
			});
		}
		function nextEl(){
			if ($(_slideEl).filter(".active").next().is(_elTagName)){
				$(_slideEl).filter(".active").next().addClass("next");
			} else {
				$(_slideEl).eq(0).addClass("next");
			}
			fadeElement();
			activeNumEl();
			_timer = setTimeout(function(){nextEl()},_switchTime);
		};
		function activeNumEl() {
			$(_numElement).removeClass("active");
			_numElActive = $(_slideEl).index($(_slideEl).filter(".active")[0]);
			$(_numElement).eq(_numElActive).addClass("active");
		};
		function fadeElement(){
			$(_slideEl).filter(".active").fadeOut(_duration).removeClass("active");
			$(_slideEl).filter(".next").fadeIn(_duration).addClass("active").removeClass("next");
			if (_options.autoHeight) $(_slideEl).filter(".active").eq(0).parent().animate({height:$(_slideEl).filter(".active").eq(0).height()},{duration:_duration});
			if (_options.currentEl || _options.allEl) currentNum();
		};
	});
}
