if (DHL == undefined) var DHL = {};
if (DHL.SITE == undefined) DHL.SITE = {};
DHL.SITE.FMS_SHOWRESPONSE_HANDLE = function () {
	this.objMessageBox = null;
	this.objShowRegistration = null;
	this.ptCallback = null;
	this.ptBuyCallback = null;
	this.ptResponseCallback = null;
	this.arrExceptionCallback = new Object();
	this.intMessageKey = 2;
}

var PUBLIC = DHL.SITE.FMS_SHOWRESPONSE_HANDLE.prototype;
var PRIVATE = DHL.SITE.FMS_SHOWRESPONSE_HANDLE.prototype;


PUBLIC.setMessageBox = function(objMsgBox) {
	this.objMessageBox = objMsgBox;
}

PUBLIC.setCallback = function(ptCallback) {
	this.ptCallback = ptCallback;
}
PUBLIC.setBuyCallback = function(ptCallback) {
	this.ptBuyCallback = ptCallback;
}
PUBLIC.setResponseCallback = function(ptCallback) {
	this.ptResponseCallback = ptCallback;
}
PUBLIC.getShowRegistration = function() {
	return this.objShowRegistration;
}

PUBLIC.handleResponsePreprivatePopup = function (objShowRegistration) {
	this.objShowRegistration = objShowRegistration;
	var me = this;
	
	if(objShowRegistration.isSendPrivate()) {
		this.sendToPrivate(objShowRegistration);
	}
	else{
		
		var strException = objShowRegistration.getLastException();
		if (typeof(this.arrExceptionCallback[strException]) != 'undefined') {
			this.objMessageBox.hide();
			this.intMessageKey = objShowRegistration.getRegisterExceptionKey();
			this.arrExceptionCallback[strException]();
		} else {
			switch(strException) {
				case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_ALREADYINPRIVATE :
				case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_INFEATURE :
				case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_REQUIREAPRIVATE :
					this.sendToPrivate(objShowRegistration);
				break;
				case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_NOTENOUGHFUND :
				case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_INBREAK :
					this.objMessageBox.alert(
						objShowRegistration.getTitle(),
						objShowRegistration.getMessage(),
						objShowRegistration.getArrButton()
						);
				break;
				case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_REQUIRE_USER:
					this.objMessageBox.alert(
						objShowRegistration.getTitle(),
						objShowRegistration.getMessage(),
						objShowRegistration.getArrButton()
						);
				break;
				case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_CNMODEL_OFFLINE:
					this.objMessageBox.alert(
						objShowRegistration.getTitle(),
						objShowRegistration.getMessage()
					);
				break;
				default:
					//do nothing
					this.objMessageBox.alert(
						"An error occured, please try again later. "
					);
			}
		}
	}
	
}

PUBLIC.handleResponse = function (objShowRegistration) {
this.objShowRegistration = objShowRegistration;
	var me = this;
	this.objMessageBox.addListener(DHL.UTIL.MESSAGEBOX.EVENT_RESPONSE, function(objMessageBox){
		if(objMessageBox.getClientResponse()) {
			me.sendToPrivate(objShowRegistration)
		}
	});
	
	if(objShowRegistration.isSendPrivate()) {
		if(objShowRegistration.isShowMessage()) {
			this.objMessageBox.alert(
				objShowRegistration.getTitle(), 
				objShowRegistration.getMessage()
			);
		}
		else{
			this.sendToPrivate(objShowRegistration);
		}
	}
	else{
		
		var strException = objShowRegistration.getLastException();
		if (typeof(this.arrExceptionCallback[strException]) != 'undefined') {
			this.objMessageBox.hide();
			this.intMessageKey = objShowRegistration.getRegisterExceptionKey();
			this.arrExceptionCallback[strException]();
		} else {
			switch(strException) {
				case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_ALREADYINPRIVATE :
				case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_INFEATURE :
				case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_REQUIREAPRIVATE :
					this.sendToPrivate(objShowRegistration);
				break;
				case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_NOTENOUGHFUND :
				case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_INBREAK :
					this.objMessageBox.alert(
						objShowRegistration.getTitle(),
						objShowRegistration.getMessage(),
						objShowRegistration.getArrButton()
						);
				break;
				case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_REQUIRE_USER:
					this.objMessageBox.alert(
						objShowRegistration.getTitle(),
						objShowRegistration.getMessage(),
						objShowRegistration.getArrButton()
						);
				break;
				case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_CNMODEL_OFFLINE:
					this.objMessageBox.alert(
						objShowRegistration.getTitle(),
						objShowRegistration.getMessage()
					);
				break;
				default:
					//do nothing
					this.objMessageBox.alert(
						"An error occured, please try again later. "
					);
			}
		}
	}
}

PUBLIC.setExceptionCallBack = function(strShowRegistrationException, ptCallBack) {
	this.arrExceptionCallback[strShowRegistrationException] = ptCallBack;
}
	
PRIVATE.sendToPrivate = function (objShowRegistration) {
	if(objShowRegistration.isSendPrivate()) {
		this.ptCallback(this);	
	} else {
		switch(objShowRegistration.getLastException()) {
			case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_REQUIREAPRIVATE :
				objShowRegistration.setShowType("DHL_FMS_SHOW::PRIVATE");
				objShowRegistration.registerShow();
			break;
			case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_INFEATURE :
				objShowRegistration.setShowType("DHL_FMS_SHOW::FEATURED");
				objShowRegistration.registerShow();
			break;
			case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_ALREADYINPRIVATE :
				objShowRegistration.setShowType("DHL_FMS_SHOW::SEMIPRIVATE");
				objShowRegistration.registerShow();
			break;
			case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_NOTENOUGHFUND :
				if(this.ptBuyCallback != null) {
					this.ptBuyCallback();
				}
				else if(redirectToBuy){
					redirectToBuy();
				}
			break;
			case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_REQUIRE_USER:
				if(this.ptResponseCallback != null) {
					this.ptResponseCallback();
				} else if(typeof redirectToRegistration != 'undefined') {
					redirectToRegistration();
				} else if(typeof redirectToRegister != 'undefined') {
					redirectToRegister();
				} 
			break;
			case DHL.SITE.FMS_SHOWREGISTRATION.EXCEPTION_CNMODEL_OFFLINE:
				parent.document.location = parent.document.location;
			break;
		}
	}
}

