/*
 * Copyright (c) 2009, Paolo Ceccacci AKA h5n1 (paolo.ccc AT gmail DOT com)
 * All rights reserved.
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the University of California, Berkeley nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\ 
 */

/*
 * Modified by Yellow At wubook DOT net with various interventions
 */

/*
 global vars
*/
var wb_regexp_email  = /^(("[\w-\s]+")|([\w\-]+(?:\.[\w\-]+)*)|("[\w-\s]+")([\w\-]+(?:\.[\w\-]+)*))(@((?:[\w\-]+\.)*\w[\w\-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i;
var wbuilang,wblangArray;
var ie= document.all;
var _rootsr = (("https:" == document.location.protocol) ? "https://wubook.net/" : "http://wubook.net/");
/*var _rootsr = 'http://localhost:8090/';*/
/*var _rootsr = 'http://192.168.11.100:8090/';*/
_rootjssrv= _rootsr + 'js/';
//_rootcsssrv= _rootsr + 'css/';
_rootcsssrv= 'http://www.principebb.com/inclusi/';
_rootimgload = _rootsr + "imgs/default/black_16_loader.gif";


var $$$ = function(wbTagName, wbTagId, wbTagClass) {
  _wbnewel= document.createElement(wbTagName);
  if (wbTagId && wbTagId !== 'undefined')
    _wbnewel.id= wbTagId;
  if (wbTagClass && wbTagClass !== 'undefined')
    _wbnewel.className= wbTagClass;
  return _wbnewel;
};

function _wbdynimgurl(u) {
  return "url('" + _rootsr + u + "')";
}

var wbjsdiv,wbjsForm,wbLangLabel,wbSelectLang,wbSubButton,lcode,lang,dates;
wbUiLangs = {
it : ['Arr.', 'Part.','Lingua','Sel.'],
en : ['Arr.','Dep.','Lang.','Sel.'],
es : ['Arr.','Dep.','Lang.','Sel.'],
pt : ['Arr.','Dep.','Lang.','Sel.'],
de : ['Arr.','Dep.','Lang.','Sel.'],
fr : ['Arr.','Dep.','Lang.','Sel.']
};

/*
dinamical import of a script
*/

_wbTypeJs= 'script';
_wbTypeCs= 'link';
function _wbRigthUrl(wbSrc, wbType) {
  if (wbSrc.indexOf('http') != 0) {
    if ( wbType == _wbTypeJs )
      return _rootjssrv + wbSrc;
    else
      return _rootcsssrv + wbSrc;
  }
  return wbSRc;
}
function wbDynLoader(wbSrc, wbType) {
  if (!wbSrc || typeof(wbSrc) === 'undefined') return;
  _wbToLoad= $$$(wbType);
  if (wbType == _wbTypeCs) {
    _wbToLoad.href= _wbRigthUrl(wbSrc, wbType);
	_wbToLoad.rel="stylesheet";
	_wbToLoad.type="text/css";
  }
  else if (wbType == _wbTypeJs ) {
    _wbToLoad.src= _wbRigthUrl(wbSrc, wbType);
	_wbToLoad.type="text/javascript";
  }
  document.getElementsByTagName("head")[0].appendChild(_wbToLoad);
}

function wbJsLoader(wbSrc) {
  wbDynLoader(wbSrc, _wbTypeJs);
}
function wbCsLoader(wbSrc) {
  wbDynLoader(wbSrc, _wbTypeCs);
}
function wbLoadJq() {
  if(typeof(jQuery)=="undefined") 
    wbJsLoader('jquery.js');
}
wbLoadJq();
wbJsLoader('wu_cals.js');
//wbCsLoader('wbjs-1.1.css');
wbCsLoader('css.css');

function WbNow(code, dfrom, dto, lang) {
  _wbbookurl= 'https://wubook.net/book/__login__/rdbook/?cmd=book&lcode=' + code;
  /*_wbbookurl= 'http://localhost/book/__login__/rdbook/?cmd=book&lcode=' + code;*/
  /*_wbbookurl= 'http://192.168.11.100/book/__login__/rdbook/?cmd=book&lcode=' + code;*/
  if (dfrom && dfrom != 'undefined')
    _wbbookurl+= '&dfrom=' + dfrom;
  if (dto && dto != 'undefined')
    _wbbookurl+= '&dto=' + dto;
  if (lang && lang !== 'undefined')
    _wbbookurl+= '&lang=' + lang;
  _wbnw= window.open(_wbbookurl, 'BookingOnLine', 'height=820,width=910,scrollbars=yes,toolbar=yes,location=1');
  if (window.focus) {_wbnw.focus();}
}

var wbDrawButton = function(wubcolor){
	wbLink= $$$("a", '', 'wbjsButton');
	wbLink.href="#BookNow";
	wbLink.onclick= function() {
      _bnlcode= $('#wbLcodeInput').val()
      _bndfrom= $("#dfrom").val();
      _bndto= $("#dto").val();
      _bnlang= $("#wbLangInput").val();
      WbNow(_bnlcode, _bndfrom, _bndto, _bnlang);
      return false;
	};
	wbButton= $$$("img", 'wbimg', 'wbjsButton');
	wbButton.src= _rootsr + "imgs/default/wbnow_"+wubcolor.toLowerCase()+".gif";
	wbButton.alt="Book Now!";
    wbLink.appendChild(wbButton);
	wbjsForm.appendChild(wbLink);
};

var drawLinkToggle = function(wbClassName,wbEvents,wbDescription) {
	wbLinkTog=$$$("a", '', wbClassName);
	wbLinkTog.href=wbEvents;
	wbLinkTog.appendChild(document.createTextNode(wbDescription));
	wbjsForm.appendChild(wbLinkTog);
};

var drawLinkToggleCancel = function() {
	drawLinkToggle("wbToggle","javascript:wbDelForm()","Cancel reservation");
};

var drawLinkToggleMake = function() {
	drawLinkToggle("wbToggle","javascript:wbBookForm()","Make reservation");
};

var drawResp = function() {
	wbDivLoad=$$$("div", 'wbResp');
	wbToRisp=$$$("img", 'wbImgResp');
	wbToRisp.src= _rootimgload;
	wbToRisp.style.display = "none"; 
	wbDivLoad.appendChild(wbToRisp);	

	wbToRispA=$$$("img", 'wbImgRespA');
	wbToRispA.style.display = "none"; 
	wbDivLoad.appendChild(wbToRispA);

    wbjsForm.appendChild(wbDivLoad);
};

/*******************************/
/********main function**********/
/*******************************/
var wbjsdiv;
var wblang;
var wbdates;
var wbcancel;
var wblcode;
var wbcolor;
var wbonlyroom;


var wbFormUpdate = function() {
	if (typeof($)=="undefined") {
		window.setTimeout("wbFormUpdate()",1);
	}
	else {
		$("#wbimg").css({ "margin-top":"10px"});
	}
};

var addDates=function(){
	wbjsForm.appendChild($$$("br"));
	wbToLabel=$$$("span", '', 'wbToLabel');
	wbToLabel.appendChild(document.createTextNode(wblangArray[0]));
	wbFromLabel=$$$("span", '', 'wbFromLabel');
	wbFromLabel.appendChild(document.createTextNode(wblangArray[1]));
    wbToInput= _cinp('text', 'dfrom', '', 'wuBookDates', 'dfrom');
    wbFromInput= _cinp('text', 'dto', '', 'wuBookDates', 'dto');
	wbToCal=$$$("a", '', 'dto');
    wbToCal.style.backgroundImage= _wbdynimgurl('imgs/default/bookcal.gif');
	wbToCal.href="#";
	wbToCal.onclick=function(){fPopCalendar('dfrom');return false;};
	wbFromCal=$$$("a", '', 'dfrom');
	wbFromCal.href="#";
    wbFromCal.style.backgroundImage= _wbdynimgurl('imgs/default/bookcal.gif');
	wbFromCal.onclick=function(){fPopCalendar('dto');return false;};
	wbjsForm.appendChild(wbToLabel);
	wbjsForm.appendChild(wbToInput);
	wbjsForm.appendChild(wbToCal).appendChild(document.createTextNode(wblangArray[3]));
	//wbjsForm.appendChild($$$("br"));
	wbjsForm.appendChild(wbFromLabel);
	wbjsForm.appendChild(wbFromInput);
	wbjsForm.appendChild(wbFromCal).appendChild(document.createTextNode(wblangArray[3]));
	addBr();	
};

var setMainForm = function(lcode, onlyroom){
	wbjsForm = $$$("form");
	wbjsForm.action="https://wubook.net/book/__login__/rdbook/";
	wbjsForm.onsubmit=function(){return false;};
	wbjsForm.method="POST";
    _cinp('hidden', 'lcode', lcode, '', 'wbLcodeInput', wbjsForm);
    if (typeof(onlyroom) != 'undefined') {
      if (onlyroom == parseInt(onlyroom)) {
        _cinp('hidden', 'onlyroom', onlyroom, '', '', wbjsForm);
      }
    }
	wbjsdiv.appendChild(wbjsForm);
    if (_wbbgform) {
      wbjsForm.style.backgroundImage= _wbbgform;
    }
};

var wbCreateForm = function(lcode, lang, wbcolor, cancel, dates, uilang, onlyroom){
  setMainForm(lcode, onlyroom);	
  if (dates) {addDates();}
  if (lang != "") {addLang(lang);}
  addSubmit(wbcolor);
  addBr();
  if (cancel){
      drawLinkToggleCancel();
      }
  else{
      wbFormUpdate();
  }
};

function wbInit(lcode, lang, color, cancel, dates, uilang, cssURL, onlyroom) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = function () {
    _wbInit(lcode, lang, color, cancel, dates, uilang, cssURL, onlyroom);
    }
  } else {
    window.onload = function() {
    if (oldonload) {
      oldonload();
    }
    _wbInit(lcode, lang, color, cancel, dates, uilang, cssURL, onlyroom);
      }
  }
}

function xwbInit(lcode, lang, color, cancel, dates, uilang, cssURL, onlyroom) {
  _wbInit(lcode, lang, color, cancel, dates, uilang, cssURL, onlyroom);
}

function wbCreateBoth(wblcode, wblang, wbcolor, wbcancel, wbdates, wbuilang, onlyroom) {
  _wbjsboth= $('#wbjsboth');
  _wbjsboth.html('<table><tr>' +
      '<td valign="bottom"><div align="center" id="wbjsrmap" class="wbRmapUpDiv"></div></td>' +
      '<td valign="bottom"><div id="wbbook"><div id="wbjsdiv"></div></div></td>' +
      '</tr></table>');
  wbjsdiv = document.getElementById("wbjsdiv");
  wbCreateForm(wblcode, wblang, wbcolor, wbcancel, wbdates, wbuilang, onlyroom);
  wbCreateRmap(wblcode);
}

var _wbInit = function(lcode, lang, color, _wbcancel, dates, uilang, cssURL, onlyroom, wbbgform) {
    if (!wbbgform)
      //_wbbgform= _wbdynimgurl('imgs/default/wbForm.png');
      _wbbgform= "url('http://www.principebb.com/inclusi/wbForm.png')";
    else if (wbbgform == -1)
      _wbbgform= false;
    else
      _wbbgform= _wbdynimgurl(wbbgform);
    wbcancel= _wbcancel;
	wbuilang=uilang||"en";
	wblangArray=eval("wbUiLangs."+wbuilang);
	/*initialize parameters*/
	wbdates=dates||true;
	wblcode=lcode||"lcode is missing";
	wblang=lang||"en,it,pt,es,de,fr";
	wbcolor=color||"blue";
	wbonlyroom=onlyroom;
    wbCsLoader(cssURL);
    _done= 0;
    wbjsdiv= document.getElementById('wbjsdiv');
    if (wbjsdiv) {
      wbCreateForm(wblcode, wblang, wbcolor, wbcancel, wbdates, wbuilang, onlyroom);
      _done= 1;
    }
    _wbjsrmap= document.getElementById("wbjsrmap");
    if (_wbjsrmap) {
      wbCreateRmap(wblcode);
      _done= 1;
    }
    if (_done == 0 && document.getElementById('wbjsboth')) 
      wbCreateBoth(wblcode, wblang, wbcolor, wbcancel, wbdates, wbuilang, onlyroom);
};


function _cinp(t, n, v, cl, id, aform) {
  i=$$$("input", id, cl);
  i.type= t;
  i.name= n;
  i.value= v;
  if (aform) aform.appendChild(i);
  return i;
}

function _opt(vl, txt, append) {
  o= $$$("option");
  o.value= vl;
  o.appendChild(document.createTextNode(txt));
  if (append)
    append.appendChild(o);
  return o;
}

var addLang = function(lang){
	lang=lang.toLowerCase();
	langs=lang.split(",");
	wbLangLabel=$$$("span", '', 'wbLangLabel');
	wbLangLabel.appendChild(document.createTextNode(wblangArray[2]));
	wbjsForm.appendChild(wbLangLabel);
	wbSelectLang=$$$("select", 'wbLangInput');
	wbSelectLang.name="lang";
	wbSelectLang.m=true;
	for (i=0;i<langs.length;i++){
	switch (langs[i]){
      case "it":
        _opt(1, 'Italiano', wbSelectLang);
        break;
      case "de":
        _opt(8, 'Deutsch', wbSelectLang);
        break;
      case "en":
        _opt(2, 'English', wbSelectLang);
        break;
      case "es":
        _opt(32, 'Espanol', wbSelectLang);
        break;
      case "fr":
        _opt(4, 'Francaise', wbSelectLang);
        break;
      case "pt":
        _opt(16, 'Portugal', wbSelectLang);
        break;
      }
	}
	wbjsForm.appendChild(wbSelectLang);
};

var addSubmit = function(wubcolor){
	wbDrawButton(wubcolor);
};
var addBr = function(){
	wbjsForm.appendChild($$$("br"));
};

var setMainFormDel = function(){
	wbjsForm= $$$("form");
	wbjsForm.action="javascript:wb_delete()";
	wbjsForm.name ="wbResDel";
	wbjsForm.method="POST";    
    if (_wbbgform) {
      wbjsForm.style.backgroundImage= _wbbgform;
    }
	wbjsdiv.appendChild(wbjsForm);
};

var wbCreateFormDel = function(lcode, lang, wbcolor, cancel, dates, uilang, onlyroom){
	setMainFormDel();
    wbCodeLabel=$$$("span");
	wbCodeLabel.appendChild(document.createTextNode("Code"));
	wbCodeInput= _cinp('text', 'wbRcode', '', '', 'wbRcode');
	wbEmailLabel=$$$("span");
	wbEmailLabel.appendChild(document.createTextNode("Email"));
	wbEmailInput= _cinp('text', 'wbEmail', '', '', 'wbEmail');
	wbCancelInput=_cinp('submit', 'wbCancel', 'Cancel', 'wbCancel', 'wbCancel');
	wbjsForm.appendChild(wbCodeLabel);
	wbjsForm.appendChild(wbCodeInput);
	addBr();
	wbjsForm.appendChild(wbEmailLabel);
	wbjsForm.appendChild(wbEmailInput);
	addBr();
	wbjsForm.appendChild(wbCancelInput);
	addBr();
	drawResp();
	drawLinkToggleMake();	
};

function wbDelForm() {
	$("#wbjsdiv").empty();
	wbCreateFormDel(wblcode, wblang, wbcolor, wbcancel, wbdates, wbuilang, wbonlyroom);
}

function wbBookForm() {
	$("#wbjsdiv").empty();
	wbCreateForm(wblcode, wblang, wbcolor, wbcancel, wbdates, wbuilang, wbonlyroom);
}

function _wb_display_run() {
	$("#wbImgRespA")[0].style.display = "none";
	$("#wbImgResp")[0].style.display = "";
}

function _wb_stop_run(s) {
	$("#wbImgResp")[0].style.display = "none";
	$("#wbImgRespA")[0].style.display = "";
}

function wb_delete() {
	
	rcode = $("#wbRcode")[0].value;
	email = $("#wbEmail")[0].value;

    if (rcode != parseInt(rcode) || !wb_regexp_email.test(email)) {
      $("#wbImgRespA")[0].src = _rootsr + "imgs/default/jdbook_inv_inp.png";
      _wb_stop_run();
      return;
    }
		
    _wb_display_run();
    $("#wbImgRespA")[0].src = _rootsr + "acts/jdbook/" + wblcode + "/" + rcode + "/" + email + "/";
    $("#wbImgRespA").load(_wb_stop_run);
	
}

wbRmapIdx= 0;
_wbImgGif= new Image();
_wbImgGif.src= _rootsr + 'imgs/default/rmrm.gif';
_wbfls= false;

function wbRmapRawGetUrl(n) {
  return _rootsr + 'acts/rmap/' + wblcode + '/' + n + '.png';
}

function wbRmapGetIdx(n) {
  wbRmapIdx+= n;
  if (wbRmapIdx == 1) {
    el= document.getElementById('wbRmapIPLink');
    el.style.display= 'inline';
  }
  else if (wbRmapIdx == 0) {
    el= document.getElementById('wbRmapIPLink');
    el.style.display= 'none';
  }
  if (wbRmapIdx == 18) {
    el= document.getElementById('wbRmapNLink');
    el.style.display= 'none';
  }
  else if (wbRmapIdx == 17) {
    el= document.getElementById('wbRmapNLink');
    el.style.display= 'inline';
  }
  return wbRmapRawGetUrl(wbRmapIdx);
}

function WbPreloadImage(imgSrc, callback){
  var objImagePreloader = new Image();

  objImagePreloader.src = imgSrc;
  if(objImagePreloader.complete){
    callback();
    objImagePreloader.onload=function(){};
  }
  else{
    objImagePreloader.onload = function() {
      callback();
      // clear onLoad, IE behaves irratically 
      // with animated gifs otherwise
      objImagePreloader.onload=function(){};
    }
  }
}

function _wbSwitchImg(wbelid, wbnewurl) {
  imap= document.getElementById(wbelid);
  imap.src= _wbImgGif.src;
  WbPreloadImage(wbnewurl, function () {
      imap.src= wbnewurl;
      });
}

function wbRmapScrollMonth(n) {
  _wbnewurl= wbRmapGetIdx(n);
  _wbSwitchImg('wbRmapRmap', _wbnewurl);
  wbselem= document.getElementById('wbRmapSRmap');
  if (!wbselem) return false;
  _wbsnewurl= wbRmapRawGetUrl(wbRmapIdx + 1);
  _wbSwitchImg('wbRmapSRmap', _wbsnewurl);
  return _wbfls;
}

function _wbDateStr(_wddd) {
  res= _wddd.getDate() + '/' + (_wddd.getMonth() + 1) + '/' + _wddd.getFullYear();
  return res;
}

function wbRmapBNow(_wbaddm) {
  if (!_wbaddm) _wbaddm = 0;
  _wbNow= new Date();
  _wbm= _wbNow.getMonth() + wbRmapIdx + _wbaddm;
  _wbrest= _wbm % 12;
  _wbsy= (_wbm - _wbrest) / 12;
  wbDfrom= new Date(_wbNow.getFullYear() + _wbsy, _wbrest, 1);
  if (wbDfrom.getMonth() == _wbNow.getMonth() && wbDfrom.getFullYear() == _wbNow.getFullYear()) {
    wbDfrom= _wbNow;
  }
  /*wbDto= new Date();*/
  /*wbDto.setDate(wbDfrom.getDate() + 1);*/
  /*wbDto= new Date(_wbNow.getFullYear() + _wbsy, _wbrest, 27);*/
  /*while (wbDto.getMonth() == _wbrest) {*/
  /*wbDto.setDate(wbDto.getDate() + 1);*/
  /*}*/
  swbDfrom= _wbDateStr(wbDfrom);
  /*swbDto= _wbDateStr(wbDto);*/
  /*swbDto= '';*/
  WbNow(wblcode, swbDfrom);
  return false;
}

function wbCreateRmap(lcode) {
  _wbhtmlrmap= '' +
     '<div width="450px" id="wbRmapDiv" class="wbRmapDiv">' +
      '<table id="wbRmapTable" class="wbRmapTable">' +
        '<tr id="wbRmapFRow" class="wbRmapFRow">' +
          '<td id="wbRmapFRowA" align="right">' +
            '<a class="wbRmapMScroll" href="#booknow" alt="Booking Online: check availability for Previous Month" title="Booking Online: check availability for Previous Month" onclick="return wbRmapScrollMonth(-1)" id="wbRmapPLink"><img class="wbRmapImg" src="' + _rootsr + 'imgs/default/rmpm.png" id="wbRmapIPLink"></img></a>' +
            '<a class="wbRmapMScroll" href="#booknow" alt="Booking Online: check availability for Next Month" title="Booking Online: check availability for Next Month" onclick="return wbRmapScrollMonth(1)" id="wbRmapNLink"><img class="wbRmapImg" src="' + _rootsr + 'imgs/default/rmnm.png" id="wbRmapINLink"></img></a>' +
          '</td>' +
        '</tr>' +
        '<tr id="wbRmapSRow" class="wbRmapSRow">' +
          '<td id="wbRmapSRowA" class="wbRmapSRowA" align="center">' +
            '<a href="#booknow" class="wbRmapImap" id="wbRmapImap" onclick="return wbRmapBNow(0)">' +
              '<img width="464px" class="wbRmapImg" src="' + _rootsr + 'acts/rmap/' + lcode + '/0.png" alt="Check Availability and Booking Online Now!" title="Check Availability and Booking Online Now!" id="wbRmapRmap"></img>' +
            '</a>' +
          '</td>' +
        '</tr>' +
      '</table>' +
    '</div>';
  $('#wbjsrmap').html(_wbhtmlrmap);
}

