/*
    Surbrillance des étoiles du menu */
	
function menuHighlight(obj) {
	obj.style.backgroundPosition = '-145px 2px';
}
function menuUnlight(obj) {
	obj.style.backgroundPosition = '-145px -20px';
}

/*
    Zoom modellistpage */

function AnimeModele(layerElt, elt, srcRect, destRect, duration, steps, step, callback)
{
   if (step > steps)
   {
      callback();
      return;
   }

   var f = (1.0 * step) / steps;

   var x1 = srcRect.x1 + (destRect.x1 - srcRect.x1) * f;
   var y1 = srcRect.y1 + (destRect.y1 - srcRect.y1) * f;
   var x2 = srcRect.x2 + (destRect.x2 - srcRect.x2) * f;
   var y2 = srcRect.y2 + (destRect.y2 - srcRect.y2) * f;

   var curRect = new Rect(x1, y1, x2, y2);

   HTMLUtils.setElementPos(elt, curRect.getOrigin());
   HTMLUtils.setElementSize(elt, curRect.getSize());

   if (layerElt)
      HTMLUtils.setElementOpacity(layerElt, (80 / steps) * step);

   var stepDuration = steps / duration;

   setTimeout(JSUtils.makeCallback(null, AnimeModele, layerElt, elt,
      srcRect, destRect, duration, steps, step + 1, callback), stepDuration);
}

function ZoomModele(mid, normalSource, largeSource, width, height)
{
   var modelImgElt = document.getElementById("Modele_Image" + mid);

   var windowRect = (new Rect(new Point(0, 0), HTMLUtils.getWindowInnerSize())).move(HTMLUtils.getScrollPos());
   var srcImageRect = HTMLUtils.getElementRect(modelImgElt);
   var destImageRect = (new Rect(0, 0, width, height)).centerIn(windowRect);

   var layerElt = document.createElement("div");
   layerElt.style.position = "absolute";
   layerElt.style.backgroundColor = "#c0c0c0";
   HTMLUtils.setElementOpacity(layerElt, 0);

   layerElt.onmousedown = function()
   {
      layerElt.parentNode.removeChild(layerElt);
      imgElt.parentNode.removeChild(imgElt);
   }

   HTMLUtils.setElementPos(layerElt, new Point(0, 0));
   HTMLUtils.setElementSize(layerElt, HTMLUtils.getDocumentSize());

   var imgElt = document.createElement("img");
   imgElt.style.position = "absolute";
   imgElt.src = normalSource;
   imgElt.largeSrc = largeSource;
   imgElt.onmousedown = layerElt.onmousedown;

   HTMLUtils.setElementPos(imgElt, srcImageRect.getOrigin());
   HTMLUtils.setElementSize(imgElt, srcImageRect.getSize());

   document.body.appendChild(layerElt);
   document.body.appendChild(imgElt);

   var duration = 200; // ms
   var steps = 10;
   var stepDuration = steps / duration;

   var callback = function()
   {
      imgElt.src = imgElt.largeSrc;
      return;
   }

   setTimeout(JSUtils.makeCallback(null, AnimeModele, layerElt, imgElt,
      srcImageRect, destImageRect, duration, steps, 0, callback), stepDuration);
}

/*
    Switch modele-view */

function SelectionneVisuel(n, source)
{
   for (var i = 1 ; i <= 10 ; ++i)
   {
      var spanElt = document.getElementById('Visuel' + i);
      if (!spanElt) break;

      spanElt.className = "Visuel" + (i == n ? " Actif" : " Inactif");
   }

   document.getElementById('Visuel').src = source;
}

/*
    Script SHOPS pour CHOOSE-DATE des Calendriers */

function CalStartDateDialog(callback, startOn1st)
{
	IDM.Dialog.call(this);

	this.setTitle("Sélection de la date de début");
	this.setButtons([ IDM.Dialog.Button.OK, IDM.Dialog.Button.CANCEL ]);

	this.m_daySelect = null;
	this.m_monthSelect = null;
	this.m_yearSelect = null;

	this.m_callback = callback;
	this.m_startOn1st = startOn1st;
}

CalStartDateDialog.prototype = new IDM.Dialog();

CalStartDateDialog.prototype._constructInner = function(contElt, boxElt)
{
	var p = document.createElement("p");
	boxElt.appendChild(p);
	p.innerHTML = "Choisissez la date de début de votre calendrier.";

	p = document.createElement("p");
	boxElt.appendChild(p);

	var curDate = DateTime.now();
	curDate = new DateTime(1, 1, curDate.getYear() + 1);

	// Day selector
	if (!this.m_startOn1st)
	{
		var select = document.createElement("select");
		select.className = "select-control";

		p.appendChild(select);
		p.appendChild(document.createTextNode(" "));

		for (var i = 1 ; i != 32 ; ++i)
		{
			var sel = (curDate.getDay() == i);
			select.options[i - 1] = new Option("" + i, i, sel, sel);
		}

		this.m_daySelect = NodeRef.create(select);
	}

	// Month selector
	var select = document.createElement("select");
	select.className = "select-control";

	p.appendChild(select);
	p.appendChild(document.createTextNode(" "));

	for (var i = 1 ; i != 13 ; ++i)
	{
		var sel = (curDate.getMonth() == i);
		select.options[i - 1] = new Option(DateTime.getMonthName(i), i, sel, sel);
	}

	this.m_monthSelect = NodeRef.create(select);

	// Year selector
	select = document.createElement("select");
	select.className = "select-control";

	p.appendChild(select);
	p.appendChild(document.createTextNode(" "));

	for (var i = curDate.getYear() - 5 ; i != curDate.getYear() + 21 ; ++i)
	{
		var sel = (curDate.getYear() == i);
		select.options[select.options.length] = new Option("" + i, i, sel, sel);
	}


	this.m_yearSelect = NodeRef.create(select);
}

CalStartDateDialog.prototype._onClickedButton = function(btn)
{
	if (btn == IDM.Dialog.Button.OK)
	{
		var d = 1, m = 1, y = 2000;

		if (this.m_daySelect != null)
			d = parseInt(this.m_daySelect.getElement().value);

		m = parseInt(this.m_monthSelect.getElement().value);
		y = parseInt(this.m_yearSelect.getElement().value);

		var date = new DateTime(d, m, y);

		if (!date.isValid())
		{
			alert("Cette date n'est pas valide.");
			return false;
		}
		else if ((this.m_daySelect == null && date.setDay(DateTime.now().getDay()).isLowerThan(DateTime.now())) ||
				(this.m_daySelect != null && date.isLowerThan(DateTime.now())))
		{
			if (!confirm("La date de début est déjà  passée.\Êtes-vous sÃ»r(e) de vouloir continuer ?"))
				return false;
		}

		this.m_callback(date.toInteger());

		this.close();

		return false;
	}

	return true;
}

/*
    Script SHOPS pour Posters et Tableaux */

function SelectPosterTemplateDialog(callback, shopId, modelId)
{
      IDM.Dialog.call(this);

      this.setTitle("Sélection d'un modèle");
      this.setButtons([ IDM.Dialog.Button.CANCEL ]);

      this.m_callback = callback;
      this.m_shopId = shopId;
      this.m_modelId = modelId;

      this.m_listElt = null;
}

SelectPosterTemplateDialog.s_templates = null;

SelectPosterTemplateDialog.prototype = new IDM.Dialog();

SelectPosterTemplateDialog.prototype._constructInner = function(contElt, boxElt)
{
      var p = document.createElement("p");
      boxElt.appendChild(p);

      HTMLUtils.setElementText(p, "Cliquez sur un modèle pour commencer la personnalisation de votre produit.");

      var listElt = document.createElement("div");
      boxElt.appendChild(listElt);

      listElt.className = "list-control";
      listElt.style.width = "660px";
      listElt.style.height = "370px";
      listElt.style.position = "relative";

      this.m_listElt = NodeRef.create(listElt);

      JSUtils.invokeLater(JSUtils.makeCallback(this, SelectPosterTemplateDialog.prototype._loadTemplates));
}

SelectPosterTemplateDialog.prototype._onClickedItem = function(templateId)
{
      this.close();
      this.m_callback(templateId);
}

SelectPosterTemplateDialog.prototype._onClickedButton = function(btn)
{
      return true;
}

SelectPosterTemplateDialog.s_templateCache = [];

SelectPosterTemplateDialog.prototype._loadTemplates = function()
{
      var dom = SelectPosterTemplateDialog.s_templateCache[this.m_modelId];

      if (!dom)
      {
            var webs = new IDM.WebService("/products/poster/model-templates.php"
                  + "?shop=" + this.m_shopId + "&model=" + this.m_modelId);

            webs.call();

            if (!webs.isSuccess())
            {
                  if (JSUtils.isDebug())
                        alert(webs.getError());

                  return;
            }

            dom = webs.getResult();

            SelectPosterTemplateDialog.s_templateCache[this.m_modelId] = dom;
      }

      var listElt = this.m_listElt.getElement();

      var rootNode = XMLUtils.getRootElement(dom);
      var templateNodes = XMLUtils.getChildrenByTagName(rootNode, "template");

      for (var i = 0, n = templateNodes.length ; i != n ; ++i)
      {
            var templateNode = templateNodes[i];
            var previewNode = XMLUtils.selectSingle(templateNode, "preview[@type='normal']");

            if (previewNode == null)
                  continue;

            var itemElt = document.createElement("div");

            itemElt.style.position = "absolute";
            itemElt.style.left = ((i % 3) * 210) + "px";
            itemElt.style.top = (Math.floor(i / 3) * 150) + "px";
            itemElt.style.width = "210px";
            itemElt.style.height = "150px";
            itemElt.style.textAlign = "center";
            itemElt.style.lineHeight = "150px";

            var img = document.createElement("img");
            itemElt.appendChild(img);

            img.src = previewNode.getAttribute("url");
            img.className = "with-border clickable-control";
            img.align = "absmiddle";
            img.style.verticalAlign = "middle";
            img.style.visibility = "visible";
            img.noiehack = true;
            img.onclick = JSUtils.makeCallback(this, SelectPosterTemplateDialog.prototype._onClickedItem,
                  parseInt(templateNode.getAttribute("id")));

            listElt.appendChild(itemElt);
      }
}