(function(){
		  
/**
 * The primary namespace object
 * @type {Object}
 * @alias LAU
 */
if(!window['JDOM']) {
    window['JDOM'] = {};
}

/*
window['LAU']['isCompatible'] = isCompatible;
window['LAU']['$'] = $;
window['LAU']['addEvent'] = addEvent;
window['LAU']['insertAfter'] = insertAfter;
window['LAU']['insertImgCaption'] = insertImgCaption;
*/

/**
 * Checks to see if the current browser is compatible with the entire library
 */
function isCompatible(other) {
    // Use capability detection to check requirements
    if( other===false 
        || !Array.prototype.push
        || !Object.hasOwnProperty
        || !document.createElement
        || !document.getElementsByTagName
        ) {
        alert('TR- if you see this message isCompatible is failing incorrectly.');
        return false;
    }
    return true;
}
window['JDOM']['isCompatible'] = isCompatible;

/**
 * document.getElementById(); replacement.
 */
function $() {
    var elements = new Array();
    
    // Find all the elements supplied as arguments
    for (var i = 0; i < arguments.length; i++) {
        var element = arguments[i];
        
        // If the argument is a string assume it's an id
        if (typeof element == 'string') {
            element = document.getElementById(element);
        }
        
        // If only one argument was supplied, return the element immediately
        if (arguments.length == 1) {
            return element;
        }
        
        // Otherwise add it to the array
        elements.push(element);
    }
    
    // Return the array of multiple requested elements
    return elements;
};
window['JDOM']['$'] = $;

/**
 * Retrieve an array of element base on a class name
 */
function getElementsByClassName(className, tag, parent){
    parent = parent || document;
    if(!(parent = $(parent))) return false;
    
    // Locate all the matching tags
    var allTags = (tag == "*" && parent.all) ? parent.all : parent.getElementsByTagName(tag);
    var matchingElements = new Array();
    
    // Create a regular expression to determine if the className is correct
    className = className.replace(/\-/g, "\\-");
    var regex = new RegExp("(^|\\s)" + className + "(\\s|$)");
    
    var element;
    // Check each element
    for(var i=0; i<allTags.length; i++){
        element = allTags[i];
        if(regex.test(element.className)){
            matchingElements.push(element);
        }
    }
    
    // Return any matching elements
    return matchingElements;
};
window['JDOM']['getElementsByClassName'] = getElementsByClassName;

/**
 * Register an event listener on an element
 */
function addEvent( node, type, listener ) {
    // Check compatibility using the earlier method
    // to ensure graceful degradation
    if(!isCompatible()) { return false }
    if(!(node = $(node))) return false;
    
    if (node.addEventListener) {
        // W3C method
        node.addEventListener( type, listener, false );
        return true;
    } else if(node.attachEvent) {
        // MSIE method
        node['e'+type+listener] = listener;
        node[type+listener] = function(){node['e'+type+listener]( window.event );}
        node.attachEvent( 'on'+type, node[type+listener] );
        return true;
    }
    
    // Didn't have either so return false
    return false;
};
window['JDOM']['addEvent'] = addEvent;

/**
 * Pop up
 */
function popup(target, name, sizes) {
	newwindow=window.open(target, name, sizes);
	if (window.focus) {newwindow.focus()}
	return false;
}
window['JDOM']['popup'] = popup;

/**
 * Pop up with css
 */
function popup_css(target, wall, switcher) 
{
if (switcher == 1) 
	{
	// Show popup
	var target = $(target);
	var wall = $(wall);
	with (target.style)
		{
		visibility = 'visible'; 
		display = 'block';
		}
	with (wall.style)
		{
		visibility = 'visible'; 
		display = 'block';
		}
	} 
else 
	{
	// Hide popup
	var target = $(target);
	var wall = $(wall);
	with (target.style)
		{
		visibility = 'hidden'; 
		display = 'none';
		}
	with (wall.style)
		{
		visibility = 'hidden'; 
		display = 'none';
		}
	}
}
window['JDOM']['popup_css'] = popup_css;


/**
 * Text enlarger
 */
function resizeText(multiplier,target) 
{
var target = $(target);  
if (target.style.fontSize == "") 
	{ 
	target.style.fontSize = "1.0em"; 
	} 
target.style.fontSize = parseFloat(target.style.fontSize) + (multiplier * 0.2) + "em"; 
};
window['JDOM']['resizeText'] = resizeText;

/**
 * insertAfter
 */
function insertAfter(newElement,targetElement) {
  var parent = targetElement.parentNode;
  if (parent.lastChild == targetElement) {
    parent.appendChild(newElement);
  } else {
    parent.insertBefore(newElement,targetElement.nextSibling);
  }
}
window['JDOM']['insertAfter'] = insertAfter;

/**
 * insert image caption
 */
function insertImgCaption(target)
{
var target = $(target);
var objs = target.getElementsByTagName("img");
//var target = id.objs;
for (var i=0; i<objs.length; i++) 
	{
	var div_caption = document.createElement("div");
	var a = document.createElement('a');
	
	var get_width = target.getElementsByTagName("img")[i].getAttribute('width');
	var get_longdesc = target.getElementsByTagName("img")[i].getAttribute('longdesc');
	
	//alert (div_width);
	//div_caption.style.width = get_width + 'px'; 
	//alert (div_caption.style.width);
	//alert (get_longdesc);
	a.href = get_longdesc;
	
	with (div_caption.style)
    {
      width = get_width + 'px'; 
	  padding = '0px';
	  marginBottom = '0px';
	  background = '#ffffff';
      fontFamily = 'Arial,Helvetica,sans-serif';
      fontSize = '9pt';
      fontWeight = 'normal';
    }
	
	var title = document.createElement("span");
	with (title.style)
    {
      fontStyle = 'italic';
	  paddingRight = '5px';
      fontWeight = 'normal';
	  //color = '#af391d';
    }
	
	var alt = document.createElement("span");
	with (alt.style)
    {
      fontStyle = 'normal';
	  fontSize = '9pt';
    }
	//var para = document.createElement("p");
	//document.body.appendChild(div);
	//div.appendChild(para);
	
	var get_title = '/ ' + target.getElementsByTagName("img")[i].getAttribute('title');
	var get_alt = target.getElementsByTagName("img")[i].getAttribute('alt');
	
	var create_title = document.createTextNode(get_title);
	var create_alt = document.createTextNode(get_alt);
	
	title.appendChild(create_title);
	//a.appendChild(create_alt);
	alt.appendChild(create_alt);
	
	div_caption.appendChild(title);
	//div_caption.appendChild(a);
	div_caption.appendChild(alt);
	
	var img = target.getElementsByTagName("img")[i];
  	//img.parentNode.insertBefore(txt,img);
	insertAfter(div_caption,img);
	//insertAfter(title,img);
	//insertAfter(alt,title);
	}
}
window['JDOM']['insertImgCaption'] = insertImgCaption;

/**
 * insert image caption with link
 */
function insertImgCaption_link(target)
{
var target = $(target);
var objs = target.getElementsByTagName("img");
//var target = id.objs;
for (var i=0; i<objs.length; i++) 
	{
	var div_caption = document.createElement("div");
	var a = document.createElement('a');
	
	var get_width = target.getElementsByTagName("img")[i].getAttribute('width');
	var get_longdesc = target.getElementsByTagName("img")[i].getAttribute('longdesc');
	
	//alert (div_width);
	//div_caption.style.width = get_width + 'px'; 
	//alert (div_caption.style.width);
	//alert (get_longdesc);
	a.href = get_longdesc;
	
	with (div_caption.style)
    {
      width = get_width + 'px'; 
	  padding = '0px';
	  marginBottom = '0px';
	  background = '#ffffff';
      fontFamily = 'Arial,Helvetica,sans-serif';
      fontSize = '9pt';
      fontWeight = 'normal';
    }
	
	var title = document.createElement("span");
	with (title.style)
    {
      fontStyle = 'italic';
	  paddingRight = '5px';
      fontWeight = 'normal';
	  //color = '#af391d';
    }
	
	var alt = document.createElement("span");
	with (alt.style)
    {
      fontStyle = 'normal';
	  fontSize = '9pt';
    }
	//var para = document.createElement("p");
	//document.body.appendChild(div);
	//div.appendChild(para);
	
	var get_title = '/ ' + target.getElementsByTagName("img")[i].getAttribute('title');
	var get_alt = target.getElementsByTagName("img")[i].getAttribute('alt');
	
	var create_title = document.createTextNode(get_title);
	var create_alt = document.createTextNode(get_alt);
	
	title.appendChild(create_title);
	a.appendChild(create_alt);
	//alt.appendChild(create_alt);
	
	div_caption.appendChild(title);
	div_caption.appendChild(a);
	//div_caption.appendChild(alt);
	
	var img = target.getElementsByTagName("img")[i];
  	//img.parentNode.insertBefore(txt,img);
	insertAfter(div_caption,img);
	//insertAfter(title,img);
	//insertAfter(alt,title);
	}
}
window['JDOM']['insertImgCaption_link'] = insertImgCaption_link;

/**
 * ajax object
 */
function getXMLHttpRequestObject()
{
    if(window.XMLHttpRequest) return new window.XMLHttpRequest(); // IE 7, Mozilla, Safari, Firefox, Opera, most browsers
    else if(window.ActiveXObject) return new window.ActiveXObject("Msxml2.XMLHTTP"); // Create type Msxml2.XMLHTTP, if possible
    else return new window.ActiveXObject("Microsoft.XMLHTTP");
    return 0; // return 0 just in case none of the statements apply
}

/**
 * ajax get
 */
function get(url, target)
{
    var req = getXMLHttpRequestObject();
    if(req)
    {
        // alert(startRow);
        req.onreadystatechange = function() {
            if(req.readyState == 4) document.getElementById(target).innerHTML = req.responseText;
            else document.getElementById(target).innerHTML = "<div id=\"ajax_loader\"><table border=\"0\"><tr><td><img src=\"img_iconies/ajax_loader_search.gif\"> </td><td> Processing... please wait.</td></tr></table><div>";
        };
        req.open("get", url, true);
		//req.open("get", url+'?data='+encodeURIComponent(data), true);
        req.send(null);
    }
    else alert("Request failed.");
}
window['JDOM']['ajaxGet'] = get;

/**
 * ajax get TinyMCE
 */
function getMCE(url, target)
{
    var req = getXMLHttpRequestObject();
    if(req)
    {
	req.onreadystatechange = function() 
		{
		if (req.readyState == 4) 
			{
			document.getElementById(target).innerHTML = req.responseText;
			tinyMCE.execCommand('mceAddControl', false, 'content_update');
			tinyMCE.execCommand('mceAddControl', false, 'content_add');
			tinyMCE.execCommand('mceAddControl', false, 'content_nl');
			} 
			else 
			{
			document.getElementById(target).innerHTML = "<div id=\"ajax_loader\"><table border=\"0\"><tr><td><img src=\"img_iconies/ajax_loader_search.gif\"> </td><td> Processing... please wait.</td></tr></table><div>";
			}
        };
	req.open("get", url, true);
	req.send(null);
    }
    else alert("Request failed.");
}

window['JDOM']['ajaxGetMCE'] = getMCE;

/**
 * ajax post
 */
function post(thisform,url,target)
{
// Set up data variable
var formdata = "";
// Set up Ajax request variable
xmlhttp = getXMLHttpRequestObject();
// Loop through form fields
for (i=0; i < thisform.length; i++)
    {
	//Build Send String
	if(thisform.elements[i].type == "text")
		{ //Handle Textbox's
		formdata = formdata + thisform.elements[i].name + "=" + escape(thisform.elements[i].value) + "&";
		}
	else if(thisform.elements[i].type == "textarea")
		{ //Handle textareas
		formdata = formdata + thisform.elements[i].name + "=" + escape(thisform.elements[i].value) + "&";
		}
	else if(thisform.elements[i].type == "checkbox")
		{ //Handle checkbox's
		formdata = formdata + thisform.elements[i].name + "=" + thisform.elements[i].checked + "&";
		}
	else if(thisform.elements[i].type == "radio")
	{ //Handle Radio buttons
	if(thisform.elements[i].checked==true)
		{
		formdata = formdata + thisform.elements[i].name + "=" + thisform.elements[i].value + "&";
		}
	}
	else
		{
		//finally, this should theoretically this is a select box.
		formdata = formdata + thisform.elements[i].name + "=" + escape(thisform.elements[i].value) + "&";
		//formdata = formdata + 'content=' + escape(FCKeditorAPI.GetInstance('content').GetXHTML()) + "&";
		//origianl:
		//var pars = 'page_content=' + escape(FCKeditorAPI.GetInstance('page_content').GetXHTML());
		}
    }

//Send Ajax Request
xmlhttp.onreadystatechange = function()
	{
	var wait = document.getElementById(target);
	wait.innerHTML = '<div id=\"ajax_loader\"><table border=\"0\"><tr><td><img src=\"img_iconies/ajax_loader_search.gif\"> </td><td> Processing... please wait.</td></tr></table><div>';
	//Check page is completed and there were no problems.
	if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) 
		{
		//What to do once the form is submitted - to inform the user.
		//alert("Your form has been successfully submitted");
		var request_response = document.getElementById(target);
		//var userSignature= FCKeditorAPI.GetInstance('content').GetHTML();
		request_response.innerHTML = xmlhttp.responseText;
		}
    }
//Make connection
xmlhttp.open("POST", url);
//Set Headers
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//Send data
xmlhttp.send(formdata);
//stops form from submitting normally
return false;
}
window['JDOM']['ajaxPost'] = post;


/**
 * ajax post
 */
function postXML(thisform,url,target)
{
// Process tinyMCE
tinyMCE.triggerSave(true,true); 

// Set up data variable
var formdata = "";

// Set up Ajax request variable
xmlhttp = getXMLHttpRequestObject();

// Loop through form fields
for (i=0; i < thisform.length; i++)
    {
	//Build Send String
	if(thisform.elements[i].type == "text")
		{ //Handle Textbox's
		formdata = formdata + thisform.elements[i].name + "=" + escape(thisform.elements[i].value) + "&";
		}
	else if(thisform.elements[i].type == "textarea")
		{ //Handle textareas
		formdata = formdata + thisform.elements[i].name + "=" + escape(thisform.elements[i].value) + "&";
		}
	else if(thisform.elements[i].type == "checkbox")
		{ //Handle checkbox's
		formdata = formdata + thisform.elements[i].name + "=" + thisform.elements[i].checked + "&";
		}
	else if(thisform.elements[i].type == "radio")
	{ //Handle Radio buttons
	if(thisform.elements[i].checked==true)
		{
		formdata = formdata + thisform.elements[i].name + "=" + thisform.elements[i].value + "&";
		}
	}
	else
		{
		//finally, this should theoretically this is a select box.
		formdata = formdata + thisform.elements[i].name + "=" + escape(thisform.elements[i].value) + "&";
		}
    }
	
xmlhttp.onreadystatechange = function() 
	{
	// Pass it this request object:
	handleResponse(xmlhttp,target,thisform);
	}

/*
//Send Ajax Request
xmlhttp.onreadystatechange = function()
	{
	var wait = document.getElementById(target);
	wait.innerHTML = '<div id=\"ajax_loader\"><table border=\"0\"><tr><td><img src=\"img_iconies/ajax_loader_search.gif\"> </td><td> Processing... please wait.</td></tr></table><div>';
	//Check page is completed and there were no problems.
	if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) 
		{
		//What to do once the form is submitted - to inform the user.
		//alert("Your form has been successfully submitted");
		var request_response = document.getElementById(target);
		//var userSignature= FCKeditorAPI.GetInstance('content').GetHTML();
		request_response.innerHTML = xmlhttp.responseText;
		}
    }
*/
//Make connection
xmlhttp.open("POST", url);
//Set Headers
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//Send data
xmlhttp.send(formdata);
//stops form from submitting normally
return false;
}

// Function that handles the response from the PHP script:
function handleResponse(xmlhttp,target,thisform) 
{

// To wait
var wait = document.getElementById(target);
wait.style.display = 'block';
wait.innerHTML = '<div id=\"ajax_loader\"><table border=\"0\"><tr><td><img src=\"img_iconies/ajax_loader_search.gif\"> </td><td> Processing... please wait.</td></tr></table><div>';

// Check that the transaction is complete:
if (xmlhttp.readyState == 4) 
	{
	
	// Check for a valid HTTP status code:
    if ((xmlhttp.status == 200) || (xmlhttp.status == 304) ) 
		{
		var results = document.getElementById(target);
      	var labels = document.getElementsByTagName('label');
		var imgs = thisform.getElementsByTagName('img');
		// Reset all the labels:
		for (i=0; i < labels.length; i++)
			{
			labels[i].className = 'title';
			//alert(labels[i].id);
			}
		for (i=0; i < imgs.length; i++)
			{
			imgs[i].style.visibility = 'hidden';
			//alert(labels[i].id);
			}
		
		// Get the XML data:
		var data = xmlhttp.responseXML;
      
		// Get the URL if there is any:
		var urls = data.getElementsByTagName('url');
		for (var i = 0; i < urls.length; i++) 
			{
			// Get the error value:
			url = urls[i].firstChild.nodeValue;
			//alert(url);
			//document.location='index.php';
			get(url, target);
			}
			
		// Get the main response:
		var message = data.getElementsByTagName('result');
      
		// Get all the errors:
		var errors = data.getElementsByTagName('error');
		
		// Temp variable to use in the loop:
		var temp = false;
      
		// Loop through each error:
		for (var i = 0; i < errors.length; i++) 
			{
			// Get the error value:
			temp = errors[i].firstChild.nodeValue;
			//alert(temp);
			
			// Change the class:
			document.getElementById(temp + '_label').className = 'error';
			document.getElementById(temp + '_img').style.visibility = 'visible';
			} // End of FOR loop.
  
		// Put the received response in the DOM:
		var msg = "";
		for (var i = 0; i < message.length; i++) 
			{
			//
			var div_caption = document.createElement("div");
			
			//
			var get_result = message[i].firstChild.nodeValue;
			var create_title = document.createTextNode(get_result);
			
			//
			div_caption.appendChild(create_title)
			//alert(message[i].firstChild.nodeValue);
			msg = msg + '<div>* ' + message[i].firstChild.nodeValue + '\n' + '</div>';
			}
		//alert(msg); 
		results.innerHTML = msg;
		// Make the results box visible:
		results.style.display = 'block';
		} 	
	} // End of readyState IF. 
} // End of handleResponse() function.
window['JDOM']['ajaxPostXML'] = postXML;


/*
end of JDOM
*/

})();