/*
----====== Params ======----
----- ajaxPagination 
actionUsed - actiunea folosita pentru afisarea continutului (din acts_boxes.php)
pageNumber - numarul paginii care trebuie afisata (default: 1)
pageMaxim - numarul maxim de pagini pentru a sti cand sa activam si cand sa dezactivam butoanele de next/prev
disabledClass - clasa de disabled petru butoanele de next / prev (default: disabled)
containerBox - elementul care trebuie schimbat
containerPagination - elemetul care contine bullet-uri cu nr de pagini, generat automat (<a>-uri, una dintre ele avand clasa "activ")
buttonNext - elementul pe care se face click pentru "next"
buttonPrev - elementul pe care se face click pentru "prev"
----- ajaxPagination

----- optionsButton
interactionHeight - height-ul panel-ului cu optiuni
----- optionsButton

----- settingsButton
containerBox - containerul cu ce trebuie deschis / inchis
----- settingsButton

----- settingsOrder
forceReload - fortam reload la pagina (daca e false, parametrii settingsButton, paginationElement, settingsElements sunt obligatorii)
cookieName - in ce cookie sa puna noua ordine
settingsButton - butonul de trigger in cazul in care vrem sa ascundem optiunile
paginationElement - containerul de paginare daca nu vrem sa facem reload la pagina, ci doar ajax reload (doar daca folosim AjaxPagination)
settingsElements - elementele pe care trebuie sa le trecem inactive inainte sa trecem elementul click-uit activ
----- settingsOrder
----====== Params ======----
*/

var current_option_open; // panelul cu optiuni deschis daca exista
$(document).ready(function()
{
	$('body').click(function() {
		general_inchide_options( true );
	});
});

jQuery.fn.extend(
{
	ajaxPagination: function( options ) 
	{
		return this.each( function() 
		{
			new jQuery.AjaxPagination( this, options );
		});
	},
	optionsButton: function( options ) 
	{
		return this.each( function() 
		{
			new jQuery.optionsButton( this, options );
		});
	},
	settingsButton: function( options ) 
	{
		return this.each( function() 
		{
			new jQuery.settingsButton( this, options );
		});
	},
	settingsOrder: function( options )
	{
		return this.each( function()
		{
			new jQuery.settingsOrder( this, options );
		});
	}
});

jQuery.settingsOrder = function( Obj, opt )
{
	opt.forceReload = ( opt.forceReload ) ? opt.forceReload : false;
	opt.cookieName = ( opt.cookieName ) ? opt.cookieName : '';
	opt.settingsButton = ( opt.settingsButton ) ? opt.settingsButton : '';
	opt.paginationElement = ( opt.paginationElement ) ? opt.paginationElement : '';
	opt.settingsElements = ( opt.settingsElements ) ? opt.settingsElements : '';
	
	var $obj = $(Obj);
	
	$obj.click(function()
	{
		var ordine = $obj.attr('order');
		var max_pag = parseInt( $obj.attr('max_pages'), 10 );
		
		$.post(
			'libs/kissfm/ajax_requests_general.php',
			{
				act: 'settings_ordine',
				ordine: ordine,
				cookie: opt.cookieName
			},
			function(data)
			{
				if( data.success )
				{
					if( opt.forceReload )
					{
						window.location = window.location;
					}
					else
					{
						// inchidem settings, redesenam pagina, punem clasa activ pe ce trebuie..
						$(opt.paginationElement).trigger('resetpages', [max_pag]);
						$(opt.paginationElement).trigger( 'reload' );
						
						$(opt.settingsElements).removeClass('activ');
						$obj.addClass('activ');
					}
				}
				$(opt.settingsButton).trigger('click');
			},
			'json'
		);
	});
}

jQuery.settingsButton = function( Obj, opt )
{
	opt.containerBox = ( opt.containerBox ) ? opt.containerBox : '';
	
	var $obj = $(Obj);
	
	$obj.click(function()
	{
		if( !$obj.hasClass('open') ) 
		{
			$obj.addClass('open');
			$(opt.containerBox).slideDown();
		}
		else
		{
			$obj.removeClass('open');
			$(opt.containerBox).slideUp();
		}
	});
}

jQuery.optionsButton = function( Obj, opt )
{
	opt.interactionHeight = ( opt.interactionHeight ) ? opt.interactionHeight : 65;
	
	var $obj = $(Obj);
	
	$obj.click(function(event)
	{
		event.stopPropagation();
		if( $obj.hasClass('open') )
		{
			// e deja deschis, il inchidem
			general_inchide_options( true );
		}
		else
		{
			general_inchide_options( false );
			current_option_open = $obj;
			
			// inchidem tot, deschidem asta
			$obj.addClass('open');
			$obj.next().css('height', '0px').show().stop().animate(
			{
				height: opt.interactionHeight + 'px'
			}, 250);
		}
	});
	$obj.next().click(function(event)
	{
		event.stopPropagation();
	});
}

jQuery.AjaxPagination = function( Obj, opt ) 
{
	/* optional - se completeaza in template si ajax request pentru custom boxes */
	opt.catId = ( opt.catId ) ? opt.catId : 0;
	opt.templateName = ( opt.templateName ) ? opt.templateName : "";
	opt.boxLimit = ( opt.boxLimit ) ? opt.boxLimit : "";
	opt.boxId = ( opt.boxId ) ? opt.boxId : "";
	opt.pageId = ( opt.pageId ) ? opt.pageId : 0;
	/* optional - se completeaza in template si ajax request pentru custom boxes */

	opt.pageNumber = ( opt.pageNumber ) ? opt.pageNumber : 1; 
	opt.disabledClass = ( opt.disabledClass ) ? opt.disabledClass : "disabled"; 
	opt.pageMaxim = ( opt.pageMaxim ) ? opt.pageMaxim : 0; 
	opt.containerPagination = ( opt.containerPagination ) ? opt.containerPagination : "";
	opt.loader = ( opt.loader ) ? opt.loader : ".loader-blocker";
	opt.paginationClassActiv = ( opt.paginationClassActiv ) ? opt.paginationClassActiv : "activ";
	if( opt.containerPagination && opt.pageMaxim ) opt.hasBullets = 1
	else opt.hasBullets = 0;
	
	var $obj = $(Obj);
	var $loader = $obj.find(opt.loader);
	var $btnNext = $obj.find(opt.buttonNext);
	var $btnPrev = $obj.find(opt.buttonPrev);
	
	$loader.show();
	$.post(
		'libs/kissfm/kissfm_boxes_ajax_requests.php',
		{
			act: opt.actionUsed,
			page: opt.pageNumber,
			cat_id: opt.catId,
			template_name: opt.templateName,
			box_limit: opt.boxLimit,
			box_id: opt.boxId,
			page_id: opt.pageId
		},
		function( data ) 
		{
			$loader.hide();
			$obj.find(opt.containerBox).hide();
			$obj.find(opt.containerBox).html( data.content );
			$obj.find(opt.containerBox).fadeIn(600);
		},
		'json'
	);
	// afisam bullets(<a>-uri) daca e cazul, pagini de la 1 la pageMaxim, pageNumber are clasa "activ"
	if( opt.hasBullets )
	{
		var bullet_string = '';
		for( var i = 1; i <= opt.pageMaxim; i++ )
		{
			bullet_string = bullet_string + '<a>' + i + '</a>';
		}
		$obj.find(opt.containerPagination).html( bullet_string );
		var page_nr = opt.pageNumber - 1;
		$obj.find(opt.containerPagination + ' a:eq(' + page_nr + ')').addClass(opt.paginationClassActiv);
	}
	// disable la butoane daca e cazul
	$btnNext.removeClass(opt.disabledClass);
	$btnPrev.removeClass(opt.disabledClass);
	if( opt.pageNumber >= opt.pageMaxim ) $btnNext.addClass(opt.disabledClass);
	if( opt.pageNumber <= 1 ) $btnPrev.addClass(opt.disabledClass);
	
	var new_opts = opt;
	$obj.unbind('resetpages').bind('resetpages', function(e, data)
	{
		if( !isNaN( data ) )
		{
			if( data == 0 ) data = 1;
			new_opts.pageMaxim = data;
			if( new_opts.pageMaxim < new_opts.pageNumber ) new_opts.pageNumber = 1;
		}
	});
	$obj.unbind('reload').bind('reload', function()
	{
		$.AjaxPagination(Obj, new_opts);
	});
	$btnNext.unbind('click').click(function()
	{
		if( !$(this).hasClass(opt.disabledClass) && opt.pageNumber < opt.pageMaxim )
		{
			new_opts.pageNumber = new_opts.pageNumber + 1;
			$.AjaxPagination(Obj, new_opts);
		}
	});
	$btnPrev.unbind('click').click(function()
	{
		if( !$(this).hasClass(opt.disabledClass) && opt.pageNumber > 1 )
		{
			new_opts.pageNumber = new_opts.pageNumber - 1;
			$.AjaxPagination(Obj, new_opts);
		}
	});
	if( opt.hasBullets )
	{
		$obj.find(opt.containerPagination + ' a').unbind('click').click(function()
		{
			if( !$(this).hasClass(opt.paginationClassActiv) )
			{
				new_opts.pageNumber = parseInt($(this).html(), 10);
				$.AjaxPagination(Obj, new_opts);
			}
		});
	}
}
function general_inchide_options( animatie )
{
	if( current_option_open !== undefined ) 
	{
		if( animatie == false )
		{
			current_option_open.removeClass('open');
			current_option_open.next().css('height', '0px').hide();
		}
		else
		{
			current_option_open.next().stop().animate(
			{
				height: '0px'
			}, 250, function()
			{
				current_option_open.removeClass('open');
				current_option_open.next().hide();
			});
		}
	}
}


