/**
 * Funciones comunes a varias páginas.
 */

DWCommon = {

   scrollTo: function (id, margin) {
      var node = document.getElementById(id);
      var y = 0;
      if (node) {
         var Common = dome.util.Common;
         var pos = Common.findPos(node);
         y = pos[1] - (margin ? margin : 0);
      }

      if (y < 0) { y = 0; }

      var scroll = 0;
      if (window.scrollY) {
         scroll = window.scrollY;
         if (y < scroll) {
            window.scrollTo(0, y);
         }
      } else if (document.body.scrollTop) {
         scroll = document.body.scrollTop;
         if (y < scroll) {
            document.body.scrollTop = y;
         }
      } else if (document.documentElement.scrollTop) {
         scroll = document.documentElement.scrollTop;
         if (y < scroll) {
            document.documentElement.scrollTop = y;
         }
      }
   },

   /**
    * Muestra el flash de espera sobre un fondo traslúcido.
    */
   showWaiting: function () {
      /* Alias */
      var Dom = dome.util.Dom;
      var Event = dome.util.Event;
      var Common = dome.util.Common;

      /**
       * Establece las dimensiones de los elementos.
       */
      var setSize = function () {
         var wSize = Common.getWindowSize();
         var bSize = Common.getBodySize();

         var oDiv = document.getElementById("DWCommon_bg");
         Dom.setStyle(oDiv, "width",  wSize[0] + "px");
         Dom.setStyle(oDiv, "height", bSize[1] + "px");

         /* 692x418 es el tamaño del flash, está fijo aquí porque no hay forma de recuperarlo por js */
         oDiv = document.getElementById("DWCommon_waiting");
         Dom.setStyle(oDiv, "left", ((wSize[0] - 692) / 2) + "px");
         Dom.setStyle(oDiv, "top", ((wSize[1] - 418) / 2) + "px");

         /* Si hay iframe se cambia también */
         var oIfr = document.getElementById("DWCommon_bgIframe");
         if (oIfr) {
            Dom.setStyle(oIfr, "width",  wSize[0] + "px");
            Dom.setStyle(oIfr, "height", bSize[1] + "px");
         }
      };

      if (document.getElementById("DWCommon_waiting") == null) {
         var wSize = Common.getWindowSize();
         var wScroll = Common.getScroll();
         var ua = dome.userAgent();

         var oDivCont = document.createElement("div");
         oDivCont.id = "DWCommon_waiting";
         if (ua.ie == 6) {
            Dom.setStyle(oDivCont, "position", "absolute");
            Dom.setStyle(oDivCont, "top", ((wScroll[1] + (wSize[1] - 418) / 2) + "px"));
         } else {
            Dom.setStyle(oDivCont, "position", "fixed");
            Dom.setStyle(oDivCont, "top", (wSize[1] - 418) / 2 + "px");
         }

         Dom.setStyle(oDivCont, "left", ((wSize[0] - 692) / 2) + "px");
         Dom.setStyle(oDivCont, "width", "692px");
         Dom.setStyle(oDivCont, "height", "418px");
         oDivCont.innerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="692" height="418">' +
                              '<param name="movie" value="flash/theme/espera.swf" /> ' +
                              '<param name="quality" value="high" /> ' +
                              '<param name="wmode" value="transparent" /> ' +
                              '<embed src="flash/theme/espera.swf" wmode="transparent" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="692" height="418"></embed>' +
                              '</object>';
         Dom.appendChild(document.body, oDivCont);

         DWCommon.createBackground("DWCommon_bg");

         Event.addListener(window, "resize", setSize);
      }

   },

   /**
    * Create una div de fondo (con su iframe si fuera necesario).
    * Si no se crea. El div tiene el id especificado y el iframe
    * id+Iframe
    *
    * Si se especifica un nodo se creará dentro de este, sino se
    * adjunta al body.
    *
    * @param {String} id    Id del div que se creará
    * @param {Node}   node  Nodo donde se creara el div o <code>null</code>
    */
   createBackground: function (id, node) {
      var divBg = document.getElementById(id);
      if (!divBg) {
         /* Alias */
         var Dom = dome.util.Dom;
         var Common = dome.util.Common;

         var ua = dome.userAgent(); /* Para ie6 hace falta poner un iframe debajo */

         var size;
         var pos = ["0", "0"];  /* Para ie6 se posiciona desde el body. Hace cosas raras. */

         if (node) {
            var nSize = Common.getSize(node);
            size = [nSize[0] + "px", nSize[1] + "px"];

            var nPos = Common.findPos(node);
            if (ua.ie == 6) {
               pos = [nPos[0] + "px", nPos[1] + "px"];
            }
         } else {
            var wSize = Common.getWindowSize();
            var bSize = Common.getBodySize();

            size = [wSize[0] + "px", bSize[1] + "px"];
         }

         divBg = document.createElement("div");
         Dom.appendChild(node && ua.ie != 6 ? node : document.body, divBg);
         divBg.id = id;
         Dom.setStyle(divBg, "position", ((!node && ua.ie != 6) ? "fixed" : "absolute"));
         Dom.setStyle(divBg, "top", pos[1]);
         Dom.setStyle(divBg, "left", pos[0]);
         Dom.setStyle(divBg, "height", size[1]);
         Dom.setStyle(divBg, "width", size[0]);

         if (ua.ie == 6) {
            var iframeBg = document.createElement("iframe");
            Dom.appendChild((node ? node : document.body), iframeBg);
            iframeBg.id = id + "Iframe";
            Dom.setStyle(iframeBg, "position", ((!node && ua.ie != 6) ? "fixed" : "absolute"));
            Dom.setStyle(iframeBg, "top", "0");
            Dom.setStyle(iframeBg, "left", "0");
            Dom.setStyle(iframeBg, "height", size[1]);
            Dom.setStyle(iframeBg, "width", size[0]);
            Dom.setStyle(iframeBg, "opacity", "0");
         }
      }

      return divBg;
   },

   /**
    * Elimina el div de fondo con el id indicado.
    */
   removeBackground: function (id) {
      var oDiv = document.getElementById(id);
      if (oDiv) {
         /* Alias */
         var Dom = dome.util.Dom;

         var oIfr = document.getElementById(id + "Iframe");
         if (oDiv.parentNode) {
            Dom.removeChild(oDiv.parentNode, oDiv);
            if (oIfr) { Dom.removeChild(oDiv.parentNode, oIfr); }
         } else {
            Dom.removeChild(document.body, oDiv);
            if (oIfr) { Dom.removeChild(document.body, oIfr); }
         }
      }
   },

   /**
    * Construye un query string a partir del formulario indicado. El string devuelto no empieza ni acaba en &
    * Ej. idetra=xxx&ideres=yyy&codral=zzz
    */
   getQueryString: function (form) {
      var Common = dome.util.Common;

      var q = "";
      if (form) {
         for (var i = 0; i < form.elements.length; i++) {
            if (form.elements[i].getAttribute("type") == "checkbox" || form.elements[i].getAttribute("type") == "radio") {
               if (form.elements[i].checked) {
                  var value = form.elements[i].getAttribute("value");
                  q += form.elements[i].getAttribute("name") + "=" + encodeURIComponent(value) + "&";
               }
            } else {
               var name = form.elements[i].getAttribute("name");
               if (name) {
                  var value = form.elements[i].value;
                  q += name + "=" + (value ? encodeURIComponent(value) : "") + "&";
               }
            }
         }

         if (q.length > 0 && q.charAt(q.length - 1) == '&') {
            q = q.substring(0, q.length - 1);
         }
      }

      return q;
   },

   linkPrintable: function(codser, codtse) {
       if(document.getElementById("hotelPopupContent")){
          var obj = document.getElementById("popupHotelPrint");
          obj.innerHTML = '';
          obj.href = "card.do?codser=" + codser + "&codtse=" + codtse;
          obj.title = "Formato para Imprimir";
          obj.target = '_blank';
          obj.innerHTML = 'Formato para Imprimir';
       }
    },
   /**
    * Inicializa los componentes.
    */
   init: function () {
      /* Dependencias */
      dome.include("dome.util.Dom");
      dome.include("dome.util.Common");
      dome.include("dome.fx.Anim");
   }

};

(function () {
   dome.include("dome.util.Event");

   var Event = dome.util.Event;
   Event.onDomReady(DWCommon.init);
})();
