var $panArray;
var $targArray;
var $panAcc;

jQuery.fn.slidePanel = function(parameters){
	settings = {
		status: 'closed',
		speed: 'normal',
		target: 'next',
		remote:'false',
		role:'normal'
		};
	//extend settings in jQuery object
	jQuery.extend(settings, parameters);
	
	//Initialize any panel and keep chinable
		return this.each(function(){
			var $panel = $(this);
			//set target variable to the required target panel, default is next
			if (settings.target == 'next'){
					var $target = $panel.next();
				}
				else{
					var $target = $(settings.target);
				}
					
				//Add general class to panel element
				//if target start closed add the .panel-closed class			
			if (settings.status == 'closed'){
					$target.addClass('panel-target panel-closed');
					$panel.addClass('panel panel-up');
				}
				else{
					$target.addClass('panel-target');
					$panel.addClass('panel panel-down');
							
				}
			if(settings.role == 'accordion'){
						panelAcc($target);
						if($panAcc.length == '1'){$panAcc[0].removeClass('panel-closed');}												
						$panel.click(function(){
							for (var j = 0; j < $panAcc.length; j++){$panAcc[j].slideUp();}
								$target.slideDown();							
							});							
					
			}					
			// if Role is Master bind the function to the master panel click	
			else if (settings.role == 'master'){
						$panel.click(function(){
							$target.slideToggle(settings.speed);//make the master element sliding					
							for (var i = 0; i < $targArray.length; i++){						
								$targArray[i].slideToggle();//the dep element toogle on master click
							}	
							//preserve the class to the dependent panel element for graphic display
							for (var i = 0; i < $panArray.length; i++){
								if(	$panArray[i].hasClass('panel-down')){$panArray[i].addClass('panel-up').removeClass('panel-down');}
									else{$panArray[i].addClass('panel-down').removeClass('panel-up');}
							}	
						});
				}
				else
				{
				
				//if Ajax with opened starting status fire the calling onLoad
				if(settings.remote == 'true' && settings.status != 'closed'){
					var page = $panel.children().filter('a').eq(0).attr('href');
					$target.load(page);
				}
				//if role is dep add element to a repository Array	
				if (settings.role == 'dep'){panelAssets($panel,$target);}
			
				//bind the click required event				
				$panel.click(function(){
					$target.slideToggle(settings.speed, function(){
						//if is ajax check if content has allready been loaded
						if(settings.remote == 'true'){
							var txt = $target.text();
								if(txt.length == '0'){
									var $a = $panel.children().filter('a').eq(0);
									var exText = $a.text();
									$a.text('Loading....');
										var page = $panel.children().filter('a').attr('href');
											$target.load(page, function(){$a.text(exText);});	
								}
						}
					});
				$panel.toggleClass('panel-down');
				$panel.toggleClass('panel-up');
				return false;
			});
		   }	
		});				
	//repository Array for depending element		
	function panelAssets(elem,elem1){
		if ($panArray == undefined && $targArray == undefined){
				$panArray = [];
				$panArray[0] = elem;
				$targArray = [];
				$targArray[0] = elem1;				
			}
			else{
				$panArray[$panArray.length] = elem;
				$targArray[$targArray.length] = elem1;
		}
	}		
	//repository Array for depending element		
	function panelAcc(elem){
		if ($panAcc == undefined){
				$panAcc = [];
				$panAcc[0] = elem;
			}
			else{
				$panAcc[$panAcc.length] = elem;
		}
	}		
}
