/**
 * 使用此文件的js，必须在页面中载入jquery.js和common.js
 */
var ManageRoles = LD_Class.create();
/**
 * 注册一个角色管理的实例
 * @param instanceName 实例名称
 * @param array args ManageRoles构造函数参数
 * @return 实例对象
 */
ManageRoles.instanceNames = [];	//实例注册后存放的位置
ManageRoles.register = function(instanceName, args) {
	if (! this.instanceNames[instanceName]) {	//如果实例未被注册
		this.instanceNames[instanceName] = new ManageRoles(args);
	}
	return this.instanceNames[instanceName];
}

/**
 * 角色管理类
 */
ManageRoles.prototype = {
	options : {},
	state   : true,
	/**
	 * @param object options{ID, fieldID, elements, editClassName, readonlyClassName}
 	 *	int ID 记录ID
 	 *	jQuery or string elements  和数据库对应的input输入框
 	 *	string editClassName 编辑状态下input样式
 	 *	string readonlyClassName 只读状态下的input样式
	 *  string saveUrl	保存数据的路径
	 *  HTMLElement saveButton	保存数据的按钮
	 *  HTMLEelement cancelSaveButton 取消保存的按钮
	 */
	initialize : function(options) {
		jQuery.extend(this.options, options);
		if (jQuery.isString(this.options.elements)) this.options.elements = jQuery(this.options.elements);
		this.options.saveButton = jQuery(this.options.saveButton);
		this.options.cancelSaveButton = jQuery(this.options.cancelSaveButton);
	},
	
	/**
	 * 设置内容为可编辑状态
	 */
	setEditState : function(onSuccess) {
		this.options.elements.addClass(this.options.editClassName);	//设置input的样式为可输入的样式
		this.options.elements.removeClass(this.options.readonlyClassName);	//移状态input中只读状态的样式
		this.options.elements.attr('readonly', false);
		if (jQuery.isFunction(onSuccess)) onSuccess(this);
		return this;
	},
	
	/**
	 * 设置内容为可只读状态
	 */
	setReadOnlyState : function(onSuccess) {
		this.options.elements.addClass(this.options.readonlyClassName);	//设置input的样式为可只读状态的样式
		this.options.elements.removeClass(this.options.editClassName);	//移状态input中可编辑状态的样式
		this.options.elements.attr('readonly', true);
		if (jQuery.isFunction(onSuccess)) onSuccess(this);
		return this;
	},
	
	/**
	 * 保存数据
	 */
	save : function(onSuccess) {
		var _this = this;
		jQuery.post(this.options.saveUrl,
			jQuery.param(this.options.elements)+'&id='+this.options.ID,
			function(data) {
				if (data == 'ok') {
					alert('保存成功');
					_this.setReadOnlyState();
					_this.setSaveButtonEdit();	//设置保存按钮的文本为“编辑”
					_this.options.cancelSaveButton.css('display', 'none');	//隐藏取消保存按钮
					_this.state = true;
					if (jQuery.isFunction(onSuccess)) onSuccess(_this);
				} else {
					alert('保存失败');
				}
			}
		);
		return this;
	},
	
	cancelSave : function() {
		this.setReadOnlyState();
		this.options.cancelSaveButton.css('display', 'none');	//隐藏取消保存按钮
		this.setSaveButtonEdit();
		this.state = true;	//防止第二次点击“保存按钮”时，执行保存数据操作
	},
	
	/**
	 * 设置按钮的文本
	 */
	setButtonValue : function(elementButton, string) {
		element = jQuery(elementButton);
		if (element.get(0).tagName.toLowerCase() === 'input') {
			element.attr('value', string);
		} else {
			element.html(string);
		}
	},
	
	/**
	 * 设置保存按钮的文本为“编辑”
	 */
	setSaveButtonEdit : function() {
		this.setButtonValue(this.options.saveButton, '编辑');
	},
	
	/**
	 * 设置保存按钮的文本为“保存”
	 */
	setSaveButton : function() {
		this.setButtonValue(this.options.saveButton, '保存');
	},
	
	/**
	 * 如果内容为编辑状态，则执行保存，否则执行设置编辑状态
	 * @param function onSetEdit 设置为编辑状态后的回调函数
	 * @param funciton onSaveSuccess 保存成功后的回调函数
	 */
	toggle : function(onSetEdit, onSaveSuccess) {
		if (this.state) {
			this.setEditState(onSetEdit);
			this.setSaveButton();	//设置保存按钮的文本为“保存”
			this.options.cancelSaveButton.css('display', '');	//显示取消保存按钮
			this.state = false;
		} else {
			this.save(onSaveSuccess);
		}
		return this;
	}
}