function getDocElement(p_element_id) {
   if (document.layers){
      //Netscape 4 specific code
      pre = 'document.';
      post = '';
   }
   if (document.getElementById){
      //Netscape 6 specific code
      pre = 'document.getElementById("';
      post = '")';
   }
   if (document.all){
      //IE4+ specific code
      pre = 'document.all.';
      post = '';
   }
   
  var l_element = eval(pre + p_element_id + post);
  
  return(l_element);
}

function submitConstructedForm(p_form) {
   document.body.appendChild(p_form);
   p_form.submit();
}

/* The purpose of this code is to dynamically generate forms
 * that can be used for submitting content to the web server.
 * NB: This dynamic form generation is not intended to be used
 * for user accessable forms, hence the reason for the forms
 * display style being set to none.
 */
function constructForm(p_form, p_elements) {
   var l_form;
   var l_element;
   var l_len;
   var l_name;
   var l_value;
   var l_tag;
   var l_type;
   var l_i;
   
   l_form = document.createElement('form');
   
   l_form.method = p_form.method;
   l_form.action = p_form.action;

   l_form.style.display = 'none';
   
   l_len = p_elements.length;   
   for (l_i = 0; l_i < l_len; l_i++) {
      l_name = p_elements[l_i][0];
      l_value = p_elements[l_i][1];
      l_tag = p_elements[l_i][2];
      l_type = p_elements[l_i][3];
      try {
         l_element = document.createElement('<' + l_tag + ' name="' + l_name + '"' + (l_type == null ? '' : ' type="' + l_type + '"') + '>');
      } catch (e) {
    	 l_element = document.createElement(l_tag);
    	 l_element.setAttribute('name', l_name);
    	 if (l_type != null) l_element.setAttribute('type', l_type);
      }
      if (l_element) {
         if (l_tag.toLowerCase() == 'textarea') {
            l_element.innerHTML = l_value;
         } else {
            l_element.setAttribute('value', l_value);
         }
      }
      l_form.appendChild(l_element);
   }
   
   return l_form;
}

/**
 * Checks for potential cross site scripting text.
 * 
 * @param p_str
 * @return
 */
function containsXSS(p_str) {
    var lower = p_str.toLowerCase();
    var l_containsXSS = false;
    if(lower.match(/<script/)
    		|| lower.match(/<\/script/)
    		|| lower.match(/javascript:/)
    		|| lower.match(/href=/)
    		|| lower.match(/<img/)
    		|| lower.match(/<object/) ) {
    	
    	l_containsXSS = true; 
	} 
    
    return l_containsXSS;
}


/**
 * Checks for potential XSS attack in element. 
 * Always returns false if element cant be found, or it doesnt have a 'value' attribute. 
 * 
 * @param p_elemName
 * @return
 */
function elementContainsXSS(p_elemName) {
	if ($(p_elemName)) {
		if ($(p_elemName).value) {
			return containsXSS($(p_elemName).value);
		}
	}
	return false;
}


function trimResult(p_str) {
  return jQuery.trim(p_str);
}

function toggleLayer(p_selector) {
  jQuery(p_selector).toggle();
}

function hideLayer(p_selector) {
  jQuery(p_selector).hide();
}

function showLayer(p_selector) {
  jQuery(p_selector).show();
}

function setHtml(p_selector, p_content) {
  jQuery(p_selector).html(p_content);
}

function setValue(p_selector, p_value) {
  jQuery(p_selector).val(p_value);
}

/* Load response straight into the DOM
 *
 * parameters:
 * p_elements - DOM elements to update
 * p_url - resource to request
 * 3rd parameter - JSON data to be sent in request (optional)
 * 4th parameter - function to call with response (optional)
 */
function ajaxLoadIntoPage(p_elements, p_url) {
  if (arguments.length == 2) {
    jQuery(p_elements).load(p_url);
  } else if (arguments.length == 3) {
    jQuery(p_elements).load(p_url, arguments[2]);
  } else if (arguments.length == 4) {
    jQuery(p_elements).load(p_url, arguments[2], arguments[3]);
  }
}

/* Perform a http request and return the reponse, optionally perform processing
 * 
 * parameters:
 * p_url - resource to request
 * p_extra - see http://docs.jquery.com/Ajax/jQuery.ajax#options
 *
 * The idea with this function is that at a later stage if a migration away from jQuery takes place we'll be better positioned.
 */
function ajaxRequest(p_url, p_extra) {
  var response;
  var request = p_extra;
  
  request.url = p_url;
  
  if (typeof(p_extra.async) == 'undefined' || p_extra.async) {
    jQuery.ajax(request);
  } else {
    response = jQuery.ajax(request);
    
    return response.responseText;
  }
}