/*
 * 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 $$$ = function(tagName){return document.createElement(tagName);};
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
*/

var dynScriptLoader = function(src){
	var scriptToLoad=$$$("script");
	scriptToLoad.src = src;
	scriptToLoad.type="text/javascript";
	document.getElementsByTagName("head")[0].appendChild(scriptToLoad);
};

/*
dinamical import of a CSS*
*/

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/';
_rootimgload = _rootsr + "imgs/default/black_16_loader.gif";


var dynCSSLoader = function(src){
  if (src){
	var styleToLoad=$$$("link");
	styleToLoad.rel="stylesheet";
    if (src.indexOf('http:') == 0) {
      styleToLoad.href= src;
    } else {
      styleToLoad.href = _rootcsssrv + src;
    }
	styleToLoad.type="text/css";
	document.getElementsByTagName("head")[0].appendChild(styleToLoad);
  }
};

/*
jsToLoad contains urls
of the scripts to load
*/

var jsToLoad= ["piu.js","wu_cals.js"];
if(typeof(jQuery)=="undefined") {
    jsToLoad.push("jquery.js");
}

for (i=0; i < jsToLoad.length; i ++)  {
  jsToLoad[i]= _rootjssrv + jsToLoad[i];
}

/*
drawing the button
*/

function WbNow(code, dfrom, dto) {
  _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;
  _wbnw= window.open(_wbbookurl, 'BookingOnLine', 'height=820,width=910,scrollbars=yes,toolbar=yes,location=1');
  if (window.focus) {_wbnw.focus()}
}

function _wbdynimgurl(u) {
  return "url('" + _rootsr + u + "')";
}


var drawButton = function(wubcolor){
	wbLink=$$$("a");
	wbLink.className= 'wbjsButton';
	wbLink.href="#BookNow";
	wbLink.onclick=function() {
      _wbtgt= "BookingOnlineService";
      if (! window.focus) {return true;}
      window.open('', _wbtgt, 'height=800,width=910,scrollbars=yes,location=1');
      wbjsForm.target= _wbtgt;
      wbjsForm.submit();
      return false;
	};
	wbButton=$$$("img");
	wbButton.src= _rootsr + "imgs/default/wbnow_"+wubcolor.toLowerCase()+".gif";
	wbButton.className= 'wbjsButton';
	wbButton.id="wbimg";
	wbButton.alt="Book Now!";
    wbLink.appendChild(wbButton);
	wbjsForm.appendChild(wbLink);
};

var drawLinkToggle = function(wbClassName,wbEvents,wbDescription) {
	wbLinkTog=$$$("a");
	wbLinkTog.className= 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");
	wbDivLoad.id="wbResp";
	
	wbToRisp=$$$("img");
	wbToRisp.id="wbImgResp";
	wbToRisp.src= _rootimgload;
	wbToRisp.style.display = "none"; 
	wbDivLoad.appendChild(wbToRisp);	

	wbToRispA=$$$("img");
	wbToRispA.id="wbImgRespA";
	wbToRispA.style.display = "none"; 
	wbDivLoad.appendChild(wbToRispA);

    wbjsForm.appendChild(wbDivLoad);
};

/*
pform function
*/

function pform(f, w) {
  if (! window.focus) {return true;}
  window.open('', w, 'height=800,width=910,scrollbars=yes,location=1');
  f.target= w;
  return true;
}

/*******************************/
/********main function**********/
/*******************************/
var wbjsdiv;
var wblang;
var wbdates;
var wbcancel;
var wblcode;
var wbcolor;
var wbcssUrl;
var wbonlyroom;


var wbFormUpdate = function() {
	if (typeof($)=="undefined") {
		window.setTimeout("wbFormUpdate()",1);
	}
	else {
		$("#wbimg").css({ "margin-top":"10px"});
	}
};

var addDates=function(){
	wbToLabel=$$$("span");
	wbToLabel.appendChild(document.createTextNode(wblangArray[0]));
	wbToLabel.className="wbToLabel";
	wbFromLabel=$$$("span");
	wbFromLabel.appendChild(document.createTextNode(wblangArray[1]));
	wbFromLabel.className="wbFromLabel";
    wbToInput= _cinp('text', 'dfrom', '', 'wuBookDates', 'dfrom');
    wbFromInput= _cinp('text', 'dto', '', 'wuBookDates', 'dto');
	wbToCal=$$$("a");
	wbToCal.href="#";
    wbToCal.style.backgroundImage= _wbdynimgurl('imgs/default/bookcal.gif');
	wbToCal.onclick=function(){fPopCalendar('dfrom');return false;};
	wbToCal.className="dto";
	wbFromCal=$$$("a");
	wbFromCal.href="#";
	wbFromCal.onclick=function(){fPopCalendar('dto');return false;};
    wbFromCal.style.backgroundImage= _wbdynimgurl('imgs/default/bookcal.gif');
	wbFromCal.className="dfrom";
	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 wbCreateForm = function(lcode, lang, wbcolor, cancel, dates, uilang, cssURL, onlyroom){
	
	setMainForm(lcode, onlyroom);	
    if (dates) {addDates();}
    if (lang != "") {addLang(lang);}
    addSubmit(wbcolor);
	addBr();
	if (cancel){
		drawLinkToggleCancel();
		}
	else{
		wbFormUpdate();
	}
    wbjsForm.style.backgroundImage= _wbdynimgurl('imgs/default/wbForm.png');
		
};

var wbInit = function(lcode, lang, color, cancel, dates, uilang, cssURL, onlyroom){
	wbuilang=uilang||"en";
	wblangArray=eval("wbUiLangs."+wbuilang);
	/*initialize parameters*/
	wbjsdiv = document.getElementById("wbjsdiv");
	wbdates=dates||true;
	wbcancel=cancel||false;
	wblcode=lcode||"lcode is missing";
	wblang=lang||"en,it";
	wbcolor=color||"blue";
    wbcssURL= cssURL || 'wbjs-1.1.css';
	wbonlyroom=onlyroom;
	for (var i=0;i<jsToLoad.length;i++) {
      dynScriptLoader(jsToLoad[i]); }
    if(typeof(jQuery)=="undefined") {
      dynScriptLoader(_rootjssrv + 'jquery.js');
    }

    dynCSSLoader(wbcssURL);
    /*if (ie) {
      dynCSSLoader('wbjsie.css');
    }*/

	wbCreateForm(wblcode, wblang, wbcolor, wbcancel, wbdates, wbuilang, wbcssURL, onlyroom);
};


function _cinp(t, n, v, cl, id, aform) {
  i=$$$("input");
  i.type= t;
  i.name= n;
  i.value= v;
  if (cl != '') i.className= cl;
  if (id != '') i.id= id;
  if (aform) aform.appendChild(i);
  return i;
}

var setMainForm = function(lcode, onlyroom){
	wbjsForm = $$$("form");
	wbjsForm.action="https://wubook.net/book/__login__/rdbook/";
	wbjsForm.onsubmit=function(){pform(this, 'Booking Online Service');};
	wbjsForm.method="POST";
    _cinp('hidden', 'lcode', lcode, '', '', wbjsForm);
    _cinp('hidden', 'cmd', 'book', '', '', wbjsForm);
    if (typeof(onlyroom) != 'undefined') {
      if (onlyroom == parseInt(onlyroom)) {
        _cinp('hidden', 'onlyroom', onlyroom, '', '', wbjsForm);
      }
    }
	wbjsdiv.appendChild(wbjsForm);
};

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.className="wbLangLabel";
	wbLangLabel.appendChild(document.createTextNode(wblangArray[2]));
	wbjsForm.appendChild(wbLangLabel);
	wbSelectLang=$$$("select");
	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){
	drawButton(wubcolor);
};
var addBr = function(){
	wbjsForm.appendChild($$$("br"));
};

var setMainFormDel = function(){
	wbjsForm = $$$("form");
	wbjsForm.action="javascript:wb_delete()";
	wbjsForm.name ="wbResDel";
	wbjsForm.method="POST";    
    wbjsForm.style.backgroundImage= _wbdynimgurl('imgs/default/wbForm.png');
	wbjsdiv.appendChild(wbjsForm);
};

var wbCreateFormDel = function(lcode, lang, wbcolor, cancel, dates, uilang, cssURL, 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, wbcssURL, wbonlyroom);
}

function wbBookForm() {
	$("#wbjsdiv").empty();
	wbCreateForm(wblcode, wblang, wbcolor, wbcancel, wbdates, wbuilang, wbcssURL, 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);
	
}

if (typeof(wbRmapLid) !== 'undefined') {
  wbRmapIdx= 0;
  _wbImgGif= new Image();
  _wbImgGif.src= _rootsr + 'imgs/default/rmrm.gif';
  dynCSSLoader('wbjsrmap.css');
  _wbfls= false;
}

function wbRmapRawGetUrl(n) {
  return _rootsr + 'acts/rmap/' + wbRmapLid + '/' + 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(_wbNow.getFullYear() + _wbsy, _wbrest, 27);
  while (wbDto.getMonth() == _wbrest) {
    wbDto.setDate(wbDto.getDate() + 1);
  }
  swbDfrom= _wbDateStr(wbDfrom);
  swbDto= _wbDateStr(wbDto);
  WbNow(wbRmapLid, swbDfrom, swbDto);
  return false;
}
