if (typeof console == "undefined" || typeof console != "object" || typeof console.log != "function"){
	console = {};
	console.log = function(){};
};

//all general js actions go here
(function(){
	
	var Glovebox = window.Glovebox = function(){
		
	};
	
	Glovebox._pageParams = {};
	
	Glovebox.init = function(params){
		this._pageParams = params;
		/*
		 * INIT GOOGLE MAPS
		 */
		GoogleMaps.init(params);
		GoogleMaps.createMap("google_map_locationhours", {infoId:"google_map_locationhours_template"});
		GoogleMaps.createMap("google_map_contactus");
		
		/*
		 * INIT PANO
		 */
		Pano.init(params);
		
		/*
		 * INIT MORE CONTENT
		 */
		$('.testimonials_mid_left').moreContent();
		
		/*
		 * INIT FILTER
		 */
		GBFilter.init();
		
		/*
		 * INIT EVERYTHING ELSE
		 */
		$('input[data-default]').setDefaults();
		if ( $('.faq_accordian').length > 0 )
			$('.faq_accordian').gbAccordian();
		this.Datepicker.init(this);
		Sliders.init();
		LiveChat.init();
		$('.video_trigger ').overlayContent({attr:'data-href'});
		//because the tooltips in the newvehicle nav are hidden by default
		//you need this
		$('#new_vehicles').bind('mouseenter', arrangeTooltips);
		$('#new_vehicles').bind('mouseleave', function(){
			$('#new_vehicles').unbind('mouseenter');
			$('#new_vehicles').unbind('mouseleave');
		});
		
		$('#newvehicles_nav_year_filter').bind('change', onNewvehicleFilterChange);
		$('#newvehicles_page_year_filter').bind('change', onNewvehiclePageFilterChange);
		onNewvehicleFilterChange();
		onNewvehiclePageFilterChange();
		//$('#newvehicles_nav_year_filter').val($('#newvehicles_nav_year_filter option[selected=yes]').attr('name'));
		//arrangeTooltips();
		
		if( $('.print_this_coupon').length > 0 )
			$('.print_this_coupon').bind('click', onCouponPrintClick);
		
		$('.lazy_load_image').delayImageDownload();
		
		if ( $('.home_social_tab').length > 0 ){
			$('.home_social_tab').each(function(){
				$(this).attr('data-href', $(this).attr('href'));
				$(this).attr('href', '');
			});
			$('.home_social_tab').bind('click', onHomeSocialTabClick);
		};
		
		//hack for IE. It seems that a select boxes options are not covered in the li:hover
		if ( $.browser.msie ){
			$('#new_vehicles').mouseover(function() {
	            $('#navigation_newvehicles').show();
	            $(this).find('a:first').addClass('active_newvehicle_nav');
	        });
	
	        $('#new_vehicles').mouseout(function (e) {
	            // Do not close if going over to a select element
	            if (e.target.tagName.toLowerCase() == 'select') return;
	             $(this).find('a:first').removeClass('active_newvehicle_nav');
	            $('#navigation_newvehicles').hide();
	        });
     	};
      	//hijack for outbound links
      	$('a').bind('click', outboundLinkDetection);
	};
	
	function outboundLinkDetection(){
		var _orginHref = $(this).attr('href');
		//link can potentially be outbound link
		if ( _orginHref.indexOf("http://") != -1 || _orginHref.indexOf("https://") != -1 ){
			var _href = _orginHref.replace(/(http|https)\:\/\//, '').split('/');
			if ( window.location.host != _href[0] && $("#outbound_link_overlay").length > 0){
				$('html, body').animate({scrollTop:0});
				$("#outbound_link_overlay_background").css({
					opacity:"0.5",
					height:$(document).height()
				});
				$("#outbound_link_overlay").show();
				$('#outbound_link_continue, #outbound_link_cancel').bind('click', function(){
					$("#outbound_link_overlay").hide();
					$('#outbound_link_continue, #outbound_link_cancel').unbind('click');
					if ( $(this).attr('id') == "outbound_link_continue")
						window.open(_orginHref);
					return false;
				});
				
				
				return false;
			};
		};
	};
	
	function onHomeSocialTabClick(e){
		var _content = $('div[data-ref='+$(this).attr('id')+']');
		if ( _content.length > 0 ){
			$('.selected_social_tab').removeClass('selected_social_tab');
			_content.addClass('selected_social_tab');
			return false;
		} else {
			window.open($(this).attr('data-href'));
		};
	};
	
	function arrangeTooltips(){
		/*$('.tooltip, .newvehicle_feature_tooltip').css({
			top:function(){
					return -$(this).height() + 20
			}
		});*/
	};
	
	function onNewvehicleFilterChange(){
		$('#navigation_newvehicles .selected_vehicle_year_nav').removeClass('selected_vehicle_year_nav');
		$('#year_block_'+$('#newvehicles_nav_year_filter').val()).addClass('selected_vehicle_year_nav');
		arrangeTooltips();
	};
	
	function onNewvehiclePageFilterChange(){
		$('#new_vehicle_single .selected_vehicle_year_nav').removeClass('selected_vehicle_year_nav');
		$('#page_year_block_'+$('#newvehicles_page_year_filter').val()).addClass('selected_vehicle_year_nav');
		arrangeTooltips();
	};
	
	function onCouponPrintClick(e){
		var _parent = $(this).parents('.special_container');
		var _width = _parent.width() + 70;
		var _height = _parent.attr('data-form_first') == "true" ? _parent.height() + 200 : _parent.height() + 30;
		
		_width = _width < 800 ? 800 : _width;
		_height = _height < 300 ? 300 : _height;
		
		
		window.open("/"+$(this).attr('href'),"toprint","width="+_width+",height="+_height+",modal=yes,toolbar=0,menubar=0");
		return false;
	};
	
})();

(function(){
	
	var _languages = {};
	var _departments = {};
	var _filters = {};
	var _searchTimeout;
	
	var _$languageFilter ,_$departmentFilter,  _$contactsSearch, _$noneFound;
	
	var FILTER_SELECTOR = ".filter_item";
	var CONTAINER_SELECTOR = ".single_contact_container";
	var LANGUAGE_SELECTOR = ".languages_spoken li";
	var DEPARTMENT_SELECTOR = ".contact_department";
	
	var GBFilter = window.GBFilter = function(){};
	
	GBFilter.init = function(){
		_$languageFilter = $("#language_filter");
		_$departmentFilter = $("#department_filter");
		_$contactsSearch = $('#contacts_search');
		_$noneFound = $('#no_contacts_found');
		if ( $(LANGUAGE_SELECTOR).length > 0 ){
			$(LANGUAGE_SELECTOR).each(function(){
				_languages[$(this).text()] = $(this).text()				
			});
			
			for( var i in _languages )
				_$languageFilter.append("<option value='"+_languages[i]+"'>"+_languages[i]+"</option>")
			
			if ( _$languageFilter.find('option').length > 0 )	
				_$languageFilter.bind('change', onFilter);
			else
				_$languageFilter.hide();
		} else {
			_$languageFilter.empty().append('<option value="">Any</option>');
		};
		
		if ( $(DEPARTMENT_SELECTOR).length > 0 ){
			//@TODO figure out what we are doing with departments
			_$departmentFilter.empty().append('<option value="">Any</option>');
		} else {
			_$departmentFilter.empty().append('<option value="">Any</option>');
		};
		
		if ( _$contactsSearch.length > 0 ){
			_$contactsSearch.bind('keyup', onSearchKeyUp);
		};
	};
	
	function onSearchKeyUp(e){
		clearTimeout(_searchTimeout);
		_searchTimeout = setTimeout(function(){
			onFilter();
		}, 300)
	};
	
	function onFilter(){
		var _found = 0;
		$(CONTAINER_SELECTOR).each(function(){
			var _matches = 0;
			//Check if the language dropdown is set
			if ( typeof _$languageFilter.val() == 'undefined' ||  _$languageFilter.val() == '' ){
				_matches++;
			} else {
				$(this).find(LANGUAGE_SELECTOR).each(function(){
					if ( $(this).text() == _$languageFilter.val() ){
						_matches++;
						return false;
					}; 
				});
			};
			//Check if the department dropdown is set			
			if ( typeof _$departmentFilter.val() == 'undefined' ||   _$departmentFilter.val() == '' ){
				_matches++;
			} else {
				//@TODO this
			};
			//Check if there is something in the search filter
			if ( _$contactsSearch.val() == _$contactsSearch.attr('data-default') || _$contactsSearch.val() == '' ){
				_matches++;
			} else {
				var _name = $(this).find(".contact_name:contains('"+_$contactsSearch.val()+"')");
				var _nameUpper = $(this).find(".contact_name:contains('"+_$contactsSearch.val().charAt(0).toUpperCase() + _$contactsSearch.val().slice(1)+"')");
				if ( _name.length > 0 || _nameUpper.length > 0 )
					_matches++;
			};
			if ( _matches == 3 ){
				_found ++;
				$(this).show();
			} else{ 
				$(this).hide(); 
			};
			
			
		});
		
		if ( _found == 0 )
			_$noneFound.show();
		else
			_$noneFound.hide();
		
	};
	
})();

(function(){
	
	var _url = '';
	var BASE_URL = "http://chat.carchat24.com/chat/index.php";
	
	var LiveChat = window.LiveChat = function(){};
	
	LiveChat.init = function(){
		_url = BASE_URL + "?action=chat_select&code="+Glovebox._pageParams.carchat_code+"&dept="+Glovebox._pageParams.carchat_department;
		$('.chat_launch_trigger').bind('click', onCarChatClick);
	};
	
	function onCarChatClick(e){
		e.preventDefault();
		window.open (_url, "carchat","status=0,toolbar=0,width=500,height=400");
		return false;
	}
	
})();

(function(){
	
	var Sliders = window.Sliders = function(){};
	
	Sliders.init = function(){
		if ( $('.range_slider').length > 0 ){
			$( ".range_slider" ).each(function(){
				var _min = parseFloat($(this).find('.min_label span').text());
				var _max = parseFloat($(this).find('.max_label span').text().replace('$','').replace(',',''));
				var _minVal = $(this).parent().find('.min_val').val();
				var _maxVal = $(this).parent().find('.max_val').val();
				$(this).slider({
					range:true,
					min:_min,
					max:_max,
					values: [_minVal, _maxVal],
					stop:updateValues
				})
				$(this).find('.ui-slider-handle:last').css('marginLeft', "-20px")
			});
		};
	};
	
	function updateValues(e, ui){
		$(ui.handle).parents('.range_slider').parent().find(".min_val").val(ui.values[0]);
		$(ui.handle).parents('.range_slider').parent().find(".max_val").val(ui.values[1]);
	};
	
	
})();


(function(){
	
	var _parent = null;
	var _opened = false;
	
	var DatePicker = window.Glovebox.Datepicker = function(){
		
	};
	
	DatePicker.init = function(p){
		_parent = p;
		$('#pullout_datepicker, .form_calendar, #form_datepicker').datepicker({
			dayNamesMin:['S','M','T','W','T','F','S'],
			dayNamesShort:['S','M','T','W','T','F','S'],
			onSelect:onPulloutDateSelect
		});
		$('.datepicker_trigger').bind('click',pullDatePickerOnClick);
		$('#pullout_trigger').bind('click', onTabClick);
	};
	
	function onTabClick(e){
		if ( _opened ){
			$(this).css('backgroundPosition', "-179px -102px");
			$('#base_pullout').animate({left:-$('#inner_pullout_content').width()-32}, 300);
		}else{
			$(this).css('backgroundPosition', "-103px -102px");
			$('#base_pullout').animate({left:0}, 300);
		}
		$('#pullout_datepicker').hide();	
		_opened = _opened ? false : true;
	};
	
	function pullDatePickerOnClick(e){
		var _picker = $(this).parent().find('.datepicker');
		var _visible = _picker.css('display');
		if ( _visible == "block" ){
			_picker.hide();
		} else {
			_picker.show();
		};
	};
	
	function onPulloutDateSelect(dateText, inst){
		var _picker = $('#'+inst.id);
		var _input = _picker.parents('.datepicker_container').find('input')
		_input.val(dateText);
		
		if ( _input.attr('type') != "hidden" )
			_picker.hide();
	};
	
})();

(function($){
	
	var defaults = {
		attr: "src",
		attrDelay: "data-src"
	};
	
	$.fn.delayImageDownload = function(options){
		var _opts = $.extend({}, defaults, options);
		
		return this.each(function(){
			$(this).attr(_opts.attr, $(this).attr(_opts.attrDelay));
			$(this).attr(_opts.attrDelay, '');
		});
	};
})(jQuery);

(function($){
	
	var defaults = {
		contentSelector: ".faq_content_container",
		triggerSelector: ".faq_top_container",
		offset : 0,
		duration: 400,
		openSelector: 'gbAccordian_open'
	};
	
	$.fn.gbAccordian = function(options){
		var _opts = $.extend({}, defaults, options);
		_opts.selector = $(this).selector;
		return this.each(function(){
			
			if ( $('#'+$(this).attr('id')).length == 0 )
				$(this).attr('id', "gbAccordian"+new Date().getTime());
			
			var _id = "#" + $(this).attr('id');
			var _content = $(_id).find(_opts.contentSelector);
			var _trigger = $(_id).find(_opts.triggerSelector);
			if (window.location.hash.replace('#', '') == $(this).attr('id')){
				$(this).addClass(_opts.openSelector);
			} else {
				$(this).css({
					height:_trigger.height(),
					overflow:"hidden",
					position:"relative"
				})
				/*_content.css({
					marginTop:-_content.height()
				});*/
			};
			$('html, body').animate({scrollTop:0}, 0);
			_trigger.bind('click', toggleAccordian);			
			$(_id).data('gbAccordian._opts', _opts);
			_trigger.data('gbAccordian._opts', _opts);
		});
	};
	
	function toggleAccordian(e){
		e.preventDefault();
		var _opts = $(this).parent().data('gbAccordian._opts');
		var _this = $(this).parent(_opts.selector);
		var _content = _this.find(_opts.contentSelector);
		
		if ( _this.hasClass(_opts.openSelector) ){
			//close
			_this.stop().animate({
				height:30
			}, _opts.duration, function(){
				_this.removeClass(_opts.openSelector);
			});
			/*_content.stop().animate({
				marginTop:-_content.height()
			}, _opts.duration, function (){
				_this.removeClass(_opts.openSelector);
			});*/
		} else {
			//open
			_this.stop().animate({
				height:_content.height() + _opts.offset + 30
			}, _opts.duration, function(){
				_this.addClass(_opts.openSelector);
			});
			/*_content.stop().animate({
				marginTop:_opts.offset
			}, _opts.duration, function(){
				_this.addClass(_opts.openSelector);
			});*/
		};
	};
})(jQuery);

(function($){
	
	var _defaults = {
		maxHeight:100,
		moreClass:"",
		moreHTML:"<div class='more_content_trigger'></div>",
		moreLabel:"more",
		lessLabel:"less",
		lessClass:"more_content_showing"
	};
	
	$.fn.moreContent = function(options){
		
		var _opts = $.extend({}, _defaults, options);
		
		return this.each(function(){
			
			if ( $(this).height() > _opts.maxHeight ){
				
				var _id = "more_content_"+new Date().getTime();
				//_opts._this = this;
				
				$(this).attr('data-height', $(this).height());
				
				$(this).css({
					overflow:"hidden",
					height: _opts.maxHeight
				});
				
				$(this).after(_opts.moreHTML);
				$(this).next().attr('id', _id);
				$('#'+_id).data('moreContent.opts', _opts);
				$('#'+_id).data('moreContent._container', this);
				$('#'+_id).text(_opts.moreLabel);
				$('#'+_id).bind('click', onMoreClick);
			};
		});
	};
	
	function onMoreClick(e){
		var _opts = $(this).data('moreContent.opts');
		var _container = $($(this).data('moreContent._container'));	
		if ( $(this).text() == _opts.moreLabel ){
			$(this).text(_opts.lessLabel)
					.addClass(_opts.lessClass);
			_container.animate({
				height:_container.attr('data-height')
			});
		} else if( $(this).text() == _opts.lessLabel ) {
			$(this).text(_opts.moreLabel)
					.removeClass(_opts.lessClass);
			_container.animate({
				height:_opts.maxHeight
			});
		}
		return false;
	};
	
})(jQuery);

/*
 * DUPLICATE IN GBKiosk.js
 */

(function($){
	
	var _defaults = {
		defaultText : '',
		fontStyle : '',
		fontColor : '',
		defaultFontStyle : "italic",
		defaultFontColor : "#666666"
	};
	
	$.fn.setDefaults = function(options){
		
		return this.each(function(){
			var _opts = $.extend({}, _defaults, options);
			
			_opts.defaultText = _opts.defaultText || $(this).attr('data-default');
			_opts.fontStyle = _opts.fontStyle || $(this).css('fontStyle');
			_opts.fontColor = _opts.fontColor || $(this).css('color');
			
			$(this).data('setDefaults._opts', _opts);
			$(this).bind('focus', onElementFocus);
			$(this).bind('blur', onElementBlur);
			$(this).parents('form').bind('submit', {_scope:$(this)}, onFormSubmit);
			$(this).blur();
			
			if ($(this).val() == _opts.defaultText){
				$(this).css({
					color:_opts.defaultFontColor,
					fontStyle:_opts.defaultFontStyle
				});
			};
		});
	};
	function onElementFocus(e){
		var _opts = $(this).data('setDefaults._opts');
		if ($(this).val() == _opts.defaultText){
			$(this).val('');
			$(this).css({
				color:_opts.fontColor,
				fontStyle:_opts.fontStyle
			});
		};
	};
	function onElementBlur(e){
		var _opts = $(this).data('setDefaults._opts');
		if($(this).attr('disabled')=='disabled') return;
		if ( $.trim($(this).val()) == '' ){
			$(this).val(_opts.defaultText);
			$(this).css({
				color:_opts.defaultFontColor,
				fontStyle:_opts.defaultFontStyle
			});
		};
			
	};
	function onFormSubmit(e){
		var _this = e.data._scope;
		var _opts = _this.data('setDefaults._opts');
		if (_this.val() == _this.data('default'))
			_this.val('');
			
	};
})(jQuery);


