/* web service generic methods */
function SmartWSCall(method, data, callback, type, async, bg) {
	if (useSampleData && method.indexOf('wsfunction') == 0) { method = data.psFunction; }
	$.ajax({
		'url': useSampleData ? 'services/SmartWS/'+method+'.json' : 'services/SmartWS.php?op=' + method,
		'async': (async) ? true : false,
		'type': 'POST',
		'dataType': (type == null) ? 'json' : type,
		'data': data,
		'beforeSend': bg ? null : LoadingBegin,
		'complete': bg ? null : LoadingEnd,
		'success': callback
	});
	return false;
}

function SPMSCall(method, data, callback, type, async, bg) {
//	var useSampleData = true;
	if (useSampleData && method.indexOf('WSFunction') == 0) { method = data.psFunction; }
	if (useSampleData && method.indexOf('JSONWSFunction') == 0) { method = data.psFunction; }
	$.ajax({
		'url': useSampleData ? 'services/SPMS/'+method+'.json' : 'services/SPMS.php?op=' + method,
		'async': (async) ? true : false,
		'type': 'POST',
		'dataType': (type == null) ? 'json' : type,
		'data': data,
		'beforeSend': bg ? null : LoadingBegin,
		'complete': bg ? null : LoadingEnd,
		'success': callback
	});
	return false;
}

function SilverWebCall(method, data, callback, type, async, bg) {
	$.ajax({
		'url': useSampleData ? 'services/SilverWeb/'+method+'.json' : 'services/SilverWeb.php?op=' + method,
		'async': (async) ? true : false,
		'type': 'POST',
		'dataType': (type == null) ? 'json' : type,
		'data': data,
		'beforeSend': bg ? null : LoadingBegin,
		'complete': bg ? null : LoadingEnd,
		'success': callback
	});
	return false;
}

function DCLCall(call, callback, async, bg) {
	$.ajax({
		'url': 'services/DCL.php?' + call,
		'async': (async) ? true : false,
		'type': 'GET',
		'dataType': 'xml',
		'beforeSend': bg ? null : LoadingBegin,
		'complete': bg ? null : LoadingEnd,
		'success': callback
	});
	return false;
}

/* SmartWS methods */

function WSGetStatus() {
	var result = false;
	SmartWSCall(
		'status',
		{},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.statusResult) {
				var parts = data.statusResult.split('-');
				if (parts[1] === '0') { shipId = parts[0]; result = true; }
			}
		}
	);
	return result;
}

function WSGetDefaults() {
	var result = false;
	SmartWSCall(
		'elements_default',
		{
			'ship_id' : shipId,
			'tag' : 'P',
			'language' : langId
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.elements_defaultResult) {
				var obj = jQuery.parseJSON(data.elements_defaultResult);
				$.each(obj, function(key, value) {
					objSettings[value.ELEMENT_ID] = value;
				});
				result = true;
			}
		}
	);
	return result;
}

function WSLogin(login, password) {
	var result = false;
	SmartWSCall(
		'login',
		{
			'login_name' : login.toLowerCase(),
			'password' : hex_md5(password.toLowerCase()),
			'ship_id' : shipId
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.loginResult) {
				var obj = jQuery.parseJSON(data.loginResult);
	//			obj = [{"ELEMENT_ID":1101113,"ELEMENT_TAG":"P","ELEMENT_RIGHT":1,"ELEMENT_SHIP_ID":12,"ELEMENT_SORT":null,"ELEMENT_LOGIN_ID":337475,"ELEMENT_PARENT":1101213,"ELEMENT_TYPE":4,"ELEMENT_LANG_ID":2,"ELEMENT_TEXT":"Promotion Test language 2"}];

				if (obj.length > 0) {
					if (obj[0].ELEMENT_RESULT == -1) { return ShowDialog1011101(); }
					if (obj[0].ELEMENT_RESULT == -2) { return ShowDialog1011102(); }
					if (obj[0].ELEMENT_RESULT == -3) { return ShowDialog1011102(); }
//					if (obj[0].ELEMENT_RESULT == -4) { return ShowDialog1011104(); }

					$.each(obj, function(key, value) {
						objSettings[value.ELEMENT_ID] = value;
						accId = value.ELEMENT_LOGIN_ID;
						accLangId = value.ELEMENT_LANG_ID;
						accTag = value.ELEMENT_TAG;
						
						langId = accLangId;
					});
					result = true;
				}
			}
		}
	);
	return result;
}

function WSSignUp2(loginName, password, secQuestion, secAnswer, language, dateOfBirth) {
	var result = false;
	SmartWSCall(
		'signUp',
		{
			'shipID': shipId,
			'accId': dataSignUp1.gnID,
			'loginName': loginName.toLowerCase(),
			'password': hex_md5(password.toLowerCase()),
			'secQuestion': secQuestion,
			'secAnswer': secAnswer.toLowerCase(),
			'accTag': dataSignUp1.gsAccTag,
			'languageID': language,
			'dateOfBirth': dateOfBirth
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.signUpResult) {
				if (data.signUpResult ==  0) { return ShowDialog1031109(); }
				if (data.signUpResult ==  1) { result = true; /*ResetSignUp(); return WSLogin(loginName, password)*/; }
				if (data.signUpResult == -1) { return ShowDialog1031109(); }
				if (data.signUpResult == -2) { return ShowDialog1031109(); /*ShowDialogAlert('Sign Up Information missing');*/ }
				if (data.signUpResult == -3) { return ShowDialog1021102(); /*ShowDialogAlert('Login Name or Account ID already exists');*/ }
			}
		}
	);
	return result;
}

function WSSecretQ(loginName) {
	var result = false;
	SmartWSCall(
		'secretQ',
		{
			'shipID': shipId,
			'loginName': loginName.toLowerCase()
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.secretQResult) {
				var obj = jQuery.parseJSON(data.secretQResult);
				if (obj == -1) { return ShowDialogAlert('Unknown error'); }
				if (obj ==  0) { return ShowDialog1011101(); }
				accSecretQ = obj;
				result = true;
			}
		}
	);
	return result;
}

function WSVerifySecretA(loginName, secAnswer) {
	var result = false;
	SmartWSCall(
		'changePW',
		{
			'shipID': shipId,
			'loginName': loginName.toLowerCase(),
			'secAnswer': secAnswer.toLowerCase(),
			'newSecAnswer': secAnswer.toLowerCase()
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.changePWResult) {
				var obj = jQuery.parseJSON(data.changePWResult);
				if (obj == -1) { return ShowDialogAlert('Unknown error'); }
				if (obj ==  0) { return ShowDialog1061102(); }
				if (obj ==  1) { result = true; /*return ShowDialog1061104();*/ }
			}
		}
	);
	return result;
}

function WSChangePW(loginName, secAnswer, newPW, newSecQuestion, newSecAnswer) {
	var result = false;
	SmartWSCall(
		'changePW',
		{
			'shipID': shipId,
			'loginName': loginName.toLowerCase(),
			'secAnswer': secAnswer.toLowerCase(),
			'oldPW': '',
			'newPW': hex_md5(newPW.toLowerCase()),
			'newSecQuestion': newSecQuestion,
			'newSecAnswer': newSecAnswer.toLowerCase()
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.changePWResult) {
				var obj = jQuery.parseJSON(data.changePWResult);
				if (obj == -1) { return ShowDialogAlert('Unknown error'); }
				if (obj ==  0) { return ShowDialogAlert('Changes not accepted'); }
				if (obj ==  1) { result = true; }
			}
		}
	);
	return result;
}

function WSMessageRead(msgDirection, bg) {
	if (objMessageRead != null) { return true; }

	var result = false;
	SmartWSCall(
		'messageRead',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'msgDirection': msgDirection
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.messageReadResult) {
				objMessageRead = jQuery.parseJSON(data.messageReadResult);
				result = true;
			}
		},
		null, null, bg
	);
	return result;
}

function WSMessageDelete(msgId) {
	var result = false;
	SmartWSCall(
		'messageDelete',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'msgId': msgId
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.messageDeleteResult ==  1) { result = true; return true; }
			if (data.messageDeleteResult ==  0) { return ShowDialogAlert('Failed to delete the message'); }
			if (data.messageDeleteResult == -1) { return ShowDialogAlert('Failed to change message status'); }
		}
	);
	return result;
}

function WSMessageSetRead(msgId) {
	var result = false;
	SmartWSCall(
		'messageSetRead',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'msgId': msgId
		},
		function(data) {
			//if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.messageSetReadResult ==  1) { result = true; return true; }
			//if (data.messageSetReadResult ==  0) { return ShowDialogAlert('Failed to change message status. 0'); }
			//if (data.messageSetReadResult == -1) { return ShowDialogAlert('Failed to change message status. -1'); }
		}
	);
	return result;
}

function WSMessageSend(toName, msgSubject, msgText) {
	var result = false;
	SmartWSCall(
		'messageSend',
		{
			'fromName': accLogin.toLowerCase(),
			'toName': toName,
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'msgSubject' : msgSubject,
			'msgText': msgText,
			'msgType': 1,
			'msgLevel': 1,
			'msgStatus': 1
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.messageSendResult == '"1"') { result = true;  return true; }
			if (data.messageSendResult ==  0) { return ShowDialogAlert('Failed to send the message'); }
			if (data.messageSendResult == -1) { return ShowDialogAlert('Authentication failure. Please relogin'); }
			if (data.messageSendResult == -2) { return ShowDialogAlert('Recipient not found'); }
		}
	);
	return result;
}

function WSRecommendationRead(recDirection) {
	if (objRecommendationRead != null) { return true; }

	var result = false;
	SmartWSCall(
		'recommendationRead',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'recDirection': recDirection
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.recommendationReadResult) {
				objRecommendationRead = jQuery.parseJSON(data.recommendationReadResult);
				result = true;
			}
		}
	);
	return result;
}

function WSRecommendationDelete(recId) {
	var result = false;
	SmartWSCall(
		'recommendationDelete',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'recId': recId
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.recommendationDeleteResult ==  1) { result = true; return true; }
			if (data.recommendationDeleteResult ==  0) { return ShowDialogAlert('Failed to delete the recommendation'); }
			if (data.recommendationDeleteResult == -1) { return ShowDialogAlert('Failed to update recommendation table'); }
		}
	);
	return result;
}

function WSRecommendationSetRead(recId) {
	var result = false;
	SmartWSCall(
		'recommendationSetRead',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'recId': recId
		},
		function(data) {
			//if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.recommendationSetReadResult ==  1) { result = true; return true; }
			if (data.recommendationSetReadResult ==  0) { return ShowDialogAlert('Failed to change recommendation status.'); }
			//if (recommendationSetReadResult == -1) { return ShowDialogAlert('Failed to change recommendation status. -1'); }
		}
	);
	return result;
}

function WSRecommendationSend(toName, typeCode, recID, recType, comment, recDate, recTime) {
	var result = false;
	SmartWSCall(
		'recommendationSend',
		{
			'fromName': accLogin.toLowerCase(),
			'toName': toName,
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'typeCode' : typeCode,
			'recID': recID,
			'recType': recType,
			'comment': comment,
			'recDate': recDate,
			'recTime': recTime
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = jQuery.parseJSON(data.recommendationSendResult);
			if (res ==  1) { result = true; return true; }
			if (res ==  0) { return ShowDialogAlert('Failed to send the recommendation'); }
			if (res == -1) { return ShowDialogAlert('Authentication failure. Please relogin'); }
			if (res == -2) { return ShowDialogAlert('Login not possible'); }
			if (res == -3) { return true; return ShowDialogAlert('Item already recommended to selected passenger'); }
			if (res == -4) { return ShowDialogAlert('Type not found'); }
			if (res == -5) { return true; return ShowDialogAlert('Record already exists'); }
		}
	);
	return result;
}

function WSWishlistSend(recId, typeCode, comment, wlDate, wlTime) {
	var result = false;
	SmartWSCall(
		'wishlistSend',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'recId': recId,
			'typeCode': typeCode,
			'comment': comment,
			'wlDate': wlDate,
			'wlTime': wlTime
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = jQuery.parseJSON(data.wishlistSendResult);
			if (res ==  1) { result = true; return true; }
			if (res ==  0) { return ShowDialogAlert('Failed to save the item'); }
			if (res == -1) { return ShowDialogAlert('Authentication failure. Please relogin'); }
			if (res == -2) { return ShowDialogAlert('Login not possible'); }
			if (res == -3) { return ShowDialogAlert('Item already added to wish list'); } // DB error
			if (res == -4) { return ShowDialogAlert('Unknown typeCode'); }
			if (res == -5) { return ShowDialogAlert('Record already exists'); }
		}
	);
	return result;
}

function WSWishlistRead() {
	if (objWishlistRead != null) { return true; }

	var result = false;
	SmartWSCall(
		'wishlistRead',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = jQuery.parseJSON(data.wishlistReadResult);
//			if (res ==  0) { return ShowDialogAlert('Failed to read wishlist'); }
			if (res == -1) { return ShowDialogAlert('Authentication failure. Please relogin'); }
			if (res == -2) { return ShowDialogAlert('Login not possible'); }
			if (res == -3) { return ShowDialogAlert('DB error'); }
			objWishlistRead = jQuery.parseJSON(data.wishlistReadResult);
			result = true;
		}
	);
	return result;
}

function WSWishlistDelete(wlId) {
	var result = false;
	SmartWSCall(
		'wishlistDelete',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'wlId': wlId
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wishlistDeleteResult ==  1) { result = true; return true; }
			if (data.wishlistDeleteResult ==  0) { return ShowDialogAlert('Failed to delete the item'); }
			if (data.wishlistDeleteResult == -1) { return ShowDialogAlert('Failed to update data'); }
		}
	);
	return result;
}

function WSGuestDetailsPrivacySettings(pnContactID) {
	if (objGuestDetailsPrivacySettings != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_GuestDetails_PrivacySettings',
			'psAccessCode': '',
			'psParam': [pnContactID, accId, pnContactID, accId, pnContactID]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objGuestDetailsPrivacySettings = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSContactNew(contactName, contactType) {
	var result = false;
	SmartWSCall(
		'contactNew',
		{
			'loginName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'contactName': contactName,
			'contactType': contactType
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = jQuery.parseJSON(data.contactNewResult);
			if (res ==  1) { result = true; return true; }
			var msg = 'Unknown error in WSContactNew()';
			if (res ==  0) { msg  = 'Failed to store contact'; }
			if (res == -1) { msg  = 'Wrong user or password'; }
			if (res == -2) { msg  = 'Wrong contact name'; }
			if (res == -3) { msg  = 'Database error'; }
			if (res == -4) { msg  = 'Type code not found'; }
			if (res <= -500) { msg  = 'Contact is already pending as new contact'; }
			if (res <= -600) { msg  = 'Combination contact and login already exist'; }
			if (res <= -700) { msg  = 'Combination contact and login already exist, contact\'s request status 2'; }
			if (res <= -800) { msg  = 'Combination contact and login already exist'; }
			return ShowDialogAlert(msg + '. Code: ' + res); 
		}
	);
	return result;
}

function WSContactChangeStatus(contactID, contactStatus, contactType) {
	var result = false;
	SmartWSCall(
		'contactChangeStatus',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'contactID': contactID,
			'contactStatus': contactStatus,
			'contactType': contactType
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = (data.contactChangeStatusResult);
			if (res ==  1) { result = true; return true; }
			var msg = 'Unknown error in WSContactChangeStatus()';
			if (res ==  0) { msg  = 'Not successful'; }
			if (res == -1) { msg  = 'Error while changing contact'; }
			if (res == -2) { msg  = 'Wrong user or password'; }
			if (res == -3) { msg  = 'Error while updating contact'; }
			if (res == -4) { msg  = 'Error while updating contact'; }
			if (res == -5) { msg  = 'Error while inserting contact'; }
			return ShowDialogAlert(msg + '. Code: ' + res); 
		}
	);
	return result;
}

function WSContactsRead(status) {
	if (objContactsRead != null) { return true; }

	var result = false;
	SmartWSCall(
		'contactsRead',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'status': status
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.contactsReadResult) {
				objContactsRead = jQuery.parseJSON(data.contactsReadResult);
				result = true;
			}
		}
	);
	return result;
}

// -----------------

function WSTravelWithNew(twLoginName, twType, twLeader, twDelegate, twNr) {
	var result = false;
	SmartWSCall(
		'travelWithNew',
		{
			'loginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'twLoginName': twLoginName,
			'twType': twType,
			'twLeader': twLeader,
			'twDelegate': twDelegate,
			'twNr': twNr
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = jQuery.parseJSON(data.travelWithNewResult);
			if (res ==  1) { result = true; return true; }
			var msg = 'Unknown error in WSTravelWithNew()';
			if (res ==  0) { msg  = 'Failed to store travel with'; }
			if (res == -1) { msg  = 'General error'; }
			if (res == -2) { msg  = 'Wrong user or password'; }
			if (res == -3) { msg  = 'Added user unknown'; }
			if (res == -4) { msg  = 'Travel with type not found'; }
			if (res == -5) { msg  = 'Wrong parameter'; }
			if (res == -6) { msg  = 'Wrong parameter'; }
			if (res == -7) { msg  = 'Wrong parameter'; }
			if (res == -8) { msg  = 'This guest have already declined/deleted request'; }
			if (res == -9) { msg  = 'Import error'; }
			if (res == -10) { msg  = 'Wrong parameter'; }
			return ShowDialogAlert(msg + '. Code: ' + res); 
		}
	);
	return result;
}

function WSTravelWithEdit(twID, col, value) {
	var result = false;
	SmartWSCall(
		'travelWithEdit',
		{
			'LoginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'twID': twID,
			'col': col,
			'value': value
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = (data.travelWithEditResult);
			if (res ==  1) { result = true; return true; }
			var msg = 'Unknown error in WSContactChangeStatus()';
			if (res ==  0) { msg  = 'Not successful'; }
			if (res == -1) { msg  = 'Error while updating travel with'; }
			if (res == -2) { msg  = 'Wrong user or password'; }
			if (res == -3) { msg  = 'Error while updating travel with'; }
			if (res == -4) { msg  = 'Error while updating travel with'; }
			if (res == -5) { msg  = 'Error while updating travel with'; }
			return ShowDialogAlert(msg + '. Code: ' + res); 
		}
	);
	return result;
}

function WSTravelWithRead(travelWithType, travelWithStatus) {
	if (objTravelWithRead != null) { return true; }

	var result = false;
	SmartWSCall(
		'travelWithRead',
		{
			'loginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'travelWithType': travelWithType,
			'travelWithStatus': travelWithStatus ? travelWithStatus : '1'
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.travelWithReadResult) {
				objTravelWithRead = jQuery.parseJSON(data.travelWithReadResult);
				result = true;
			}
		}
	);
	return result;
}

// ----------------

function WSPrivacyDefaultRead() {
	if (objPrivacyDefaultRead != null) { return true; }

	var result = false;
	SmartWSCall(
		'privacyDefaultRead',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'accTag': accTag
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.privacyDefaultReadResult) {
				objPrivacyDefaultRead = jQuery.parseJSON(data.privacyDefaultReadResult);
				result = true;
			}
		}
	);
	return result;
}

function WSPrivacyDefaultCopy() {
	var result = false;
	SmartWSCall(
		'privacyDefaultCopy',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'accTag': accTag
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.privacyDefaultCopyResult) {
				result = true;
				// no error messages there as it is almost background task 
			}
		}
	);
	return result;
}

function WSPrivacyRead() {
	if (objPrivacyRead != null) { return true; }

	var result = false;
	SmartWSCall(
		'privacyRead',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.privacyReadResult) {
				objPrivacyRead = jQuery.parseJSON(data.privacyReadResult);
				result = true;
			}
		}
	);
	return result;
}

function WSPrivacyEdit(privacyID, privActive) {
	var result = false;
	SmartWSCall(
		'privacyEdit',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'privacyID': privacyID,
			'privActive': privActive
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.privacyEditResult) {
				var res = data.privacyEditResult;
				if (res ==  1) { result = true; return true; }
				var msg = 'Unknown error in WSPrivacyEdit()';
				if (res ==  0) { msg  = 'Not successful'; }
				if (res == -1) { msg  = 'Error while changing privacy row'; }
				if (res == -2) { msg  = 'Wrong user or password'; }
				if (res == -3) { msg  = 'Privacy ID not found'; }
				if (res == -4) { msg  = 'Wrong loginID'; }
				if (res == -5) { msg  = 'DB update error table PRIVACY_ASSIGNMENT'; }
				if (res == -6) { msg  = 'setup_id not found in table PRIVACY_SETUP'; }
				if (res == -7) { msg  = 'Edit not allowed'; }
				return ShowDialogAlert(msg + '. Code: ' + res);
			}
		}
	);
	return result;
}

function WSRatingNew(ratingValue, ratingComment, ratingType, recID) {
	var result = false;
	var tableCol = {
		'' : '',
		'RATING_EXC' : 'EPO_TRANS_ID',
		'RATING_ACT' : 'ACTIVITY_ID',
		'RATING_HRB' : 'SCD_ID',
		'RATING_TKT' : 'TKPO_CONTROL',
		'RATING_SPA' : 'SPA_ID',
		'RATING_ALT' : 'RES_ID',
		'RATING_POS' : 'POS_TRANS_ID'	
	};
	
	SmartWSCall(
		'ratingNew',
		{
			'loginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'ratingValue': ratingValue,
			'ratingComment': ratingComment,
			'ratingType': ratingType,
			'recID': recID,
			'tableCol': tableCol[ratingType]
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = jQuery.parseJSON(data.ratingNewResult);
			if (res ==  1) { result = true; return true; }
			var msg = 'Unknown error in WSRatingNew()';
			if (res ==  0) { msg = 'Failed to save the rating'; }
			if (res == -1) { msg = 'Wrong username or password'; }
			if (res == -2) { msg = 'Rating type not valid'; }
			if (res == -3) { msg = 'Value not valid'; } 
			if (res == -4) { msg = 'Combination  ship, rating, login, … already exists'; }
			if (res == -5) { msg = 'DB error add new not successful '; }
			return ShowDialogAlert(msg + '. Code: ' + res);
		}
	);
	return result;
}

function WSRatingRead(ratingType, recordId) {
	if (objRatingRead != null) { return true; }

	var result = false;
	var tableCol = {
		'' : '',
		'RATING_EXC' : 'EPO_TRANS_ID',
		'RATING_ACT' : 'ACTIVITY_ID',
		'RATING_HRB' : 'SCD_ID',
		'RATING_TKT' : 'TKPO_CONTROL',
		'RATING_SPA' : 'SPA_ID',
		'RATING_ALT' : 'RES_ID',
		'RATING_POS' : 'POS_TRANS_ID'	
	};
	
	SmartWSCall(
		'ratingRead',
		{
			'loginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'ratingType': ratingType,
			'recordId': recordId,
			'tableCol': tableCol[ratingType]
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = jQuery.parseJSON(data.ratingReadResult);
			objRatingRead = res;
			result = true;
		}
	);
	return result;
}

function WSRatingEdit(ratingID, ratingValue, comment, deleted) {
	var result = false;
	SmartWSCall(
		'ratingEdit',
		{
			'username': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'ratingID': ratingID,
			'ratingValue': ratingValue,
			'comment': comment,
			'deleted': deleted
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = data.ratingEditResult;
			if (res ==  1) { result = true; return true; }
			var msg = 'Unknown error in WSRatingEdit()';
			if (res ==  0) { msg = 'Failed to update the rating'; }
			if (res == -1) { msg = 'Error while updating row'; }
			if (res == -2) { msg = 'Wrong user or password'; }
			if (res == -3) { msg = 'Rating ID not found'; } 
			if (res == -4) { msg = 'Wrong loginID for this rating'; }
			if (res == -5) { msg = 'DB update error table RATING'; }
			return ShowDialogAlert(msg + '. Code: ' + res);
		}
	);
	return result;
}

function WSDelegatesSetupRead(delegatesSetupID, delegatesType) {
	if (objDelegatesSetupRead != null) { return true; }

	var result = false;
	SmartWSCall(
		'delegatesSetupRead',
		{
			'loginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'delegatesSetupID': delegatesSetupID,
			'delegatesType': delegatesType
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.delegatesSetupReadResult) {
				var res = jQuery.parseJSON(data.delegatesSetupReadResult);
				if (res == -1) { return ShowDialogAlert('General error'); }
				if (res == -2) { return ShowDialogAlert('User or password incorrect'); }
				if (res == -3) { return ShowDialogAlert('delegates_setup_id not found'); }
				if (res == -4) { return ShowDialogAlert('DELEGATES_SETUP row not enabled'); }
				objDelegatesSetupRead = res;
				result = true;
			}
		}
	);
	return result;
}

function WSDelegatesAssignmentRead(delegatesAssignmentID, delegatesType) {
	if (objDelegatesAssignmentRead != null) { return true; }

	var result = false;
	SmartWSCall(
		'delegatesAssignmentRead',
		{
			'loginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'delegatesAssignmentID': delegatesAssignmentID,
			'delegatesType': delegatesType
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.delegatesAssignmentReadResult) {
				var res = jQuery.parseJSON(data.delegatesAssignmentReadResult);
				if (res == -1) { return ShowDialogAlert('General error'); }
				if (res == -2) { return ShowDialogAlert('User or password incorrect'); }
				if (res == -3) { return ShowDialogAlert('delegates_id not found'); }
				objDelegatesAssignmentRead = res;
				result = true;
			}
		}
	);
	return result;
}


function WSDelegatesAssignmentNew(delegatesType, delegatesValue) {
	var result = false;
	SmartWSCall(
		'delegatesAssignmentNew',
		{
			'loginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'delegatesType': delegatesType,
			'delegatesValue': delegatesValue
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = data.delegatesAssignmentNewResult;
			if (res ==  1) { result = true; return true; }
			var msg = 'Unknown error in WSDelegatesAssignmentNew()';
			if (res ==  0) { msg = 'Nothing done'; }
			if (res == -1) { msg = 'General error'; }
			if (res == -2) { msg = 'No valid login or password'; }
			if (res == -3) { msg = 'DELEGATES_TYPE unknown in table: DELEGATES_SETUP'; } 
			if (res == -4) { msg = 'DELEGATES_TYPE disabled in table:DELGATES_SETUP'; }
			if (res == -5) { msg = 'User already assigned this delegates_type'; }
			if (res == -6) { msg = 'Db error while adding new delegates_assignment'; }
			return ShowDialogAlert(msg + '. Code: ' + res);
		}
	);
	return result;
}

function WSDelegatesAssignmentEdit(delegatesAssignmentID, delegatesValue) {
	var result = false;
	SmartWSCall(
		'delegatesAssignmentEdit',
		{
			'LoginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'delegatesAssignmentID': delegatesAssignmentID,
			'delegatesValue': delegatesValue
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = data.delegatesAssignmentEditResult;
			if (res ==  1) { result = true; return true; }
			var msg = 'Unknown error in WSDelegatesAssignmentEdit()';
			if (res ==  0) { msg = 'Nothing done'; }
			if (res == -1) { msg = 'General error'; }
			if (res == -2) { msg = 'No valid login'; }
			if (res == -3) { msg = 'Delegates_id not found for this user'; } 
			if (res == -4) { msg = 'Error while updating delegates_assignment'; }
			return ShowDialogAlert(msg + '. Code: ' + res);
		}
	);
	return result;
}


function WSDelegatesDefaultCopy() {
	var result = false;
	SmartWSCall(
		'delegatesDefaultCopy',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.delegatesDefaultCopyResult) {
				result = true;
				// no error messages there as it is almost background task 
			}
		}
	);
	return result;
}


function WSDelegatesDefaultRead() {
	if (objDelegatesDefaultRead != null) { return true; }

	var result = false;
	SmartWSCall(
		'delegatesDefaultRead',
		{
			'userName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId,
			'accTag': accTag
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.delegatesDefaultReadResult) {
				var res = jQuery.parseJSON(data.delegatesDefaultReadResult);
				if (res == -1) { return ShowDialogAlert('General error'); }
				if (res == -2) { return ShowDialogAlert('User or password incorrect'); }
				objDelegatesDefaultRead = res;
				result = true;
			}
		}
	);
	return result;
}

function WSLoginChangeImage(imageType, imageCode) {
	var result = false;
	SmartWSCall(
		'loginChangeImage',
		{
			'LoginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'imageType': imageType,
			'imageCode': imageCode
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = data.loginChangeImageResult;
			if (res ==  1) { result = true; return true; }
			var msg = 'Unknown error in WSLoginChangeImage()';
			if (res ==  0) { msg  = 'Not successful'; }
			if (res == -1) { msg  = 'Error while updating row'; }
			if (res == -2) { msg  = 'Wrong user or password'; }
			if (res == -3) { msg  = 'ImageType not foud in table: APP_TYPE'; }
			if (res == -4) { msg  = 'Invalid imageType'; }
			if (res == -5) { msg  = 'Invalid imageCode'; }
			if (res == -6) { msg  = 'db Update Error table: USER_LOGIN'; }
			return ShowDialogAlert(msg + '. Code: ' + res); 
		}
	);
	return result;
}

function WSLoginUpdate(loginCode, loginValue) {
	var result = false;
	SmartWSCall(
		'loginUpdate',
		{
			'LoginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'loginCode': loginCode,
			'loginValue': loginValue
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = data.loginUpdateResult;
			if (res ==  1) { result = true; return true; }
			var msg = 'Unknown error in WSLoginUpdate()';
			if (res ==  0) { msg  = 'Not successful'; }
			if (res == -1) { msg  = 'Error while updating row'; }
			if (res == -2) { msg  = 'Wrong user or password'; }
			if (res == -3) { msg  = 'Error while reading table: USER_LOGIN'; }
			if (res == -4) { msg  = 'LoginValue not found in table: LANGUAGES'; }
			if (res == -5) { msg  = 'While updating table: USER_LOGIN'; }
			return ShowDialogAlert(msg + '. Code: ' + res); 
		}
	);
	return result;
}

function WSActivitySetupRead(activitySetupID, activitySetupCode, activitySetupType, activitySetupClass, activitySetupLocation, activitySetupDate) {
	if (objActivitySetupRead != null) { return true; }

	var result = false;
	SmartWSCall(
		'activitySetupRead',
		{
			'loginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'activitySetupID': activitySetupID,
			'activitySetupCode': activitySetupCode,
			'activitySetupType': activitySetupType,
			'activitySetupClass': activitySetupClass,
			'activitySetupLocation': activitySetupLocation,
			'activitySetupDate': activitySetupDate
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.activitySetupReadResult) {
				var res = jQuery.parseJSON(data.activitySetupReadResult);
				if (res == -1) { return ShowDialogAlert('General error, see table: ERROR_LOG'); }
				if (res == -2) { return ShowDialogAlert('Wrong user or password'); }
				if (res == -3) { return ShowDialogAlert('Activity_setup_id not found'); }
				if (res == -4) { return ShowDialogAlert('ACTIVITY_SETUP row not enabled'); }
				objActivitySetupRead = res;
				result = true;
			}
		}
	);
	return result;
}

function WSActivityRead(activityID, activitySetupID) {
	if (objActivityRead != null) { return true; }

	var result = false;
	SmartWSCall(
		'activityRead',
		{
			'loginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'activityID': activityID,
			'activitySetupID': activitySetupID
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.activityReadResult) {
				var res = jQuery.parseJSON(data.activityReadResult);
				if (res == -1) { return ShowDialogAlert('General error, see table: ERROR_LOG'); }
				if (res == -2) { return ShowDialogAlert('Wrong user or password'); }
				if (res == -3) { return ShowDialogAlert('Activity_id not found'); }
				objActivityRead = res;
				result = true;
			}
		}
	);
	return result;
}

function WSActivityNew(activitySetup_ID, language, comment, bookingSource, bookingUserID, activityUserLoginName) {
	var result = false;
	SmartWSCall(
		'activityNew',
		{
			'loginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'activitySetup_ID': activitySetup_ID,
			'language': language,
			'comment': comment,
			'bookingSource': bookingSource,
			'bookingUserID': bookingUserID,
			'activityUserLoginName': activityUserLoginName
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = jQuery.parseJSON(data.activityNewResult);
			if (res ==  1) { result = true; return true; }
			var msg = 'Unknown error in WSActivityNew()';
			if (res ==  0) { msg  = 'Not successful'; }
			if (res == -1) { msg  = 'Error while updating row'; }
			if (res == -2) { msg  = 'Wrong user or password'; }
			if (res == -3) { msg  = 'Language unknown in table: LANGUAGES column: LANG_NAME, case sensitive'; }
			if (res == -4) { msg  = 'ACTSETUP_ID unknown in table: ACTIVITY_SETUP'; }
			if (res == -5) { msg  = 'Deadline date already expired'; }
			if (res == -6) { msg  = 'ACTIVITY_SETUP disabled in table: ACTIVITY_SETUP'; }
			if (res == -7) { msg  = 'User already booked this activity'; }
			if (res == -8) { msg  = 'maximum seats already booked, no waitlist'; }
			if (res == -9) { msg  = 'error while reading activity ticket, waitlist max'; }
			if (res == -10) { msg  = 'your are on the waitlist (activity is booked)'; }
			if (res == -11) { msg  = 'db error while adding new activity'; }
			return ShowDialogAlert(msg + '. Code: ' + res); 
		}
	);
	return result;
}

function WSActivityCancel(activityID, status) {
	var result = false;
	SmartWSCall(
		'activityCancel',
		{
			'LoginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'activityID': activityID,
			'status': status
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = data.activityCancelResult;
			if (res ==  1) { result = true; return true; }
			var msg = 'Unknown error in WSActivityCancel()';
			if (res ==  0) { msg  = 'Not successful'; }
			if (res == -1) { msg  = 'Error while updating row'; }
			if (res == -2) { msg  = 'Wrong user or password'; }
			if (res == -3) { msg  = 'activity_id not found for this user'; }
			if (res == -4) { msg  = 'error while updating activity'; }
			if (res == -5) { msg  = 'activity already canceled'; }
			return ShowDialogAlert(msg + '. Code: ' + res); 
		}
	);
	return result;
}

function WSLanguagesRead() {
	if (objLanguagesRead != null) { return true; }

	var result = false;
	SmartWSCall(
		'languagesRead',
		{
			'password': hex_md5(('smartfidelio').toLowerCase()),
			'shipid': shipId
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.languagesReadResult) {
				var res = jQuery.parseJSON(data.languagesReadResult);
				if (res == -1) { return ShowDialogAlert('General error'); }
				if (res == -2) { return ShowDialogAlert('DEFAULT_SMART_PASSWORD not found in SETUP_PARAMETER'); }
				if (res == -3) { return ShowDialogAlert('wrong password'); }
				if (res == -4) { return ShowDialogAlert('wrong ship ID'); }
				objLanguagesRead = res;
				result = true;
			}
		}
	);
	return result;
}

function WSParentalDefaultCopy() {
	var result = false;
	SmartWSCall(
		'parentalDefaultCopy',
		{
			'LoginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'accTAG': accTag
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.parentalDefaultCopyResult) {
				var res = data.parentalDefaultCopyResult;
				if (res ==  1) { result = true; return true; }
				var msg = 'Error in WSParentalDefaultCopy()';
				return ShowDialogAlert(msg + '. Code: ' + res);
			}
		}
	);
	return result;
}

function WSParentalControlRead() {
	if (objParentalControlRead != null) { return true; }

	var result = false;
	SmartWSCall(
		'parentalControlRead',
		{
			'loginName': accLogin.toLowerCase(),
			'password': hex_md5(accPass.toLowerCase()),
			'shipid': shipId
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.parentalControlReadResult) {
				var res = jQuery.parseJSON(data.parentalControlReadResult);
				if (res == -1) { return ShowDialogAlert('General error'); }
				if (res == -2) { return ShowDialogAlert('User or password incorrect'); }
				objParentalControlRead = res;
				result = true;
			}
		}
	);
	return result;
}

function WSParentalControlEdit(parentalID, parentalCol, parentalValue) {
	var result = false;
	SmartWSCall(
		'parentalControlEdit',
		{
			'LoginName': accLogin.toLowerCase(),
			'passWord': hex_md5(accPass.toLowerCase()),
			'shipID': shipId,
			'parentalID': parentalID,
			'parentalCol': parentalCol,
			'parentalValue': parentalValue
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.parentalControlEditResult) {
				var res = data.parentalControlEditResult;
				if (res ==  1) { result = true; return true; }
				var msg = 'Unknown error in WSParentalControlEdit()';
				if (res ==  0) { msg  = 'Not successful'; }
				if (res == -1) { msg  = 'general error, see table: ERROR_LOG'; }
				if (res == -2) { msg  = 'loginName or password not valid'; }
				if (res == -3) { msg  = 'parentalID not valid'; }
				if (res == -4) { msg  = 'parentalCol is not a valid parameter'; }
				if (res == -5) { msg  = 'parentalID not found'; }
				if (res == -6) { msg  = 'error updating table: PARENTAL_ASSIGNMENT'; }
				return ShowDialogAlert(msg + '. Code: ' + res);
			}
		}
	);
	return result;
}

function WSSearchLogInGuestCheckedIn() {
	if (objSearchLogInGuestCheckedIn != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_SearchLogInGuestCheckedIn',
			'psAccessCode': ''
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objSearchLogInGuestCheckedIn = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSAllGuestsNames() {
	if (objAllGuestsNames != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_AllGuests_Names',
			'psAccessCode': ''
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objAllGuestsNames = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSInfoCount(bg) {
	if (objInfoCount != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_InfoCount',
			'psAccessCode': '',
			'psParam': [accId, accId, accId, accId, accId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objInfoCount = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		},
		null, null, bg
	);
	return result;
}

function WSRestaurantList() {
	if (objRestaurantList != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Restaurant_List',
			'psAccessCode': '',
			'psParam': [shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objRestaurantList = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSBarList() {
	if (objBarList != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Bar_List',
			'psAccessCode': '',
			'psParam': [shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objBarList = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSDeckplanDecklist() {
	if (objDeckplanDecklist != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Deckplan_Decklist',
			'psAccessCode': '',
			'psParam': [shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objDeckplanDecklist = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSLocationListByDeck(deck) {
	if (objLocationListByDeck != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Location_List_byDeck',
			'psAccessCode': '',
			'psParam': [deck, shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objLocationListByDeck = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}


function WSISOLanguage() {
	if (objISOLanguage != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_ISO_LANGUAGE',
			'psAccessCode': '',
			'psParam': [shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objISOLanguage = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSMessageType() {
	if (objMessageType != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Message_Type',
			'psAccessCode': '',
			'psParam': [shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objMessageType = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSRecommendedType() {
	if (objRecommendedType != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Recommended_Type',
			'psAccessCode': '',
			'psParam': [shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objRecommendedType = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSActivityType() {
	if (objActivityType != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Activity_Type',
			'psAccessCode': '',
			'psParam': [shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objActivityType = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSTravelWithListAttendees(param2) {
	if (objTravelWithListAttendees != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_TravelWith_List_Attendees',
			'psAccessCode': '',
			'psParam': [accId, param2, accId, param2, accId, param2]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objTravelWithListAttendees = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSContactGuestPerPrivacyType(loginId, param2) {
	if (objContactGuestPerPrivacyType != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Contact_Guest_Per_Privacy_Type',
			'psAccessCode': '',
			'psParam': [loginId, param2, loginId, param2, loginId, param2]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objContactGuestPerPrivacyType = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSWishlistFriends(psParam1) {
	if (objWishlistFriends != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Wishlist_Friends',
			'psAccessCode': '',
			'psParam': [psParam1, shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objWishlistFriends = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSAmenityDetails(pAccId) {
	if (objAmenityDetails != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Amenity_Details',
			'psAccessCode': '',
			'psParam': [pAccId ? pAccId : accId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objAmenityDetails = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSSpecialRequestDetails(pAccId) {
	if (objSpecialRequestDetails != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Special_Request_Details',
			'psAccessCode': '',
			'psParam': [pAccId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objSpecialRequestDetails = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

/*
function WSPositionDisplay(pScreenId) {
	if (objPositionDisplay != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Position_Display',
			'psAccessCode': '',
			'psParam': [pScreenId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objPositionDisplay = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}
*/

function WSSetupParameter() {
	if (objSetupParameter != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Setup_Parameter',
			'psAccessCode': '',
			'psParam': [shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objSetupParameter = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSOnboardBenefits(loyaltyStatus, pAccId) {
	if (objOnboardBenefits != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Onboard_Benefits',
			'psAccessCode': '',
			'psParam': [loyaltyStatus, shipId, (pAccId ? pAccId : accId)]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objOnboardBenefits = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSLoyaltyAccountBalance(pAccId) {
	if (objLoyaltyAccountBalance != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Loyalty_Account_Balance',
			'psAccessCode': '',
			'psParam': [(pAccId ? pAccId : accId)]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objLoyaltyAccountBalance = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSLocationInformation(locationCode) {
	if (objLocationInformation != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Location_Information',
			'psAccessCode': '',
			'psParam': [locationCode, shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objLocationInformation = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSLocationClassification(locationId) {
	if (objLocationClassification != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Location_Classification',
			'psAccessCode': '',
			'psParam': [locationId, shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objLocationClassification = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSLocationAvailableFor(locationId) {
	if (objLocationAvailableFor != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Location_Available_For',
			'psAccessCode': '',
			'psParam': [locationId, shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objLocationAvailableFor = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSLocationImages(locationCode) {
	if (objLocationImages != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Location_Images',
			'psAccessCode': '',
			'psParam': [locationCode, shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objLocationImages = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}
/*
function WSLocationOpeningHours(app_id) {
	if (objLocationOpeningHours != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Location_Opening_Hours',
			'psAccessCode': '',
			'psParam': [app_id, shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objLocationOpeningHours = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}
*/

function WSLocationOpeningHoursById(locationId) {
	if (objLocationOpeningHoursById != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Location_Opening_Hours_By_Id',
			'psAccessCode': '',
			'psParam': [locationId, shipId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objLocationOpeningHoursById = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSAvatarSelected(pAccId) {
	if (objAvatarSelected != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Avatar_Selected',
			'psAccessCode': '',
			'psParam': [pAccId, pAccId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objAvatarSelected = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSAvatarSelectedAll(pAccId) {
	if (objAvatarSelectedAll != null) { return true; }

	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Avatar_Selected_All',
			'psAccessCode': '',
			'psParam': [pAccId, pAccId]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objAvatarSelectedAll = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
}

/* SPMS methods */

function WSSearchPassenger(psLastName, pdBirthDate) {
	var result = false;
	SPMSCall(
		'JSONSearchPassenger',
		{
			'psLastName' : psLastName,
			'pdBirthDate' : pdBirthDate
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONSearchPassengerResult) {
				objSearchPassenger = jQuery.parseJSON(data.JSONSearchPassengerResult);
				result = true;
			}
		}
	);
	return result;
}

function WSSearchPassengerByID(pnAccID) {
	var result = false;
	SPMSCall(
		'JSONSearchPassengerByID',
		{
			'pnAccID' : pnAccID
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONSearchPassengerByIDResult) {
				objSearchPassenger = jQuery.parseJSON(data.JSONSearchPassengerByIDResult);
				result = true;
			}
		}
	);
	return result;
}

function WSGuestPicture() {
	if (objGuestPicture != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGuestPicture',
		{
			'pnAccID' : accId,
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGuestPictureResult) {
				objGuestPicture = jQuery.parseJSON(data.JSONGuestPictureResult);
				result = true;
			}
		}
	);
	return result;
}

function WSGuestPicture2(pnAccID) {
	if (objPhotos[pnAccID] != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGuestPicture',
		{
			'pnAccID' : pnAccID,
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGuestPictureResult) {
				objPhotos[pnAccID] = jQuery.parseJSON(data.JSONGuestPictureResult);
				if (objPhotos[pnAccID] == null) { objPhotos[pnAccID] = false; }
				result = true;
			}
		}
	);
	return result;
}

function WSGetItinerary(pnAccID) {
	if (objGetItinerary != null) { return true; }

	var acc = pnAccID ? pnAccID : accId;
	
	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Get_Itinerary',
			'psAccessCode': '',
			'psParam': [acc, acc, acc, acc, acc]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objGetItinerary = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;
/*
	var result = false;
	SPMSCall(
		'JSONWSFunction',
		{
			'psFunction' : 'GetItinerary',
			'psAccessCode' : '',
			'poParam' : [pnAccID ? pnAccID : accId],
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONWSFunctionResult) {
				objGetItinerary = jQuery.parseJSON(data.JSONWSFunctionResult);
				result = true;
			}
		}
	);
	return result;
*/
/* // duplicated dinings, temporary replacement
	var result = false;
	SPMSCall(
		'JSONGetItinerary',
		{
			'pnAccID' : pnAccID ? pnAccID : accId,
			'peItinerary' : 'All',
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetItineraryResult) {
				objGetItinerary = jQuery.parseJSON(data.JSONGetItineraryResult);
				result = true;
			}
		}
	);
	return result;
*/
}

function WSGetItinerary2(pnAccID) {
	if (objGetItinerary2 != null) { return true; }

	var acc = pnAccID ? pnAccID : accId;
	var result = false;
	SmartWSCall(
		'wsfunction',
		{
			'psFunction': 'sm_Get_Itinerary',
			'psAccessCode': '',
			'psParam': [acc, acc, acc, acc, acc]
		},
		function (data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.wsfunctionResult) {
				objGetItinerary2 = jQuery.parseJSON(data.wsfunctionResult);
				result = true;
			}
		}
	);
	return result;	
/*
	var result = false;
	SPMSCall(
		'JSONWSFunction',
		{
			'psFunction' : 'GetItinerary',
			'psAccessCode' : '',
			'poParam' : [pnAccID ? pnAccID : accId],
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONWSFunctionResult) {
				objGetItinerary2 = jQuery.parseJSON(data.JSONWSFunctionResult);
				result = true;
			}
		}
	);
	return result;
*/
/* // duplicated dinings, temporary replacement
	var result = false;
	SPMSCall(
		'JSONGetItinerary',
		{
			'pnAccID' : pnAccID,
			'peItinerary' : 'All',
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetItineraryResult) {
				objGetItinerary2 = jQuery.parseJSON(data.JSONGetItineraryResult);
				result = true;
			}
		}
	);
	return result;
*/
}

function WSGetItineraryShorex(pnAccID) {
	if (objGetItineraryShorex != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGetItinerary',
		{
			'pnAccID' : pnAccID ? pnAccID : accId,
			'peItinerary' : 'ShorexOnly',
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetItineraryResult) {
				objGetItineraryShorex = jQuery.parseJSON(data.JSONGetItineraryResult);
				result = true;
			}
		}
	);
	return result;
}

function WSGetItineraryTicket(pnAccID) {
	if (objGetItineraryTicket != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGetItinerary',
		{
			'pnAccID' : pnAccID ? pnAccID : accId,
			'peItinerary' : 'TicketOnly',
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetItineraryResult) {
				objGetItineraryTicket = jQuery.parseJSON(data.JSONGetItineraryResult);
				result = true;
			}
		}
	);
	return result;
}

function WSGetItinerarySpa(pnAccID) {
	if (objGetItinerarySpa != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGetItinerary',
		{
			'pnAccID' : pnAccID ? pnAccID : accId,
			'peItinerary' : 'SpaOnly',
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetItineraryResult) {
				objGetItinerarySpa = jQuery.parseJSON(data.JSONGetItineraryResult);
				result = true;
			}
		}
	);
	return result;
}

function WSSignUp1(psLastName, pdBirthDate) {
	var result = false;
	SPMSCall(
		'JSONSearchPassenger',
		{
			'psLastName' : psLastName,
			'pdBirthDate' : pdBirthDate
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialog1021101(); /*ShowDialogAlert(data.psErrMsg);*/ }
			if (data.JSONSearchPassengerResult) {
				dataSignUp1 = jQuery.parseJSON(data.JSONSearchPassengerResult);
				accBirth = pdBirthDate;
				result = true;
			}
		}
	);
	return result;
}

function WSGetInvoiceTotal() {
	if (objGetInvoiceTotal != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGetInvoiceTotal',
		{
			'pnAccID' : accId,
			'pbPackagePlan': '0',
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetInvoiceTotalResult) {
				objGetInvoiceTotal = jQuery.parseJSON(data.JSONGetInvoiceTotalResult);
				result = true;
			}
		}
	);
	return result;
}

function WSUpdateGuestEmail(psNewEMail) {
	var result = false;
	SPMSCall(
		'UpdateEMail',
		{
			'pnAccID' : accId,
			'psOldEMail': objSearchPassenger.gsEMail,
			'psNewEMail': psNewEMail,
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.UpdateEMailResult) {
				objSearchPassenger.gsEMail = psNewEMail;
				result = true;
			}
		}
	);
	return result;
}

function WSGetExcursion(pdSDate, pdEDate) {
	if (objGetExcursion != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGetExcursion',
		{
			'pnAccID' : accId,
			'pdSDate' : pdSDate,
			'pdEDate' : pdEDate,
			'peCodeType' : 'None',
			'psCode' : '',
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetExcursionResult) {
				objGetExcursion = jQuery.parseJSON(data.JSONGetExcursionResult);
				result = true;
			}
		}
	);
	return result;
}

function WSGetEvent(pdSDate, pdEDate) {
	if (objGetEvent != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGetEvent',
		{
			'pnAccID' : accId,
			'pdSDate' : pdSDate,
			'pdEDate' : pdEDate,
			'peCodeType' : 'None',
			'psCode' : '',
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetEventResult) {
				objGetEvent = jQuery.parseJSON(data.JSONGetEventResult);
				result = true;
			}
		}
	);
	return result;
}

function WSGetEvtFolio(pnAccID) {
	if (objGetEvtFolio != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGetEvtFolio',
		{
			'pnAccID' : pnAccID ? pnAccID : accId,
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetEvtFolioResult) {
				objGetEvtFolio = jQuery.parseJSON(data.JSONGetEvtFolioResult);
				result = true;
			}
		}
	);
	return result;
}

function WSGetExcFolio(pnAccID) {
	if (objGetExcFolio != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGetExcFolio',
		{
			'pnAccID' : pnAccID ? pnAccID : accId,
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetExcFolioResult) {
				objGetExcFolio = jQuery.parseJSON(data.JSONGetExcFolioResult);
				result = true;
			}
		}
	);
	return result;
}


function WSExcBooking(pnExcID, pnAdultTicket, pnChildTicket, pnAccID) {
	var result = false;
	SPMSCall(
		'JSONExcBooking',
		{
			'pnAccID' : pnAccID ? pnAccID : accId,
			'psUniqID' : (pnAccID ? pnAccID : accId) + '-' + Math.random(),
			'pnExcID' : pnExcID,
			'pnAdultTicket' : pnAdultTicket,
			'pnChildTicket' : pnChildTicket,
			'pnAdultPromoID' : 0,
			'pnChildPromoID' : 0,
//			'psLanguage' : '',
//			'psNotes' : '',
//			'psPin' : '',
//			'psSource' : '',
			'pbForceBooking' : false,
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONExcBookingResult) {
				obj = jQuery.parseJSON(data.JSONExcBookingResult);
				if (obj[0].accid == (pnAccID ? pnAccID : accId)) { result = true; }
			}
		}
	);
	return result;
}

function WSEvtBooking(pnEvtID, psPriceCategory, psPersonGroup, pnTicket, pnAccID) {
	var result = false;
	SPMSCall(
		'JSONEvtBooking',
		{
			'pnAccID' : pnAccID ? pnAccID : accId,
			'psUniqID' : (pnAccID ? pnAccID : accId) + '-' + Math.random(),
			'pnEvtID' : pnEvtID,
			'psPriceCategory' : psPriceCategory,
			'psPersonGroup' : psPersonGroup,
			'pnTicket' : pnTicket,
//			'psNotes' : '',
//			'psPin' : '',
//			'psSource' : '',
			'pbForceBooking' : false,
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONEvtBookingResult) {
				obj = jQuery.parseJSON(data.JSONEvtBookingResult);
				if (obj[0].accid == (pnAccID ? pnAccID : accId)) { result = true; }
			}
		}
	);
	return result;
}

function WSSPABooking(pnLocationID, pnTreatmentItem, pdDate, pnAccID) {
	var result = false;
	SPMSCall(
		'JSONSPABooking',
		{
			'pnAccID' : pnAccID ? pnAccID : accId,
			'pnLocationID' : pnLocationID,
			'pnTreatmentItem' : pnTreatmentItem,
			'pdDate' : pdDate,
//			'psNotes' : '',
//			'psPin' : '',
//			'psSource' : '',
			'pbForceBooking' : false,
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONSPABookingResult) {
				result = true;
//				obj = jQuery.parseJSON(data.JSONSPABookingResult);
//				if (obj[0].accid == accId) { result = true; }
			}
		}
	);
	return result;
}

function WSGetMessage(bg) {
	if (objGetMessage != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGetMessage',
		{
			'pnAccID' : accId,
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetMessageResult) {
				objGetMessage = jQuery.parseJSON(data.JSONGetMessageResult);
				result = true;
			}
		},
		null, null, bg
	);
	return result;
}


function WSUpdateMessageStatus(pnMsgID, pbDelivered) {
	var result = false;
	SPMSCall(
		'JSONUpdateMessageStatus',
		{
			'pnMsgID' : pnMsgID,
			'pbDelivered': pbDelivered,
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONUpdateMessageStatusResult) {
				result = true;
			}
		}
	);
	return result;
}


function WSGetCheckImage(pnMibID) {
	if (objGetCheckImage != null) { return true; }
	var result = false;
	SPMSCall(
		'JSONGetCheckImage',
		{
			'pnMibID' : pnMibID,
			'pbyImage': '',
			'psCheckImage': '',
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetCheckImageResult) {
				objGetCheckImage = jQuery.parseJSON(data.JSONGetCheckImageResult);
				result = true;
			}
		}
	);
	return result;
}

function WSGetPortInfo() {
	if (objGetPortInfo != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGetPortInfo',
		{
			'pnAccID' : accId,
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetPortInfoResult) {
				objGetPortInfo = jQuery.parseJSON(data.JSONGetPortInfoResult);
				result = true;
			}
		}
	);
	return result;
}

function WSGetSPALocation() {
	if (objGetSPALocation != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGetSPALocation',
		{
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetSPALocationResult) {
				objGetSPALocation = jQuery.parseJSON(data.JSONGetSPALocationResult);
				result = true;
			}
		}
	);
	return result;
}

function WSGetSPATreatmentGroup() {
	if (objGetSPATreatmentGroup != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGetSPATreatmentGroup',
		{
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetSPATreatmentGroupResult) {
				objGetSPATreatmentGroup = jQuery.parseJSON(data.JSONGetSPATreatmentGroupResult);
				result = true;
			}
		}
	);
	return result;
}

function WSGetSPATreatmentItem(pnSPALocation, psSPATreatmentGroup) {
	if (objGetSPATreatmentItem != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGetSPATreatmentItem',
		{
			'pnAccID' : accId,
			'pnSPALocation' : pnSPALocation,
			'psSPATreatmentGroup' : psSPATreatmentGroup,
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetSPATreatmentItemResult) {
				objGetSPATreatmentItem = jQuery.parseJSON(data.JSONGetSPATreatmentItemResult);
				result = true;
			}
		}
	);
	return result;	
}

function WSGetTreatmentAvailability(pnSPALocation, pnSPATreatmentItem) {
	if (objGetTreatmentAvailability != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONGetTreatmentAvailability',
		{
			'pnAccID' : accId,
			'pnSPALocation' : pnSPALocation,
			'pnSPATreatmentItem' : pnSPATreatmentItem,
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONGetTreatmentAvailabilityResult) {
				objGetTreatmentAvailability = jQuery.parseJSON(data.JSONGetTreatmentAvailabilityResult);
				result = true;
			}
		}
	);
	return result;	
}

function WSGetGroupInfo(pnGrpId) {
	if (objGetGroupInfo != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONWSFunction',
		{
			'psFunction' : 'GetGroupInfo',
			'psAccessCode' : 'A0B609D5F0500897D3AD376485F37AEB',
			'poParam' : [pnGrpId],
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONWSFunctionResult) {
				objGetGroupInfo = jQuery.parseJSON(data.JSONWSFunctionResult);
				result = true;
			}
		}
	);
	return result;	
}
/*
function WSGetItinerary3(pnAccId) {  // temporary replacement
	if (objGetItinerary != null) { return true; }

	var result = false;
	SPMSCall(
		'JSONWSFunction',
		{
			'psFunction' : 'GetItinerary',
			'psAccessCode' : '',
			'poParam' : [pnAccId ? pnAccId : accId],
			'psErrMsg' : ''
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			if (data.psErrMsg) { return ShowDialogAlert(data.psErrMsg); }
			if (data.JSONWSFunctionResult) {
				objGetItinerary = jQuery.parseJSON(data.JSONWSFunctionResult);
				result = true;
			}
		}
	);
	return result;	
}
*/
/* SilverWeb */

function WSSWAvail(RequestDate, Restaurant, MealPeriod, Guests) {
	if (objSWAvail != null) { return true; }

	var result = false;
	SilverWebCall(
		'SWAvail',
		{
			'TransactionID' : '1',
			'RequestDate' : RequestDate,
			'Ship' : 'NA',
			'Restaurant' : Restaurant,
			'MealPeriod' : MealPeriod,
			'Guests' : Guests,
			'GuestId' : '0'//accId
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = data.SWAvailResult;
			if (res.ResponseCode > 0) { return ShowDialogAlert(res.ResponseMessage); }
			objSWAvail = res.Availability;
			result = true;
		}
	);
	return result;	
}

function WSSWCalendar(RequestId) {
	if (objSWCalendar != null) { return true; }

	var result = false;
	SilverWebCall(
		'SWCalendar',
		{
			'TransactionID' : '1',
			'RequestType' : 'G',
			'RequestId' : RequestId ? RequestId : accId
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = data.SWCalendarResult;
			if (res.ResponseCode > 0) { return ShowDialogAlert(res.ResponseMessage); }
			objSWCalendar = res.Reservations;
			result = true;
		}
	);
	return result;	
}

// TODO
function WSSWBook(RequestDate, RequestTime, Restaurant, MealPeriod, Guests, GuestId, LastName, FirstName, Cabin, CruiseResId, Comments) {
//	if (objSWBook != null) { return true; }

	var result = false;
	SilverWebCall(
		'SWBook',
		{
			'TransactionID' : '1',
			'RequestDate' : RequestDate,
			'RequestTime' : RequestTime,
			'Ship' : 'NA', // shipId
			'Restaurant' : Restaurant,
			'MealPeriod' : MealPeriod,
			'Guests' : Guests,
			'GuestId' : GuestId ? GuestId : accId,
			'LastName' : LastName,
			'FirstName' : FirstName,
			'Cabin' : Cabin,
			'CruiseResId' : CruiseResId,
			'Comments' : Comments
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = data.SWBookResult;
			if (res.ResponseCode > 0) { return ShowDialogAlert(res.ResponseMessage); }
			objSWBook = res;
			result = true;
		}
	);
	return result;	
}

function WSSWCancel(ReservationId) {
//	if (objSWCancel != null) { return true; }

	var result = false;
	SilverWebCall(
		'SWCancel',
		{
			'TransactionID' : '1',
			'ReservationId' : ReservationId
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = data.SWCancelResult;
			if (res.ResponseCode > 0) { return ShowDialogAlert(res.ResponseMessage); }
//			objSWCancel = res.ResponseMessage;
			result = true;
		}
	);
	return result;	
}

function WSSWCommit(ReservationID, Guests) {
//	if (objSWCommit != null) { return true; }

	var result = false;
	SilverWebCall(
		'SWCommit',
		{
			'TransactionID' : '1',
			'ReservationID' : ReservationID,
			'Guests' : { 'Guest': Guests }
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = data.SWCommitResult;
			if (res.ResponseCode > 0) { return ShowDialogAlert(res.ResponseMessage); }
			result = true;
		}
	);
	return result;	
}

function WSSWRelease(ReservationId) {
//	if (objSWRelease != null) { return true; }

	var result = false;
	SilverWebCall(
		'SWRelease',
		{
			'TransactionID' : '1',
			'ReservationId' : ReservationId
		},
		function(data) {
			if (data.error) { return ShowDialogAlert(data.error); } // wrapper error
			var res = data.SWReleaseResult;
			if (res.ResponseCode > 0) { return ShowDialogAlert(res.ResponseMessage); }
//			objSWRelease = res;
			result = true;
		}
	);
	return result;	
}

/* DCL */

function WSDCLCustom(request) {
	var result = false;
	DCLCall(
		request,
		function(data) {
			result = $.xml2json(data);
		}
	);
	return result;
}



