"use strict";

/* docscoapicommon.js
 *
 * Author: Alexander.Trofimov
 * Date: 09.11.12
 */
(	/**
	 * @param {Window} window
	 * @param {undefined} undefined
	 */
	function (window, undefined) {
		/*
		 * Import
		 * -----------------------------------------------------------------------------
		 */
		var asc = window["Asc"] ? window["Asc"] : (window["Asc"] = {});
		var prot;
		
		/**
		 * Класс user для совместного редактирования/просмотра документа
		 * -----------------------------------------------------------------------------
		 *
		 * @constructor
		 * @memberOf Asc
		 */
		function asc_CUser (val) {
			this.id				= null;					// уникальный id - пользователя
			this.userName		= null;					// имя пользователя
			this.state			= undefined;			// состояние (true - подключен, false - отключился)
			this.indexUser		= -1;					// Индекс пользователя (фактически равно числу заходов в документ на сервере)
			this.color			= null;					// цвет пользователя
			this.view			= false;				// просмотр(true), редактор(false)

			this._setUser(val);
			return this;
		}

		asc_CUser.prototype._setUser = function (val) {
			if (val) {
				this.id = val['id'];
				this.userName = val['username'];
				this.indexUser = val['indexUser'];
				this.color = c_oAscArrUserColors[this.indexUser % c_oAscArrUserColors.length];
				this.state = val['state'];
				this.view = val['view'];
			}
		};
		asc_CUser.prototype.asc_getId = function () { return this.id; };
		asc_CUser.prototype.asc_getUserName = function () { return this.userName; };
		asc_CUser.prototype.asc_getState = function () { return this.state; };
		asc_CUser.prototype.asc_getColor = function () { return '#' + ('000000' + this.color.toString(16)).substr(-6); };
		asc_CUser.prototype.asc_getColorValue = function () { return this.color; };
		asc_CUser.prototype.asc_getView = function () { return this.view; };
		asc_CUser.prototype.asc_setId = function (val) { this.id = val; };
		asc_CUser.prototype.asc_setUserName = function (val) { this.userName = val; };
		asc_CUser.prototype.asc_setState = function (val) { this.state = val; };
		asc_CUser.prototype.asc_setColor = function (val) { this.color = val; };
		
		/*
		 * Export
		 * -----------------------------------------------------------------------------
		 */
		window["Asc"]["asc_CUser"] = window["Asc"].asc_CUser = asc_CUser;
		prot = asc_CUser.prototype;
		prot["asc_getId"]				= prot.asc_getId;
		prot["asc_getUserName"]			= prot.asc_getUserName;
		prot["asc_getState"]			= prot.asc_getState;
		prot["asc_setId"]				= prot.asc_setId;
		prot["asc_getColor"]			= prot.asc_getColor;
		prot["asc_getColorValue"]		= prot.asc_getColorValue;
		prot["asc_getView"]				= prot.asc_getView;
		prot["asc_setUserName"]			= prot.asc_setUserName;
		prot["asc_setState"]			= prot.asc_setState;
		prot["asc_setColor"]			= prot.asc_setColor;
	}
)(window);

var ConnectionState = {
	Reconnect	: -1,	// reconnect state
	None		: 0,	// not initialized
	WaitAuth	: 1,	// waiting session id
	Authorized	: 2,	// authorized
	Closed		: 3,	// closed

	SaveChanges	: 4		// save
};