/**
 * Project:		BMW YOUNG CLASSICS MICROSITE
 * 
 * @author:		<ap@iolab.de>, <ps@okapi.de>
 * @version:	1.0
 * @date:		06/2010
 *
 */


function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}





var BMWC = function($){

/* ////// DEFINITION AND NAMING OF ALL RELEVANT ELEMENTS	*/

	var selectors = {
		
		containers : {
			ovitem	:	".overview-matrix .ovm-item",
			modal		:	".state-detail",
			detail1	:	".state-detail .detail1",
			detail2	:	".state-detail .detail2"
		},
		
		btns : {
			btnShowModal		:	".state-overview .pic-sec",
			btnCloseModal		:	".close-button a",
			btnImgCloseModal	:	".state-detail .pic-sec",
			btnShowDetails		:	".details-button a"
		}
	};
	
	
	var defaults = {
		
		css_classes : {
			is_visible	:	"visible-true"
		}	
	};
	
	
	var dyn_defaults = {
		
		details1_width : "",
		details2_width : ""
	};



/* ////// HELPER-FUNCTIONS	*/

	function showModal( btn ){	
	
		var $clickedBtn		= $(btn),
			 boxes				= selectors.containers,
			 classes				= defaults.css_classes,
			 themodal			= $clickedBtn.parents(boxes.ovitem).find(boxes.modal),
			 detail2				= $clickedBtn.parents(boxes.ovitem).find(boxes.detail2),
			 detail2_width		= dyn_defaults.details2_width,
			 modal_width_old	= dyn_defaults.details1_width;
		
		
		// CLOSE ALL ALREADY OPENED MODALS AND COLLAPSE THEIR DETAILS-2 VIEW
		$(boxes.modal)
			.removeClass(classes.is_visible)
			.removeAttr("style");
			
		$(detail2).removeClass(classes.is_visible);
		
		
		// SHOW THE APPROPIATE MODAL-BOX
		$(themodal).addClass(classes.is_visible);
	};
	
	
	
	function hideModal( btn ){	
	
		var $clickedBtn		= $(btn),
			 boxes				= selectors.containers,
			 classes				= defaults.css_classes,
			 themodal			= $clickedBtn.parents(boxes.ovitem).find(boxes.modal);
			 detail2				= $clickedBtn.parents(boxes.ovitem).find(boxes.detail2),
			 detail2_width		= dyn_defaults.details2_width,
			 modal_width_old	= dyn_defaults.details1_width;
		
		
		// HIDE THE APPROPIATE MODAL-BOX
		$(themodal)
			.removeClass(classes.is_visible)
			.removeAttr("style");
			
		$(detail2).removeClass(classes.is_visible);
	};
	
	
	
	function showDetails( btn ){	
	
		var $clickedBtn		= $(btn),
			 boxes				= selectors.containers,
			 classes				= defaults.css_classes,
			 themodal			= $clickedBtn.parents(boxes.ovitem).find(boxes.modal),
			 detail2				= $clickedBtn.parents(boxes.ovitem).find(boxes.detail2),
			 detail2_width		= dyn_defaults.details2_width,
			 modal_width_old	= dyn_defaults.details1_width,
			 modal_width_new	= detail2_width + modal_width_old;
		
		
		// IF DETAILS-2 IS ALREADY OPEN
		if( $(detail2).hasClass(classes.is_visible) ){
			// HIDE THE APPROPIATE DETAILS-2-BOX
			$(themodal)
				.animate({
					width: [modal_width_old, 'easeInOutQuad']
					}, 100
				);
				
			$(detail2).removeClass(classes.is_visible);
		}
		
		// OTHERWISE
		else{
			// SHOW THE APPROPIATE DETAILS-2-BOX
			$(detail2).addClass(classes.is_visible);
			
			$(themodal)
				.animate({
					width: [modal_width_new, 'easeInOutQuad']
					}, 200
				);
		}
	};




/* ////// EVENT-RELATED/PROCESSING FUNCTIONS	*/

	function removeBubbles( btn_selector ){
		
		if( $(btn_selector).length ){
			
			$(btn_selector).live("click", function(e){
				
				e.preventDefault();	//	jQuery substitute for: return false;
			});
		}
	};
	
	
	
	function addLogicShowModal( btn_selector ){
	/* onClick SHOW DETAIL1CONTAINER	*/
		if( $(btn_selector).length ){
			
			$(btn_selector).live("click", function(e){
				
				showModal(this);
			});
		}
	};
	
	
	
	function addLogicHideModal( btn_selector ){
		
		if( $(btn_selector).length ){
			
			$(btn_selector).live("click", function(e){
				
				hideModal(this);
			});
		}
	};
	
	
	
	function addLogicShowDetails( btn_selector ){
		
		if( $(btn_selector).length ){
			
			$(btn_selector).live("click", function(e){
				
				showDetails(this);
			});
		}
	};





/* ////// FUNCTIONS CONTROLLING THE INTIAL PAGE/EVENT SET-UP	*/
	
	function createDynDefaults(){
		
		var $detail1	= $(selectors.containers.detail1),
			 $detail2	= $(selectors.containers.detail2);
		
		if( $detail1.length ){
			
			var detail1			= $detail1[0],
				 detail1_width	= $(detail1).innerWidth();
			
			dyn_defaults.details1_width = detail1_width;
		}
		
		if( $detail2.length ){
			
			var detail2			= $detail2[0],
				 detail2_width	= $(detail2).innerWidth();
			
			dyn_defaults.details2_width = detail2_width;
		}
	};
	
	
	
	
	function removeBtnBubbles( allBtns ){
		
		for( var btn in allBtns ){
			
			removeBubbles( allBtns[btn] );
		}
	};
	
	
	
	function addBtnLogic( allBtns ){
		/* DEFINE WHICH CONTROL-FUNCTION HAS TO PROCESS A DEFINED BUTTON-TYPE */
		for( var btn in allBtns ){
			
			var btn_selector = allBtns[btn];
			
			switch( btn_selector ){
				
				case selectors.btns.btnShowModal:
					
					addLogicShowModal( btn_selector );
					break;
				
				
				case selectors.btns.btnCloseModal:
					
					addLogicHideModal( btn_selector );
					break;
					
					
				case selectors.btns.btnImgCloseModal:
				
					addLogicHideModal( btn_selector );
					break;
					
					
				case selectors.btns.btnShowDetails:
					
					addLogicShowDetails( btn_selector );
					break;
				
				
				default:
						
					break;
			}
		}
	};





/* ////// EXECUTE/ADD ALL FEATURES THAT NEED TO BE INITALIZED	*/

	function initPage(){
		
		createDynDefaults();
		
		removeBtnBubbles( selectors.btns );
		
		addBtnLogic( selectors.btns );
	};
	
	


/* ////// RETURN / MAKE PUBLIC ALL FUNCTIONS / VARIABLES THAT MAY NEED TO BE ACCESSED FROM THE OUTSIDE	*/

	return {	
		// PUBLIC VARIABLES
		selectors			:	selectors,
		defaults				:	defaults,
		dyn_defaults		:	dyn_defaults,
		
		// PUBLIC FUNCTIONS
		initPage				:	initPage,
		removeBubbles		:	removeBubbles
	};

}(jQuery);




/**
 * AVOID CONFLICTS WITH ADDITIONAL FRAMEWORKS
 */
(function($){
	// DO THIS WHEN DOM IS READY
	$(document).ready( function () {
		BMWC.initPage();
	});
})(jQuery);
