
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.get('method');
   l_form.action = p_form.get('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;
  }
}

function ajaxPaginationSearch(p_qstring) {
    var p_resultDivId = 'centricSearchResults';
    var l_url = '/public/search.aspx' + p_qstring;
    displayLoadingIcon(p_resultDivId);
	ajaxGet(l_url, p_resultDivId);     
}


function ajaxGet(p_url, p_target) { 
    jQuery("#" + p_target).load(p_url);
}


function ajaxFormPost(p_formId, p_url, p_resultDivId) { 

	var fieldscontainXSS = false;
	jQuery("#" + p_formId).find("input").each(function(i){
	  if(containsXSS($(this).value)){
	  	fieldscontainXSS = true;
	  }
	}); 
	
	if(!fieldscontainXSS) {
			jQuery.post(p_url, jQuery("#" + p_formId).serialize(), function(data,status){
					jQuery("#" + p_resultDivId).html(data);
			});  
	} else{
		alert('Could not post form');
	}
}


function displayLoadingIcon(p_resultDivId) {
  jQuery("#" + p_resultDivId).html("<p><img src='/images/loadinganimation_small.gif' alt='Loading...' border='0' /></p>");
}

function ajaxSearchPost(p_formId, p_resultDivId, p_webId, p_includeExistingQueryString) { 
  var l_url = '/public/search.aspx';
  var l_params = '';
  var l_fieldsContainXSS = false;
  
	jQuery("#" + p_formId).find("input").each(function(i){
	  if(containsXSS($(this).value)){
	  	l_fieldsContainXSS = true;
	  }
	}); 
	
	if(l_fieldsContainXSS){
		alert('Invalid Search');
	} else{

		displayLoadingIcon(p_resultDivId);

		if (p_includeExistingQueryString) {
			if (location.href.indexOf('?') > -1) {
				l_params = location.href.substring(location.href.indexOf('?') + 1);
			}
		}

		if (l_params.indexOf('f_abstract_enabled') < 0) {
			l_params += (l_params == '' ? '' : '&') +
            			'f_abstract_enabled=' + m_abstract_enabled + 
            			'&f_abstract_fragment_count=' + m_abstract_fragment_count + 
            			'&f_abstract_fragment_size=' + m_abstract_fragment_size + 
            			'&f_abstract_fragment_separator=' + m_abstract_fragment_separator;
		}

		l_params += (l_params == '' ? '' : '&') +
		            'f_web_id=' + p_webId;

		if (l_params != '') {
			l_url = l_url + '?' + l_params;
		}

		ajaxFormPost(p_formId, l_url, p_resultDivId);     
	}
}

function ajaxEditModeLinkPost(p_resultDivId) { 
  var l_url = '/public/editmodelink.aspx';
  var l_params = 'f_helpertext_in_edit_mode=' + m_editmodelink_helpertext_in_edit_mode + 
                 '&f_helpertext_in_normal_mode=' + m_editmodelink_helpertext_in_normal_mode + 
                 '&f_page_id=' + m_editmodelink_page_id +
                 '&f_web_id=' + m_editmodelink_web_id +
                 '&f_url=' + m_editmodelink_url_disp +
                 '&f_url_layout=' + m_editmodelink_url_edit;

  ajaxRequest(l_url, { data: l_params, cache: false,  success: function(html) { setHtml("#" + p_resultDivId, trimResult(html)); } });    
}

function ajaxEditModeLinkUpdate() { 
  var l_url = '/public/editmodelink.aspx';
  var l_params = 'f_action=change' +
                 '&f_page_id=' + m_editmodelink_page_id +
                 '&f_web_id=' + m_editmodelink_web_id +
                 '&f_url=' + m_editmodelink_url_disp +
                 '&f_url_layout=' + m_editmodelink_url_edit;
  
  ajaxRequest(l_url, { data: l_params, cache: false, success: function(html) { location.href = trimResult(html); } });
}

function ajaxShareAdd(p_url, p_resourceId, p_returnPageId, p_successMsg, p_failureMsg) {
  var l_params = '';

  if (p_url.indexOf('?') > -1) {
    l_params = p_url.substring(p_url.indexOf('?') + 1);
    p_url = p_url.substring(0, p_url.indexOf('?'));
  }

  l_params += (l_params == '' ? '' : '&') +
              'pid=' + p_resourceId +
              '&returnto=' + p_returnPageId;  
  
  ajaxRequest(p_url, { data: l_params, cache: false, success: function(html) { alert(p_successMsg); } });  
}

function ajaxListingPost(p_divId, p_thes) {
  setValue("#type", p_thes);
  document.filterForm.submit();
}



function cmOpenModalBox(p_url, p_title, p_size){
//NOTE: Ensure the page has a css <link> to ../public/thickbox.css
var width = 0;
var height = 0;
    //set window size 1=small, 2=medium, 3=large, 4=x-large, 5=xx-large
    //size constants set in AdminUIConstants (POPUP_MODAL_BOX_SMALL, POPUP_MODAL_BOX_MEDIUM, POPUP_MODAL_BOX_LARGE, POPUP_MODAL_BOX_XLARGE, POPUP_MODAL_BOX_XXLARGE)
    switch (p_size){
        case 1:
            //small
            width = 550;
            height = 300;
            break;
        case 2:
            //medium
            width = 550;
            height = 550;
            break;
        case 3:
            //large
            width = 550;
            height = 700;
            break;
        case 4:
            //x-large
            width = 700;
            height = 700;
            break;
        case 5:
            //xx-large
            width = 800;
            height = 700;
            break;
        case 6:
            //wide
            width = 900;
            height = 800;
            break;
            
        default:
            //large fit all
            width = 800;
            height = 700;
            break;
    }
    
    
    //iframe thickbox
    jQuery(document).ready(function(){
        if(p_url.indexOf('?') == -1)
        {
            tb_show( p_title,p_url+'?TB_iframe=true&height='+height+'&width='+width,false);
        } 
        else 
        {
            tb_show( p_title,p_url+'&TB_iframe=true&height='+height+'&width='+width,false);
        }
    });
}

function cmCloseModalBox(){
    self.parent.tb_remove();
}


function cmPopUpDialog(p_url, p_title, p_width, p_height){
    window.open(p_url,p_title,'width='+p_width+',height='+p_height+',toolbar=no,directories=0,status=0,scrollbars=1,menubar=0,location=0,resizable=1');
}

function cmAddModalBoxTitle(p_title){
				jQuery(document).ready(function(){
					//test if currently displayed in thick box
					if (top.jQuery('#TB_ajaxWindowTitle').length )
					{
						top.jQuery('#TB_ajaxWindowTitle').text(p_title);
					}
				});
}






