/**
 * @author Alexander Farkas
 * v. 1.02
 */
(function($) {
	$.extend($.fx.step,{
	    backgroundPosition: function(fx) {
            if (fx.state === 0 && typeof fx.end == 'string') {
                var start = $.curCSS(fx.elem,'backgroundPosition');
                start = toArray(start);
                fx.start = [start[0],start[2]];
                var end = toArray(fx.end);
                fx.end = [end[0],end[2]];
                fx.unit = [end[1],end[3]];
			}
            var nowPosX = [];
            nowPosX[0] = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit[0];
            nowPosX[1] = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit[1];           
            fx.elem.style.backgroundPosition = nowPosX[0]+' '+nowPosX[1];
            
           function toArray(strg){
               strg = strg.replace(/left|top/g,'0px');
               strg = strg.replace(/right|bottom/g,'100%');
               strg = strg.replace(/([0-9\.]+)(\s|\)|$)/g,"$1px$2");
               var res = strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);
               return [parseFloat(res[1],10),res[2],parseFloat(res[3],10),res[4]];
           }
        }
	});
})(jQuery);

(function($) {
	$.fn.modulemanager = function(options) {
		var opts = $.extend({}, $.fn.modulemanager.defaults, options);
		var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
		
		loadManager();
		
	};
	
	function loadManager(){
		$.ajax({
			url: '/ajax/module-manager.php',
			type: 'POST',
			data: 'request=manager',
			success: function(data){
				initialiseManager(data);
			}
		});
	}
	
	function initialiseManager(obj){
		$('body').append(obj);
		
		displayManager();

		$('#add-modules a').click(function(event){
			event.preventDefault();
			if(!$('body').hasClass('withOverlay')) displayManager();
		});
		
		$('#overlay, #close-manager a').click(function(event){
			event.preventDefault();
			closeManager();
		});
		
		$('#mp li').each(function(){
			if($(this).hasClass('active')){
				$(this).children('span').css('background-position','0px 0px');
			}else{
				$(this).children('span').css('background-position','-61px 0px');
			}
			
			$(this).children('span, p a').unbind().click(function(event){
				event.preventDefault();
				toggleModule($(this).parent('li'));
			});
		});
		
	}
	
	function toggleModule(obj){
		var span = $(obj).children('span');
		var modID = $(obj).attr('id');
		if($(obj).hasClass('active')){
			$(obj).removeClass('active');
			span.animate({backgroundPosition:"(0px 63px)"}, "medium", function(){
				span.css("background-position","-61px 63px");
				span.animate({backgroundPosition:"(-61px 0px)"}, "medium",function(){
					updateModule('off', obj);
				});
			});
		}else{
			$(obj).addClass('active');
			span.animate({backgroundPosition:"(-61px 63px)"}, "medium", function(){
				span.css("background-position","0px 63px");
				span.animate({backgroundPosition:"(0px 0px)"}, "medium", function(){
					updateModule('on', obj);
				});
			});
		}
	}
	
	function updateModule(modulestate, obj){

		moduleId = getModuleId(obj.attr('class'));

		$.ajax({
			url: '/ajax/module-manager.php',
			type: 'POST',
			data: 'request=moduletoggle&state='+modulestate+'&mid='+getModuleId(obj.attr('class'))+'&'+getCookies(),
			success: function(data){
				if(modulestate == 'on'){
					activateModule(data, moduleId);
				}else{
					if($('body').hasClass('home')) removeModule(data);
				}
			}
		});
		
	}

	function getModuleId(moduleClass) {
		var p = moduleClass.indexOf('module-id-');
		if(p>-1) moduleClass = moduleClass.substr(10);
		p = moduleClass.indexOf(' ');
		if(p > -1) moduleClass = moduleClass.substr(0, p);
		return parseInt(moduleClass);
	}

	function getCookies() {
		var ca = document.cookie.split(';');
		var cs = '';
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if(cs.length>0) cs+='&';
			cs+=c;
		}
		return cs;
	}
	
	function activateModule(data, moduleId) {		
		$('.mod-col1').prepend(data);
		$("select").css('visibility','hidden');
	}
	
	function removeModule(json){
		$('.'+json).remove();
	}
	
	function closeManager(){
		if($('#overlay').css('opacity') == '0.9'){
			$('#manager').removeClass('active').removeAttr('style');
			$('#overlay').fadeTo("slow", 0, function(){
				$('#manager,#overlay').remove();
				$("select").css('visibility','visible');
				if(!$.browser.safari) $('body').removeClass('withOverlay');
			});
		}

		if(typeof(sortables) == 'function') sortables();
		if(typeof(submodules) == 'function') submodules();
	}

	
	
	function displayManager(){
		
		$("select").css('visibility','hidden');
		if(!$.browser.safari) $('body').addClass('withOverlay');
		
		$('#overlay').css({'width':$(document).width(),'height':$(document).height(),'opacity':'0'}).addClass('active').fadeTo("slow", 0.9, function(){

			// Figure out manager horizontal and vertical position
			var topPos = parseInt($(window).height() / 2 + $(window).scrollTop() - $('#manager').height() / 2);
			var leftPos = parseInt($(window).width() / 2 - $('#manager').width() / 2);
			$('#manager').addClass('active').css({'top': topPos, 'left': leftPos}).show();
			
		});
	}
	
	function conLog($text) {
		if (window.console && window.console.log) window.console.log($text);
	};
	
	$.fn.modulemanager.defaults = {
		
	};

	$(window).resize(function(){
		window.clearTimeout(resizeTimeoutId);
    resizeTimeoutId = window.setTimeout('mm_resizeAction();', 10);
	});
	
})(jQuery);

var resizeTimeoutId;

function mm_resizeAction() {
	if($('#overlay').hasClass('active')){
		var topPos = parseInt($(window).height() / 2 + $(window).scrollTop() - $('#manager').height() / 2);
		var leftPos = parseInt($(window).width() / 2 - $('#manager').width() / 2);
		$('#manager').css({'top': topPos, 'left': leftPos});
	}
}