// **************** ASSISTANT INITIALIZATION STARTS ******************
var asstHelpMsgs = new Array();
var asstCurrMsgId = '';
var theHandle, theRoot;
var latest_content;
	
function initAssistance() {
		theHandle = document.getElementById("handle");
		theRoot   = document.getElementById("root");
		Drag.init(theHandle, theRoot);
}

// **************** ASSISTANT INITIALIZATION ENDS ******************


// **************** ASSISTANT FLOATING FUNCTIONS START ******************

floatX=10;
floatY=10;
layerwidth=100;
layerheight=130;
halign="right";
valign="top";
delayspeed=3;
contentWidth = 750; // width of content
asst_btn=710;
rightPos = -180;     // how much pixel from right of content
oldHight = window.innerHeight;
left_message = null;

NS6=false;
IE4=(document.all);
if (!IE4) {NS6=(document.getElementById);}
NS4=(document.layers);

function adjust() {
  if ((NS4) || (NS6)) {
	if (lastX==-1 || delayspeed==0){
		lastX=window.pageXOffset + floatX;
		lastY=window.pageYOffset + floatY;
	}else{
		var dx=Math.abs(window.pageXOffset+floatX-lastX);
		var dy=Math.abs(window.pageYOffset+floatY-lastY);
		var d=Math.sqrt(dx*dx+dy*dy);
		var c=Math.round(d/10);
		if (window.pageXOffset+floatX>lastX) {lastX=lastX+delayspeed+c;}
		if (window.pageXOffset+floatX<lastX) {lastX=lastX-delayspeed-c;}
		if (window.pageYOffset+floatY>lastY) {lastY=lastY+delayspeed+c;}
		if (window.pageYOffset+floatY<lastY) {lastY=lastY-delayspeed-c;}
	}
	if (NS4){
	    test = (window.innerWidth - contentWidth)/2 + contentWidth + rightPos + document.layers['floatlayer'].width;
		if( test >= lastX )
			document.layers['floatlayer'].pageX = lastX;
		document.layers['floatlayer'].pageY = lastY;
	}
	if (NS6){
	    test = (window.innerWidth - contentWidth)/2 + contentWidth + rightPos + document.getElementById('floatlayer').style.width;
		if( test >= lastX )	
			document.getElementById('floatlayer').style.left=lastX;
        if(document.getElementById("assistant_size").value.indexOf("hide") == -1)
		    document.getElementById('floatlayer').style.top=lastY;
	}
  }else if (IE4){
	if (lastX==-1 || delayspeed==0){
		lastX=document.body.scrollLeft + floatX;
		lastY=document.body.scrollTop + floatY;
	}else{
		var dx=Math.abs(document.body.scrollLeft+floatX-lastX);
		var dy=Math.abs(document.body.scrollTop+floatY-lastY);
		var d=Math.sqrt(dx*dx+dy*dy);
		var c=Math.round(d/10);
		if (document.body.scrollLeft+floatX>lastX) {lastX=lastX+delayspeed+c;}
		if (document.body.scrollLeft+floatX<lastX) {lastX=lastX-delayspeed-c;}
		if (document.body.scrollTop+floatY>lastY) {lastY=lastY+delayspeed+c;}
		if (document.body.scrollTop+floatY<lastY) {lastY=lastY-delayspeed-c;}
	}
	test = (document.body.offsetWidth - contentWidth)/2  + contentWidth + rightPos + document.all['floatlayer'].style.width;
	if( test >= lastX )
	   document.all['floatlayer'].style.posLeft = lastX;
    if(document.all['assistant_size'].value.indexOf("hide") == -1)
	   document.all['floatlayer'].style.posTop = lastY;
  } 
  setTimeout('adjust()',10);
}

function define()
{
  if ((NS4) || (NS6)){ 
	if (halign=="left") {floatX=ifloatX};
	if (halign=="right") {floatX=(((window.innerWidth - contentWidth)/2)+contentWidth) + rightPos};
	if (halign=="center") {floatX=Math.round((window.innerWidth-20)/2)-Math.round(layerwidth/2)};
	if (valign=="top") {floatY=ifloatY};
	if (valign=="bottom") {floatY=window.innerHeight-ifloatY-layerheight};
	if (valign=="center") {floatY=Math.round((window.innerHeight-20)/2)-Math.round(layerheight/2)};
  }
  if (IE4) {
	if (halign=="left") {floatX=ifloatX};
	if (halign=="right") {floatX=(((document.body.offsetWidth - contentWidth)/2)+contentWidth) + rightPos }
	if (halign=="center") {floatX=Math.round((document.body.offsetWidth-20)/2)-Math.round(layerwidth/2) }
	if (valign=="top") {floatY=ifloatY};
	if (valign=="bottom") {floatY=document.body.offsetHeight-ifloatY-layerheight}
	if (valign=="center") {floatY=Math.round((document.body.offsetHeight-20)/2)-Math.round(layerheight/2)}
  }
  
//  layers_readjust();
}

/* PROBABLY NOT USED.
function layers_readjust() {
	i=1;
	if ((NS4) || (NS6)) {
		if (NS4){
			if(left_message != null){    
	      		while(document.layers['message_'+i] != null){
	        		if( (window.innerWidth - contentWidth)/2 > 0 ){
	          			document.layers['message_'+i].pageX = ((window.innerWidth - contentWidth)/2) + left_message[i-1];
	        		}else{
	          			document.layers['message_'+i].pageX = left_message[i-1];
	        		}
	        		i++;
	      		}
			}
			if(document.layers['asst_btn_show'] != null){
       			if( (window.innerWidth - contentWidth)/2 > 0 ){	      
        			document.layers['asst_btn_show'].pageX = ((window.innerWidth - contentWidth)/2) + asst_btn;
      			}else{
        			document.layers['asst_btn_show'].pageX = asst_btn;
      			}
      		}
    	}
		if (NS6){
	  		if(left_message != null){
		  		while(document.getElementById('message_'+i) != null){
		    		if( (window.innerWidth - contentWidth)/2 > 0 ){
		      			document.getElementById('message_'+i).style.left = ((document.body.offsetWidth - contentWidth)/2) + left_message[i-1];
		    		}else{
		      			document.getElementById('message_'+i).style.left = left_message[i-1];
		    		}
		    		i++;
		  		}
		  	}
		  	if( document.getElementById('asst_btn_show') != null){
      			if( (window.innerWidth - contentWidth)/2 > 0 ){
        			document.getElementById('asst_btn_show').style.left = ((document.body.offsetWidth - contentWidth)/2) + asst_btn;
      			}else{
        			document.getElementById('asst_btn_show').style.left = asst_btn;
      			}
      		}
		}
  	}else if (IE4){
    	if(left_message != null){
      		while(document.all('message_'+i) != null){
        		if( (document.body.offsetWidth - contentWidth)/2 > 0 ){
          			document.all('message_'+i).style.posLeft = ((document.body.offsetWidth - contentWidth)/2) + left_message[i-1];
        		}else{
          			document.all('message_'+i).style.posLeft = left_message[i-1];
        		}
        		i++;
      		}
		}
		if(document.all('asst_btn_show') != null){
      		if( (document.body.offsetWidth - contentWidth)/2 > 0 ){
        		document.all('asst_btn_show').style.posLeft = ((document.body.offsetWidth - contentWidth)/2) + asst_btn;
      		}else{
        		document.all('asst_btn_show').style.posLeft = asst_btn;
      		}
      	}
  	}
}
*/

var active_icon = "pages/templates/em_assistant/gfx/asst_active.gif";
var inactive_icon = "pages/templates/em_assistant/gfx/asst_inactive.gif";

function icon_update(curr_icon) {
  if(curr_icon.indexOf("assistant_size") > -1){
    return;
  }
  if ((NS4) || (NS6)){
    if (NS4){
      for (i = 0; i < asstHelpMsgs.length; i++) {
        document.layers[asstHelpMsgs[i]].src = inactive_icon;
      }
      if(document.layers[curr_icon] != null){
        document.layers[curr_icon].src = active_icon;
      }
    }
	if (NS6){
      for (i = 0; i < asstHelpMsgs.length; i++) {
        document.getElementById(asstHelpMsgs[i]).src = inactive_icon;
      }
	  if(document.getElementById(curr_icon) != null){
        document.getElementById(curr_icon).src = active_icon;
      }
	}

  }else if (IE4){
    for (i = 0; i < asstHelpMsgs.length; i++) {
      document.getElementById(asstHelpMsgs[i]).src = inactive_icon;
    }
    if(document.getElementById(curr_icon)){
      document.getElementById(curr_icon).src = active_icon;
    }
  }
}

function loadMessageId(msgId) {
	retrieveURL("ajax_message.do?message_id="+msgId);
	asstCurrMsgId = msgId;
	icon_update(msgId);
}
function loadNextMessage() {
	if(hasNextMsg()) {
		var i = arrayFindIndexOf(asstHelpMsgs, asstCurrMsgId);
		loadMessageId(asstHelpMsgs[i+1]);
	}
}
function loadPreviousMessage() {
	if(hasPreviousMsg()) {
		var i = arrayFindIndexOf(asstHelpMsgs, asstCurrMsgId);
		loadMessageId(asstHelpMsgs[i-1]);
	}
}
function hasNextMsg() {
	var i = arrayFindIndexOf(asstHelpMsgs, asstCurrMsgId);
	return (i >= 0 && (i+1) < asstHelpMsgs.length);
}
function hasPreviousMsg() {
	var i = arrayFindIndexOf(asstHelpMsgs, asstCurrMsgId);
	return (i > 0);
}

function showHideItem(section){
  s = document.getElementById("s_"+section);
  i = document.getElementById("i_"+section);
  if(s != null){
	  if (s.style.display == 'none'){
		s.style.display = 'block';
		if(i != null)
		  i.src = "gfx/minus.gif";
	  }	
	  else if (s.style.display == 'block'){
		s.style.display = 'none';
		if(i != null)		
		  i.src = "gfx/plus.gif";
	  }
  }
}



// *************** ASSISTANT LAYER FUNCTIONS START *********************
(document.getElementById) ? dom = true : dom = false;

function hide_assistant() {
  if (dom) {
    document.getElementById("root").style.visibility='hidden';
    if(document.getElementById("asst_btn_show") != null)
      document.getElementById("asst_btn_show").style.visibility='visible';    
  }
  if (document.layers) {
    document.layers["root"].visibility='hide';
    if(document.layers["asst_btn_show"] != null)
      document.layers["asst_btn_show"].visibility='show';
  } 
  showNavigationButtons();
  icon_update("none");
//  show_msg_icons("false");
}


function show_assistant() {
  if(document.getElementById("assistant_size").value.indexOf("maxi") > -1){
    maxi_assistant();
  }else{
    mini_assistant();
  }
  if (dom) {
    document.getElementById("root").style.visibility='visible';
    if(document.getElementById("asst_btn_show") != null)
      document.getElementById("asst_btn_show").style.visibility='hidden';
  }
  if (document.layers) {
    document.layers["root"].visibility='show';
    if(document.layers["asst_btn_show"] != null)
      document.layers["asst_btn_show"].visibility='hide';
  } 
  showNavigationButtons();
//  show_msg_icons("true");
}


function clickMini() {
  document.getElementById('assistant_size').value = 'mini'; 
  retrieveURL('ajax_message.do?assistant_size=mini');  
  return false;
}

function maxi_assistant(){
  theRoot   = document.getElementById("root");
  theMessage = document.getElementById("info_message");
  theStatus = document.getElementById("status");
  theBtn = document.getElementById("min_max");
  theSearch = document.getElementById("search");
  theSrchFAQ = document.getElementById("search_faq");
  theSrchInput = document.getElementById("srch_input");

  theRoot.style.height="417";
  theRoot.style.width="260";
  theSrchInput.style.width="155";
  theSrchFAQ.style.display="inline";
  if ((NS4) || (NS6)){
	theStatus.style.width="256"
	theMessage.style.height="348";
	theMessage.style.width="254"; 
	theMessage.style.top="40";
	theSearch.style.top="392";
	theSearch.style.width="256";
  }else if (IE4){
	theStatus.style.width="266"
	theMessage.style.height="344";
	theMessage.style.width="264"; 	
	theMessage.style.top="44";
	theSearch.style.top="388";
	theSearch.style.width="266";
  } 
  theBtn.src = "pages/templates/em_assistant/gfx/win_maximize_2.png";
  theBtn.onclick = clickMini;
}

function clickMaxi() {
  document.getElementById('assistant_size').value = 'maxi';
  retrieveURL('ajax_message.do?assistant_size=maxi');
  return false;
}

function mini_assistant(){
  theRoot   = document.getElementById("root");
  theMessage = document.getElementById("info_message");
  theStatus = document.getElementById("status");  
  theBtn = document.getElementById("min_max");
  theSearch = document.getElementById("search");
  theSrchFAQ = document.getElementById("search_faq");
  theSrchInput = document.getElementById("srch_input");

  theRoot.style.height="417";
  theRoot.style.width="160";
  theSrchInput.style.width="130";
  theSrchFAQ.style.display="none";    
  if ((NS4) || (NS6)){
	theStatus.style.width="156"
	theMessage.style.height="348";
	theMessage.style.width="154"; 
	theMessage.style.top="40";
	theSearch.style.top="392";
	theSearch.style.width="156";
  }else if (IE4){
	theStatus.style.width="166"
	theMessage.style.height="344";
	theMessage.style.width="164"; 	
	theMessage.style.top="44";
	theSearch.style.top="388";
	theSearch.style.width="166";
  } 

  theBtn.src = "pages/templates/em_assistant/gfx/win_maximize.png";
  theBtn.onclick = clickMaxi;
}

function help_btn_click(message){
  if(document.getElementById("assistant_size").value.indexOf("maxi") == -1){
    clickMaxi();
  }
  document.getElementById("info_message").innerHTML=" ";
  if(asstHelpMsgs.length > 0) {
	  if(!message) {
      	  // Retrieve default message (first message)
	      message = asstHelpMsgs[0];
	  }
	  loadMessageId(message);
	  show_assistant();
	  icon_update(message);
  }
}

function showNavigationButtons() {
    var prevButton = document.getElementById("prev_btn");
    var nextButton = document.getElementById("next_btn");
    var currValue = document.getElementById("curr_value");
    var currButton = document.getElementById("back_help");
    var backLink = document.getElementById("back_link");

	if(document.getElementById("assistant_size").value.indexOf("hide") > -1){
      prevButton.style.visibility='hidden';
      nextButton.style.visibility='hidden';
      currButton.style.visibility='hidden';
	}else{
	  if(backLink!=null && backLink.value.indexOf("true") != -1){
	     currButton.style.visibility='visible';
	  }
      if(hasPreviousMsg()){
	     prevButton.style.visibility='visible';
	     currButton.style.visibility='hidden';
      }else{
         prevButton.style.visibility='hidden';
      }
        
      if(hasNextMsg()){
	     nextButton.style.visibility='visible';
	     currButton.style.visibility='hidden';	     
      }else{
         nextButton.style.visibility='hidden';
      }
    }
}

/* LOOKS LIKE THIS IS NOT USED ANYMORE
function show_msg_icons(isVisible){
  var maeesage = null;
  var msg_id = 1;
  if(isVisible == "true"){
	  if (NS6){
		while( message = document.getElementById("message_" + msg_id) ){
		    message.style.visibility="visible";
  			msg_id++;
  		}	  
	  }
	  if (NS4){ 
		while( message = document.layers["message_" + msg_id] ){
		    message.visibility="show";
  			msg_id++;
  		}
  	  }	 
      if (IE4){
        while(message = document.all("message_" + msg_id) ){
		    message.style.visibility="visible";
  			msg_id++;
  		}	  
      }
  }
  	   
  if(isVisible == "false"){
	  if (NS6){
		while( message = document.getElementById("message_" + msg_id) ){
		    message.style.visibility="hidden";
  			msg_id++;
  		}	  
	  }
	  if (NS4){ 
		while( message = document.layers["message_" + msg_id] ){
		    message.visibility="hide";
  			msg_id++;
  		}
  	  }
      if (IE4){
        while(message = document.all("message_" + msg_id) ){
		    message.style.visibility="hidden";
  			msg_id++;
  		}	  
      }  	  	  
  }
}

*/

// *************** ASSISTANT LAYER FUNCTIONS END *********************

// *************** ASSISTANT AJAX FUNCTIONS **************************

var currUrl;

function retrieveURL(url) {
  if(url.indexOf(currUrl) == -1 ) {
	AjaxRequest.get({
	    'url':url
	    ,'onSuccess':function(req){ processResponse(req); }
	    ,'timeout':20000
    });
  } else {
    document.getElementById("info_message").innerHTML = latest_content;  
  }
}

function processResponse(req) {
  if(req.responseText.indexOf("no_update") == -1) {
    document.getElementById("info_message").innerHTML = req.responseText;
    latest_content = req.responseText;
	initAssistance();

  } else {
    document.getElementById("info_message").innerHTML = latest_content;
  }

  if(document.getElementById("assistant_size").value.indexOf("hide") > -1){
    hide_assistant();
  } else {
    show_assistant();
  }

  showNavigationButtons();
  
}

/* NOTE: THIS CODE HAS BEEN REPLACED WITH THE AJAX REQUEST CODE INSTEAD
   WHICH IS A LIBRARY TO HANDLE AJAX REQUESTS. CONSIDER TO REMOVE THIS
   EVENTUALLY.
var req;
var currUrl;

function retrieveURL(url) {
  if(url.indexOf(currUrl) == -1 ){
    currUrl = url;
    if (window.XMLHttpRequest) { // Non-IE browsers
      req = new XMLHttpRequest();
      req.onreadystatechange = processStateChange;
      try {
        req.open("GET", url, true);
      } catch (e) {
        alert(e);
      }
      req.send(null);
    } else if (window.ActiveXObject) { // IE
      req = new ActiveXObject("Microsoft.XMLHTTP");
      if (req) {
        req.onreadystatechange = processStateChange;
        req.open("GET", url, true);
        req.send();
      }
    }

  }else{
    document.getElementById("info_message").innerHTML = latest_content;  
  }
}

function processStateChange() {
    if (req.readyState == 4) { // Complete
      if (req.status == 200) { // OK response
//        alert(req.responseText);
        if(req.responseText.indexOf("no_update") == -1){
          document.getElementById("info_message").innerHTML = req.responseText;
          latest_content = req.responseText;
      	  initAssistance();
        }else{
          document.getElementById("info_message").innerHTML = latest_content;
        }
      } else {
        alert("Problem: " + req.statusText);
      }
    }
    if(document.getElementById("assistant_size").value.indexOf("hide") > -1){
      hide_assistant();
    }else{
      show_assistant();
    }
	showNavigationButtons();
}
*/


// ************************* STRING METHODS START ****************************
function leftTrim(sString) {
	while (sString.substring(0,1) == ' '){
		sString = sString.substring(1, sString.length);
	}
	return sString;
}

function rightTrim(sString){
	while (sString.substring(sString.length-1, sString.length) == ' '){
		sString = sString.substring(0,sString.length-1);
	}
	return sString;
}

function trimAll(sString) {
	while (sString.substring(0,1) == ' '){
		sString = sString.substring(1, sString.length);
	}
	while (sString.substring(sString.length-1, sString.length) == ' '){
		sString = sString.substring(0,sString.length-1);
	}
	return sString;
}
// ************************* STRING METHODS END ****************************

function addAssistantMsg(msgId) {
  found = false;
  for(i=0; i < asstHelpMsgs.length; i++) {
    if(asstHelpMsgs[i] == msgId) {
      found = true;
    }
  }
  
  if(found) {
    alert('A assistant message is already defined: msgId=' + msgId);
  } else {
	asstHelpMsgs[asstHelpMsgs.length] = msgId;
  }
}

/**
 * Writes a small html code that displays the assistant image with 
 * attached functionnality.
 */
function getAssistantLink(msgId) {
  document.write(getAssistantLinkHtml(msgId, ''));
}

function getAssistantLinkHtml(msgId, positionStyle) {
  addAssistantMsg(msgId);
  var pos = 'position:static;';
  if(positionStyle) {
  	pos = 'position:absolute; ' + positionStyle;
  }
  var html = '<span style="'+pos+' cursor:pointer;" onclick="help_btn_click(\'' + msgId + '\');">';
  html += '<img id="' + msgId + '" src="'+inactive_icon+'">';
  html += '</span>';
  return html;
}

function writeAssistantLinkAtPos(msgId, positionStyle) {
	var html = '<div style="position: relative;">';
	html += getAssistantLinkHtml(msgId, positionStyle);
    html += '</div>';
    document.write(html);
}

