//DOM OBJECTS
var NBE_JS_OBJECT_NAME 					= "NBE";
var NBE_SCRIPT_ID						= "NBEScript";
var NBE_DATE_FORMAT						= "d-m-yyyy";
var NBE_CALENDAR_IMAGE                  = "http://booking.nuconga.com/frontend/Script/NBE/images/calendar.jpg"

//ERROR MESSAGES
var NBE_MESSAGES_INITIALIZATION_ERROR	= "Nuconga Booking Engine Error: Script initialization error!";
var NBE_MESSAGES_LAYOUT_TABLE_ERROR		= "Nuconga Booking Engine Error: Drawing Error!";
var NBE_MESSAGES_PARAMETER_NOT_FOUND	= "Nuconga Booking Engine Error: Missing Parameter";
var NBE_MESSAGES_NO_PARAMETERS			= "Nuconga Booking Engine Error: No Parameters";
var NBE_MESSAGES_UNKNOWN_LAYOUT_MODE	= "Nuconga Booking Engine Error: Unknown Layout Mode";
var NBE_MESSAGES_BROWSER_NOT_CAPABLE	= "Nuconga Booking Engine Error: Browser not Capable";

var NBE_MESSAGES_DATE_ERROR             = "Dates error";

//LABELS & IDs
var NBE_LABELS_PROPERTY_ID 				= "NBEproperty";
var NBE_LABELS_DATEFROM 				= "Check In";
var NBE_LABELS_DATEFROM_ID 				= "NBEstartdate";
var NBE_LABELS_DATETO 					= "Check Out";
var NBE_LABELS_DATETO_ID 				= "NBEenddate";
var NBE_LABELS_ROOMNUMBER				= "Rooms";
var NBE_LABELS_ROOMNUMBER_ID			= "NBEroomnumber";
var NBE_LABELS_ADULTNUMBER				= "Adult";
var NBE_LABELS_ADULTNUMBER_ID 			= "NBEadults";
var NBE_LABELS_CHILDNUMBER				= "Child";
var NBE_LABELS_CHILDNUMBER_ID 			= "NBEchildren";

var NBE_LABELS_BTNCHECK					= "Check Availability";
var NBE_LABELS_BTNCHECK_ID 				= "NBEbtncheck";
var NBE_MAINTABLE_ID 					= "NBEmaintable";
var NBE_LAYOUT_TABLE					= "TABLE"
var NBE_LAYOUT_TABLE_HORIZONTAL         = "TABLEH"
var NBE_LAYOUT_LIQUID					= "DIV"

//CALENDAR LABELS
var NBE_MONTH 							= ""
var NBE_DAY 							= ""
var NBE_SHORTMONTH 						= ""
var NBE_SHORTDAY 						= ""
var NBE_ARRANGEMENT 					= ""

//COMMUNICATION
var NBE_WS_CHECK_AVAILABILITY_TEMPLATE	= "<?xml version=\"1.0\" encoding=\"utf-8\"?><request><data><value>1</value></data></request>"
var NBE_WS_CHECK_AVAILABILITY_URL		= "http://booking.nuconga.com/FrontEnd/"

var NBE_ONE_DAY                         = 86400000 //One Day duration in milliseconds = 1000*60*60*24



//Constructor
function NucongaBookingEngine(h) {
	/*** Start Global Configuration ***/
	    
		this.propertyCode				= null;	
		this.version					= 0;	
		/*@cc_on
			/*@if (@_jscript)
				this.ie = (document.all && !window.opera) ? true : false;
			/*@else @*/
				this.ie = false;
			/*@end
		@*/
		this.layoutMode					= NBE_LAYOUT_TABLE;
		this.htmlElement 				= h;
		this.isFrame					= false;
		this.doc						= document;
		this.ie7 						= (this.ie && window.XMLHttpRequest);
		this.language 					= navigator.language ? navigator.language : navigator.userLanguage;
		this.language 					= this.language ? this.language.toLowerCase().replace(/-[a-z]+$/, "") : 'EN';
		this.language					= this.language.toUpperCase();
		this.startDate                  = "";
		this.endDate                    = "";
		this.debug						= false;
		this.useAdvancedRoomSelectionMode = false;
		this._layout                    = -1;
		this.layoutInitialized          =false;
		this.initialize();
		this.onloadcompleted();
}

NucongaBookingEngine.prototype.onloadcompleted  = function(x){
    eval(x);
}

//Manage Errors
NucongaBookingEngine.prototype.error = function (s,e) {
	alert(s);
	//alert(e);
}

NucongaBookingEngine.prototype.trace = function (s,e) {
	if (this.debug){
		alert(s);
		alert(e);
	}
}

NucongaBookingEngine.prototype.addDay = function(d,n){
   //if (d==null) return new Date();
   var nd = new Date()
   this.resetTime(d);
   nd.setTime(d.getTime()+n*NBE_ONE_DAY );
   this.resetTime(nd);
   return nd;
}

NucongaBookingEngine.prototype.dateDiff = function(da,db){//funzione che calcola la differenza in giorni
    var diff = da.getTime()-db.getTime()
    return Math.round(diff/NBE_ONE_DAY)
}

NucongaBookingEngine.prototype.resetTime = function(d){
   //if (d==null) return;
   d.setSeconds(0);
   d.setMinutes(0);
   d.setHours(0);
   d.setMilliseconds(0);
}

NucongaBookingEngine.prototype.getToday = function(){
   var dt = new Date();
   this.resetTime(dt);
   return dt;
}

//Read QueryString Parameters and verify Property Site Identity
NucongaBookingEngine.prototype.readParameters = function() {
	this.propertyCode 	= this.readQryStr("propertyCode");
	this.version 		= this.readQryStr("version");
	this.debug			= this.readQryStr("debug");
	this.layoutMode		= this.readQryStr("layoutMode") ? this.readQryStr("layoutMode") : NBE_LAYOUT_TABLE;
	this.language		= this.readQryStr("language") ? this.readQryStr("language") : this.language;
	this.startDate		= this.readPageQryStr("SD") ? this.readPageQryStr("SD") : this.startDate
	this.endDate		= this.readPageQryStr("ED") ? this.readPageQryStr("ED") : this.endDate;
	if (this.startDate!=""){
	    var d = this.startDate.toString().split("-");
	    this.startDate = new Date(d[0],d[1],d[2]);
	}else{
	    this.startDate = this.getToday();
	}
	if (this.endDate!=""){
	    var d = this.endDate.toString().split("-");
	    this.endDate = new Date(d[0],d[1],d[2]);
	}else{
		this.endDate = new Date();
		this.endDate = this.addDay(this.startDate, 1);
	}
	
}
//Read Page QueryString Parameter
NucongaBookingEngine.prototype.readPageQryStr = function(p) {
	var _e;
	try{
		var querystring = "" + this.doc.location;
		querystring = querystring.split('?')[1];
		if(!querystring || querystring.length==0) {
			return false;
		}
		var datas = querystring.split(/\&/);
		var value = '';
		for (var i=0; i<datas.length; i++) {
			var tmp = datas[i].split(/\=/);
			if (tmp[0] == p) {
				return tmp[1].toUpperCase();
			}
		}
	}catch(e){
		_e = e;
	}
	this.trace(NBE_MESSAGES_PARAMETER_NOT_FOUND,_e);
	return false;
	
}

//Read QueryString Parameter
NucongaBookingEngine.prototype.readQryStr = function(p) {
	var _e;
	try{
		var querystring = this.doc.getElementById(NBE_SCRIPT_ID).src;
		querystring = querystring.split('?')[1];
		if(!querystring || querystring.length==0) {
			this.error(NBE_MESSAGES_NO_PARAMETERS);
			return false;
		}
		var datas = querystring.split(/\&/);
		var value = '';
		for (var i=0; i<datas.length; i++) {
			var tmp = datas[i].split(/\=/);
			if (tmp[0] == p) {
				return tmp[1].toUpperCase();
			}
		}
	}catch(e){
		_e = e;
	}
	this.trace(NBE_MESSAGES_PARAMETER_NOT_FOUND,_e);
	return false;
	
}

NucongaBookingEngine.prototype.includeJS = function(l,f){
	var script  = document.createElement('script');
	script.type = "text/javascript";
	if (f==true){
		if(l.indexOf("?") )
			l+="&";
		else
			l+="?";
		l += (new Date());
	}
	
	script.src  = l;
	script.setAttribute("charset", "utf-8");
	/*@cc_on
	/*@if(@_win32)
			var bases = document.getElementsByTagName('base');
			if (bases.length && bases[0].childNodes.length) {
					bases[0].appendChild(script);
			} else {
					document.getElementsByTagName('head')[0].appendChild(script);
			};
	@else @*/
	document.getElementsByTagName('head')[0].appendChild(script);
	/*@end
	@*/
	script  = null;
}

NucongaBookingEngine.prototype.includeCSS = function(l){
  var fileref=document.createElement("link")
  fileref.setAttribute("rel", "stylesheet")
  fileref.setAttribute("type", "text/css")
  fileref.setAttribute("href", l)
  if (typeof fileref!="undefined")
    document.getElementsByTagName("head")[0].appendChild(fileref)
}


//Initialization
NucongaBookingEngine.prototype.initialize = function() {
	this.readParameters();
		
	this.includeJS(this.doc.getElementById(NBE_SCRIPT_ID).src.replace(/\.js/, "." + this.language + ".js"),true);
	this.includeJS(this.doc.getElementById(NBE_SCRIPT_ID).src.replace(/\.js/, ".LayoutProcessors.js"),true);
	this.includeJS(this.doc.getElementById(NBE_SCRIPT_ID).src.replace(/\.js/, ".Calendar.js"),true);
	this.includeCSS(this.doc.getElementById(NBE_SCRIPT_ID).src.replace(/\.js/, ".Calendar.css"));
	this.includeJS(this.doc.getElementById(NBE_SCRIPT_ID).src.replace(/\.js/, ".Communication.js"),true);
	//this.includeJS(this.doc.getElementById(NBE_SCRIPT_ID).src.replace(/\.js/, ".DatePicker.js"),true);

	var objNBE_PlaceHolder = document.getElementById(this.htmlElement);
	if (objNBE_PlaceHolder == null){
		this.error(NBE_MESSAGES_INITIALIZATION_ERROR);
		return;
	}
	this._layout = setInterval("document." + NBE_JS_OBJECT_NAME + ".processLayout()",300);
	
}

//Prototypes
NucongaBookingEngine.prototype.processLayout = function(){return false};

//Check if site uses frames [NOT USED]
NucongaBookingEngine.prototype.checkFrame = function() {
	if (window.parent.frames[window.name] && (parent.document.getElementsByTagName('frameset').length <= 0)) {
		this.isFrame = true;
		this.nbe = "window.parent." + window.name + "." + NBE_JS_OBJECT_NAME;
		this.doc = parent.document;
	} else {
		this.isFrame = false;
		this.nbe = NBE_JS_OBJECT_NAME;
		this.doc = document;
	}
}

//Attach Creation routine to onload event
if (window.addEventListener) {
	window.addEventListener("load",initNBE,false);
} else if (window.attachEvent) {
	window.attachEvent("onload",initNBE);
} else {
	window.onload = function() {initNBE();}
}

//Init function
function initNBE(){
	//Create NBE Object
	var NBE = new NucongaBookingEngine("NBE_");
	//Attach to DOM
	document.NBE = NBE;
}