/* ------ prototypes ------ */
/**
 * Trim string. Extends the String object.
 * @author fcantegrel
 */
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); }

/**
 * Return true if the string string. Extends the String object.
 * @author fcantegrel
 */
String.prototype.isEmpty = function() { return (this == null || this == 'undefined' || this.trim().length == 0); }

String.prototype.isNumeric = function() { return (!isNaN(this) && this != ' ') }

String.prototype.isAlphabetical = function() {
	var regexp = /[a-z]|[A-Z]/;
	return regexp.test(this);
}

/* ------ /prototypes ------ */

/* ------ onLoad ------ */
var onLoadFunctions = new Array();
var onLoadFunctionsArgs = new Array();

function doOnload() {
	for (i=0; i<onLoadFunctions.length; i++) {
		eval(onLoadFunctions[i]+"("+onLoadFunctionsArgs[i]+")");
	}
}

function addOnLoad(f, a) {

	if (!f.isEmpty()) {
		addOnLoadFunctions(f);
		if (a.isEmpty()) {
			addOnLoadFunctionsArgs('');
		} else {
			addOnLoadFunctionsArgs(a);
		}
	}
}

function addOnLoadFunctions(f) {
	onLoadFunctions[onLoadFunctions.length] = f;
}

function addOnLoadFunctionsArgs(a) {
	onLoadFunctionsArgs[onLoadFunctionsArgs.length] = a;
}

/* ------ /onLoad ------ */

function rollOver(quelleImg,nouvelleSrc)
{
window.document.images[quelleImg].src = nouvelleSrc
}

function rollOverMenuItem(div, isOver)
{
  if (isOver)
  {
	div.style.cursor='pointer';
  }
}

/**
	Gestion du menu des items de commande
	(accompagnements)
*/
function showSideDishes(imgObject, divId) {
	if (imgObject.src.indexOf('/images/btn-add.gif') > -1) {  
		document.getElementById(divId).style.display='block'; 
		imgObject.src='/images/btn-minus.gif';
	} else { 
		document.getElementById(divId).style.display='none'; 
		imgObject.src='/images/btn-add.gif';  
	}
}


var ENTER_KEY_CODE=13;
var TAB_KEY_CODE=9;
var SHIFT_KEY_CODE=16;
var DEL_KEY_CODE=8;
var SPACE_KEY_CODE=32;
var CTRL_KEY_CODE=17;
var ARROW_LEFT_KEY_CODE=37;
var ARROW_RIGHT_KEY_CODE=39;

/**
	Mask pour la premiè partie d'un code postal
*/
function cp1KeyUp(e, inputObject, cp2Id, formId) {

	cp2Object = document.getElementById(cp2Id);

	if (getKeyCode(e) == TAB_KEY_CODE || getKeyCode(e) == SHIFT_KEY_CODE) {
		return;
	}

	if (getKeyCode(e) == ENTER_KEY_CODE && cp2Object.value.length==3) {
		document.getElementById(formId).submit();
	}
	
	var cp1Value = inputObject.value;	
	var realValue = "";
	
	for (var i = 0; i < cp1Value.length; i++) {
		var val=cp1Value.substr(i, 1);
		if (i == 0 || i == 2) {
			if (!val.isAlphabetical()) {
				break;
			} 
			realValue += val.toUpperCase(); 
		} else {
			if (!val.isNumeric()) {
				break;
			}
			realValue += val;
		}
	}
	
	inputObject.value = realValue;	

	if (realValue.length == 3) {
		cp2Object.focus();
	}	
}


/**
	Mask pour la deuxiè partie d'un
	code postal
*/
function cp2KeyUp(e, inputObject, formId) {
	
	
	if (getKeyCode(e) == SHIFT_KEY_CODE) {
		return;
	}
	
	var cp2Value = inputObject.value;
	var realValue = "";
	
	if (getKeyCode(e) == ENTER_KEY_CODE && cp2Value.length==3) {
		document.getElementById(formId).submit();
	}	
	
	for (var i = 0; i < cp2Value.length; i++) {
		var val = cp2Value.substr(i, 1);
		if (i == 0 || i == 2) {			 
			if (!val.isNumeric()) {
				break;
			} 
			realValue += val; 
		} else {
			if (!val.isAlphabetical()) {
				break;
			}
			realValue += val.toUpperCase();
		}
	}
	
	inputObject.value = realValue;

}

/**
	Mask pour les champs de numés de téphone
	nextObjId : Id de l'objet pour un focus lorsque le champ est complé
	lengthForNextObj : Grandeur que doit comporter le champ courant pour êe complé
	formId : id du formulaire àoumettre
	submitIfEnter : Soumettre le formulaire si on clique sur enter (true|false)
	minLengthToSubmit : grandeur minimale pour le champ courrant pour soumettre le formulaire
*/
function phoneNumberKeyUp(e, inputObject, nextObjId, lengthForNextObj, formId, submitIfEnter, minLengthToSubmit) {

	var phoneNumberValue = inputObject.value;
	var realValue = "";
	var keyCode = getKeyCode(e);
	
	
	if (keyCode == ENTER_KEY_CODE && submitIfEnter && phoneNumberValue.length >= minLengthToSubmit) {
		document.getElementById(formId).submit();
	}
	
	if (keyCode == TAB_KEY_CODE || 
			keyCode == SHIFT_KEY_CODE || 
			keyCode == DEL_KEY_CODE ||
			keyCode == ARROW_RIGHT_KEY_CODE ||
			keyCode == ARROW_LEFT_KEY_CODE) {
		return;
	}

	for (var i = 0; i < phoneNumberValue.length; i++) {
		var val = phoneNumberValue.substr(i, 1);		
		if (!val.isNumeric()) {
			break;
		} 
		realValue += val;
	}
	
	inputObject.value = realValue;

	if (nextObjId != null && realValue.length == lengthForNextObj) {
		var nextObj = document.getElementById(nextObjId);
		nextObj.focus();
	}

}


/**
	Publier un formulaire lors du "enter" sur un champ
*/
var submitted = false;
function submitOnEnter(e, formId) {
	var formObject = document.getElementById(formId);
	var keynum = getKeyCode(e);
	
	if (keynum == 13 && submitted == false) {
		submitted = true;
		formObject.submit();
	}
}

/**
	Retourne le caractè associé l'énement
*/
function getKeyChar(e) {
	keynum = getKeyCode(e);
	return String.fromCharCode(keynum);
}

/**
	Retourne le numé du caractès
	associé l'énement
*/
function getKeyCode(e) {
	if(window.event) // IE
	{
		keynum = e.keyCode;
	}
	else if(e.which) // Netscape/Firefox/Opera
	{
		keynum = e.which;
	}
	
	return keynum;
}

/**
 * Inactive ou active un bouton.
 * un bouton qui peut êe inactivéoit avoir un
 * jumeau sans lien dont l'id est celui du bouton actif + le suffixe "_hidden"
 */

function disableButton(doIt, buttonToDisable) {
	if (doIt) {
		document.getElementById(buttonToDisable+'_hidden').style.display = 'block';
		document.getElementById(buttonToDisable).style.display = 'none';		
	} else {
		document.getElementById(buttonToDisable+'_hidden').style.display = 'none';
		document.getElementById(buttonToDisable).style.display = 'block';		
	}
}

/*
 * Redirige du sommaire vers la selection d'un produit
 *
 */
function goFromSummaryToProduct(formPrefix, id, qty, invoiceIndex) {
	formOpt = document.getElementById(formPrefix);
	document.getElementById(formOpt.id + "_id").value = id;
	document.getElementById(formOpt.id + "_qty").value = qty;
	document.getElementById(formOpt.id + "_invoiceIndex").value = invoiceIndex;
	
	formOpt.submit();
	
}

/*
 * Fonctions pour le slider des promotions 
 */
var nbOfPromo = 4;
var TimeToFade = 1000.0;
var TimeAutoChange = 4000.0;
var cnt1 = 0;
var cnt2 = 0;
var cntAutoChange = 0;
var currentSlide = 1;

function initPromo(nbOfElements, timerInterval) {
	if (nbOfElements > 1) {
		nbOfPromo = nbOfElements;
		TimeAutoChange = timerInterval;
	}
}

function showPromo(promoId) {
		hideAllPromo();
		clearInterval(cntAutoChange);
		var objPromo = document.getElementById('promo' + promoId);
		objPromo.style.display = 'inline';
	    objPromo.style.opacity = '0';
	    objPromo.style.filter = 'alpha(opacity = 0)';				
		fadeIn('promo' + promoId);				
		cntAutoChange = setInterval("nextSlide()", TimeAutoChange);
		document.getElementById("thumb" + currentSlide).className = "page-item";
		document.getElementById("thumb" + promoId).className = "page-item-sel";
		currentSlide = promoId;							
}

function hideAllPromo() {
	for (var i = 1; i <= nbOfPromo; i++) {
		var objPromo = document.getElementById('promo' + i);
		objPromo.style.display = 'none';
	}
}

function fadeIn(eid)
{
  var element = document.getElementById(eid);

    element.FadeState = 1;
    element.FadeTimeLeft = TimeToFade;
    clearTimeout(cnt1);
    clearTimeout(cnt2);
    cnt1 = setTimeout("animateFade(" + new Date().getTime() + ",'" + eid + "')", 33);
}		

function  animateFade(lastTick, eid)
{  
  var curTick = new Date().getTime();
  var elapsedTicks = curTick - lastTick;
 
  var element = document.getElementById(eid);
 
  if(element.FadeTimeLeft <= elapsedTicks)
  {
    element.style.opacity = element.FadeState == 1 ? '1' : '0';
    element.style.filter = 'alpha(opacity = '
        + (element.FadeState == 1 ? '100' : '0') + ')';
    element.FadeState = element.FadeState == 1 ? 2 : -2;
    return;
  }
 
  element.FadeTimeLeft -= elapsedTicks;
  var newOpVal = element.FadeTimeLeft/TimeToFade;
  if(element.FadeState == 1)
    newOpVal = 1 - newOpVal;

  element.style.opacity = newOpVal;
  element.style.filter = 'alpha(opacity = ' + (newOpVal*100) + ')';
 
  cnt2 = setTimeout("animateFade(" + curTick + ",'" + eid + "')", 33);
}

function nextSlide() {		
	var nextSlide = currentSlide + 1 ;
	if (nextSlide > nbOfPromo) {
		nextSlide = 1;
	} 
	
	showPromo(nextSlide);
	currentSlide = nextSlide;			
}
