
if (dwr == null) var dwr = {};
if (dwr.engine == null) dwr.engine = {};
if (DWREngine == null) var DWREngine = dwr.engine;

dwr.engine._defaultPath = '/WebGW/albums';

var CM = {
	path: '/WebGW/albums',
	app: 'WebGW',
	simulated: false
}

/**
 * === Client Manager Interface ===
 */
CM.methods = {
	getUserCommunicationAddressTOs$AP :					['WebGWContactManager', 'getUserCommunicationAddressTOs', 'updateUserCommunicationAddresses'],
	getUserContactsTOs$AP :								['WebGWContactManager', 'getUserContactTOs', 'updateUserContactTOs'],
    getSubscriptionPackageData :                        ['WebGWUserManager', 'getSubscriptionPackageData', 'updateSubscriptionPackageData'],
    getPublicUserProfile$AP :							['WebGWContactManager', 'getPublicUserProfile', 'setPublicUserProfile'],
	contactUpdateRequest$add :							['WebGWContactManager', 'contactUpdateRequest', 'doAddContact'],
	contactUpdateRequest$update :						['WebGWContactManager', 'contactUpdateRequest', 'doUpdateContact'],
	contactUpdateRequest$delete :						['WebGWContactManager', 'contactUpdateRequest', 'doDeleteContacts'],
	acceptContactPrivilegeRequest$AP :					['WebGWContactManager', 'acceptContact', 'null'],
	blockContactPrivilegeRequest$AP :					['WebGWContactManager', 'blockContact', 'null'],
	updateCabinetDigitHeaders$updateDigitCaption :		['WebGWDigitManager', 'updateCabinetDigitHeaders', 'null'],
	sendDigit$AP :										['WebGWDigitManager', 'sendDigitRequest', 'doSendMessage'],
	forwardDigit$AP :									['WebGWDigitManager', 'forwardDigit', 'doSendMessage'],
	replyDigit$AP :										['WebGWDigitManager', 'reply', 'doSendMessage'],
	shareLink$AP :										['WebGWDigitManager', 'shareLinkRequest', 'doSendMessage'],
	forwardDigit$doSendToMyPhone :						['WebGWDigitManager', 'forwardDigit', 'doSendToMobile'],
	forwardDigit$doSendMusicToMyPhone :					['WebGWDigitManager', 'forwardDigit', 'doSendMusicToMyPhone'],
	forwardFromBackPack$AP :							['WebGWDigitManager', 'forwardDigitFromBackPack', 'doSendMessage'],
//	getMappingDigitsToLabels$AP :						['WebGWDigitManager', 'getMappingDigitsToLabels', 'setMappingDigitsToLabels'],
    moveDigits$AP :										['WebGWDigitManager', 'moveDigits', 'doUpdateCabinetDigitHeaders'],
    deleteDigitsFromAlbum$AP :							['WebGWDigitManager', 'deleteDigitsFromAlbum', 'doUpdateCabinetDigitHeaders'],
	updateCabinetDigitHeaders$AP :						['WebGWDigitManager', 'updateCabinetDigitHeaders', 'doUpdateCabinetDigitHeaders'],
	updateCabinetDigitHeaders$emptyTrash :				['WebGWDigitManager', 'updateCabinetDigitHeaders', 'doEmptyTrash'],
	updateCabinetDigitHeaders$deleteMessages :			['WebGWDigitManager', 'updateCabinetDigitHeaders', 'doDeleteMessages'],
	updateCabinetDigitHeaders$undoMoveToTrash :			['WebGWDigitManager', 'updateCabinetDigitHeaders', 'doUndoMoveToTrash'],
	copyDigitsFromInboxToBackpack$AP :					['WebGWDigitManager', 'copyDigitsFromInboxToBackpack', 'doUpdateCabinetDigitHeaders'],
	updateCabinetDigitHeaders$postRotateDigit :			['WebGWDigitManager', 'updateCabinetDigitHeaders', 'postRotateDigit'],
	cropImage$AP :										['WebGWImageEditingManager', 'cropImage', 'doCropImage'],
	removeLabel$AP :									['WebGWLabelManager', 'removeLabel', 'updateAlbumListAfterRemoveAlbum'],
	getUserAlbums$renderAlbumsListPage :				['WebGWLabelManager', 'getUserAlbums', 'renderAlbumsListPage'],
	getUserAlbums$FirstLoadUserAlbums :					['WebGWLabelManager', 'getUserAlbums', 'getFirstLoadUserAlbums'],
/*	getUserAlbums$FirstLoadAllDigits :					['WebGWLabelManager', 'getUserAlbums', 'getFirstLoadAllDigits'],*/
	getUserAlbums$FirstLoadDigits :						['WebGWLabelManager', 'getUserAlbums', 'getFirstLoadDigits'],
	getUserAlbums$refreshAlbumDigitsList :				['WebGWLabelManager', 'getUserAlbums', 'refreshAlbumDigitsList'],
	getUserAlbums$renderAlbumList :						['WebGWLabelManager', 'getUserAlbums', 'renderAlbumList'],
	getUserAlbums$setAlbumCover :						['WebGWLabelManager', 'getUserAlbums', 'doSetAlbumCover'],
	getPublicAlbums$renderPublicAlbumsList :			['WebGWLabelManager', 'getPublicAlbums', 'renderPublicAlbumsList'],
	getPublicAlbums$FirstLoadPublicAlbums :				['WebGWLabelManager', 'getPublicAlbums', 'getFirstLoadPublicAlbums'],
/*	getPublicAlbums$FirstLoadAllPublicDigits :			['WebGWLabelManager', 'getPublicAlbums', 'getFirstLoadAllPublicDigits'],*/
	getPublicAlbums$FirstLoadPublicDigits :				['WebGWLabelManager', 'getPublicAlbums', 'getFirstLoadPublicDigits'],
	getPublicAlbums$handlePublicAlbumsUrl :				['WebGWLabelManager', 'getPublicAlbums', 'handlePublicAlbumsUrl'],
	getPublicAlbums$extractAlbumTO :					['WebGWLabelManager', 'getPublicAlbums' , 'extractAlbumTO'],
	getPublicAlbums$amExtractAlbumTO :					['WebGWLabelManager', 'getPublicAlbums' , 'amExtractAlbumTO'],
    getPublicAlbums$getPublicAlbumAsAttachment:         ['WebGWLabelManager', 'getPublicAlbums' , 'getPublicAlbumAsAttachment'],
    createNewLabel$updateAlbumListAfterAdd :			['WebGWLabelManager', 'createNewLabel', 'updateAlbumListAfterAdd'],
	createNewLabel$updateAlbumList_and_moveTo :			['WebGWLabelManager', 'createNewLabel', 'updateAlbumList_and_moveTo'],
/*	createNewLabel$updateAlbumList_and_moveTo_single :	['WebGWLabelManager', 'createNewLabel', 'updateAlbumList_and_moveTo_single'],*/
/*	createNewLabel$updateAlbumList_and_open_upload :	['WebGWLabelManager', 'createNewLabel', 'updateAlbumList_and_open_upload'],*/
	updateLabel$AP :									['WebGWLabelManager', 'updateLabel', 'updateAlbumList'],
	updateLabel$setAlbumCover :							['WebGWLabelManager', 'updateLabel', 'updateAlbumsListAndSetAlbumCover'],
	getTriplayLoginResponse$AP :						['WebGWSessionManager', 'getTriplayLoginResponse', 'updateLoginResponse'],
	login$AP :											['WebGWSessionManager', 'login', 'doLogin'],
	logout$AP :											['WebGWSessionManager', 'logout', 'logout'],
	getPublicAlbumUrlInfo$AP :							['WebGWSessionManager', 'getPublicAlbumUrlInfo', 'setPublicAlbumUrlInfo'],
	setRedirectURL$AP :									['WebGWSessionManager', 'setRedirectURL', 'doSetRedirectURL'],
	setPresenceState$AP :								['WebGWSettingsManager', 'setPresenceState', 'callbackPhoneState'],
	setPresenceState$logout :							['WebGWSettingsManager', 'setPresenceState', 'logout'],
	setPresenceStateFromSettings$AP :					['WebGWSettingsManager', 'setPresenceState', 'callbackFromSettingsPhoneState'],
	getUserStorageInfo$AP :								['WebGWStorageManager', 'getUserStorageInfo', 'updateUserStorageInfo'],
	sendApplicationToMobile$AP :						['WebGWUserManager', 'sendApplicationToMobile', 'doSendApplicationToMobile'],
	isUserNameExist$AP :								['WebGWUserManager', 'isUserNameExist', 'doUserNameExist'],
	isNumberRegistered$AP :								['WebGWUserManager', 'isNumberRegistered', 'doNumberRegistered'],
	isNumberRegistered$addContact :						['WebGWUserManager', 'isNumberRegistered', 'addContact'],
	sendRegistrationCode$AP :							['WebGWUserManager', 'sendRegistrationCode', 'null'],
	triplayRegistration$AP :							['WebGWUserManager', 'triplayRegistration', 'doRegister'],
	SendForPassword$AP :								['WebGWUserManager', 'forgotMyPassword', 'doSendPassword'],
	isRegistrationCodeValid$AP :						['WebGWUserManager', 'isRegistrationCodeValid', 'doCheckActivationCode'],
	reportBlockContent$AP :								['WebGWContentManager', 'reportBlockContent', 'doReportBlockContent'],
	getClientResponse$AP :								['WebGWNotificationManager', 'getClientResponse', 'notificationsHandler'],
	getClientPublicResponse$AP :						['WebGWNotificationManager', 'getClientPublicResponse', 'doKeepAlive'],
	getConversation$doOpenContab :						['WebGWDigitManager', 'getConversation', 'gDigitsCacheManager.cacheDigits', 'doOpenContab'],
	getDigits$doOpenContab :							['WebGWDigitManager', 'getDigits', 'gDigitsCacheManager.cacheDigits', 'doOpenContab'],
	getConversation$renderActivityMonitor :				['WebGWDigitManager', 'getConversation', 'gDigitsCacheManager.cacheDigits', 'renderActivityMonitor'],

	/* getDigits labels */
	cacheDigits$renderActivityMonitor : 				['WebGWDigitManager', 'getConversation', 'gDigitsCacheManager.cacheDigits', 'renderActivityMonitor'],
	cacheDigits$renderContab : 							['WebGWDigitManager', 'getConversation', 'gDigitsCacheManager.cacheDigits', 'renderContab'],
	cacheDigits$renderTrashContab : 					['WebGWDigitManager', 'getDigits', 'gDigitsCacheManager.cacheDigits', 'renderContab'],
	cacheDigits$renderAlbumPage : 						['WebGWDigitManager', 'getDigits', 'gDigitsCacheManager.cacheDigits', 'renderAlbumPage'],
	cacheDigits$showMusicAlbum : 						['WebGWDigitManager', 'getDigits', 'gDigitsCacheManager.cacheDigits', 'showMusicAlbum'],
	cacheDigits$setPrevThumb : 							['WebGWDigitManager', 'getDigits', 'gDigitsCacheManager.cacheDigits', 'setPrevThumb'],
	cacheDigits$setNextThumb : 							['WebGWDigitManager', 'getDigits', 'gDigitsCacheManager.cacheDigits', 'setNextThumb'],
	cacheDigits$getFirstLoadDigit : 					['WebGWDigitManager', 'getDigits', 'gDigitsCacheManager.cacheDigits', 'getFirstLoadDigit'],
	cacheDigits$getFirstLoadPublicDigit : 				['WebGWDigitManager', 'getPublicDigits', 'gDigitsCacheManager.cacheDigits', 'getFirstLoadPublicDigit'],
	cacheDigits$renderPublicDigitPage : 				['WebGWDigitManager', 'getPublicDigits', 'gDigitsCacheManager.cacheDigits', 'renderPublicDigitPage'],
	cacheDigits$renderPublicAlbumPage : 				['WebGWDigitManager', 'getPublicDigits', 'gDigitsCacheManager.cacheDigits', 'renderPublicAlbumPage'],
	cacheDigits$renderMusicPreview : 					['WebGWDigitManager', 'getDigits', 'gDigitsCacheManager.cacheDigits', 'renderMusicPreview'],
	cacheDigits$renderRecentlyRecived :					['WebGWDigitManager', 'getDigits', 'gDigitsCacheManager.cacheDigits', 'renderRecentlyRecived'],
    cacheDigits$renderGreetings :					    ['WebGWDigitManager', 'getDigits', 'gDigitsCacheManager.cacheDigits', 'renderGreetings'],
    cacheDigits$doOpenMessage :							['WebGWDigitManager', 'getConversation', 'gDigitsCacheManager.cacheDigits', 'doOpenMessage'],

	setMessageReadFlag$AP :								['WebGWDigitManager', 'updateMessageReadFlag', 'null'],

	getDigitAttachementsAsLinks$AP :					['WebGWDigitManager', 'getDigitAttachementsAsLinks', 'setEmailAttachments'],
	getDigitAttachementsAsLinks$hasAttachment:			['WebGWDigitManager', 'getDigitAttachementsAsLinks', 'messegeHasAttachment'],
	leaveTheService$AP :								['WebGWUserManager', 'leaveService', 'doLeaveTheService'],
	resendPrivilegeRequestToSelf$AP :					['WebGWContactManager', 'resendPrivilegeRequestToSelf', 'null'],

	updateCabinetDigitHeaders$doSetMessageReadFlag :	['WebGWDigitManager', 'updateCabinetDigitHeaders', 'null'],

	_empty : []
}

/** general request sender - single exit point */
CM.sendRequest = function() {
	var args = this.toArray(arguments);
	if (args.length == 0){
		throw new Error("Error: missing label for request.");
	}
	var rlabel = args.shift();
	if (typeof gLoader == "object" && gUserState != 'PUBLIC') gLoader.showLoader(rlabel);
	var rlabelArr = this.getLabelArray(rlabel);
	var clss = rlabelArr[0];
	var method = rlabelArr[1];
	if (!this.simulated){
		DWREngine._execute(this.path, clss, method, this.handleResponse, rlabel, args);
	} else {
		 var param = '';
		if (args) param = '["'+args.shift()+'"]';
		var str = clss+"."+method+param;
		this.handleResponse(rlabel, eval(str));
	}
}

/** simulate request - get local data */
CM.simulateRequest = function(){
	this.simulated = true;
	this.sendRequest.apply(this, arguments);
	this.simulated = false;
}

/** general response handler - single entry point */
CM.handleResponse = function(rlabel, reply){
	if (typeof gLoader == "object" && gUserState != 'PUBLIC') gLoader.hideLoader(rlabel);
	var rlabelArr = CM.getLabelArray(rlabel);
	var callback;
	for (var ai=2; ai<rlabelArr.length; ai++){
		try { callback = eval(rlabelArr[ai]); } catch(e){}
		if (callback && callback instanceof Function){
			callback(reply, rlabel);
		}
		if (rlabelArr[ai] == 'gDigitsCacheManager.cacheDigits') return;	// cacheDigits handles calling the rest of the callbacks so don't call them here
	}
	// add history handling here
}

CM.toArray = function (list){
	var arr = [];
	for (var i=0, len=list.length; i<len; i++){
		arr[i] = list[i];
	}
	return arr;
}
CM.getLabelArray = function(rlabel){
	var arr = this.methods[rlabel];
	if (!rlabel || !(arr instanceof Array) || arr.length<3){
		throw new Error("Error: bad label when trying to send request: "+rlabel);
	}
	return arr;
}
CM.handleDwrException = function(message, ex){
	if (typeof gLoader == "object" && gUserState != 'PUBLIC') gLoader.hideLoader('');
	if (ex){
		switch (ex.errorType){
			case "NO_SESSION_FOUND":
				if (typeof beforeLogout != 'undefined') beforeLogout();
//				switchToPublicPage(null, null, false);
				break;
		}
	}
}

DWREngine.setErrorHandler(CM.handleDwrException);
