/*var loadedJS = new Array() ;

function include(script, cacheable, singleLoad) {
	var i ;
    var found = false ;

    for (i=0;i<loadedJS.length;i++) {
      if (loadedJS[i] == script) {
        found = true ;
      }
    }

    if (!found) {
      if (singleLoad !== false) {
    	loadedJS[loadedJS.length] = script ;  
      }
    	
	  eltScript = document.createElement("script");
	  eltScript.setAttribute("type", "text/javascript");
	
	  if (cacheable === false) {
	    if(script.indexOf('?') > -1) {
	      script += '&';
	    }
	    else {
	      script += '?';
	    }
	
	    script += 'rand=' + Math.random();
	  }
	
	  eltScript.setAttribute("src", script);
	  document.getElementsByTagName('head')[0].appendChild(eltScript);
   }
}
*/

var clickedmainmenu	= false;

function include(script, cacheable) {
  eltScript = document.createElement("script");
  eltScript.setAttribute("type", "text/javascript");

  if (cacheable === false) {
    if(script.indexOf('?') > -1) {
      script += '&';
    }
    else {
      script += '?';
    }

    script += 'rand=' + Math.random();
  }

  eltScript.setAttribute("src", script);
  document.getElementsByTagName('head')[0].appendChild(eltScript);
}



function isNull(a) {
  return typeof a == 'object' && !a;
}

function isset(a) {
  return !isNull(a) && a !=undefined ;
}

function trim(str, chars) {
  return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
  chars = chars || "\\s";
  return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
  chars = chars || "\\s";
  return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function strpos (haystack, needle, offset) {
    var i = (haystack+'').indexOf(needle, (offset || 0));
    return i === -1 ? false : i;
} 



function urlencode(str) {
  return escape(str).replace(/\+/g,'%2B').replace(/%20/g, '+').replace(/\*/g, '%2A').replace(/\//g, '%2F').replace(/@/g, '%40');
}
var commandCue = Array() ;

function neatValue(value) {
  if (isNull(value) || (value=="undefined") || (value=="")) {
    return "null" ;
  }
  else {
    return value ;
  }
}

function neatValueNotNull(value) {
  if (isNull(value) || (value=="undefined")) {
    return "" ;
  }
  else {
    return value ;
  }
}

function stripNonAlphanumerics( subject ) {
  subject = subject.replace(/[^A-Za-z0-9 ]+/g, '');
  return subject.replace(' ', '');
}

/* MOVED TO CMS.js
function loadCSSfile(filename){
// this needs to be made better.
  filename = cmsSiteURLS[getSelectedSite()]+filename;

  var fileref=document.createElement("link")
  fileref.setAttribute("rel", "stylesheet")
  fileref.setAttribute("type", "text/css")
  fileref.setAttribute("href", filename)

  document.getElementsByTagName("head")[0].appendChild(fileref)
}
*/

function cueXMLHTTPPost(service, command, params, callBack) {
  var cuecount = commandCue.length ;
  var commandArray = Array()
  commandArray['service'] = service ;
  commandArray['command'] = command ;
  commandArray['callBack'] = callBack ;
  commandArray['params'] = params ;

  commandCue[cuecount] = commandArray ;

  if (cuecount ==0) {
    // because the cue was empty, kick the cue in to action
    setTimeout("postCue()", 10) ;
  }
}

function cueHTMLHTTPGet(service, command, callBack) {
  var cuecount = commandCue.length ;

  var commandArray = Array()
  commandArray['service'] = service ;
  commandArray['command'] = command ;
  commandArray['callBack'] = callBack ;
  commandArray['params'] = '' ;

  commandCue[cuecount] = commandArray ;

  if (cuecount ==0) {
    // because the cue was empty, kick the cue in to action
    setTimeout("postCue()", 10) ;
  }
}

function postCue() {
  var cuecount = commandCue.length ;

  if (cuecount > 0) {
     var command = commandCue.shift() ;
     xmlhttpPost(command['service'], command['command'], command['params'], command['callBack']) ;
  }
}

function parseXML(xmlText) {
  var xmlDoc;

  // code for IE
  if (window.ActiveXObject) {
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async=false;
    xmlDoc.loadXML(xmlText) ;
  }
  // code for Mozilla, Firefox, Opera, etc.
  else {
    var parser=new DOMParser();
    var xmlDoc=parser.parseFromString(xmlText,"text/xml");
  }

  return xmlDoc ;
}

function appendElement(parentElement, newElement) {
  parentElement.appendChild(newElement);

  return newElement ;
}

function addElement(parentElement, ElementType, newElementId) {
  var newElement = document.createElement(ElementType);
  var divIdName = newElementId ;
  newElement.setAttribute('id',divIdName);
  newElement.setAttribute('name',divIdName);

  parentElement.appendChild(newElement);

  return newElement ;
}

function addElementById(parentElement, ElementType, newElementId) {
  var pe = document.getElementById(parentElement);
  return addElement(pe, ElementType, newElementId) ;
}

function removeElement(parentElement, elementName) {
  var d = document.getElementById(parentElement);
  var olddiv = document.getElementById(elementName);
  d.removeChild(olddiv);
}

function removeXMLElement(xmldoc,psd_element, event_id) {
  /*var d = xmldoc.getElementById(parentElement);
  var olddiv = xmldoc.getElementById(elementName);
  d.removeChild(olddiv);*/

//  var s = new XMLSerializer();
//  alert(s.serializeToString(xmlDoc));

  var theXML = xmlDoc.childNodes[0] ;

  for (var i=0; i<theXML.childNodes.length; i++) {
    var element = theXML.childNodes[i] ;

    if (element.getAttribute('event_id') == event_id){
      xmlDoc.removeChild(xmlDoc.childNodes[i])
    }
 }
}

function isNull(a) {
  return typeof a == 'object' && !a;
}

var commandCue = Array() ;


function ajaxStatusMessage(message) {
  var statusDisplay ;
  statusDisplay = document.getElementById('AJAXStatus') ;

  if (!isNull(statusDisplay)) {
    statusDisplay.innerHTML = message ;
    jQuery("#AJAXStatus").fadeIn();
    setTimeout("jQuery(\"#AJAXStatus\").fadeOut();", 3000) ;
  }
}

function ajaxCallBack(callBack, responceText) {
  var statusDisplay ;
  statusDisplay = document.getElementById('AJAXStatus') ;

  var allowed = true ;
  if (strpos(unescape(responceText), '<error message="') !== false) {
    // this saves us checking every bit of xml, if permission is deined then the xml always has the above
    // in the function we can check the passed xml, and if it just happened to have the string, but wasn't the actual 
    // error xml it returns true, thus allowing the action to continue.
debug_output(responceText) ;
    allowed = processPermissionDenied(responceText) ;
  }
    
  if (allowed) {
    if (!isNull(statusDisplay)) {
      jQuery("#AJAXStatus").fadeOut();
    }

    if (callBack !='') {
      eval(callBack+'(\''+responceText+'\')') ;
    }
  }
  setTimeout("postCue()", 10) ;
}

function processPermissionDenied(responceText) {
//   alert(responceText) ;
   var doc = parseXML(unescape(responceText)) ;
   var results = doc.getElementsByTagName('result') ;
   var errors = doc.getElementsByTagName('error') ;
   var messages = new Array() ;
   
   result= true ;
   
   if (isset(errors) && isset(results)) {
     if ((isset(seriousErrorCallBack)) && (seriousErrorCallBack != '')) {
       var errorCount = errors.length ;
       var i ;

       for (i=0;i<errorCount;i++) {
       
         var code = errors[i].getAttribute('code') ; 
         
         if (code == 'nouser') {
           alert('Your session has timed out') ;
           window.onbeforeunload = '' ;
           window.location = '/login.html' ;
         }
         
         messages[i] = errors[i].getAttribute('message') ; //+' - '+errors[i].getAttribute('action') ;
       }

       eval(seriousErrorCallBack+'(messages)') ;
              
       result=false ;      
     }
   }

//   alert('hold on a moment') ;

   return result ;
}

function xmlhttpPost(service, command, params, callBack) {
  var statusDisplay ;
  statusDisplay = document.getElementById('AJAXStatus') ;
  if (typeof callBackExcludeOverlay != 'undefined' && is_array(callBackExcludeOverlay) && !isNull(statusDisplay)) {
	if(!in_array(callBack,callBackExcludeOverlay)){
		statusDisplay.innerHTML = '<img src="/img/ajaxstatus.gif"/><br/>Please wait..' ;
		statusDisplay.style.display = 'block' ;
	}
  } else {
	  if (!isNull(statusDisplay)) {
		$('#statusDisplay').css('width',$('#container').css('width'));
		statusDisplay.innerHTML = '<img src="/img/ajaxstatus.gif"/><br/>Please wait..' ;
		statusDisplay.style.display = 'block' ;
	  }
  }

  var xmlHttpReq = false;
  var tempString ;

  if (window.XMLHttpRequest) {
    // Mozilla/Safari/IE8+
    xmlHttpReq = new XMLHttpRequest();
//    xmlHttpReq.overrideMimeType('text/plain', charset="utf-8" );
  }
  else if (window.ActiveXObject) {
    // IE

    try { 
      xmlHttpReq=new ActiveXObject("Msxml2.XMLHTTP"); 
    } 
    catch (e) { 
      try { 
        xmlHttpReq=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
      catch (e) { 
        alert("Your browser does not support AJAX!"); 
        return false; 
      } 
    } 
  }

  xmlHttpReq.open('POST', "/"+service+"/"+command+"/", true);
  xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
 
  xmlHttpReq.onreadystatechange =

     function() {
       var responceText = "" ;
       if (xmlHttpReq.readyState == 4) {
         responceText = xmlHttpReq.responseText ;
         var tempResponcText = escape(responceText) ;
         ajaxCallBack(callBack, tempResponcText) ;
       }
     }

  if(typeof(params) == 'object'){
    if(params.xml){
      xmlHttpReq.send('xmldata='+params.xml);
    }else{
      var s = new XMLSerializer();
      xmlHttpReq.send('xmldata='+s.serializeToString(params));
    }
  }else{
    xmlHttpReq.send(params);
  }

// comment out by Pete. Why is the here? This is cms code and this is NOT a cms file.
//  lasttabname	= currenttabname;
  
}

function setAttributeNode(xmlDoc, node, attribute, value) {

//  if (!saf) {
    var newAttribute = xmlDoc.createAttribute(attribute);
    newAttribute.nodeValue = value ;

    node.setAttributeNode(newAttribute);
//  }
//  else { // this is just nasty, but Safari dosn't seem to support attributes.
//    var newElement = xmlDoc.createElement(attribute) ;
//    newElement.appendChild(xmlDoc.createTextNode(escape(value))) ;
//    node.appendChild(newElement) ;
  //}

  return node ;
}

function ajaxPostFormAsXML(formName, service, action, callBack) {
  var browser='ie' ;
  var theForm = document.getElementById(formName) ;

  whatForm = theForm.getElementsByTagName('*') ;


  var xmlDoc;

  var xmlText ;
  xmlText = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" ;

  // code for IE
  if (window.ActiveXObject){
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async=false;
    xmlDoc.loadXML(xmlText) ;
  }
  // code for Mozilla, Firefox, Opera, etc.
  else {
    browser='ff' ;
    var xmlDoc=document.implementation.createDocument("","",null);
  }

  var formXML = xmlDoc.createElement("form");
  setAttributeNode(xmlDoc, formXML, "name", formName) ;

  xmlDoc.appendChild(formXML) ;

  var siteSelect ;
  var siteName ;
  siteName = '' ;

  siteSelect = document.getElementById('cms_site_select') ;

  if (isset(siteSelect)) {
    siteName = siteSelect.options[siteSelect.selectedIndex].value ;
    var fieldValue = xmlDoc.createElement("field");
    var valueVar = xmlDoc.createElement("value");
    var fieldName = 'siteOverride' ;
    setAttributeNode(xmlDoc, fieldValue, "name", fieldName) ;
    valueVar.appendChild(xmlDoc.createTextNode(neatValueNotNull(utf8Encode(siteName), false))) ;
    fieldValue.appendChild(valueVar) ;
    formXML.appendChild(fieldValue) ;

  }

  var languageSelect = document.getElementById('cms_language_select') ;

  if (isset(languageSelect)) {
  	var languageRef = ""; 
  	try{
  		languageRef = languageSelect.options[languageSelect.selectedIndex].value 
  	}catch(err){
  		languageRef = ""; 
  	}
    var fieldValue = xmlDoc.createElement("field");
    var valueVar = xmlDoc.createElement("value");
    var fieldName = 'cms_language' ;
    setAttributeNode(xmlDoc, fieldValue, "name", fieldName) ;
    valueVar.appendChild(xmlDoc.createTextNode(neatValueNotNull(utf8Encode(languageRef), false))) ;
    fieldValue.appendChild(valueVar) ;
    formXML.appendChild(fieldValue) ;
    //alert(languageRef) ;
  }

  var fieldCount = whatForm.length - 1 ;

  var i ;
  var controlType ;
  var ajaxParams  = "" ;
  var value ;
  var skipRadio ;
  var checked ;

  for (i=0;i<=fieldCount;i++) {
    temp_form = whatForm[i];
//    alert($(temp_form).attr('class'));//ckeditor
    controlType = whatForm[i].type ;
    skipRadio = false ;
    value = '' ;
    checked = '' ;

    if ((controlType != "button") && (controlType != "submit") && (controlType != undefined&&controlType != null&&controlType != ''&&controlType != 'undefined')) {
      if (whatForm[i].name != "") { 
        if (controlType == "checkbox") {
          if (whatForm[i].checked) {
            checked = 'true' ;
            value = whatForm[i].value ;
          }
          else {
            checked = 'false' ;
            value = whatForm[i].value ;
          }

        }
        else if (controlType == "radio") {

          if (whatForm[i].checked) {
            value = whatForm[i].value ;
          }
          else {
            skipRadio = true ;
          }
        }
        else if (controlType == "select-multiple") {         
          if (whatForm[i].options.length > 0) {
            value = '' ;
            
            for (var j= 0; j < whatForm[i].options.length; j++) {
              if (whatForm[i].options[j].selected) {
                if (value != '') {
                  value = value + ',' ;
                }
                value = value + whatForm[i].options[j].value ;
              }
            }
            
          }
          else {
            value = '' ;
          }
        }
        else if ((controlType == "select") || (controlType == "select-one")) { 
          if (whatForm[i].options.length > 0) {
            value = whatForm[i].options[whatForm[i].selectedIndex].value ;
          }
          else {
            value = '' ;
          }
        }
        else if(whatForm[i].value != undefined) {
          value = whatForm[i].value ;
        }

        //value = value.replace("’", "&#700;");
        value = value.replace("’", "'");
        
        if (!skipRadio) {
          var fieldValue = xmlDoc.createElement("field");

          var valueVar = xmlDoc.createElement("value");


          var fieldName = whatForm[i].name ;
          
          if ((fieldName != 'siteOverride') && (fieldName != 'cms_language')) {
            if (fieldName == '') {
              fieldName = whatForm[i].id ;
            }

           if($(temp_form).attr('class').match('ckeditor')){
            valueVar.appendChild(xmlDoc.createCDATASection(neatValueNotNull(utf8Encode(value), false))) ;
           }else{
            valueVar.appendChild(xmlDoc.createCDATASection(neatValueNotNull(utf8Encode(value))));
           }
            setAttributeNode(xmlDoc, fieldValue, "name", fieldName) ;
            if (checked != '') {
              setAttributeNode(xmlDoc, fieldValue, "checked", checked) ;
            }

            fieldValue.appendChild(valueVar) ;

            formXML.appendChild(fieldValue) ;
          }
        }
      }
    }
  }
    //alert(xmlDoc);
  cueXMLHTTPPost(service, action, xmlDoc, callBack) ;

  return false ;
}

function ajaxPostValuesAsXML(values, service, action, callBack) {
  var browser='ie' ;

  var xmlDoc;

  var xmlText ;
  xmlText = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" ;

  // code for IE
  if (window.ActiveXObject){ 
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async=false;
    xmlDoc.loadXML(xmlText) ;
  }
  // code for Mozilla, Firefox, Opera, etc.
  else {
    browser='ff' ;
    var xmlDoc=document.implementation.createDocument("","",null);
  }

  var formXML = xmlDoc.createElement("form");
  setAttributeNode(xmlDoc, formXML, "name", 'values') ;

  xmlDoc.appendChild(formXML) ;

  var fieldCount = values.length - 1 ;
  var i ;
  var ajaxParams  = "" ;

  for (i=0;i<=fieldCount;i++) {
      var fieldValue = xmlDoc.createElement("field");
      var valueVar = xmlDoc.createElement("value");
      var val = ''+values[i]['value'] ;

      valueVar.appendChild(xmlDoc.createCDATASection(neatValueNotNull(utf8Encode(val), false)));

      var name ;
      name = values[i]['name'] ;
      setAttributeNode(xmlDoc, fieldValue, "name", name) ;
      fieldValue.appendChild(valueVar) ;
      formXML.appendChild(fieldValue) ;
  }
   // alert(xmlDoc);
  cueXMLHTTPPost(service, action, xmlDoc, callBack) ;

  return false ;
}

function isDebug() {
  var result = false ;

  var debug = url_get('debug') ; 
 
  if (debug == 'motortrak') {
    result = true ;
  }

  return result ;
}

// function to show the result of the ajax
function debugAjaxOutput(responceText) {
  var debug = url_get('debug') ; 
 
  if (debug == 'motortrak') {
    if(document.getElementById('debug_text')){
      document.getElementById('debug_text').style.display='block' ;
      document.getElementById('debug_text').value = unescape(responceText);
    }
  }
}

function debug_output(text) {
  debugAjaxOutput(text) ;
}

function convert_from_safe_chars_lang(str){

  str = str.replace(/&#([0-9]*);/gm,function(psd_str){var temp_str = psd_str.match(/([0-9]*);/m);return String.fromCharCode(temp_str[1])});
  return str;

}

function utf8Encode(str) {
  return encodeURIComponent(str);
}

function getPageElement(page, div, callBack) {
  jQuery("#"+div).fadeOut();

  cueHTMLHTTPGet(page, 'c', callBack) ;
}

function getPageHTML(page, callBack) {
var s = callBack+"ZZZ"; // when not set at all, JS doesn't really get it
  if (isNull(s) || (s=="undefinedZZZ") || (s=="")) {
    callBack='pageLoader';
  }
  else {
  }

  var stringArray ;
  stringArray = page.split('/') ;

  var method ;
  method = stringArray[0] ;

  var action = '' ;

  for (var i =1;i<stringArray.length;i++) {
    action = action + stringArray[i] + '/' ;
  }

  cueHTMLHTTPGet(method, action, callBack) ;
  jQuery("#cms_editor_popup").fadeOut();
}

function processResponceErrors(errorResponce, errorDivId) {
   var doc = parseXML(unescape(errorResponce)) ;
   var errors = doc.getElementsByTagName('error') ;
   var returnVal ;

   returnVal = false ;

   if (isset(errors)) {
     var errorDiv = document.getElementById(errorDivId) ;

     if (isset(errorDiv)) {
       errorDiv.innerHTML = '' ;

       var errorCount = errors.length ;
       var i ;

       returnVal = errorCount > 0 ;
       for (i=0;i<errorCount;i++) {
         errorDiv.innerHTML = errorDiv.innerHTML + '<div class="error">'+errors[i].childNodes[0].nodeValue+'</div>';
       }
     }
   }

   return returnVal ;
}

var populateFormCue ;
populateFormCue = Array() ; // this is used to track the order forms are populated.
                                // In most cases it will have just one entry, but in the event some
                                // one hits a button more then once, or multiple requests are cued
                                // it will allow the call back to process the results to teh correct form


function ajaxPopulateForm(formName, service, action, params, callback) {
  var formListCount = populateFormCue.length ;

  var cueForm = Array() ;
  cueForm['name'] = formName ;
  cueForm['callback'] = callback ;

  populateFormCue[formListCount] = cueForm ;


  ajaxPostValuesAsXML(params, service, action, 'ajaxPopulateFormCallBack') ;
}

function ajaxPopulateFormCallBack(responce) {
//alert(unescape(responce)) ;
  var formName = '' ;
  var callBack = '' ;
  var cuedDetails ;

  if (populateFormCue.length > 0) {
    cuedDetails = populateFormCue.shift() ;
    formName = cuedDetails['name'] ;
    callBack = cuedDetails['callback'] ;

    var doc = parseXML(unescape(responce)) ;

    var firstNode = doc.firstChild.firstChild.nodeName ; // the name of the 'object'
    var dataNodes = doc.firstChild.firstChild.childNodes  ; // assumes that the xml returned is <xml><??something??><datatag></data... then uses the tag name for each 'data tag' as the field name.

    whatForm = document.getElementById(formName) ;

    var fieldCount = whatForm.length - 1 ;
    var i ;
    var controlType ;
    var controlName ;
    var nodeIdx ;
    var nodeNames = Array() ;

    for (i=0;i<=dataNodes.length-1;i++) {
      nodeIdx = firstNode+'_'+dataNodes[i].nodeName ;
      nodeIdx = nodeIdx.toLowerCase() ;

      nodeNames[nodeIdx] = i  ;
    }

    for (i=0;i<=fieldCount;i++) {
      controlType = whatForm[i].type ;
      controlName = whatForm[i].name ;

      nodeIdx = nodeNames[controlName.toLowerCase()] ;

      if ((nodeIdx != undefined)) {
        whatForm[i].value = dataNodes[nodeIdx].firstChild.nodeValue ;
      }
    }

    var t = dataNodes[0].nodeName ;

    eval(callBack+'()') ;
  }
}

function pageResponceProcessor(pageHTML, contentDiv) {
  var res ;
  res = getPageResponceProcessor(pageHTML) ; 

  if ((res['target'] != '') && (res['target'] != null)) {
    var div = document.getElementById(res['target']) ;

    $('#'+res['target']).show() ;
  }
  else {
    var div = document.getElementById(contentDiv) ;
  }

  div.innerHTML = res['body'] ;
  if ((res['script'] != undefined) && (trim(res['script']) != '')) {
 
    eval(res['script']) ;
  }
  
  return res ;
}

 function callme(psd_func){
            
            google.setOnLoadCallback(psd_func);
        }

function getPageResponceProcessor(pageHTML) {
debugAjaxOutput(unescape(pageHTML));

  var xmlDoc = parseXML(unescape(pageHTML)) ;

  var window ;
  var script ;
  var body ;
  var styles ;

  var xmlTag ;
  xmlTag = xmlDoc.getElementsByTagName('xml');

  var convId ;

  var child ;
  var windowWidth ;
  var windowHeight ;
  var url ;
  var pageId;
  pageId = '' ;
  url = '' ;

  child = xmlDoc.firstChild ;

  CheckDisablePageEdit($(xmlTag).attr('disableedit'));

  if (child != undefined) {
    url = xmlDoc.firstChild.getAttribute('url');
    pageId= xmlDoc.firstChild.getAttribute('pageid');
    window = xmlDoc.firstChild.getAttribute('window');
    convId = xmlDoc.firstChild.getAttribute('conversationId');
    windowWidth = xmlDoc.firstChild.getAttribute('windowwidth');
    windowHeight = xmlDoc.firstChild.getAttribute('windowheight');
    title = xmlDoc.firstChild.getAttribute('title');
  }
  else {
    windowWidth = 400;
    windowHeight = 500;
    title = '' ;
  }

  styles = xmlDoc.getElementsByTagName('styles');

  if (styles != undefined) {
    styles = styles.item(0) ;

    if (styles != undefined) {
      if (ie) {
        styles = styles.firstChild ;
        if (styles != undefined) {
          styles = styles.data;
        }
      }
      else {
        styles = styles.childNodes ;

        if (styles != undefined) {
          styles = styles.item(1);

          if (styles != undefined) {
            styles = styles.data;
//            styles = xmlDoc.getElementsByTagName('styles').item(0).childNodes.item(1).data ;
          }
        }
      }
    }

    if ((styles != null) && (styles != undefined)) {
      if (styles.length > 0) {
        var stylesArray ;
        stylesArray = styles.split('>') ;

        var i ;

        for (i=0;i < stylesArray.length;i++) {
          var style = trim(stylesArray[i]) ;

          if (style.length > 0) {
            style = style + '>' ;

            var fileNameStart = (style+'').indexOf('href="', 0)+6;
            var fileNameEnd = (style+'').indexOf('/>', 0);

            if (fileNameEnd == -1) {
              var fileNameEnd = (style+'').indexOf('">', 0);
            }

            style = style.substr(fileNameStart, fileNameEnd - fileNameStart );

            var lastQuote = (style+'').indexOf('"', 0);

            if (lastQuote != -1) {
              style = style.substr(0, lastQuote);
            }

            loadCSSfile(style) ;
          }
        }
      }
    }
  }

  if ((styles != null) && (styles != undefined)) {
    styles = '' ;
  }

  script = xmlDoc.getElementsByTagName('script');

  if (script != undefined) {
    script = script.item(0) ;

    if (script != undefined) {
      if (ie) {
        script = script.firstChild ;
        if (script != undefined) {
          script = script.data;
        }
      }
      else {
        script = script.childNodes ;

        if (script != undefined) {
          if(script.item(1) != null){
            script = script.item(1);

            if (script != undefined) {
              script = script.data ;
            }
          }else{
            script = script.item(0);

            if (script != undefined) {
              script = script.data ;
            }
          }
        }
      }
    }
  }

  body = xmlDoc.getElementsByTagName('body');

  var target ;
  target = '' ;

  if (body != undefined) {
    body = body.item(0) ;


    if (body != undefined) {
      target = body.getAttribute('target');

      if (ie) {
        body = body.firstChild ;

        if (body != undefined) {
          body = body.data;
        }
      }
      else { 
        body = body.childNodes ;

        if (body != undefined) {

          body = body.item(1);
          if (body != undefined) {
//            body = xmlDoc.getElementsByTagName('body').item(0).childNodes.item(1).data ;
            body = body.data ;
          }
        }
      }
    }
  }

  var res ;
  res = Array() ;
  res['window'] = window ;
  res['url'] = url ;
  res['pageid'] = pageId ;
  res['body'] = body ;
  res['script'] = script ;
  res['conversationid'] = convId ;

  res['windowWidth'] = windowWidth ;
  res['windowHeight'] = windowHeight ;
  res['target'] = target ;
  res['title'] = title ;

  return res ;
}

var global_page_properties = false;
var global_ref_object = false;
function CheckDisablePageEdit(psd_value){
    var rtn;
    if(psd_value == 'yes'){ 
        rtn = DisablePageEdit();
    }
    return rtn;
}

function DisablePageEdit(){
    var rtn = false;
    $('#cms_edit_page_properties').ready(function(){
//       if($(this).text().toLowerCase() == 'page properties'){ alert(i);

       if(!global_page_properties){  
            global_page_properties = $('#cms_edit_page_properties').attr('onclick');
            global_ref_object = $('#cms_edit_page_properties');
          }
          //alert($('#cms_edit_page_properties').attr('id'));
          $('#cms_edit_page_properties').removeAttr('onclick');
          $('#cms_edit_page_properties').click(function(){return false;});
          $('#cms_edit_page_properties').addClass('disabled_admin_btn');

    });
    
    return rtn;
}

function pageLoader(pageHTML) {
//  alert(unescape(pageHTML)) ;
  pageResponceProcessor(pageHTML, "cms_editor_popup_content") ;
  jQuery("#cms_editor_popup").fadeIn();
}

function getElementValue(Element) {
  if (ie) {
    Element = Element.firstChild ;
    if (Element != undefined) {
      Element = Element.data;
    }
  }
  else {
    Element = Element.childNodes ;

    if (Element != undefined) {
      Element = Element.item(0);

      if (Element != undefined) {
        Element = Element.data;
      }
    }
  }

  if (Element == undefined) {
    Element = '' ;
  }

  return Element ;
}


function getCDataElementValue(Element) {
  if (ie) {
    Element = Element.firstChild ;
    if (Element != undefined) {
      Element = Element.data;
    }
  }
  else {
    Element = Element.childNodes ;

    if (Element != undefined) {
      Element = Element.item(0);

      if (Element != undefined) {
        Element = Element.data;
      }
    }
  }

  if (Element == undefined) {
    Element = '' ;
  }

  return Element ;
}

// basic browser detection because I need to know if its early versions of safari.
// Versions of safari prior to version 3 do not support xml attributes. So to make things work,
// I will need to put in a work around. Its nasty, I don't like it but what can you do?

var d, dom, ie, ie4, ie5x, moz, mac, win, lin, old, ie5mac, ie5xwin, op, saf;

d = document;
n = navigator;
na = n.appVersion;
nua = n.userAgent;
win = ( na.indexOf( 'Win' ) != -1 );
mac = ( na.indexOf( 'Mac' ) != -1 );
lin = ( nua.indexOf( 'Linux' ) != -1 );

if ( !d.layers ){
  dom = ( d.getElementById );
  op = ( nua.indexOf( 'Opera' ) != -1 );
  konq = ( nua.indexOf( 'Konqueror' ) != -1 );
  saf = ( nua.indexOf( 'Safari' ) != -1 );
  moz = ( nua.indexOf( 'Gecko' ) != -1 && !saf && !konq);
  ie = ( d.all && !op );
  ie4 = ( ie && !dom );

  /*
  ie5x tests only for functionality. ( dom||ie5x ) would be default settings.
  Opera will register true in this test if set to identify as IE 5
  */

  ie5x = ( d.all && dom );
  ie5mac = ( mac && ie5x );
  ie5xwin = ( win && ie5x );
}

function htmlspecialchars_decode (string, quote_style) {
    // http://kevin.vanzonneveld.net
    // +   original by: Mirek Slugen
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Mateusz "loonquawl" Zalega
    // +      input by: ReverseSyntax
    // +      input by: Slawomir Kaniecki
    // +      input by: Scott Cariss
    // +      input by: Francois
    // +   bugfixed by: Onno Marsman
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Ratheous
    // +      input by: Mailfaker (http://www.weedem.fr/)
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // +    bugfixed by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: htmlspecialchars_decode("<p>this -&gt; &quot;</p>", 'ENT_NOQUOTES');
    // *     returns 1: '<p>this -> &quot;</p>'
    // *     example 2: htmlspecialchars_decode("&amp;quot;");
    // *     returns 2: '&quot;'

    var optTemp = 0, i = 0, noquotes= false;
    if (typeof quote_style === 'undefined') {
        quote_style = 2;
    }
    string = string.toString().replace(/&lt;/g, '<').replace(/&gt;/g, '>');
    var OPTS = {
        'ENT_NOQUOTES': 0,
        'ENT_HTML_QUOTE_SINGLE' : 1,
        'ENT_HTML_QUOTE_DOUBLE' : 2,
        'ENT_COMPAT': 2,
        'ENT_QUOTES': 3,
        'ENT_IGNORE' : 4
    };
    if (quote_style === 0) {
        noquotes = true;
    }
    if (typeof quote_style !== 'number') { // Allow for a single string or an array of string flags
        quote_style = [].concat(quote_style);
        for (i=0; i < quote_style.length; i++) {
            // Resolve string input to bitwise e.g. 'PATHINFO_EXTENSION' becomes 4
            if (OPTS[quote_style[i]] === 0) {
                noquotes = true;
            }
            else if (OPTS[quote_style[i]]) {
                optTemp = optTemp | OPTS[quote_style[i]];
            }
        }
        quote_style = optTemp;
    }
    if (quote_style & OPTS.ENT_HTML_QUOTE_SINGLE) {
        string = string.replace(/&#0*39;/g, "'"); // PHP doesn't currently escape if more than one 0, but it should
        // string = string.replace(/&apos;|&#x0*27;/g, "'"); // This would also be useful here, but not a part of PHP
    }
    if (!noquotes) {
        string = string.replace(/&quot;/g, '"');
    }
    // Put this in last place to avoid escape being double-decoded
    string = string.replace(/&amp;/g, '&');

    return string;
}

function is_array(input){
    return typeof(input)=='object'&&(input instanceof Array);
}

function in_array (needle, haystack, argStrict) {
	var key = '', strict = !!argStrict;
	if (strict) {
		for (key in haystack) {
			if (haystack[key] === needle) {
				return true;
			}
		}
	} else {
		for (key in haystack) {
			if (haystack[key] == needle) {
				return true;
			}
		}
	}
	return false;
}
