$(document).ready(function(){
	
	CMZS.slider();
	CMZS.buttonFunctions();
	CMZS.formElementFunciton();
	CMZS.presentation();
	CMZS.regionsMap();
	new rightPanelControl();
	new footerSeparator();
});


var CMZS = {
	profil_map : undefined
};

CMZS.buttonFunctions = function(){
	$('A[rel=toggle_item]').live('click', function(){
		$(this).toggleClass('toggle');
		if( $(this).hasClass('toggle') ) {
			$(this).html( $(this).data('close') );	
		} else {
			$(this).html( $(this).data('open') );
		}

		$(this).parent().parent().find('.collapsible').slideToggle();
		return false;
	});

	$('A.rollup, A.rolldown').live('click', function(){
		var list = $('.news-home UL');
		var LIST_SHIFT = list.children().outerHeight();
		var position = parseInt(list.css('top'));

		if (list.queue().length > 0) return false;

		if ( $(this).hasClass('rollup') ) {
			if ( position == 0 ) return false;
			list.animate({'top': position+LIST_SHIFT}, 200);
		} else {
			if ( position <= ((list.children().length-3)*-LIST_SHIFT) ) return false;
			list.animate({'top': position-LIST_SHIFT}, 200);
		}
		return false;
	});

	$('A.map-button').live('click', function(){
		$('.map-shadowcube').show();
		CMZS.profilMap($('.members-table TABLE TR TD.town').html().split("-")[0]+", "+$('.members-table TABLE TR TD.street DIV').html());
		return false;
	});
	
	$('.map-shadowcube .shadowcube-bg').live('click', function(){
		$('.map-shadowcube').hide();
	});

	// submit vyhledavani
	$('#search FORM A').click(function(){
		$(this).parent('FORM').submit();
	});

	// partners slider 
	var partners = new PartnersClass();
	$('.partners-home > A').live('click', function(){
		partners.slide($(this).attr('class'));
		return false;
	});

};


CMZS.profilMap = function(address){
	
	var myOptions;
	var	marker;
	var location;

	geocoder = new google.maps.Geocoder(address);
	geocoder.geocode( { 'address': address}, function(results, status){
		if ( status == 'OK' ) {
			if ( CMZS.profil_map === undefined ) {
				location = results[0].geometry.location;
				mapInit();
			} else {
				CMZS.profil_map.setCenter(results[0].geometry.location);
			}
			
		} else if ( status == 'ZERO_RESULTS' ) {
			alert("Adresa: \""+address+"\" nenalezena!");
		} else {
			alert("Error: "+status);
		}
	});	

	function mapInit() {
		myOptions = {
			zoom: 15,
			center: location,
			mapTypeId: google.maps.MapTypeId.ROADMAP,
		    disableDefaultUI: false
		}
		CMZS.profil_map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);  	
		marker = new google.maps.Marker({
			map: CMZS.profil_map,
			draggable: false,
			position: location
		});	
	};
};

CMZS.formElementFunciton = function(){
	
	$('INPUT[type="text"], TEXTAREA').each(function(){
		
		if ( $(this).val() === '' || ($(this).attr("name") === "keyword" && $(this).val() !== "Hledej podle jména") || $(this).attr("name") === "search" ) return;

		var value = '';
		$(this).focus(function(){
			if ( value === '' || value === $(this).val() ) {
				value = $(this).val();
				$(this).val('');	
			}
		});
		$(this).blur(function(){
			if($(this).val().length < 1 ) {
				$(this).val(value);
			}
		});			
	});
	
};

CMZS.slider = function () {
	$("#slider").nivoSlider();
};

CMZS.regionsMap = function(){
	var $tooltip = $('#map_container .tooltip');

	// mapa
	$('AREA').hover(function(){		
		$( '#' + $(this).attr('id') + '_d' ).addClass("hover");
		showTooltip(true, $(this).attr('alt'));
	},function(){
		$( '#' + $(this).attr('id') + '_d' ).removeClass("hover");
		showTooltip(false);
	});

	$('#map_container').mousemove(function(e){
		var x = e.pageX - $(this).offset().left - ($(this).find('DIV.tooltip').width()/2);
		var y = e.pageY - $(this).offset().top - $(this).find('DIV.tooltip').height() - 40;
		$tooltip.css('top', y+'px')
		$tooltip.css('left', x+'px')
	});

	function showTooltip(show, text){
		if ( text === undefined ) text="";
		$tooltip.children('DIV').html(text);	
		if ( show ) {
			$tooltip.fadeIn();
		} else {
			$tooltip.hide();
		}
	}

};

CMZS.presentation = function() {
	
	// presentation buttons
	var $wrap = $('#presentation');
	var presentation = new PresentationClass($wrap);
	var $pager = $wrap.find('.pager'); 

	$wrap.children('A').click(function(){
		if ( $(this).hasClass('back') ) {
			presentation.activeControl(-2);
		} else {
			presentation.activeControl(-1);
		}
		return false;
	});
		
	// pager control
	$pager.find('A').click(function(){
		presentation.activeControl($(this).children().html());
		return false;
	});
};

function PartnersClass() {
	// CONST
	var SLIDE_TIME = 5000;
	var SHIFT_TIME = 500;
	var VISIBLE_COUNT = 4;
	var SHIFT;

	// private variables
	var list = $('.partners-home').find('UL');
	var interval;
	var timer;

	// public variables
	// ...

	// constructor
	SHIFT = list.children().outerWidth()+10;
	autoSlide(true);

	// private functions
	function autoSlide(value) {
		if (list.children().length <= VISIBLE_COUNT) return;

		if (!value) {
			clearInterval(interval); 
			return;
		} else {
			interval = setInterval(function(){
				list.animate({"left": getNewPosition("next")}, SHIFT_TIME);
			}, SLIDE_TIME);		
		}
	}
	function getNewPosition(direction) {
		var retVal;
		var maxPosition = (VISIBLE_COUNT - list.children().length) * SHIFT;
		var minPosition = 0;
		var currentPosition = parseInt(list.css("left"));

		switch (direction) {
			case "next":
			 	retVal = "-="+SHIFT;
				if ( currentPosition == maxPosition) retVal=0;
				break;
			case "back":
				retVal = "+="+SHIFT;
				if ( currentPosition == 0 ) retVal = maxPosition;
				break;
		}

		return retVal;
	}

	// public function
	this.slide = function(direction) {
		
		if (list.children().length <= VISIBLE_COUNT) return;

		autoSlide(false);
		clearTimeout(timer);

		if (list.queue().length > 0) return;

		list.animate({"left": getNewPosition(direction)}, SHIFT_TIME);

		timer = setTimeout(function(){autoSlide(true);}, SLIDE_TIME);
		
	}

}

function PresentationClass(presentation) {

	// private variables
	// public variables
	this.wrap = presentation;
	this.list = presentation.find('UL');
	
	// contructor
	createPager(this.list, this.wrap); 	
	
	// private functions
	function createPager(list, wrap) {
		var i=0;
		var pager = '<p class="pager" style="width: 330px;">';
		
		list.children().each(function(){
			if ( i==0 ) {
				pager += '<a class="first active" href="#"><span>'+(++i)+'</span></a>';	
			} else if ( i == (list.children().length-1) ) {
				pager += '<a class="last" href="#"><span>'+(++i)+'</span></a>';
			} else if ( i == ((list.children().length/2)-1) ) {
				pager += '<a class="last" href="#"><span>'+(++i)+'</span></a>';
			} else {
				pager += '<a href="#"><span>'+(++i)+'</span></a>';
			}
			
		});
			
		wrap.append(pager+'</p>');
	}
	
	function getActiveIndex(list) {
		var i=0;
		while ( i < list.children().length ) {
			if ( list.find('LI:nth-child('+(++i)+')').hasClass('active') ) break;
		}
		return i;
	}
	
	// public function
	this.activeControl = function(i) {
		var childNumber = i;
		if ( i < 0 ) {
			childNumber = getActiveIndex(this.list);
			if ( i < -1 ) {
				childNumber--;
				if ( childNumber==0 ) childNumber = this.list.children().length;
			} else {
				childNumber++;
				if ( childNumber==this.list.children().length+1 ) childNumber = 1;
			}
		}
		
		//	presentation
		$('#presentation UL LI.active').removeClass('active');
		$('#presentation UL LI:nth-child('+childNumber+')').addClass('active');
		
		// 	pager
		$('#presentation .pager A.active').removeClass('active');
		$('#presentation .pager A:nth-child('+childNumber+')').addClass('active');
		
	}
};

function rightPanelControl(){
	// right-block
	var content_wrap = $('.content-wrap');
	var right_panel = content_wrap.find('.right-panel');
	
	// constructor
	if ( !isPanelHigher() ) {
		udpateView();
	}

	function isPanelHigher() {
		var b = true;
		if (right_panel.outerHeight() < content_wrap.outerHeight() ) {
			b = false;
		}
		return b;
	}

	function udpateView() {
		right_panel.css('position', 'absolute');
	}
};

function footerSeparator() {
	
	var sp = $('.footer-block .with-separator .separator');
	var W = sp.parent().width()-10;

	// constructor
	sp.each(function(){
		setWidth($(this));
	});

	function setWidth(separator) {
		var title_width = separator.next().outerWidth();
		separator.css( "width", W-title_width );
	}

};
