/**
 * Fonction génériques pour tout le site
 */

var divLoader = "<img src='/images/ajax.gif' style='padding:5px 12px;'/>";
/**
 * affiche la fenetre de login
 */
function showLogin()
{
  if ($('logincontener') && $('logincontener').style.display == 'none' )
  {
    Effect.Appear('logincontener', {duration: 0.5});
  }
}

/**
 * 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 = $$('.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.mandatory').each(function(elt){
      		if(elt.hasClassName('red'))
      		{
      			elt.removeClassName('red');
      		}
      	});
      },3000);
      return false;
    }
    $(form_id).submit();
  }
}

/**
 * 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')},
      onLoading: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).style.display = 'none';
  }
}

/**
 * affiche une div
 * @param {Object} id
 */
function showDiv(id)
{
  if($(id))
  {
    $(id).style.display = 'block';
  }
}

/**
 * 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;
    }
  }
}

/**
 * renvoi la position absolue d'un objet (par rapport a la div principale du site)
 * @param {Object} obj
 */
function coordElement(obj)
{
  var x=0,y=0;
  var w = obj.offsetWidth;
  var h = obj.offsetHeight;
  //while (obj!=null)
  while (obj != $('main_content'))
  {
    x += obj.offsetLeft - obj.scrollLeft;
    y += obj.offsetTop - obj.scrollTop;
    
    obj=obj.offsetParent;
  }
  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, afterFinish: function(){
        	if($('mycalendar') && $('ajax_calendar'))
					{
						setPosFromDivToOtherDiv('ajax_calendar','mycalendar');
					}
        }});
      ico.src = '/images/icone_moins.png';
    }else{
      //target.style.display = 'none';
      new Effect.SlideUp('contentLegend',
        { duration: 0.5, afterFinish: function(){
        	if($('mycalendar') && $('ajax_calendar'))
					{
						setPosFromDivToOtherDiv('ajax_calendar','mycalendar');
					}
        }});
      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();
    }
  }
}

/**
 * positionne une div par rapport à une autre
 */
function setPosFromDivToOtherDiv(divTo, divFrom){
	if($(divTo))
	{
		var pos = coordElement($(divFrom));
		$(divTo).setStyle({top:(pos.y+1)+'px',left: (pos.x+1)+'px', width:(pos.w-2)+'px', height: (pos.h-2)+'px' });
	}
}


/**
 * check si l'email saisi a deja ete imprimé en badge
 */
function checkQuickEmail()
{
  if($('email'))
  {
    var email = $F('email');
    new Ajax.Updater('info_email', '/public.php/user/check_badge_email', 
      {parameters: {email: email},
      asynchronous:true,
      evalScripts:true,
      onComplete:function(request, json){},
      onLoading:function(request, json){}});
  }
}

/**
 * permet d'imprimer des badges depuis le backoffice
 * @param {Object} gus_id
 */
function back_print_badge(gus_id)
{
  if($('badgename'+gus_id) 
  && $('badgesurname'+gus_id) 
  && $('badgecompany'+gus_id) 
  && $('badgejob'+gus_id) 
  && $('badgeprofile'+gus_id))
  {
    /*alert('ok');
    $('myform'+gus_id).name = 'myform';
    $('badgename'+gus_id).name = 'badgename';
    $('badgesurname'+gus_id).name = 'badgesurname';
    $('badgecompany'+gus_id).name = 'badgecompany';
    $('badgejob'+gus_id).name = 'badgejob';
    $('badgeprofile'+gus_id).name = 'badgeprofile';*/
  }
  var poption = 'width=640,height=600,menu=0,status=1';
  var url = "/public.php/default/print_badge?gus_id="+gus_id+"&name="+$F('badgename'+gus_id)+"&surname="+$F('badgesurname'+gus_id)+"&company="+$F('badgecompany'+gus_id)+"&job="+$F('badgejob'+gus_id)+"&profile="+$F('badgeprofile'+gus_id);
  //alert(url);
  pop = window.open(url, 'badge', poption);
}

Object.extend(String.prototype, {
  empty: function() {
    return this == '';
  },
  blank: function() {
    return /^\s*$/.test(this);
  },
  equals: function(value) {
    return this == value;
  }
});

Position.offsetParent = function(element) {
    if (element.offsetParent && Element.visible(element)) return $(element.offsetParent);
    if (element == document.body) return element;
    while ((element = element.parentNode) && element != document.body)
      if (Element.getStyle(element, 'position') != 'static')
        return element;

    return document.body;
  };


/**
 * 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;
};
