/**
 * Fonction génériques pour tout le site
 */
Event.observe( document, 'dom:loaded', initJavascript );
Event.observe( document, 'unload', unloadCache );
Event.observe( document, 'mousemove',function(event){Event.stop(event)}.bindAsEventListener(window));
Event.observe( window, 'resize', resize);
 
var divLoader = "<img src='/images/ajax.gif' style='margin:2px auto;'/>";
var bt = null;
var agenda = null;

var ec = new EventController();

function initJavascript(){
	window.eval();
	
	//on observe l'événement multi postpone
	ec.add("multipostpone",multipostpone);
	reloadAllIndicators();
}

function unloadCache(){
	Event.unloadCache();
}

function resize(){
	if($(tt_aElt[0])){
		x = (document.viewport.getWidth() - tt_aElt[0].getWidth()) / 2;
		y = (document.viewport.getHeight() - tt_aElt[0].getHeight()) / 2;
		$(tt_aElt[0]).setStyle({top: y+'px', left: x+'px'});
		$(tt_aElt[0]).show();
	}
}

/**
 * affiche la fenetre de login
 */
function showLogin()
{
  if ($('logincontener') && $('logincontener').style.display == 'none' )
  {
    Effect.Appear('logincontener', {duration: 0.5});
  }
}

/**
 * Permet de soumettre le formulaire dont le nom est passé en paramètre
 */
function submitForm(form,url,type){
	if(!Prototype.Browser.IE){
	   $(form).onsubmit();
	}else{
		new Ajax.Request(url, {
			asynchronous:true, 
			evalScripts:true, 
			parameters:$(form).serialize(this),
			onComplete:function(request, json){
					if(type=='r'){
						output = eval(request.responseText);
						read(output.read,null);
					}else if(type=='b'){
						bookmark(eval(request.responseText).bookmark,null);
						showUpdMessage(eval(request.responseText).update,null);
					}
				}, 
				onCreate:function(request, json){
					if($('upd_msg')) $('upd_msg').update(divLoader);
				}				
			}); 
		return false;
	}
	return false;
}

/**
 * cache la fenetre de login
 */
function hideLogin()
{
  if ($('logincontener') && $('logincontener').style.display != 'none' )
  {
    Effect.Fade('logincontener', {duration: 0.5});
  }
}

/**
 * fonction de validation d'un email
 * @param {Object} email: email a valider
 */
function validMail(email)
{
  email = email + "";
  var reg = /^([_a-z0-9-]+(\.[_a-z0-9-]+)*)@([_a-z0-9-]+(\.[_a-z0-9-]+)*)\.([a-z]{2,6})$/i;
  return reg.test(email);
}

/**
 * verifie que tous les champs obligatoires (qui ont une class css appel�e "mandatory") sont remplis avant de submiter le form
 * verifie egalement que les champs dont le nom contient "email" sont au bon format
 */
function checkForm(form_id,event)
{
  if($(form_id))
  {
    elts = $$('input.mandatory');
    txt = '';
    txtemail = '';
    for (i=0; i<elts.length; i++)
    {
      if (elts[i].value.blank())
      {
        txt += '- '+elts[i].name + '\n';
        elts[i].addClassName('red');
      }
      if (elts[i].name.indexOf('email') > -1)//le nom du champ contient email, on peut supposer que c'est un email et faire les verifs
      {
        if (!(elts[i].value.blank()) && !validMail(elts[i].value))
        {
        	elts[i].addClassName('red');
          txtemail = 'The email format is not valid !\n';
        }
      }
    }
    txt = (txt.length > 0) ? 'You must fill the following fields:\n'+txt : '';
    txt = (txtemail.length > 0) ? txt+'\n'+txtemail : txt;
    if(txt.length > 0)
    {
      alert(txt);
      if(event){
      	Event.stop(event);
      }
      setTimeout(function(){
      	$$("input[type=submit]").each(function(element){ element.disabled=false;})
      	$$('input.mandatory').each(function(elt){
      		if(elt.hasClassName('red'))
      		{
      			elt.removeClassName('red');
      		}
      	});
      },3000);
      return false;
    }
    $(form_id).submit();
  }
}
/**
 * Permet d'annuler une redirection automatique
 * Il faut cependant toujours utiliser la variable redirectionTimeout
 */
function cancelRedirection(){
		clearTimeout(redirectionTimeout);
}
/**
 * dans le resum� de la commande, copie l'adresse de la company dans la billing adresse
 */
function copyAdr()
{
  if($('chkcopyAdr'))
  {
    chkbx = $('chkcopyAdr');
    if(chkbx.checked)
    {
      $('bcp_name').value = $F('cpn_name');
      $('bcp_address').value = $F('cpn_address');
      $('bcp_postcode').value = $F('cpn_postcode');
      $('bcp_city').value = $F('cpn_city');
      $('bcp_cty_id').value = $F('cty_id');
      $('bcp_sta_id').value = $F('sta_id');
      $('bcp_tel').value = $F('cpn_tel');
      $('bcp_num_intra').value = $F('cpn_num_intra');
    }
  }
}

function helpAutocomplete()
{
  //verifier si le focus n'est pas sur la suggest de l'autocomplete
  if($('company_auto_complete'))
  {
    new Ajax.Updater('company_detail', '/company/verifExist', 
      {parameters: {  company: $F('company')},
      asynchronous:true,
      evalScripts:true,
      onComplete:function(request, json){Element.hide('ajax_anim')},
      onCreate:function(request, json){Element.show('ajax_anim')}});
  }
}


/**
 * appel� sur le onKeyPress d'un input, limite la saisie des donn�es a des chiffres et des points et le backspace [\b]
 */
function limitDecimal(e)
{
  if(document.all) e=window.event; // for IE
  curChar = (e.which > 0) ? String.fromCharCode(e.which) : String.fromCharCode(e.keyCode);
  if (!curChar.match(/\d|\.|[\b]/))
  {
    return false;
  }
}

/**
 * cache une div 
 * @param {Object} id
 */
function hideDiv(id)
{
  if($(id))
  {
    $(id).hide();
  }
}

/**
 * affiche une div
 * @param {Object} id
 */
function showDiv(id)
{
  if($(id))
  {
    $(id).show();
  }
}


/**
 * cache une div avec EFFET DE FONDU
 * @param {Object} id
 */
function hideDivEffect(id)
{
  if($(id))
  {
    Effect.Fade(id, {duration: 0.5});
  }
}

/**
 * affiche une div avec EFFET DE FONDU
 * @param {Object} id
 */
function showDivEffect(id)
{
  if($(id))
  {
    Effect.Appear(id, {duration: 0.5});
  }
}

/**
 * cache une div avec EFFET DE FONDU
 * @param {Object} id
 */
function hideDivBlind(id)
{
  if($(id))
  {
    Effect.BlindUp(id, {duration: 0.5});
  }
}

/**
 * affiche une div avec EFFET DE FONDU
 * @param {Object} id
 */
function showDivBlind(id)
{
  if($(id))
  {
    Effect.BlindDown(id, {duration: 0.5});
  }
}

/**
 * appel en ajax la fonction qui va effacer un document
 * @param {Object} id
 */
function delDoc(id)
{
  if(confirm("Do you really want to delete this file ?"))
  {
    new Ajax.Updater('doc_list',myurl+id, {asynchronous:true, evalScripts:false});
  }
}



/**
 * switch l'affichage d'une div pass� en param, entre block et none
 * @param {Object} id
 */
function swapDisplay(id)
{
  var div = $(id);
  div.style.display = (div.style.display == "block") ? "none" : "block";
}

/**
 * Fonctions d'Adobe pour le rollover
 * @param {Object} arg
 */
function newImage(arg) {
  if (document.images) {
    rslt = new Image();
    rslt.src = arg;
    return rslt;
  }
}

function changeImages() {
  if (document.images && (preloadFlag == true)) {
    for (var i=0; i<changeImages.arguments.length; i+=2) {
      document[changeImages.arguments[i]].src = changeImages.arguments[i+1];
    }
  }
}

var preloadFlag = false;
function preloadImages() {
  if (document.images) {
    btn_lyon_over = newImage("btn_lyon-over.gif");
    btn_sanfrancisco_over = newImage("btn_sanfrancisco-over.gif");
    preloadFlag = true;
  }
}

/**
 * limit le nombre de caracteres saisis dans un champ 'obj' a une taille de 'limit'
 * @param {Object} obj : l'objet dont on doit limiter la value (ce n'est pas l'id de l'objet)
 * @param {Object} limit : limite, en nb caracteres
 * @param {Object} tooltip : eventuellement, ID d'un tag ou on indique le nb caracteres tap�s (idealement, un SPAN)
 */
function limitChar(obj,limit,tooltip)
{
  if(obj && obj.id && $(obj.id) && $F(obj.id))
  {
    content = $F(obj.id);
    content = content.substring(0,limit);
    $(obj.id).value = content;
    
    if($(tooltip))
    {
      $(tooltip).innerHTML = limit - content.length;
    }
  }
}

/**
 * positionne la popup aux coordonnees de la mouse
 * @param {Object} event
 */
function mousepos(evt,obj)
{
//  evt = (!evt && window.event)?window.event:evt;
//  if (evt.pageX){
//    mousex = evt.pageX;
//    mousey = evt.pageY;
//  }
//  else if (evt.clientX){
//   mousex = evt.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
//   mousey = evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
//  }
  if(obj!=null){
  	obj.setStyle({left : Event.pointerX(evt)+10+"px" });
  	obj.setStyle({top : Event.pointerY(evt)+"px" });
  }else if($('popup')){
  	$('popup').setStyle({left : Event.pointerX(evt)+10+"px" });
  	$('popup').setStyle({top : Event.pointerY(evt)+"px" });
  }
}

/**
 * renvoi la position absolue d'un objet (par rapport a la div principale du site)
 * @param {Object} obj
 */
function coordElement(obj)
{
  var x = Element.positionedOffset(obj)[0] /*- Element.positionedOffset($("site"))[0]*/;
  var y = Element.positionedOffset(obj)[1] - Element.positionedOffset($("site"))[1];
  var w = Element.getWidth(obj);
  var h = Element.getHeight(obj);
  
  return {x:x,y:y,w:w,h:h};
}

/**
 * Affiche/cache les legendes sur les differentes pages, avec un effet de sliding
 */
function swapLegend()
{
  var target = ($('contentLegend'))? $('contentLegend') : null;
  var ico = ($('iconlegend'))? $('iconlegend') : null;
  if(target && ico)
  {
    if(target.style.display == 'none')
    {
      //target.style.display = 'block';
      new Effect.SlideDown('contentLegend',
        { duration: 0.5});
      ico.src = '/images/icone_moins.png';
    }else{
      //target.style.display = 'none';
      new Effect.SlideUp('contentLegend',
        { duration: 0.5});
      ico.src = '/images/icone_plus.png';
    }
    
    //addendum juste pour le calendar: on vire les filtres si il y en a
    if ($('free_grp')) 
    {
      $('free_grp').selectedIndex = 0;
      getFreeSlot();
    }
  }
}


/**
 * Permet d'afficher des liens situés dans une span en mouseover
 */
function toggleLink(elem,className){
	$(elem+"_span").toggle();
	//$(elem).toggleClassName(className);
}

/**
 * Permet d'afficher un effet de highlighting sur un element
 */

function hlAndRemove(elem){
	new Effect.Highlight(elem,{startcolor:'#DDFFE6',endcolor:'#7FFF8E',restorecolor:'#ffffff', queue: 'front'});
}

/**
 * Affiche une divpopup pour l'envoi de la demande de rendez-vous
 */	
function link_to(cpn_id)
{
	Tip("<div id='popup' >"+divLoader+"</div>", WIDTH, 780,TITLE, 'Team(s) of the Company', EXCLUSIVE, true,FOLLOWSCROLL, true);
	getStatusMeeting(cpn_id);
}


function getStatusMeeting(cpn_id)
{
  if($('popup') && url_popmeeting && url_popmeeting.length > 0)
  {
    new Ajax.Updater('popup', url_popmeeting,
    	{
      	parameters:{cpn_id: cpn_id},
      	method:'post',
        evalScripts:true,
        onCreate:function() { $(tt_aElt[0]).hide();},
        onComplete: resize
      }
    );
  }
}



var ajax_load_img = "<img src='/images/ajax.gif' style='width:10px;'/>";
/**
 * Fonction permettant le reload du nombre de meetings en attente de réponse
 * Elle peut être appelée de toutes les pages du site
 */
var allready_lance1 = 0;
function waitingAnswerMeetings(){
	if(allready_lance1==0){
		allready_lance2 = 1;
		if($('waitingAnswerMeetings1')) $('waitingAnswerMeetings1').update(ajax_load_img);
		if($('waitingAnswerMeetings2')) $('waitingAnswerMeetings2').update(ajax_load_img);
		new Ajax.Request(URL_MENU_INDICATOR,{
			parameters: { type: 1 },
			onComplete: function(transport){
				if($('waitingAnswerMeetings1')) $('waitingAnswerMeetings1').update(transport.responseText);
				if($('waitingAnswerMeetings2')) $('waitingAnswerMeetings2').update(transport.responseText);
				allready_lance2 = 0;
			}
			});
	}
}

/**
 * Fonction permettant le reload du nombre de messages non lus
 * Elle peut être appelée de toutes les pages du site
 */
var allready_lance2 = 0;
function waitingUnreadMessages(){
	if (false) 
  {
    if (allready_lance2 == 0) 
    {
      allready_lance2 = 1;
      if ($('waitingUnreadMessages')) 
        $('waitingUnreadMessages').update(ajax_load_img);
      new Ajax.Request(URL_MENU_INDICATOR, {
        parameters: {
          type: 2
        },
        onComplete: function(transport){
          if ($('waitingUnreadMessages')) 
            $('waitingUnreadMessages').update(transport.responseText);
          allready_lance2 = 0;
        }
      });
    }
  }
}

/**
 * Fonction permettant le reload du nombre d'alertes non lues
 * Elle peut être appelée de toutes les pages du site
 */
var allready_lance3 = 0;
function waitingUnreadAlerts(){
	if(allready_lance3==0){
		allready_lance3 = 1;
		if($('waitingUnreadAlerts')) $('waitingUnreadAlerts').update(ajax_load_img);
		new Ajax.Request(URL_MENU_INDICATOR,{
			parameters: { type: 3 },
			onComplete: function(transport){
				if($('waitingUnreadAlerts')) $('waitingUnreadAlerts').update(transport.responseText);
				allready_lance3 = 0;
			}
			});
		}
}

/**
 * Fonction permettant le reload des alertes précédentes
 * Elle peut être appelée de toutes les pages du site
 */
function reloadAllIndicators(){
//	waitingUnreadMessages();
//	waitingUnreadAlerts();
	waitingAnswerMeetings();
}


//This prototype is provided by the Mozilla foundation and
//is distributed under the MIT license.
//http://www.ibiblio.org/pub/Linux/LICENSES/mit.license

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}


/**
 * Etend la classe Array pour ajouter une fonction  "has" permettant de vérifier la présence d'un élément
 */

Array.prototype.has = function(value) {
	var i;
	for (var i = 0, loopCnt = this.length; i < loopCnt; i++) {
		if (this[i] == value) {
			return true;
		}
	}
	return false;
};



/**
 * ferme la popup et reinitialise son contenu TODO: plus utilisée ?
 */
function closePopup()
{
  $('content').innerHTML = "";
  $('popup').style.display = "none";
}


/**
* Fonction permettant de connaitre la position d'un objet
* par rapport au bord gauche de la page.
* Cet objet peut etre a l'interieur d'un autre objet.
*/
function getLeft(MyObject)
{
  if (MyObject.offsetParent)
    return (MyObject.offsetLeft + getLeft(MyObject.offsetParent));
  else
    return (MyObject.offsetLeft);
}

/**
* Fonction permettant de connaitre la position d'un objet
* par rapport au bord haut de la page.
* Cet objet peut etre a l'interieur d'un autre objet.
*/
function getTop(MyObject)
{
  if (MyObject.offsetParent)
    return (MyObject.offsetTop + getTop(MyObject.offsetParent));
  else
    return (MyObject.offsetTop);
}

/**
 * Permet d'afficher la popup meeting request
 */ 
 
 function showMeetingPopup(masId)
 {
 	  var title = "";
 		// on va récupérer au moins le int_id et/ou le grp_id
 		title = '<b>Meeting request: </b>';
 		Tip("<div id='popup'>"+divLoader+"</div>", WIDTH, 780, TITLE, title, EXCLUSIVE, true, FOLLOWSCROLL, true);
 		
 		new Ajax.Updater('popup',SHOW_MAS_POPUP,{
 			parameters: {mas_id: masId},
 			asynchronous: true,
 			evalScripts: true,
 			method: 'post',
 			onCreate: function() { $(tt_aElt[0]).hide();},
 			onComplete: resize
 		});
 		
 }


/**
 * Permet d'afficher la popup request a meeting
 */ 
 
 function showAskMeetingPopup(grp_id,int_id,only_message)
 {
 	  var title = "";
 		// on va récupérer au moins le int_id et/ou le grp_id
 		if($('grp_id') && !grp_id)	grp_id = $F('grp_id') ? $F('grp_id') : 0;
 		if($('int_id') && !int_id)	int_id = $F('int_id') ? $F('int_id') : 0;
 		if(!only_message)
 		{
 			title = '<b>Send a meeting request: </b>';
 		}else{
 			title = '<b>Send a message: </b>'
 		} 		
 		Tip("<div id='popup'>"+divLoader+"</div>", WIDTH, 400, TITLE, title, EXCLUSIVE, true, FOLLOWSCROLL, true);
 		
 		new Ajax.Updater('popup',SHOW_ASK_MEETING_POPUP,{
 			parameters: {grp_id: grp_id, int_id: int_id,only_message: only_message},
 			evalScripts: true,
 			method: 'post',
 			onCreate: function() { $(tt_aElt[0]).hide();},
 			onComplete: resize
 		});
 		
 }
 
 
 /**
 * Permet d'afficher un message de confirmation
 */ 
 
 function showUpdMessage(message,afterFinishFunction){
 		if(message && message.valid && $('upd_msg')){ 
				$('upd_msg').update(message.txt);
				if($('upd_msg').hasClassName('red')){
					$('upd_msg').removeClassName('red');
				}else if($('upd_msg').hasClassName('green')){
					$('upd_msg').removeClassName('green');
 				}
		    $('upd_msg').addClassName(message.classe);			
//		    $('upd_msg').addClassName("update");
    	 	new Effect.Fade($('upd_msg'), {
    	 		delay: 1.0, 
    	 		duration: 0.5,
    	 		afterFinish: function() {
	    	 		if(afterFinishFunction!=null && message.classe == 'green' && message.referer !='calendar')
	    	 		{
	    	 			tt_HideInit();
	    	 			for(var i=0;i<afterFinishFunction.length;i++)
	    	 			{
	    	 				func=window.eval(afterFinishFunction[i]);
	    	 				func;
	    	 			}
	    	 		}else{
	    	 			tt_HideInit();
	    	 		}
		    	}});
 		}else{
 			tt_HideInit();
			if(afterFinishFunction!=null)
			{
				for(var i=0;i<afterFinishFunction.length;i++)
	 			{
	 				func=window.eval(afterFinishFunction[i]);
	 				func;
	 			}
			}
		}
 }
 
 
 var list_item_action_selected = new Array();
 
 /**
  * Met à jour la liste des items selectionnés pour le multiselect
  */
 function toggleMultiSelect(elem)
 {
 	 list_item_action_selected = new Array();
 	 $$('#'+elem.identify()).each( function(c){
	 	 	if(c.checked)
	 	 	{
	 	 		list_item_action_selected.push(c.value);
	 	 	}
 	 });
 	 hlAndRemove("action_selected");
 	 $("action_selected").update(list_item_action_selected.length+" selected item(s)");
 }
 
 /**
 * cache le conteneur status
 * @param {Object} mas_id
 */
function hidePartials(type)
{
	list_item_action_selected.each( function(value){
		var table_upd = 'table_'+value;
		var parent = $(table_upd).ancestors()[0];
		$(parent).remove();
	});
	bt.loadDataCount();
}

 /**
 * permet de mettre a jour plusieurs demandes de meeting, en ajax
 * @param {Object} action_id : action demande => 1 accept, 2 decline, 3 cancel, 4 archive, 5 restore
 * @param {Object} mas_id : id de la demande
 */
function doActionMultiple(action_id,afterSuccessFunction,div)
{
	if(list_item_action_selected.length ==0){
		alert("Please select at least one item");
	}else{
		var list_mas_str = list_item_action_selected.join(",");
		list_item_action_selected = new Array();
		$("action_selected").update(list_item_action_selected.length+" selected item(s)");
		$$("#multi_select").each( function(c){
		 	 	if(c.checked){
		 	 			c.checked = false;
		 	 	}
		});
	 	doAction(action_id,list_mas_str,afterSuccessFunction,div);
	}
}

/**
 * permet de mettre a jour une demande de meeting, en ajax
 * @param {Object} action_id : action demande => 1 accept, 2 decline, 3 cancel, 4 archive, 5 restore
 * @param {Object} mas_id : id de la demande
 */
function doAction(action_id, mas_id,afterSuccessFunction,div)
{
  var txt_error = "";
  var booth_content = "";
  var slot_content = "";
  
	var msg = "<div class='margin20'>"
	+ "<form name='popup_form'  id='popup_form'>";

  switch(action_id)
  {
    case 1:
      titre = "Do you really want to accept this meeting?";
      trclass = "accepted";
      action_content = "";
      if($('content_accepted_booth_'+mas_id))
      {
      	booth_content = $F('content_accepted_booth_'+mas_id);
      }
      if($('content_accepted_slot_'+mas_id)){
      	slot_content = $F('content_accepted_slot_'+mas_id);
      }
      
      txt_error = "Can not accept this request: you or the other group are no longer available on this slot";
      break;
    case 2:
      titre = "Do you really want to decline this meeting?";
      trclass = "declined";
      action_content = "";
      break;
    case 3:
      titre = "Do you really want to cancel this meeting?";
      trclass = "canceled";
      action_content = "";
      break;
    case 4:
      titre = "Do you really want to archive this meeting?";
      trclass = "hidden";
      action_content = "";
      break;
    case 5:
      titre = "Do you really want to restore this meeting?";
      trclass = "";
      action_content = "";
      break;
  }
  
  var cancel_reason = "<select class='formfield' name='reason_select' id='reason_select' onchange=\"showInputTag(this,4,'reason_text');\">";
  cancel_reason += "<option value=''>Please select a reason:</option>";
  cancel_reason += "<option value='Not available'>Not available</option>";
  cancel_reason += "<option value='Not interested'>Not interested</option>";
  cancel_reason += "<option value='Does not match my needs'>Do not match my needs</option>";
  cancel_reason += "<option value='0'>Add another reason</option>";
  cancel_reason += "</select>&nbsp;&nbsp;";
  cancel_reason += "<br /><textarea  rows=5 cols=5000  name='reason_text' id='reason_text' class='formfield fontItalic' onclick='toggleInput(this)' onfocus='toggleInput(this)' onblur='toggleInput(this)'>write a personal note</textarea>";
  
  var accept_reason = "<br /><textarea  rows=5 cols=5000 name='reason_text' id='reason_text' class='formfield fontItalic' onclick='toggleInput(this)' onfocus='toggleInput(this)' onblur='toggleInput(this)'>write a personal note</textarea><br/><br/>";
  
  if(action_id == 2 || action_id == 3)
  {
    msg += cancel_reason;
  }
  if(action_id == 1)
  {
    msg += accept_reason;
  }
  msg += "<input type=hidden name=action_id id='action_id' value=\""+action_id+"\" />";
  msg += "<input type=hidden name=mas_id id='mas_id' value=\""+mas_id+"\" />";
  msg += "<input type=hidden name=txt_error id='txt_error' value=\""+txt_error+"\" />";
  msg += "<input type=hidden name=action_content id='action_content' value=\""+action_content+"\" />";
  msg += "<input type=hidden name=booth_content id='booth_content' value=\""+booth_content+"\" />";
  msg += "<input type=hidden name=slot_content id='slot_content' value=\""+slot_content+"\" />";
  
  msg +="<br/><input id='validate_form' type='button' value='Validate' class='link0' onclick=\"regActionMeeting(new Array(&quot;"+afterSuccessFunction+"&quot;))\" />  or  "
	+ "<a id='cancel' class='link1' onclick='tt_HideInit()'>Cancel</a>"
	+ "</form>"
	+ "<div id='upd_msg'></div>"
	+ "</div>";
	
	if(div!=null )
	{
		toggleActionDiv(div,"<font color='#467094'><b>"+titre+"</b></font>"+msg);
	}else{
		if($('popup')){
			msg = "<font color='#467094'><b>"+titre+"</b></font>"+msg;
			$('popup').update(msg);
		}else{
  		Tip(msg, WIDTH, 400,TITLE, titre,EXCLUSIVE, true,FOLLOWSCROLL, true,CENTERWINDOW, true, CENTERALWAYS, true);
		}
	}
}

/**
 * Appelle en Ajax la page qui va effectuer les modifications sur le meeting mas_id (accepter/decliner/canceler)
 */
function regActionMeeting(afterSuccessFunction)
{
	var form = $("popup_form");
	//on recupere toutes les variables
//  if(updatemas!=undefined)
//  {
//    target = updatemas;
//  }else{
//    target = 'calendar/updatemas';
//  }
	var params = null;
	if(form)  //serialization des paramètres du formulaire
	{
		params = form.serialize(true);
		if(params["reason_text"]=="write a personal note"  || params["reason_text"]=="enter a comment")  params["reason_text"]="";
	}
  if(params!=null && params!='')
  {
  	if(form.action_id && form.mas_id) {
	    new Ajax.Request(UPDATE_MAS,{
		  	parameters: params,
		    asynchronous:true,
		    onCreate:function() {$('validate_form').disabled = true; $('upd_msg').update(divLoader)},
		    onComplete: function(transport){
						var json = eval(transport.responseText);
						if(form.action_id.value==1){
							ec.fire("multipostpone",json.intervalsToReload.join(","),'accept');
						}else{
							showUpdMessage(json.update,afterSuccessFunction);
						}
						$('validate_form').disabled = false; 
						waitingAnswerMeetings();
						if(agenda && json.intervalsToReload!=null)
						{
							agenda.reload(json.intervalsToReload);
						}
					}
	    });
	  }
  }
  
}

/**
 * met a jour le contener status dans la liste des meetings
 * @param {Object} mas_id
 */
function reloadPartial(id,type)
{
	var table_upd = 'table_'+id;
  new Ajax.Request(RELOAD_PARTIAL,{
  	parameters: {id: id, type: type},
    asynchronous:true,
    onCreate:function() {$(table_upd).update(divLoader)},
    onComplete:function(transport) {
    	var template = $('lineTemplate').innerHTML;
    	var json = eval(transport.responseText);
    	var data = null;
			if(json.bindings.length>0)
			{
 				data = json.bindings;
			}
			var html = render(template,data[0]);
    	$(table_upd).replace(html);
    }
  })
}

/**
 * cache le conteneur status
 * @param {Object} mas_id
 */
function hidePartial(id,type)
{
	var table_upd = 'table_'+id;
	var parent = $(table_upd).ancestors()[0];
	$(parent).remove();
	bt.loadDataCount();
}

/**
 * Permet d'ajouter un champ input en fonction de l'entrée du select que l'on choisit par défaut
 */
function showInputTag(elem,index,input){
	if(elem.selectedIndex==index)
	{
		if($(input))		$(input).show();
	}else{
		if($(input))		$(input).hide();
	}
}


/**
 * appelle en ajax une page qui affichera un contenu detaill�e sur la company pass�e en parametre
 * @param {Object} cpn_id
 */
function showInfo(cpn_id)
{
  if($('popinfo_'+cpn_id) && url_popcompany && url_popcompany.length > 0)
  {
    //$('popinfo_'+cpn_id).innerHTML = "sfd fdsfsd ffds fsdqff qsfsdfs fsdf<br/> fdf qsf";
    new Ajax.Updater('popinfo_'+cpn_id, url_popcompany,
                {parameters:{cpn_id: cpn_id},
                  asynchronous:true, 
                  evalScripts:true,
                  onCreate:function() {},
                  onComplete:function() {}
                  }
                );
  }
}

/**
 * permet l'envoi d'une meeting request depuis la popup directory/meeting
 */
//function sendMasByPop()
//{
//  var grp_id = ($('grp_id')) ? $F('grp_id') : null;
//  var cpn_id = ($('cpn_id')) ? $F('cpn_id') : null;
//  var msg_title = ($('msg_title')) ? $F('msg_title') : null;
//  var msg_content = ($('msg_content')) ? $F('msg_content') : null;
//  var int_id = ($('int_id')) ? $F('int_id') : null;
//  if(grp_id && msg_title && msg_content)
//  {
//    new Ajax.Updater('popup', url_popmeeting_sendrequest,
//                {parameters:{cpn_id: cpn_id, grp_id: grp_id, msg_title: msg_title, msg_content: msg_content, int_id: int_id},
//                  asynchronous:true, 
//                  evalScripts:true,
//                  onCreate:function() {$('popup').innerHTML = "<img src='/images/ajax.gif' />"},
//                  onComplete:function() {
//                      if ($('imgstatus_' + cpn_id)) 
//                      {
//                        $('imgstatus_' + cpn_id).src = '/images/bonhomme_gris.png';
//                        $('imgstatus_' + cpn_id).onmouseover = "Tip('Pending')";
//                      }
//                    }
//                  }
//                );
//  }
//}

function goRegister(){
	document.location.href = REGISTER_URL;
}

function goTrial(){
	document.location.href = TRIAL;
}

function goMas(id){
	document.location.href = SHOW_MAS.substr(0,SHOW_MAS.length-1)+id;
}

function goProfile(){
	document.location.href = MY_PROFILE;
}


function reloadPage(){
	if(bt){
		bt.loadDataCount();
	}else{
		document.location.reload();
	}
}

function multipostpone(){
	var args = $A(arguments);
	tt_HideInit();
	new Ajax.Updater('popup', SHOW_MULTI_PENDING_POSTPONE+"/postpone", {
      parameters: {str_int_ids: args[0], from:  args[1]},
      asynchronous: true,
      evalScripts: true,
      method:'post',
      onCreate: function(){ Tip("<div id='popup'></div>", WIDTH, 780, TITLE, '<b>Postpone several meeting requests:</b>', CLOSEBTN, false, EXCLUSIVE, true,FOLLOWSCROLL, true); $('popup').update(divLoader);},
      onComplete: resize
    });
}


function postpone(mas_id, grp_id,int_id,boo_id,div,afterSuccessFunction){
	
	var txt = "<div class='margin20'>"+
			"<form name='popup_form'  id='popup_form' >" +
			"You can postpone this meeting:<br />" +
 			"<div id='combo_grp"+mas_id+"' style='margin:3px 0px;'></div>";
 		txt += "<input id='validate_form' type='button' value='Validate'  class='link0'  onclick=\"delay(new Array(&quot;"+afterSuccessFunction+"&quot;),null,false);return false;\"/>   or   " ;
  txt += "<a id='cancel' class='link1' onclick='tt_HideInit();return false;'>Cancel postpone</a>" +
 	  	"</form>" +
 	  	"<div id='upd_msg'></div>" +
 	  	"</div>";
 	if (!$(div)) {
    Tip("<div id='popup'>"+txt+"</div>", WIDTH, 400, TITLE, '<b>Postpone this meeting request:</b>', EXCLUSIVE, true,FOLLOWSCROLL, true);
    $(tt_aElt[0]).hide();
  }else{
  	$(div).update(txt);
  }
  new Ajax.Updater('combo_grp'+mas_id, SHOW_FREE_SLOTS_URL, {
      parameters: {grp_id: grp_id, mas_id: mas_id,int_id: int_id,boo_id: boo_id},
      asynchronous: true,
      evalScripts: true,
      method:'post',
      onCreate: function(){ $('combo_grp'+mas_id).update(divLoader);},
      onComplete: resize
    });
}

function letsmeet(mas_id, grp_id,int_id,boo_id,div,afterSuccessFunction){
	
	var txt = "<div class='margin20'>"+
			"<form name='popup_form'  id='popup_form' >";
	if(int_id==null){
		txt += "You can change your location:<br />";
	}else{
		txt += "You can ask for a meeting:<br />";
	}		
 	txt += "<div id='combo_grp"+mas_id+"' style='margin:3px 0px;'></div>";
 	if(int_id==null){
		txt += "<input id='validate_form' type='button' value='Validate'  class='link0'  onclick=\"delay(new Array(&quot;"+afterSuccessFunction+"&quot;),null,'location');return false;\"/>   or   " ;
	}else{
		txt += "<input id='validate_form' type='button' value='Validate'  class='link0'  onclick=\"delay(new Array(&quot;"+afterSuccessFunction+"&quot;),null,'message');return false;\"/>   or   " ;
	}	
 	txt += "<a id='cancel' class='link1' onclick='tt_HideInit();return false;'>Cancel</a>" +
 	  	"</form>" +
 	  	"<div id='upd_msg'></div>" +
 	  	"</div>";
 	if (!$(div)) {
 		if(int_id==null){
 			Tip("<div id='popup'>"+txt+"</div>", WIDTH, 400, TITLE, "<b>Change location</b>", EXCLUSIVE, true,FOLLOWSCROLL, true);
 		}else{
 			Tip("<div id='popup'>"+txt+"</div>", WIDTH, 400, TITLE, "<b>Let's meet</b>", EXCLUSIVE, true,FOLLOWSCROLL, true);
 		}
    $(tt_aElt[0]).hide();
  }else{
  	$(div).update(txt);
  }
  new Ajax.Updater('combo_grp'+mas_id, SHOW_FREE_SLOTS_URL, {
      parameters: {grp_id: grp_id, mas_id: mas_id,int_id: int_id,boo_id: boo_id},
      asynchronous: true,
      evalScripts: true,
      method:'post',
      onCreate: function(){ $('combo_grp'+mas_id).update(divLoader);},
      onComplete: resize
    });
}


 /**
  * Permet d'afficher ou de cacher la div de postpone dans la popup pending meeting requests
  */
  
function hideAllLiActionPostpone(){
	$('meeting_ask_agenda').getElementsBySelector('LI.selectedLiOver').each(
		function(li){
			$(li).removeClassName('selectedLiOver');
		}
	);
	$('meeting_ask_agenda').getElementsBySelector('DIV.action').each(
		function(li){
			if(li!=null && li.style.display!='none')
			{
				new Effect.Fade($(li),{duration:0.1});
			}
		}
	);
	
	$('meeting_ask_agenda').getElementsBySelector('DIV.postpone').each(
		function(li){
			if(li!=null && li.style.display!='none')
			{
				new Effect.Fade($(li),{duration:0.1});
			}
		}
	);
}
  
function togglePostPoneDiv(div)
{
	hideAllLiActionPostpone();		
	$(div).addClassName('selectedLiOver');
//	if($(div+'_toggle').innerHTML == '▼'){
//		$(div+'_toggle').update('▲');
		new Effect.Appear($(div+'_postpone'),{duration:0.5, afterFinish: function(){
			$('cancel').replace("<a id='cancel' class='link1' onclick=\"hideDiv('"+div+"_postpone')\">Cancel postpone</a>");
		}});
//	}else{
//		$(div+'_toggle').update('▼');
//	}
}

function toggleActionDiv(div,content)
{
	hideAllLiActionPostpone();
	$(div).addClassName('selectedLiOver');
	
	$(div+'_action').update(content);
	new Effect.Appear($(div+'_action'),{duration:0.5, afterFinish: function(){
		$('cancel').replace("<a id='cancel' class='link1' onclick=\"hideDiv('"+div+"_action')\">Cancel</a>");
	}});
}


/**
 * envoie un message aux groups selectionnés
 */
function SendToSelected(form)
{
	tinyMCE.triggerSave();
	var form = $(form);
	var params = null;
	if(form)  //serialization des paramètres du formulaire
	{
		params = form.serialize(true);
	}
  if(params!=null && params!='')
	{
    new Ajax.Request(SEND_MESSAGE,{
				parameters: params,
        asynchronous:true, 
        evalScripts:true,
        onCreate:function() {$('upd_msg').update(divLoader)},
				onComplete: function(transport){
						var json = eval(transport.responseText);
						showUpdMessage(json.update,"");
						waitingUnreadMessages();
						reload();
					}
        }
      );
  }
}

/**
 * Ajout de méthode à l'objet String javascript
 */
Object.extend(String.prototype, {
  empty: function() {
    return this == '' || this == 'undefined';
  },
  blank: function() {
    return /^\s*$/.test(this);
  },
  equals: function(value) {
    return this == value;
  }
});

/**
 * Permet de positionner une div ajax sur une autre div;
 */  
function setPosFromDivToOtherDiv(divTo, divFrom, noHeight,mailbox){
	if($(divTo))
	{
		var pos = coordElement($(divFrom));
		Position.absolutize($(divTo));
		if(mailbox){
			$(divTo).setStyle({top:(pos.y)+'px',left: (pos.x)+'px', width:(pos.w-4)+'px', height: (pos.h)+'px' });
		}else{
			if(!noHeight){
				$(divTo).setStyle({top:(pos.y)+'px',left: (pos.x)+'px', width:(pos.w)+'px', height: (pos.h)+'px' });
			}else{
				$(divTo).setStyle({top:(pos.y)+'px',left: (pos.x)+'px', width:(pos.w)+'px'});
			}
		}
	}
}

/**
 * Permet d'afficher une zone combobox-like
 */
var select_like = false;
function showSelectLike(eltParent,element){
	if($(element) && $(eltParent))
  {
  	if($(element).style.display!='none')
  	{
  		new Effect.Fade($(element), {duration: 0.5});
	    select_like = false;
  	}else{
	  	var pos = coordElement($(eltParent));
			Position.absolutize($(element));
			$(element).setStyle({top:(pos.y+pos.h)+'px',left: (pos.x)+'px', width:(pos.w-4)+'px', height:'auto'});
			select_like = true;
	    new Effect.Appear($(element), {
	    	duration: 0.5/*, 
	    	afterFinish:function(){
	    		setTimeout(function(){
	    			if($(element).style.display!='none' && select_like==true)
	    			new Effect.Fade($(element), {duration: 0.5});
	    			select_like = false;
	    		},6000);
	    	}*/
	    });
  	}
  }
}

/**
 * recupere la liste des LMM en attente sur un slot et permet de les modifier
 */
function getLmmInfo(int_id, grp_id,accepted)
{
  Tip("<div id='popup'>"+divLoader+"</div>", WIDTH, 780, TITLE, '<b>Meeting request: </b>',EXCLUSIVE, true,FOLLOWSCROLL,true);
  new Ajax.Updater('popup',SHOW_POPUP_LMM, {
    parameters: {int_id: int_id, grp_id: grp_id, accepted: accepted},
    asynchronous: true,
    evalScripts: true,
    onCreate: function() { $(tt_aElt[0]).hide();},
    onComplete: resize
  });
}

/**
 * gere le report d'un rdv (accepté ou non) en autre lmm
 */
function delay(afterSuccessFunction,form,transform)
{
	var params = null;
	if(form)  //serialization des paramètres d'un formulaire quelconque
	{
		params = $(form).serialize(true);
	}
	if($('popup_form'))  //serialization des paramètres du formulaire de la popup si il est présent
	{
		params = $('popup_form').serialize(true);
	}
//  if(confirm("This request will be converted to a PENDING request,\n even if it's already accepted.\nDo you want to proceed?"))
//  {
    if(params!=null)
    {
    	if(parseInt(params['boo_id'])==0 && params['boo_name'].length<1){
    		var update = new Object();
    		update.valid = true;
    		update.classe = "red";
    		update.txt = "You have to fill a new location or choose an existing one!";
    		showUpdMessage(update,afterSuccessFunction);
//    		alert("You have to fill the new location or choose an existing location!")
    	}else{
    		params['transform'] = transform;
	    	var target = $('upd_msg');
		    new Ajax.Request(DELAY_MAS, {
		      parameters: params,
		      method:'post',
		      onCreate: function(){if(target) target.update(divLoader);},
		      onComplete: function(transport){
		      		var json = eval(transport.responseText);
	            showUpdMessage(json.update,afterSuccessFunction);
	            if(json.intervalsToReload!=null)
	            {
	              agenda.reload(json.intervalsToReload);
	            }
	            waitingAnswerMeetings();
		      }
		    });
	    }
    }
//  }
}

var focusDefault = null;
function toggleInput(elem,defaultComment)
{
	focusDefault = $(elem).defaultValue;
	if(defaultComment!=null){
		if($F(elem)==defaultComment)	$(elem).value='';
		else if($F(elem)==''){
			$(elem).value=defaultComment;
		}
	}else{
		if($F(elem)==focusDefault)	$(elem).value='';
		else if($F(elem)==''){
			$(elem).value=focusDefault;
			focusDefault = null;
		}
	}
}

 /**
  * Affiche et supprime l'aide contextuelle dans un cadre fixe de la page
  */
 function UnTipCalendar(){
 		setTimeout(function(){if($('help_middle')){	$('help_middle').hide();}},2000);
 }
 function TipCalendar(content){
 		$('help_middle').update(content);
 		$('help_middle').show();
 }
 
 function maxLength(elem,max){
 		var txt = elem.value;
 		var left = max - txt.length;
 		$("max_length_"+elem.id).update(left+" caracters left.");
 		if(left<=0){
 			elem.value = txt.substr(0,max);
 		}
 }
 function toggleUnderline(elem){ if($(elem).hasClassName('textUnderline')){$(elem).removeClassName('textUnderline')}else{$(elem).addClassName('textUnderline')} }
 
 
// /**
//* fais apparaitre une popup pour saisir un commentaire sur la page company
//*/
//function editNote(elem)
//{
//	var txt = "<div class='margin20'>"
//	+ "<form name='popup_form'  id='popup_form'>"
//  + "<textarea name='comment' id='comment' class='width100 fontSize8 fontColorGray' maxlength=200 rows=20 cols=50>"+elem.innerHTML+"</textarea><br /><br />"
//  + "<input type='button' value='Save note' class='link0' onclick='$(\"full_textarea_"+elem.id+"\").update($F(\"comment\"));$(\""+elem.id+"\").update($F(\"comment\"));$(\"save_note\").click();' />  or  "
//  + "<a class='link1' onclick='tt_HideInit()'>Cancel</a>"
//  + "</form>"
//  + "</div><div id='upd_msg'></div>";
//  Tip("<div id=\'popup\'>"+txt+"</div>", TITLE,"Edit note" ,WIDTH, 400,FIX, [500,100], EXCLUSIVE, true, MODAL,true);      
//}



/*** Gestion des cookies en javascript ***/
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

/*** Gestion des Vidéos***/
/**
 * Fonction de parsing de l'url de la vidéo à partir d'une balsie objet livrée par Youtube, Dailumotion, etc
 */
function parseURL(elem){
	var val = $(elem).value;
	if(val!=''){
		if(val.indexOf("name=\"movie\"")>=0 || val.indexOf("embed")>=0){
			deb = val.indexOf("http",0);
			val = val.substr(deb);
			fin = val.indexOf("\"",0);
			val = val.substr(0,fin);
			$(elem).value = val;
			
		}
		else{
			$(elem).value = "";
			alert("No embeded vidéo found. Please retry.");
		}
	}
}
/**
 * Récupération de la valeur d'une liste par radiobutton
 */
function getRadioButtonCheckedValue(radioObj)
{
 if(!radioObj)	return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

/** check si un formulaire est vide ou pas **/
function checkEmpty(event)
{
	var cont = true;
	var form = Event.element(event);
	var elements = $(form).getElements();
	elements.each(function(c){
		if(c.value==''){
			cont = false;
			if($(c.id+'_ifr')){
				ifr = $(c.id+'_ifr');
				c = ifr.contentWindow.document.body;
				c.style.backgroundColor ='#fdd';
				setTimeout(function(){c.style.backgroundColor ='#fff';},3000);
			}else{
				$(c).setStyle({backgroundColor:'#fdd'});
				setTimeout(function(){$(c).setStyle({backgroundColor:'#fff'});},3000);
			}
		}
	});
	return cont;
}


/**
 * affiche/cache l'exemple de saisie d'un participant dans l'input box
 * @param sens {boolean}: true si on cache, false si on affiche
 */
function swapSample(elt,sens)
{
  valbox = $F(elt);
  //alert('ok1');
  if (sens && (valbox == 'john smith'))
  {
    $(elt).value = '';
    $(elt).style.color = '#000';
  }
  if (!sens && (valbox == ''))
  {
    $(elt).value = 'john smith';
    $(elt).style.color = '#888';
  }
  //alert('ok2');
}

 