var setting_loadingHTML = "<img src='images/loading.gif' width='24' height='24' />";//LOADING HTML

// Global variables
var xmlhttp;  // The variable that makes Ajax possible
var arr_elements = new Array();
var ie, moz, css3;
var change_speed;
var change_speed_std = 3;

// Function to control all the functions
function pl(settings_content,settings_menu1,settings_menu2)
	{
	
	// Create the XMLHTTP object
	_pl_xmlhttp_create();
	
	// Optional settings ('#loading=1/0#')
	_pl_content_change(settings_content);
	
	// Highlight one element
	// Required settings ('#id for the holder element#','#menu element tag-type#','#array position#','#active classname#','#inactive classname#')
	if (settings_menu1)
		{
		// If settings are found for menu highlighting, run the function
		_pl_menu_highlight(settings_menu1);
		}
	// Highlight another element
	// Required settings ('#id for the holder element#','#menu element tag-type#','#array position#','#active classname#','#inactive classname#')
	if (settings_menu2)
		{
		// If settings are found for menu highlighting, run the function
		_pl_menu_highlight(settings_menu2);
		}
	}

// Function to check the browser, and create the XMLHTTP object
function _pl_xmlhttp_create()
	{
	try {
		// Opera 8.0+, Firefox, Safari
		xmlhttp = new XMLHttpRequest();
		}
	catch (e)
		{
		try {
			// Internet Explorer Browsers
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			}
		catch (e)
			{
			try {
				// Internet Explorer Browsers
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				}
			catch (e)
				{
				// Browser does not support Ajax
				alert("Your browser does not support Ajax!");
				return false;
				}
			}
		}
	return true;
	}

// Function to get content from a .php-file
function _pl_content_change(settings)
	{
	// Get the settings for this function
	var arr_settings = new Array();
	if (settings)
		{
		// Check if there are any settings
		arr_settings = settings.split(":");
		}
	// Create a function that will receive data sent from the server
	xmlhttp.onreadystatechange = function(){
		if (xmlhttp.readyState == 1)
			{
			// Check if loading is enabled
			if (arr_settings[2])
				{
				// Write the text below, when loading begins
				//_pl_write_result(setting_loadingHTML,arr_settings[2]);
				_pl_overlay_fade(arr_settings[2], "up");
				}
			}
		if (xmlhttp.readyState == 4)
			{
			// Check if loading is enabled
			if (arr_settings[2])
				{
				// Clear the loading-HTML when loading is complete
				//_pl_write_result("",arr_settings[2]);
				_pl_overlay_fade(arr_settings[2]);
				}
			
			// Write the result after loading is complete
			_pl_write_result(xmlhttp.responseText,arr_settings[0]);
			}
		}
	// Open the file
	xmlhttp.open("GET", arr_settings[1], true);
	
	// Send the content of the file
	xmlhttp.send(null);
	}

// Function to write a string to a target
function _pl_write_result(string,target_id)
	{
	// Get the target element
	var target = document.getElementById(target_id);
	// Write the string to the target element
	target.innerHTML = string;
	}

// Funtion to change the classname of an element
function _pl_menu_highlight(settings)
	{
	// Get the settings for this function
	var arr_settings = new Array();
	if (settings)
		{
		// Check if there are any settings
		arr_settings = settings.split(":");
		}
	
	// Get the holder element
	var hl_element = document.getElementById(arr_settings[0]);
		hl_element = hl_element.getElementsByTagName(arr_settings[1])
	for (var x = 0; x < hl_element.length; x = x + 1)
		{
		// Change the classname of the elements holding the menu
		hl_element[x].className = arr_settings[4];
		}
	// Change the classname for the active element holding the menu
	hl_element[arr_settings[2]].className = arr_settings[3];
	}

// Function to display overlay, with loader
function _pl_overlay_fade(container_id, action)
	{
	if (action == "up")
		{
		// Check if overlay-object exists
		if (!document.getElementById("_pl_overlay"))
			{
			// If it does not exist, create it
			var overlay = document.createElement("div");
				overlay.setAttribute("id","_pl_overlay");
				overlay.style.position = "absolute";
				overlay.style.top = "0px";
				overlay.style.left = "0px";
				overlay.style.width = "100%";
				overlay.style.height = "100%";
				overlay.style.MozOpacity = 0.0;
				overlay.style.opacity = 0.0;
				overlay.style.filter = "alpha(opacity=0)";
				overlay.style.zIndex = 1000;
				overlay.innerHTML = setting_loadingHTML;
			document.getElementById(container_id).appendChild(overlay);
			}
		
		// Fade in the overlay
		_pl_fade_("_pl_overlay", 100, 4);
		}
	else
		{
		_pl_fade_("_pl_overlay", 0, 4);
		}
	}

// Function to control fade up/down
function _pl_fade_(element,opacity_end, speed)
	{
	// Check if element is object, or a string
	if (typeof(element) != "object")
		{
		element = document.getElementById(element);
		}
	
	if (element)
		{
		// Find current element opacity
		ie = !!element.filters;
		moz = element.style.MozOpacity != undefined;
		css3 = element.style.opacity != undefined;
		
		// If none applies, quit function
		if (!ie && !moz && !css3)
			{
			return;
			}
		
		// Make sure speed is more than 0 (zero)
		change_speed = (speed > 0) ? speed : change_speed_std;
		
		var arr_number = arr_elements.length;
		
		for (var x = 0; arr_number > x; x++)
			{
			if(arr_elements[x][0] && arr_elements[x][0] == element)
				{
				clearInterval(arr_elements[x][4]);
				arr_number = x;
				break;
				}
			arr_elements[arr_number] = new Array();
			}
		
		if (arr_number == 0)
			{
			arr_elements[arr_number] = new Array();
			}
		
		if (ie)
			{
			var opacity_current = element.filters.alpha.opacity;
			}
		else if (css3)
			{
			var opacity_current = (element.style.opacity * 100);
			}
		else
			{
			var opacity_current = (element.style.MozOpacity * 100);
			}
		if (opacity_current != opacity_end)
			{
			arr_elements[arr_number][0] = element;
			arr_elements[arr_number][1] = opacity_current;
			arr_elements[arr_number][2] = opacity_end;
			arr_elements[arr_number][3] = (opacity_end > opacity_current) ? change_speed : -change_speed;
			arr_elements[arr_number][4] = setInterval("_pl_fade_anim("+arr_number+")", 10);
			}
		}
	}

// Function to create the fade animation
function _pl_fade_anim(arr_number)
	{
	arr_elements[arr_number][1] += arr_elements[arr_number][3];
	
	if (ie)
		{
		arr_elements[arr_number][0].filters.alpha.opacity = arr_elements[arr_number][1];
		}
	else if(css3)
		{
		arr_elements[arr_number][0].style.opacity = Math.min(0.99, arr_elements[arr_number][1] / 100);
		}
	else
		{
		arr_elements[arr_number][0].style.MozOpacity = Math.min(0.99, arr_elements[arr_number][1] / 100);
		}
	
	if (arr_elements[arr_number][1] >= arr_elements[arr_number][2] && arr_elements[arr_number][3] > 0)
		{
		clearInterval(arr_elements[arr_number][4]);
		return;
		}
	if (arr_elements[arr_number][1] <= arr_elements[arr_number][2] && arr_elements[arr_number][3] < 0)
		{
		clearInterval(arr_elements[arr_number][4]);
		return;
		}
	}