jQuery(document).ready(function(){
	clearInputs();
	downloadsPopup();
	jQuery('div.lightbox select').customSelect();
	jQuery('div.selectOptions div.sel-hold').customScroll();
});
/*--- custom select ---*/
jQuery.fn.customSelect = function(_options) {
var _options = jQuery.extend({
	selectStructure: '<div class="selectArea"><div class="left"></div><div class="center"></div><a href="#" class="selectButton">&nbsp;</a><div class="disabled"></div></div>',
	selectText: '.center',
	selectBtn: '.selectButton',
	selectDisabled: '.disabled',
	optStructure: '<div class="selectOptions"><div class="sel-hold"><ul></ul></div></div>',
	optList: 'ul'
}, _options);
return this.each(function() {
	var select = jQuery(this);
	if(!select.hasClass('outtaHere')) {
		if(select.is(':visible')){
			var replaced = jQuery(_options.selectStructure);
			var selectText = replaced.find(_options.selectText);
			var selectBtn = replaced.find(_options.selectBtn);
			var selectDisabled = replaced.find(_options.selectDisabled).hide();
			var optHolder = jQuery(_options.optStructure);
			var optList = optHolder.find(_options.optList);
			if(select.attr('disabled')) selectDisabled.show();
			var t_group = '';
			select.find('option').each(function(){
				var selOpt = jQuery(this);
				var _opt;
				if(selOpt.parent('optgroup').length && selOpt.parent('optgroup').attr('label') != t_group){
					t_group = selOpt.parent('optgroup').attr('label');
					optList.append('<li class="sel-info">'+t_group+'</li>');
				}
				if(selOpt.attr('title')) _opt = jQuery('<li><a href="#"><img src="'+selOpt.attr('title')+'">' + selOpt.html() + '</a></li>');
				else _opt = jQuery('<li><a href="#">' + selOpt.html() + '</a></li>');
				if(selOpt.attr('selected')){
					if(selOpt.attr('rel')) selectText.html(selOpt.attr('rel'));
					else selectText.html(selOpt.text());
					_opt.addClass('selected');
				}
				_opt.children('a').click(function(){
					optList.find('li').removeClass('selected');
					select.find('option').removeAttr('selected');
					jQuery(this).parent().addClass('selected');
					selOpt.attr('selected', 'selected');
					if(selOpt.attr('rel')) selectText.html(selOpt.attr('rel'));
					else selectText.html(selOpt.text());
					select.change();
					optHolder.hide();
					return false;
				});
				optList.append(_opt);
			});
			replaced.width(select.outerWidth());
			replaced.insertBefore(select);
			optHolder.css({
				width: select.outerWidth(),
				display: 'none',
				position: 'absolute'
			});
			jQuery(document.body).append(optHolder);
			
			var optTimer;
			replaced.hover(function() {
				if(optTimer) clearTimeout(optTimer);
			}, function() {
				optTimer = setTimeout(function() {
					optHolder.hide();
				}, 200);
			});
			optHolder.hover(function(){
				if(optTimer) clearTimeout(optTimer);
			}, function() {
				optTimer = setTimeout(function() {
					optHolder.hide();
				}, 200);
			});
			selectBtn.click(function() {
				if(optHolder.is(':visible')) {
					optHolder.hide();
				}
				else{
					optHolder.children('ul').css({height:'auto', overflow:'hidden'});
					optHolder.css({
						top: replaced.offset().top + replaced.outerHeight(),
						left: replaced.offset().left,
						display: 'block'
					});
					jQuery('div.selectOptions div.sel-hold').customScroll();
					//if(optHolder.children('ul').height() > 200) optHolder.children('ul').css({height: 200, overflow:'auto'});
				}
				return false;
			});
			select.addClass('outtaHere');
		}
	}
});
}
/*--- downloads popup's ---*/
function downloadsPopup(){
	if(jQuery('#fader').length == 0) jQuery('body').append('<div id="fader"></div>');
	var _fader = jQuery('#fader');
	_fader.hide();
	var _popup = -1;
	var download_url = '';
	
	var success_popup = jQuery('<div class="lightbox"><div class="lightbox-holder"><div class="lightbox-c"><p></p></div><div class="lightbox-b"></div></div></div>').appendTo('body');;
	var success_f = true;
	var success_t = false;

	jQuery('div.download-btn-hold a, a.ask-now').each(function(){
		var _el = this;
		if(_el.hash && _el.hash.length > 1){
			_el._popup = jQuery(_el.hash);
			if(_el._popup.length){
				_el.onclick = function(){
					if(_el._popup){
						download_url = jQuery(_el).siblings('.download-info').text();
						_popup = _el._popup;
						showPopup();
					}
					return false;
				}
				_el._popup.find('a.close').click(function(){
					hidePopup();
					return false;
				});
				inDownloadsPopup(_el._popup);
			}
		}
	});
	jQuery('div.info-btn-hold a').each(function(){
		var _el = this;
		if(_el.hash && _el.hash.length > 1){
			_el._popup = jQuery(_el.hash);
			if(_el._popup.length){
				_el.onclick = function(){
					if(_el._popup){
						if(_el.rel) success_popup.find('p').text(_el.rel);
						else success_popup.find('p').text('Thanks, we’ll be in touch shortly...');
						_popup = _el._popup;
						showPopup();
					}
					return false;
				}
				_el._popup.find('a.close').click(function(){
					hidePopup();
					return false;
				});
				inInfoPopup(_el._popup);
			}
		}
	});
	_fader.click(function(){
		hidePopup();
		download_url = '';
		if(success_t) clearTimeout(success_t);
		return false;
	});
	
	jQuery(document).keydown(function(e){
		if(!e)evt = window.event;
		if(e.keyCode == 27){
			hidePopup();
			download_url = '';
			if(success_t) clearTimeout(success_t);
		}
	});
	function showPopup(){
		if(_fader.is(':hidden')){
			_fader.css({
				opacity: 0,
				height: initH(),
				display:'block'
			});
		}
		else{
			_fader.stop().css({
				height: initH()
			});
		}
		_popup.css({top: jQuery(window).scrollTop()});
		if(jQuery.browser.msie && jQuery.browser.version < 7) jQuery('#wrapper select').css('visibility', 'hidden');
		_fader.fadeTo(200, 0.6, function(){
			if(_popup != -1){
				if(jQuery.browser.msie) _popup.show();
				else _popup.fadeIn(100);
				_popup.css({top: jQuery(window).scrollTop()+ (jQuery(window).height() - _popup.outerHeight())/2});
				if(initH() < _popup.outerHeight()+_popup.offset().top) _fader.height(_popup.outerHeight()+_popup.offset().top);
				jQuery('div.lightbox select').customSelect();
				jQuery('div.selectOptions div.sel-hold').customScroll();
			}
		});
	}
	function hidePopup(){
		if(_popup != -1){
			if(jQuery.browser.msie){
				_popup.hide();
				_fader.fadeOut(100);
				_popup = -1;
				if(jQuery.browser.version < 7) jQuery('#wrapper select').css('visibility', 'visible');
			}
			else{
				_popup.fadeOut(200, function(){
					_fader.fadeOut(100);
					_popup = -1;
				});
			}
		}
	}
	function inInfoPopup(_box){
		var _form = _box.find('form');
		_form.submit(function(){
			if(formValid(_form)){
				if(success_f){
					if(success_t) clearTimeout(success_t);
					success_f = false;
					jQuery.ajax({
						url: _form.attr('action'),
						type: 'POST',
						data: _form.serialize(),
						success: function(){
							if(jQuery.browser.msie){
								_popup.hide();
								_popup = success_popup;
								showPopup();
							}
							else{
								_popup.fadeOut(200, function(){
									_popup = success_popup;
									showPopup();
								});
							}
							success_t = setTimeout(function(){ hidePopup(); }, 4000);
							success_f = true;
						},
						error: function(){
							success_f = true;
						}
					});
				}
			}
			return false;
		});
	}
	function inDownloadsPopup(_box){
		var _form = _box.find('form');
		_form.submit(function(){
			if(formValid(_form)){
				if(success_f){
					success_f = false;
					jQuery.ajax({
						url: _form.attr('action'),
						type: 'POST',
						data: _form.serialize(),
						success: function(){
							hidePopup();
							if(download_url) window.location.href = download_url;
							download_url = '';
							success_f = true;
						},
						error: function(){
							success_f = true;
						}
					});
				}
			}
			return false;
		});
	}
	function initH(){
		var _h = jQuery('#wrapper').outerHeight();
		if(_h < jQuery(window).height()) _h = jQuery(window).height();
		if(_h < jQuery('body').height()) _h = jQuery('body').height();
		return _h;
	}
	
	jQuery('div.order-form form').submit(function(){
		if(formValid(jQuery(this))){
			if(jQuery(this).find('div.success-message').length) success_popup.find('p').text(jQuery(this).find('div.success-message').text());
			else success_popup.find('p').text('Thanks, we’ll be in touch shortly...');
			_popup = success_popup;
			showPopup();
		}
		else{
			return false;
		}
	});
}
/*--- form validation ---*/
var _emailReg = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
function formValid(_form){
	var _f = true;
	var _fields = _form.find('.must-valid');
	_fields.parents('.row').removeClass('error');
	for(var i = 0; i < _fields.length; i++){
		if(_fields.eq(i).attr('tagName').toLowerCase() == 'select'){
			if(_fields.eq(i).val() == 'default' || _fields.eq(i).val().indexOf('select a') != -1){
				_fields.eq(i).parents('.row:eq(0)').addClass('error');
				_f = false;
			}
		}
		else if(_fields.eq(i).hasClass('email-field')){
			if(!_emailReg.test(_fields.eq(i).val()) || _fields.eq(i).val() == _fields.eq(i).data('val') || _fields.eq(i).val() == ''){
				_fields.eq(i).parents('.row:eq(0)').addClass('error');
				_f = false;
			}
		}
		else{
			if(_fields.eq(i).val() == _fields.eq(i).data('val') || _fields.eq(i).val() == ''){
				_fields.eq(i).parents('.row:eq(0)').addClass('error');
				_f = false;
			}
		}
	}
	return _f;
}
/*---- clear inputs ---*/
function clearInputs(){
	jQuery('input:text, input:password, textarea').each(function(){
		var _el = jQuery(this);
		_el.data('val', _el.val());
		_el.bind('focus', function(){
			if(_el.val() == _el.data('val')) _el.val('');
		}).bind('blur', function(){
			if(_el.val() == '') _el.val(_el.data('val'));
		});
	});
}
/*--- mouse whell function ---*/
(function($) {
var types = ['DOMMouseScroll', 'mousewheel'];
jQuery.event.special.mousewheel = {
	setup: function() {
		if ( this.addEventListener )
			for ( var i=types.length; i; )
				this.addEventListener( types[--i], handler, false );
		else
			this.onmousewheel = handler;
	},
	teardown: function() {
		if ( this.removeEventListener )
			for ( var i=types.length; i; )
				this.removeEventListener( types[--i], handler, false );
		else
			this.onmousewheel = null;
	}
};
jQuery.fn.extend({
	mousewheel: function(fn) {
		return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
	},
	unmousewheel: function(fn) {
		return this.unbind("mousewheel", fn);
	}
});
function handler(event) {
	var args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true;
	event = jQuery.event.fix(event || window.event);
	event.type = "mousewheel";
	if ( event.wheelDelta ) delta = event.wheelDelta/120;
	if ( event.detail     ) delta = -event.detail/3;
	// Add events and delta to the front of the arguments
	args.unshift(event, delta);
	return jQuery.event.handle.apply(this, args);
}
})(jQuery);
/*--- function custom scroll ---*/
jQuery.fn.customScroll = function(_options) {
var _options = jQuery.extend({
	lineWidth: 14
}, _options);
return this.each(function(){
	var _box = jQuery(this);
	if(_box.is(':visible')){
		if(_box.children('.scroll-content').length == 0){
			var line_w = _options.lineWidth;
			/*--- init part ---*/
			var scrollBar = jQuery('<div class="scroll-bar"><div class="scroll-up"></div><div class="scroll-line"><div class="scroll-slider"><div></div></div></div><div class="scroll-down"></div></div>');
			_box.wrapInner('<div class="scroll-content"></div>').after(scrollBar);
			var scrollContent = _box.children('.scroll-content');
			var scrollSlider = scrollBar.find('.scroll-slider');
			var scrollSliderH = scrollSlider.parent();
			var scrollUp = scrollBar.find('.scroll-up');
			var scrollDown = scrollBar.find('.scroll-down');
			/*--- different variables ---*/
			var box_h = _box.height();
			var box_w = _box.width();
			var slider_h = 0;
			var slider_f = 0;
			var cont_h = scrollContent.height();
			var _f = false;
			var _f1 = false;
			var _f2 = true;
			var _t1, _t2, _s1, _s2;
			/*--- set styles ---*/
			_box.css({
				position: 'relative',
				overflow: 'hidden',
				width: box_w,
				height: box_h
			});
			scrollContent.css({
				position: 'absolute',
				top: 0,
				left: 0,
				zIndex: 1,
				width: box_w - line_w,
				height: 'auto'
			});
			scrollBar.css({
				position: 'absolute',
				top: 0,
				left: box_w - line_w,
				zIndex:2,
				width: line_w,
				height: box_h,
				overflow: 'hidden'
			});
			scrollUp.css({
				width: line_w,
				height: line_w,
				overflow: 'hidden',
				cursor: 'pointer'
			});
			scrollDown.css({
				width: line_w,
				height: line_w,
				overflow: 'hidden',
				cursor: 'pointer'
			});
			slider_h = scrollBar.height();
			if(scrollUp.is(':visible')) slider_h -= scrollUp.height();
			if(scrollDown.is(':visible')) slider_h -= scrollDown.height();
			scrollSliderH.css({
				position: 'relative',
				width: line_w,
				height: slider_h,
				overflow: 'hidden'
			});
			slider_h = 0;
			scrollSlider.css({
				position: 'absolute',
				top: 0,
				left: 0,
				width: line_w,
				height: slider_h,
				overflow: 'hidden',
				cursor: 'pointer'
			});
			box_h = _box.height();
			cont_h = scrollContent.height();
			if(box_h < cont_h){
				_f = true;
				slider_h = Math.round(box_h/cont_h*scrollSliderH.height());
				if(slider_h < 5) slider_h = 5;
				scrollSlider.height(slider_h);
				slider_h = scrollSlider.height();
				slider_f = (cont_h - box_h)/(scrollSliderH.height() - scrollSlider.height());
				_s1 = (scrollSliderH.height() - scrollSlider.height())/60;
				_s2 = (scrollSliderH.height() - scrollSlider.height())/3;
				scrollUp.addClass('disabled');
			}
			else{
				scrollUp.addClass('disabled');
				scrollDown.addClass('disabled');
				_f = false;
				scrollBar.hide();
				scrollContent.css({width: _box.width(), top: 0, left:0});
			}
			var _top = 0;
			/*--- element's events ---*/
			scrollUp.mousedown(function(){
				_top -= _s1;
				scrollCont();
				_t1 = setTimeout(function(){
					_t2 = setInterval(function(){
						_top -= 6/slider_f;
						scrollCont();
					}, 20);
				}, 500);
			}).mouseup(function(){
				if(_t1) clearTimeout(_t1);
				if(_t2) clearInterval(_t2);
			}).mouseleave(function(){
				if(_t1) clearTimeout(_t1);
				if(_t2) clearInterval(_t2);
			});
			scrollDown.mousedown(function(){
				_top += _s1;
				scrollCont();
				_t1 = setTimeout(function(){
					_t2 = setInterval(function(){
						_top += 6/slider_f;
						scrollCont();
					}, 20);
				}, 500);
			}).mouseup(function(){
				if(_t1) clearTimeout(_t1);
				if(_t2) clearInterval(_t2);
			}).mouseleave(function(){
				if(_t1) clearTimeout(_t1);
				if(_t2) clearInterval(_t2);
			});
			scrollSliderH.click(function(e){
				if(_f2){
					if(scrollSlider.offset().top + slider_h < e.pageY){
						_top += _s2;
					}
					else if(scrollSlider.offset().top > e.pageY){
						_top -= _s2;
					}
					scrollCont();
				}
				else{
					_f2 = true;
				}
			});
			var t_y = 0;
			scrollSlider.mousedown(function(e){
				t_y = e.pageY - jQuery(this).position().top;
				_f1 = true;
			}).mouseup(function(){
				_f1 = false;
			});
			jQuery('body').mousemove(function(e){
				if(_f1){
					 _f2 = false;
					 _top = e.pageY - t_y;
					 scrollCont();
				}
			});
			document.body.onselectstart = function(){
				if(_f1) return false;
			}
			_box.bind('mousewheel', function(event, delta){
				if(_f){
					_top -=delta*_s1;
					scrollCont();
					if((_top > 0) && (_top+slider_h < scrollSliderH.height())) return false;
				}
			});
			function scrollCont(){
				if(_top < 0) _top = 0;
				else if(_top+slider_h > scrollSliderH.height()) _top = scrollSliderH.height() - slider_h;
				
				if(_top == 0) scrollUp.addClass('disabled');
				else scrollUp.removeClass('disabled');
				if(_top+slider_h == scrollSliderH.height()) scrollDown.addClass('disabled');
				else scrollDown.removeClass('disabled');
				
				scrollSlider.css('top', _top);
				scrollContent.css('top', -_top*slider_f);
			}
			this.scrollResize = function(){
				box_h = _box.height();
				cont_h = scrollContent.height();
				if(box_h < cont_h){
					_f = true;
					scrollBar.show();
					scrollContent.width(box_w - line_w);
					slider_h = Math.round(box_h/cont_h*scrollSliderH.height());
					if(slider_h < 5) slider_h = 5;
					scrollSlider.height(slider_h);
					slider_h = scrollSlider.height();
					slider_f = (cont_h - box_h)/(scrollSliderH.height() - scrollSlider.height());
					if(cont_h + scrollContent.position().top < box_h) scrollContent.css('top', -(cont_h - box_h));
					_top = - scrollContent.position().top/slider_f;
					scrollSlider.css('top', _top);
					_s1 = (scrollSliderH.height() - scrollSlider.height())/20;
					_s2 = (scrollSliderH.height() - scrollSlider.height())/3;
				}
				else{
					_f = false;
					scrollBar.hide();
					scrollContent.css({width: _box.width(), top: 0, left:0});
				}
			}
			/*
			setInterval(function(){
				if(_box.is(':visible') && cont_h != scrollContent.height()) _box.get(0).scrollResize();
			}, 200);
			*/
		}
		else{
			this.scrollResize();
		}
	}
});
}
