jiyiri.register_namespace('jiyiri.page.reminder');

/* jiyiri.require_once('jiyiri.helper.eventhelper.eventhelper'); */
/* jiyiri.require_once('jiyiri.helper.net.ajax'); */
/* jiyiri.require_once('jiyiri.helper.htmlelementhelper.htmlelementhelper'); */
/* jiyiri.require_once('jiyiri.helper.validatehelper.data_validate'); */
/* jiyiri.require_once('jiyiri.ui.dialog'); */
/* jiyiri.require_once('jiyiri.ui.beautifier'); */
/* jiyiri.require_once('jiyiri.ui.pager.simplepager'); */
/* jiyiri.require_once('jiyiri.date.output'); */
/* jiyiri.require_once('jiyiri.data.reminder.categorydatamanager'); */
/* jiyiri.require_once('jiyiri.data.reminder.reminderdatamanager'); */
jiyiri.require_once('jiyiri.page.common.ProductPicturePath');

jiyiri
		.require_file(__APP__ + '/Reminder/LoadBirthdayCategories?var_name=_birthday_categories');
jiyiri
		.require_file(__APP__ + '/Reminder/LoadCommemoCategories?var_name=_commemo_categories');
jiyiri
		.require_file(__APP__ + '/Reminder/IndexWidgetsInfo?var_name=_index_widgets_info');

( function() {

	var _action_name = 'Reminder';
	/* Codes Start Here */
	var IndexPage = Class.create();
	IndexPage._insatance = null;
	IndexPage.GetInstance = function() {
		if (null == IndexPage._instance) {
			IndexPage._instance = new IndexPage();
		}
		return IndexPage._instance;
	};

	IndexPage.prototype = {
		initialize : function() {
			this.create_time = new Date().getTime();
			this.category_manager = CategoryManager.GetInstance();
			this.reminder_manager = ReminderManager.GetInstance();
			this.state_manager = StateManager.GetInstance();
			this.widget_manager = WidgetsManager.GetInstance();
			this._add_reminder_button = $('add_reminder_button');
		},

		init_show : function() {

            //jiyiri.ui.Beautifier.get_beautifier().handle_element($('data_table_select_all_checkbox'));

			this._add_reminder_button.onclick = jiyiri.helper.eventhelper.EventHelper
					.create_event_function(this, 'add_reminder_button_onclick');
			;

			this._data_loader_init
					.set_callback(jiyiri.helper.eventhelper.EventHelper
							.create_callback_function(this, '_on_init_complete'));
			this._data_loader_init.execute();
			this._toggle_loading(true);
			this.widget_manager.init_show();
		},
		reload : function() {
			this._data_loader_reload
					.set_callback(jiyiri.helper.eventhelper.EventHelper
							.create_callback_function(this,
									'_on_reload_complete'));
			this._data_loader_reload.execute();
			//this._toggle_loading(true);
			this.widget_manager.reload();
		},
		update : function(type, id) {
			this.reminder_manager.update_single(type, id);
		},
		move_to_recycle : function(type, id) {
			this.reminder_manager.recycle_single(type, id);
		},
		move_to_normal : function(type, id) {
			this.reminder_manager.normal_single(type, id);
		},
		del : function(type, id) {
			this.reminder_manager.delete_single(type, id);
		},
		jump_page : function(page) {
			this._toggle_loading(true);
			this.state_manager.set_page(page);
			this._resume();
			this._toggle_loading(false);
		},
		add_reminder_button_onclick : function() {
			jiyiri.ui.Dialog.GetInstance().show(__APP__ + '/' + _action_name + '/Create');
		},
		on_create_dialog_add:function(rst_param)
        {
			if(rst_param)
			{
				if(rst_param['added_reminder'])
				{
					var merge_obj = {	type:'ADD',
										reminder_type:rst_param['added_type']=='BIRTHDAY' ? 'BIRTHDAY' : 'COMMEMO',
										data:rst_param['added_reminder']
									};
					this.reminder_manager.on_change(merge_obj);
				}
				if(rst_param['reload'])
				{
					this.reload();
				}
			}
        },
        on_create_dialog_close:function(rst_param)
        {
			if(rst_param)
			{
				if(rst_param['added_reminder'])
				{
					var merge_obj = {	type:'ADD',
										reminder_type:rst_param['added_type']=='BIRTHDAY' ? 'BIRTHDAY' : 'COMMEMO',
										data:rst_param['added_reminder']
									};
					this.reminder_manager.on_change(merge_obj);
				}
				if(rst_param['reload'])
				{
					this.reload();
				}
			}
        },
		_data_loader_reload : ( function() {
			var loader = {
				_on_complete : null
			};
			loader.set_callback = function(callback) {
				this._on_complete = callback;
			};
					loader.item_load_complete_birthday_category = function() {
						jiyiri.data.reminder.CategoryDataManager.commemo
								.load_categories(jiyiri.helper.eventhelper.EventHelper
										.create_callback_function(this,
												'item_load_complete_commemo_category'));
					},
					loader.item_load_complete_commemo_category = function() {

						jiyiri.data.reminder.ReminderDataManager.birthday
								.load_reminders(jiyiri.helper.eventhelper.EventHelper
										.create_callback_function(this,
												'item_load_complete_birthday_reminder'));
					};
			loader.item_load_complete_birthday_reminder = function() {
				jiyiri.data.reminder.ReminderDataManager.commemo
						.load_reminders(jiyiri.helper.eventhelper.EventHelper
								.create_callback_function(this,
										'item_load_complete_commemo_reminder'));
			};
			loader.item_load_complete_commemo_reminder = function() {
				this._load_complete();
			};
			loader._load_complete = function() {
				if (null !== this._on_complete) {
					this._on_complete();
				}
			};
			/*loader.execute = function() {
				jiyiri.data.reminder.CategoryDataManager.birthday
						.load_categories(jiyiri.helper.eventhelper.EventHelper
								.create_callback_function(this,
										'item_load_complete_birthday_category'));

			};*/
			loader.execute = function() {
				jiyiri.data.reminder.CategoryDataManager.birthday
						.load_categories(jiyiri.helper.eventhelper.EventHelper
								.create_callback_function(this,
										'_load_complete'));

			};

			return loader;
		})(),
		_data_loader_init : ( function() {
			var loader = {
				_on_complete : null
			};
			loader.set_callback = function(callback) {
				this._on_complete = callback;
			};
			loader.item_load_complete_birthday_reminder = function() {
				jiyiri.data.reminder.ReminderDataManager.commemo
						.load_reminders(jiyiri.helper.eventhelper.EventHelper
								.create_callback_function(this,
										'item_load_complete_commemo_reminder'));
			};
			loader.item_load_complete_commemo_reminder = function() {
				this._load_complete();
			};
			loader._load_complete = function() {
				if (null !== this._on_complete) {
					this._on_complete();
				}
			};
			loader.execute = function() {
				jiyiri.data.reminder.ReminderDataManager.birthday
						.load_reminders(jiyiri.helper.eventhelper.EventHelper
								.create_callback_function(this,
										'item_load_complete_birthday_reminder'));

			};

			return loader;
		})(),
		_on_init_complete : function() {

			this.category_manager.init_show();
			this.reminder_manager.init_show();
			this._show_default();
			this._toggle_loading(false);
		},
		_on_reload_complete : function() {
			this.category_manager.init_show();
			this.reminder_manager.init_show();
			this._resume();
			this._toggle_loading(false);
		},
		_resume : function() {
			var state = this.state_manager.get_state();
			if (state.category_type == 'ALL') {

				this.category_manager.load_all();
				this.reminder_manager.show_all_reminders(state.page);
			} else if (state.category_type == 'BIRTHDAY') {
				this.category_manager.load_birthdays(state.category_id);
				if (state.category_id) {
					this.reminder_manager.show_birthday_reminders_by_category(
							state.category_id, state.page);
				} else {
					this.reminder_manager
							.show_birthday_reminders_all(state.page);
				}
			} else if (state.category_type == 'COMMEMO') {
				this.category_manager.load_commemos(state.category_id);
				if (state.category_id) {
					this.reminder_manager.show_commemo_reminders_by_category(
							state.category_id, state.page);
				} else {
					this.reminder_manager
							.show_commemo_reminders_all(state.page);
				}
			} else if (state.category_type == 'RECYCLE') {
				this.category_manager.load_recycles();
				this.reminder_manager.show_recycle_reminders(state.page);
			} else {
				throw new Error(
						'Can not parse state:#' + state.category_type + '#');
			}

		},
		_toggle_loading : function(is_show) {
			if (is_show) {
				Element.hide('reminder_area_datatable');
				Element.show('reminder_area_waiting');
			} else {
				Element.show('reminder_area_datatable');
				Element.hide('reminder_area_waiting');
			}
		},
		_show_default : function() {
			this.category_manager.load_all();
		}
	};

	var StateManager = Class.create();
	StateManager._instance = null;
	StateManager.GetInstance = function() {
		if (null == StateManager._instance) {
			StateManager._instance = new StateManager();
		}
		return StateManager._instance;
	};
	StateManager.prototype = {
		initialize : function() {
			this.init_state();
		},
		init_state : function() {
			this._state = {};
			this._state.category_type = null;
			this._state.category_id = null;
			this._state.page = null;
		},
		set_state : function(value) {
			this._state = value;
		},
		set_category_type : function(value) {
			this._state.category_type = value;
		},
		set_category_id : function(value) {
			this._state.category_id = value;
		},
		set_page : function(value) {
			this._state.page = value;
		},
		get_state : function() {
			var rtnstate = {};
			rtnstate.category_type = this._state.category_type;
			rtnstate.category_id = this._state.category_id;
			rtnstate.page = this._state.page;
			return rtnstate;
		}
	};

	var CategoryManager = Class.create();
	CategoryManager._insatance = null;
	CategoryManager.GetInstance = function() {
		if (null == CategoryManager._instance) {
			CategoryManager._instance = new CategoryManager();
		}
		return CategoryManager._instance;
	};

	CategoryManager.prototype = {
		initialize : function() {
			this._container = $('category_area_container');
			this._all_list = $('category_area_all_list');
			this._birthday_list = $('category_area_birthday_list');
			this._commemo_list = $('category_area_commemo_list');
			this._recycle_list = $('category_area_recycle_list');
			this._btn_load_all = $('category_area_btn_loadall_all');
			this._btn_load_birthdays = $('category_area_btn_loadall_birthday');
			this._btn_load_commemos = $('category_area_btn_loadall_commemo');
			this._btn_load_recycles = $('category_area_btn_loadall_recycle');

			this._data_manager = jiyiri.data.reminder.CategoryDataManager;
			this._data_manager.birthday.set_categories(_birthday_categories);
			this._data_manager.commemo.set_categories(_commemo_categories);

		},
		init_show : function() {
			this._btn_load_all.onclick = jiyiri.helper.eventhelper.EventHelper
					.create_event_function(this, 'load_all');
			this._btn_load_birthdays.onclick = jiyiri.helper.eventhelper.EventHelper
					.create_event_function(this, 'load_birthdays');
			this._btn_load_commemos.onclick = jiyiri.helper.eventhelper.EventHelper
					.create_event_function(this, 'load_commemos');
			this._btn_load_recycles.onclick = jiyiri.helper.eventhelper.EventHelper
					.create_event_function(this, 'load_recycles');

			this._draw_birthday_categories();
			this._draw_commemo_categories();
			this._fill_reminder_count_in_page();
		},

		load_all : function() {
			this._clear_current();
			this._make_current(this._btn_load_all);
			IndexPage.GetInstance().reminder_manager.show_all_reminders();
			IndexPage.GetInstance().state_manager.set_category_type('ALL');
			IndexPage.GetInstance().state_manager.set_category_id(null);
		},
		load_birthdays : function(category_id) {
			this._clear_current();
			if (category_id === undefined) {
				this._make_current(this._btn_load_birthdays);
				IndexPage.GetInstance().reminder_manager
						.show_birthday_reminders_all();
			} else {
				this._make_current($('category_area_birthday_item_' + category_id));
				IndexPage.GetInstance().reminder_manager
						.show_birthday_reminders_by_category(category_id);
			}

			IndexPage.GetInstance().state_manager.set_category_type('BIRTHDAY');
			IndexPage.GetInstance().state_manager.set_category_id(category_id);

		},
		load_commemos : function(category_id) {
			this._clear_current();
			if (category_id === undefined) {
				this._make_current(this._btn_load_commemos);
				IndexPage.GetInstance().reminder_manager
						.show_commemo_reminders_all();
			} else {
				this
						._make_current($('category_area_commemo_item_' + category_id));
				IndexPage.GetInstance().reminder_manager
						.show_commemo_reminders_by_category(category_id);
			}

			IndexPage.GetInstance().state_manager.set_category_type('COMMEMO');
			IndexPage.GetInstance().state_manager.set_category_id(category_id);

		},
		load_recycles : function() {
			this._clear_current();
			this._make_current(this._btn_load_recycles);

			IndexPage.GetInstance().reminder_manager.show_recycle_reminders();

			IndexPage.GetInstance().state_manager.set_category_type('RECYCLE');
			IndexPage.GetInstance().state_manager.set_category_id(null);
		},
		_draw_birthday_categories : function() {
			var all_birthday_count = 0;
			var categories = this._data_manager.birthday
					.get_all_parent_categories();
			this._clean_birthday_categories_list();
			for ( var i = 0; i < categories.length; i++) {
				var category = categories[i];
				var count = jiyiri.data.reminder.ReminderDataManager.birthday.count_reminders_by_category_id(category.Id);
				all_birthday_count += count;
				var is_last = (i==categories.length-1);
				if(category.Id>0 || count>0)
				{
					this._draw_birthday_categories_item(category);
				}
			}
			var lis = this._birthday_list.getElementsByTagName('li');
			lis[lis.length-1].className = 'cat-bottom';
			$('category_area_all_birthday_count').innerHTML = '('+all_birthday_count+')';
		},
		_clean_birthday_categories_list : function() {
			var list = Element.childElements(this._birthday_list);
			for ( var i = 1; i < list.length; i++) {
				Element.remove(list[i]);
			}
		},
		_draw_birthday_categories_item : function(category) {
			var item = document.createElement('li');
			item.id = 'category_area_birthday_item_' + category.Id;
			var count = jiyiri.data.reminder.ReminderDataManager.birthday.count_reminders_by_category_id(category.Id);
			var html = '';
			html += '<a ';
			html += 'href="javascript:void(0);"';
			html += 'onclick="jiyiri.page.reminder.IndexPage.GetInstance().category_manager.load_birthdays(' + category.Id + ');return false;"';
			html += '>' + category.Name + '</a>';
			html += '<span>(' + count + ')</span>';
			item.innerHTML = html;
			this._birthday_list.appendChild(item);
		},
		_draw_commemo_categories : function() {
			var all_commemo_count = 0;
			var categories = this._data_manager.commemo
					.get_all_parent_categories();
			this._clean_commemo_categories_list();
			for ( var i = 0; i < categories.length; i++) {
				var category = categories[i];
				var count = jiyiri.data.reminder.ReminderDataManager.commemo.count_reminders_by_category_id(category.Id);
				all_commemo_count += count;
				if(category.Id>0 || count>0)
				{
					this._draw_commemo_categories_item(category);
				}
			}
			var lis = this._commemo_list.getElementsByTagName('li');
			lis[lis.length-1].className = 'cat-bottom';
			$('category_area_all_commemo_count').innerHTML = '('+all_commemo_count+')';
		},
		_clean_commemo_categories_list : function() {
			var list = Element.childElements(this._commemo_list);
			for ( var i = 1; i < list.length; i++) {
				Element.remove(list[i]);
			}
		},
		_draw_commemo_categories_item : function(category) {
			var item = document.createElement('li');
			item.id = 'category_area_commemo_item_' + category.Id;
			var count = jiyiri.data.reminder.ReminderDataManager.commemo.count_reminders_by_category_id(category.Id);
			var html = '';
			html += '<a ';
			html += 'href="javascript:void(0);"';
			html += 'onclick="jiyiri.page.reminder.IndexPage.GetInstance().category_manager.load_commemos(' + category.Id + ');return false;"';
			html += '>' + category.Name + '</a>';
			html += '<span>(' + count + ')</span>';
			item.innerHTML = html;
			this._commemo_list.appendChild(item);
		},
		_fill_reminder_count_in_page:function()
		{
			var all_count = jiyiri.data.reminder.ReminderDataManager.all.count_all_reminders();
			var recycle_count = jiyiri.data.reminder.ReminderDataManager.all.count_recycle_reminders();
			$('category_area_all_reminder_count').innerHTML = '('+all_count+')';
			$('category_area_recycle_count').innerHTML = '('+recycle_count+')';
		},
		_clear_current : function() {
			var elements = this._container.getElementsByTagName('a');
			for ( var i = 0; i < elements.length; i++) {
				Element.removeClassName(elements[i], 'current');
			}
		},
		_make_current : function(ele) {
			ele = ele.tagName.toUpperCase() == 'A' ? ele : ele.getElementsByTagName('a')[0];
			ele.addClassName('current');
		}
	};

	var ReminderManager = Class.create();
	ReminderManager._insatance = null;
	ReminderManager.GetInstance = function() {
		if (null == ReminderManager._instance) {
			ReminderManager._instance = new ReminderManager();
		}
		return ReminderManager._instance;
	};

	ReminderManager.prototype = {
		initialize : function() {

			this._data_table = $('reminder_area_datatable');
			//this._select_all_button = $('data_table_select_all_btn');
			//this._select_all_checkbox = $('data_table_select_all_checkbox');
			//this._delete_btn = $('data_table_delete_btn');
			this._pagesize = 10;
			this._data_manager = jiyiri.data.reminder.ReminderDataManager;
			this.pager = new jiyiri.ui.pager.SimplePager(
					{
						pagesize : this._pagesize, // 页长
						urltemplate : 'javascript:jiyiri.page.reminder.IndexPage.GetInstance().jump_page({$page});', // 打开地址模板
						texttemplate : '{$page}', // 文字模板
						htmltemplate_common : '<li><a href="{$url}">{$text}</a></li>', // 分页项html模板
						htmltemplate_curpage : '<li><a href="{$url}" class="current">{$text}</a></li>',
						separator : '', // 分页项分隔符
						pre_btn_class : 'prePageBtn',
						next_btn_class : 'nextPageBtn',
						pre_btn_disable_class : 'prePageBtnDis',
						next_btn_disable_class : 'nextPageBtnDis',
						btn_class : 'pageSwichBtns',
						target_area : $('pager')
					});

			/*
			this._select_all_button.onclick = jiyiri.helper.eventhelper.EventHelper
					.create_callback_function(this, 'select_all');
			this._delete_btn.onclick = jiyiri.helper.eventhelper.EventHelper
					.create_event_function(this, '_on_delete_button_click');
			*/
		},
		on_change:function(merge_obj)
		{
			reminder_type = merge_obj.reminder_type;
			merge_obj.reminder_type = null;
			if(reminder_type=='BIRTHDAY')
			{
				this._data_manager.birthday.on_change(merge_obj);
			}
			else
			{
				this._data_manager.commemo.on_change(merge_obj);
			}
		},
		init_show : function() {
            this.show_all_reminders();
		},
		____$select_all : function() {
			// 注意，此处会事件冒泡导致多次执行，但是阻止冒泡可能导致选择框不能选中
			var event = arguments[0];
			// event.preventDefault();
			var checkboxes = new Array();
			checkboxes_birthday = (document
					.getElementsByName('selected_birthday_reminder'));
			checkboxes_commemo = (document
					.getElementsByName('selected_commemo_reminder'));
			for ( var i = 0; i < checkboxes_birthday.length; i++) {
				checkboxes.push(checkboxes_birthday[i]);
			}
			for ( var i = 0; i < checkboxes_commemo.length; i++) {
				checkboxes.push(checkboxes_commemo[i]);
			}

			for ( var i = 0; i < checkboxes.length; i++) {
				if( checkboxes[i].checked != this._select_all_checkbox.checked)
                {
                    //checkboxes[i].click();
                    checkboxes[i].checked = this._select_all_checkbox.checked;
                    jiyiri.ui.Beautifier.get_beautifier().redraw_element_by_state(checkboxes[i]);
                }

			}
		},
		____$_on_delete_button_click : function() {
			if (IndexPage.GetInstance().state_manager.get_state().category_type == 'RECYCLE') {
				this.delete_selected();
			} else {
				this.recycle_selected();
			}

		},
		____$recycle_selected : function() {
			var deletes = new Array();
			checkboxes_birthday = (document
					.getElementsByName('selected_birthday_reminder'));
			checkboxes_commemo = (document
					.getElementsByName('selected_commemo_reminder'));
			for ( var i = 0; i < checkboxes_birthday.length; i++) {
				if (checkboxes_birthday[i].checked) {
					deletes.push( {
						Type : 'birthday',
						Id : checkboxes_birthday[i].value
					});
				}
			}
			for ( var i = 0; i < checkboxes_commemo.length; i++) {
				if (checkboxes_commemo[i].checked) {
					deletes.push( {
						Type : 'commemo',
						Id : checkboxes_commemo[i].value
					});
				}
			}
			if (deletes.length == 0) {
				return;
			}
			var op_data = deletes;
			var callback = jiyiri.helper.eventhelper.EventHelper
					.create_callback_function(this, '_complete_recycle');
			this._move_to_recycle(op_data, callback);
		},
		____$delete_selected : function() {
			var deletes = new Array();
			checkboxes_birthday = (document
					.getElementsByName('selected_birthday_reminder'));
			checkboxes_commemo = (document
					.getElementsByName('selected_commemo_reminder'));
			for ( var i = 0; i < checkboxes_birthday.length; i++) {
				if (checkboxes_birthday[i].checked) {
					deletes.push( {
						Type : 'birthday',
						Id : checkboxes_birthday[i].value
					});
				}
			}
			for ( var i = 0; i < checkboxes_commemo.length; i++) {
				if (checkboxes_commemo[i].checked) {
					deletes.push( {
						Type : 'commemo',
						Id : checkboxes_commemo[i].value
					});
				}
			}
			if (deletes.length == 0) {
				return;
			}
			var op_data = deletes;

			var callback = jiyiri.helper.eventhelper.EventHelper
					.create_callback_function(this, '_complete_delete');
			this._delete(op_data, callback);

		},
		recycle_single : function(type, id) {
			var op_data = [ {
				Type : type,
				Id : id
			} ];
			var callback = jiyiri.helper.eventhelper.EventHelper
					.create_callback_function(this, '_complete_recycle');
			this._move_to_recycle(op_data, callback);
		},
		normal_single : function(type, id) {
			var op_data = [ {
				Type : type,
				Id : id
			} ];
			var callback = jiyiri.helper.eventhelper.EventHelper
					.create_callback_function(this, '_complete_normal');
			this._move_to_normal(op_data, callback);
		},
		delete_single : function(type, id) {
			var op_data = [ {
				Type : type,
				Id : id
			} ];
			var callback = jiyiri.helper.eventhelper.EventHelper
					.create_callback_function(this, '_complete_delete');
			this._delete(op_data, callback);
		},
		update_single : function(type, id) {

			jiyiri.ui.Dialog.GetInstance().show(
					__APP__ + '/' + _action_name + '/Update/type/' + type
							+ '/id/' + id,
					{
						on_close : jiyiri.helper.eventhelper.EventHelper
								.create_callback_function(this, 'on_update_dialog_close')
					});
		},
        on_update_dialog_close:function(rst_param)
        {
			if(rst_param)
			{
				if(rst_param['updated_reminder'])
				{
					var merge_obj = {	type:'EDIT',
										reminder_type:rst_param['updated_type']=='BIRTHDAY' ? 'BIRTHDAY' : 'COMMEMO',
										data:rst_param['updated_reminder']
									};
					this.on_change(merge_obj);
				}
				if(rst_param['reload'])
				{
					 IndexPage.GetInstance().reload();
				}
			}
        },
		_move_to_normal : function(op_data, callback) {
			var param = new jiyiri.helper.net.Parameter();
			param.add_param('resume', jiyiri.helper.json.JSON
					.stringify(op_data));
			jiyiri.helper.net.Ajax.post_tp(_action_name, 'MoveToNormal', param,
					callback);
		},
		_move_to_recycle : function(op_data, callback) {
			if (confirm('您确定要将 ' + op_data.length + ' 条提醒信息放入回收站吗?')) {
				var param = new jiyiri.helper.net.Parameter();
				param.add_param('delete', jiyiri.helper.json.JSON
						.stringify(op_data));
				jiyiri.helper.net.Ajax.post_tp(_action_name, 'MoveToRecycle',
						param, callback);
			}
		},
		_delete : function(op_data, callback) {
			if (confirm('您确定要删除 ' + op_data.length + ' 条提醒信息吗?(删除后不可找回)')) {
				var param = new jiyiri.helper.net.Parameter();
				param.add_param('delete', jiyiri.helper.json.JSON
						.stringify(op_data));
				jiyiri.helper.net.Ajax.post_tp(_action_name, 'Delete', param,
						callback);
			}
		},
		_complete_recycle : function(response) {
			var rst = jiyiri.helper.net.Ajax
					.parse_tp_return(response.responseText);

			if (rst.status) {
				alert('放入回收站成功');
                var merge_objs = rst.info.merge_data;
                for(var i=0;i<merge_objs.length;i++)
                {
                    var merge_obj = {
                            type:'EDIT',
                            reminder_type:merge_objs[i].type=='BIRTHDAY' ? 'BIRTHDAY' : 'COMMEMO',
                            data:merge_objs[i].data
                        };
                    this.on_change(merge_obj);
                }

				IndexPage.GetInstance().reload();
			} else {
				alert(rst.info);
			}
		},
		_complete_normal : function(response) {
			var rst = jiyiri.helper.net.Ajax
					.parse_tp_return(response.responseText);

			if (rst.status) {
				alert('恢复成功');

                var merge_objs = rst.info.merge_data;
                for(var i=0;i<merge_objs.length;i++)
                {
                    var merge_obj = {
                            type:'EDIT',
                            reminder_type:merge_objs[i].type=='BIRTHDAY' ? 'BIRTHDAY' : 'COMMEMO',
                            data:merge_objs[i].data
                        };
                    this.on_change(merge_obj);
                }

				IndexPage.GetInstance().reload();
			} else {
				alert(rst.info);
			}
		},
		_complete_delete : function(response) {
			var rst = jiyiri.helper.net.Ajax
					.parse_tp_return(response.responseText);

			if (rst.status) {
				alert(rst.info.delete_count + '条提醒信息已清空');
                var merge_objs = rst.info.merge_data;
                for(var i=0;i<merge_objs.length;i++)
                {
                    var merge_obj = {
                            type:'DELETE',
                            reminder_type:merge_objs[i].type=='BIRTHDAY' ? 'BIRTHDAY' : 'COMMEMO',
                            data:merge_objs[i].data
                        };
                    this.on_change(merge_obj);
                }

				IndexPage.GetInstance().reload();
			} else {
				alert(rst.info);
			}
		},
		show_all_reminders : function(pagenum) {
			if (undefined === pagenum) {
				pagenum = 1;
			}
			var reminders = this._data_manager.all.get_all_reminders(pagenum,
					this._pagesize);

			var count = this._data_manager.all.count_all_reminders();
			this._draw_all_reminders(reminders);
			IndexPage.GetInstance().state_manager.set_page(pagenum);

			this.pager.show(pagenum, count);
		},
		show_birthday_reminders_all : function(pagenum) {
			if (undefined === pagenum) {
				pagenum = 1;
			}
			var reminders = this._data_manager.birthday.get_all_reminders(
					pagenum, this._pagesize);

			var count = this._data_manager.birthday.count_all_reminders();

			this._draw_birthday_reminders(reminders);
			IndexPage.GetInstance().state_manager.set_page(pagenum);
			this.pager.show(pagenum, count);
		},
		show_birthday_reminders_by_category : function(category_id, pagenum) {

			if (undefined === pagenum) {
				pagenum = 1;
			}
			var reminders = this._data_manager.birthday
					.get_reminders_by_category_id(category_id, pagenum,
							this._pagesize);

			var count = this._data_manager.birthday
					.count_reminders_by_category_id(category_id);
			this._draw_birthday_reminders(reminders);
			IndexPage.GetInstance().state_manager.set_page(pagenum);
			this.pager.show(pagenum, count);
		},
		show_commemo_reminders_all : function(pagenum) {
			if (undefined === pagenum) {
				pagenum = 1;
			}
			var reminders = this._data_manager.commemo.get_all_reminders(
					pagenum, this._pagesize);
			var count = this._data_manager.commemo.count_all_reminders();
			this._draw_commemo_reminders(reminders);
			IndexPage.GetInstance().state_manager.set_page(pagenum);
			this.pager.show(pagenum, count);
		},
		show_commemo_reminders_by_category : function(category_id, pagenum) {
			if (undefined === pagenum) {
				pagenum = 1;
			}
			var reminders = this._data_manager.commemo
					.get_reminders_by_category_id(category_id, pagenum,
							this._pagesize);
			this._draw_commemo_reminders(reminders);
			IndexPage.GetInstance().state_manager.set_page(pagenum);
			this.pager.show(pagenum, reminders.length);
		},
		show_recycle_reminders : function(pagenum) {
			if (undefined === pagenum) {
				pagenum = 1;
			}
			var reminders = this._data_manager.all.get_recycle_reminders(
					pagenum, this._pagesize);
			var count = this._data_manager.all.count_recycle_reminders();

			this._draw_recycle_reminders(reminders);
			IndexPage.GetInstance().state_manager.set_page(pagenum);

			this.pager.show(pagenum, count);
		},
		_draw_all_reminders : function(reminders) {
			this._clear_data_table();
			for ( var i = 0; i < reminders.length; i++) {
				reminder = reminders[i];
				if (reminder.Type == 'BIRTHDAY') {
					this._draw_birthday_reminders_item(reminder, (i == 0),
							(i == this._pagesize), 'normal');
				} else {
					this._draw_commemo_reminders_item(reminder, (i == 0),
							(i == this._pagesize), 'normal');
				}
			}
			this._fullfill_data_table(this._pagesize - reminders.length,true);
			//jiyiri.ui.Beautifier.checkbox();
		},
		_draw_birthday_reminders : function(reminders) {
			this._clear_data_table();
			for ( var i = 0; i < reminders.length; i++) {
				reminder = reminders[i];
				this._draw_birthday_reminders_item(reminder, (i == 0),
						(i == this._pagesize), 'normal');
			}
			this._fullfill_data_table(this._pagesize - reminders.length,true);
			//jiyiri.ui.Beautifier.checkbox();
		},

		_draw_commemo_reminders : function(reminders) {
			this._clear_data_table();
			for ( var i = 0; i < reminders.length; i++) {
				reminder = reminders[i];
				this._draw_commemo_reminders_item(reminder, (i == 0),
						(i == this._pagesize), 'normal');
			}
			this._fullfill_data_table(this._pagesize - reminders.length,true);
			//jiyiri.ui.Beautifier.checkbox();
		},
		_draw_recycle_reminders : function(reminders) {
			this._clear_data_table();
			for ( var i = 0; i < reminders.length; i++) {
				reminder = reminders[i];
				if (reminder.Type == 'BIRTHDAY') {
					this._draw_birthday_reminders_item(reminder, (i == 0),
							(i == this._pagesize), 'recycle');
				} else {
					this._draw_commemo_reminders_item(reminder, (i == 0),
							(i == this._pagesize));
				}
			}
			this._fullfill_data_table(this._pagesize - reminders.length,false);
			//jiyiri.ui.Beautifier.checkbox();
		},
		_clear_data_table : function() {
			var datatable = this._data_table;
			jiyiri.helper.htmlelementhelper.HTMLElementHelper
					.clean_table(datatable);
		},
		_draw_birthday_reminders_item : function(reminder, is_first, is_last,
				state) {
			var datatable = this._data_table;
			var tr = datatable.insertRow(-1);
			var td = tr.insertCell(-1);
			td.onmouseout = ( function() {
				return function(event) {
					$$('td.xhover').each( function(ele) {
						Element.removeClassName(ele, 'xhover');
					});
				};
			})();
			td.onmouseover = ( function() {
				return function(event) {
					Element.addClassName(td, 'xhover');
				};
			})();
			td.onclick = ( function() {
				return function(event) {
					$$('td.xclick').each( function(ele) {
						Element.removeClassName(ele, 'xclick');
					});
					Element.addClassName(td, 'xclick');
				};
			})();

			if (is_last) {
				Element.addClassName(td, 'last');
			}
			if (is_first) {
				Element.addClassName(td, 'xclick');
			}

			var html = state == 'normal' ? this
					._get_normal_birthday_td_inner_html(reminder) : this
					._get_recycle_birthday_td_inner_html(reminder);
			td.innerHTML = html;

            //var checkbox = $('selected_birthday_reminder' + reminder.Id);
            //jiyiri.ui.Beautifier.get_beautifier().handle_element(checkbox);

		},
		_draw_commemo_reminders_item : function(reminder, is_first, is_last,
				state) {
			var datatable = this._data_table;
			var tr = datatable.insertRow(-1);
			var td = tr.insertCell(-1);
			td.onmouseout = ( function() {
				return function(event) {
					$$('td.xhover').each( function(ele) {
						Element.removeClassName(ele, 'xhover');
					});
				};
			})();
			td.onmouseover = ( function() {
				return function(event) {
					Element.addClassName(td, 'xhover');
				};
			})();
			td.onclick = ( function() {
				return function(event) {
					$$('td.xclick').each( function(ele) {
						Element.removeClassName(ele, 'xclick');
					});
					Element.addClassName(td, 'xclick');
				};
			})();

			if (is_last) {
				Element.addClassName(td, 'last');
			}
			if (is_first) {
				Element.addClassName(td, 'xclick');
			}
			var html = state == 'normal' ? this
					._get_normal_commemo_td_inner_html(reminder) : this
					._get_recycle_commemo_td_inner_html(reminder);
			td.innerHTML = html;

            //var checkbox = $('selected_commemo_reminder' + reminder.Id);
            //jiyiri.ui.Beautifier.get_beautifier().handle_element(checkbox);
		},
		_get_normal_commemo_td_inner_html : function(reminder) {

			var days_left_string = ((reminder.DaysLeft==0) ? '今天' : reminder.DaysLeft + '天后');
			var detail_link_property_string = this._get_detail_link_property_str('commemo',reminder.Id);
			var this_year_date_string = reminder.NextSolarDay.Month + '月' + reminder.NextSolarDay.Day + '日';
			var howold_string = ((reminder.SourceDay.Year!=0) ? this._get_next_age(reminder.SolarDay) + '年' : '') +
								//((reminder.SourceDay.IsSolar) ? '公历' : '农历') +
								'纪念日';

			var date_string = ''
			+ (reminder.SolarDay
					? (jiyiri.date.Output.to_string(reminder.SolarDay,((reminder.SolarDay.Year != 0) ? '#Y#年#M#月#D#日': '#M#月#D#日')))
					:  '')
			+ (reminder.LunarDay
					? (' 农历' + jiyiri.date.Output.to_string(reminder.LunarDay, '#M#月#D#'))
					: '')
			+ ' '
			+ (reminder.SolarDay && reminder.SolarDay.Year != 0 ? (jiyiri.date.Output
							.weekday_string(reminder.SolarDay))
							: '')

			var html = '';
			/* general area */
			html += '	<div class="reminderDiv">';
			html += '		<span class="countDown">' + this_year_date_string + ' | <a ' + detail_link_property_string + '>' + days_left_string + '</a></span>';
			html += '		<span class="bdayName">';
			html += '			<a ' + detail_link_property_string + '>' + reminder.Title + '</a>';
			html += '			<span class="grey">(' + howold_string + ')</span>';
			html += '		</span>';
			html += '		<span class="operationArea">';
			html += '			<a class="edit" title="修改" onclick="javascript:jiyiri.page.reminder.IndexPage.GetInstance().update(\'commemo\',' + reminder.Id + ');return false;"></a>';
			html += '			<a class="del" title="删除" onclick="javascript:jiyiri.page.reminder.IndexPage.GetInstance().move_to_recycle(\'commemo\',' + reminder.Id + ');return false;"></a>';
			html += '		</span> ';
			html += '	</div>';
			/* detail area */
			html += '<div class="reminderDetailShadow">';
			html += '<div class="reminderDetailArea">';
			html += '  <div class="greenUpArrow">';
			html += '    <!---->';
			html += '  </div>';
			html += '  <div class="reminderDetail">';
			html += '    <p>纪念日:<span>' + date_string + '</span></p>';
			html += '  </div>';
			html += '  <div class="bottomBorder2"><!----></div>';
			html += '<div class="title">';
			html += '    <input type="button" title="查看详情" onclick="' + this._get_detail_btn_onclick_str('commemo', reminder.Id) + '" />';
			html += '  </div>';
			html += '</div>';
			html += '</div>';


			return html;

		},
		_get_normal_birthday_td_inner_html : function(reminder) {
			var days_left_string = ((reminder.DaysLeft==0) ? '今天' : reminder.DaysLeft + '天后');
			var detail_link_property_string = this._get_detail_link_property_str('birthday',reminder.Id);
			var this_year_date_string = reminder.NextSolarDay.Month + '月' + reminder.NextSolarDay.Day + '日';
			var howold_string = ((reminder.SourceDay.Year!=0) ? this._get_next_age(reminder.SolarDay)+'岁' : '')
															  + ((parseInt(reminder.SourceDay.IsSolar)) ? '公历' : '农历') + '生日';
			var date_string = ''
			+ (reminder.SolarDay
					? (jiyiri.date.Output.to_string(reminder.SolarDay,((reminder.SolarDay.Year != 0) ? '#Y#年#M#月#D#日': '#M#月#D#日')))
					:  '')
			+ (reminder.LunarDay
					? (' 农历' + jiyiri.date.Output.to_string(reminder.LunarDay, '#M#月#D#'))
					: '')
			+ ' '
			+ (reminder.SolarDay && reminder.SolarDay.Year != 0 ? (jiyiri.date.Output
							.weekday_string(reminder.SolarDay))
							: '')
			var html = '';
			/* general area */
			html += '	<div class="reminderDiv">';
			html += '		<span class="countDown">' + this_year_date_string + ' | <a ' + detail_link_property_string + '>' + days_left_string + '</a></span>';
			html += '		<span class="bdayName">';
			html += '			<a ' + detail_link_property_string + '>' + reminder.Name + '</a>';
			html += '			<span class="grey">(' + howold_string + ')</span>';


			html += '		</span>';
			html += '		<span class="operationArea">';
			html += '			<a class="edit" title="修改" onclick="javascript:jiyiri.page.reminder.IndexPage.GetInstance().update(\'birthday\',' + reminder.Id + ');return false;"></a>';
			html += '			<a class="del" title="删除" onclick="javascript:jiyiri.page.reminder.IndexPage.GetInstance().move_to_recycle(\'birthday\',' + reminder.Id + ');return false;"></a>';
			html += '		</span> ';
			html += '	</div>';
			/* detail area */
			html += '<div class="reminderDetailShadow">';
			html += '<div class="reminderDetailArea">';
			html += '  <div class="greenUpArrow">';
			html += '    <!---->';
			html += '  </div>';
			html += '  <div class="reminderDetail">';
			html += '    <p>生日:<span>' + date_string + '</span></p>';
			html += '    <ul>';
			if(0!=reminder.SourceDay.Year)
			{
				html += '      <li>属相:<span>' + reminder.Baike.shuxiang + '</span></li>';
			}
			html += '      <li>星座:<span>' + reminder.Baike.astro + '</span></li>';
			html += '      <li>生日颜色:<span>' + reminder.Baike.color + '</span></li>';
			html += '      <li>生日花:<span>' + reminder.Baike.birthday_flower + '</span></li>';
			html += '      <li>幸运石:<span>' + reminder.Baike.birthday_stone + '</span></li>';
			html += '      <li>生日塔罗:<span>' + reminder.Baike.tarot + '</span> </li>';
			html += '    </ul>';
			html += '    <div class="clear"><!----></div>';
			html += '  </div>';
			html += '  <div class="bottomBorder2"><!----></div>';
			html += '<div class="title">';
			html += '    <input type="button" title="查看TA的生日百科详情" onclick="' + this._get_detail_btn_onclick_str('birthday', reminder.Id) + '" />';
			html += '  </div>';
			html += '</div>';
			html += '</div>';


			return html;


		},
		_get_next_age : function ( reminder ){
			var now_date = new Date();
			var now_year = now_date.getFullYear();
			var now_month = now_date.getMonth() + 1;
			var now_day = now_date.getDate();

			var rtn;

			if( reminder.Month > now_month )
			{
				rtn = now_year - reminder.Year;
			}
			else if( reminder.Month == now_month && reminder.Day > now_day )
			{
				rtn = now_year - reminder.Year;
			}
			else if( reminder.Month == now_month && reminder.Day == now_day )
			{
				rtn = now_year - reminder.Year;
			}
			else{
				rtn = now_year + 1 - reminder.Year
			}

			return rtn;

		},
		_get_recycle_commemo_td_inner_html : function(reminder) {
			/*
			var html = '';
			html += '<div class="reminderDiv"> <span class="name">';
			html += '<label class="pretty_checkbox"><input type="checkbox" name="selected_commemo_reminder" id="selected_commemo_reminder' + reminder.Id  + '" value="' + reminder.Id + '" /></label>';
			html += '<span class="bdayName"><span class="grey">(纪念日)</span> '
					+ reminder.Title + '</span></span><span class="countDown">'
					+ ((reminder.DaysLeft==0) ? '今' : reminder.DaysLeft)
					+ '天</span><span class="operationArea">';
			html += '<a href="javascript:void(0)" class="undo" title="还原" onclick="javascript:jiyiri.page.reminder.IndexPage.GetInstance().move_to_normal(\'commemo\',' + reminder.Id + ');return false;"></a>';
			html += '<a href="javascript:void(0)" class="destroy" title="清空" onclick="javascript:jiyiri.page.reminder.IndexPage.GetInstance().del(\'commemo\',' + reminder.Id + ');return false;"></a>';
			html += '</span> </div><div class="reminderDetailShadow"><div class="reminderDetailArea">';
			html += '<div class="greenUpArrow"><!----></div>';
			html += '<div class="title"> <strong>'
					+ reminder.Title
					+ ' 纪念日</strong><a '
					+ this
							._get_detail_link_property_str('commemo',
									reminder.Id) + '>[查看详情]</a> </div>';
			html += '<div class="bottomBorder2"><!----></div>';
			html += '<div class="reminderDetail">';
			html += '  <p>纪念日:<span>'
					+ (reminder.SolarDay ? (jiyiri.date.Output.to_string(
							reminder.SolarDay,
							((reminder.SolarDay.Year != 0) ? '#Y#年#M#月#D#日'
									: '#M#月#D#日'))) : '')
					+ (reminder.LunarDay ? (' 农历' + jiyiri.date.Output
							.to_string(reminder.LunarDay, '#M#月#D#')) : '')
					+ ' '
					+ (reminder.SolarDay && reminder.SolarDay.Year != 0 ? (jiyiri.date.Output
							.weekday_string(reminder.SolarDay))
							: '') + '</span></p>';
			html += '</div>';
			html += '</div></div>';
			return html;
			*/
			var days_left_string = ((reminder.DaysLeft==0) ? '今天' : reminder.DaysLeft + '天后');
			var detail_link_property_string = this._get_detail_link_property_str('commemo',reminder.Id);
			var this_year_date_string = reminder.NextSolarDay.Month + '月' + reminder.NextSolarDay.Day + '日';
			var howold_string = ((reminder.SourceDay.Year!=0) ? this._get_next_age(reminder.SolarDay) +'年' : '') +
								//((reminder.SourceDay.IsSolar) ? '公历' : '农历') +
								'纪念日';

			var date_string = ''
			+ (reminder.SolarDay
					? (jiyiri.date.Output.to_string(reminder.SolarDay,((reminder.SolarDay.Year != 0) ? '#Y#年#M#月#D#日': '#M#月#D#日')))
					:  '')
			+ (reminder.LunarDay
					? (' 农历' + jiyiri.date.Output.to_string(reminder.LunarDay, '#M#月#D#'))
					: '')
			+ ' '
			+ (reminder.SolarDay && reminder.SolarDay.Year != 0 ? (jiyiri.date.Output
							.weekday_string(reminder.SolarDay))
							: '')

			var html = '';
			/* general area */
			html += '	<div class="reminderDiv">';
			html += '		<span class="countDown">' + this_year_date_string + ' | <a ' + detail_link_property_string + '>' + days_left_string + '</a></span>';
			html += '		<span class="bdayName">';
			html += '			<a ' + detail_link_property_string + '>' + reminder.Title + '</a>';
			html += '			<span class="grey">(' + howold_string + ')</span>';
			html += '		</span>';
			html += '		<span class="operationArea">';
			html += '			<a href="javascript:void(0)" class="undo" title="还原" onclick="javascript:jiyiri.page.reminder.IndexPage.GetInstance().move_to_normal(\'commemo\',' + reminder.Id + ');return false;"></a>';
			html += '			<a href="javascript:void(0)" class="destroy" title="清空" onclick="javascript:jiyiri.page.reminder.IndexPage.GetInstance().del(\'commemo\',' + reminder.Id + ');return false;"></a>';
			html += '		</span> ';
			html += '	</div>';
			/* detail area */
			html += '<div class="reminderDetailShadow">';
			html += '<div class="reminderDetailArea">';
			html += '  <div class="greenUpArrow">';
			html += '    <!---->';
			html += '  </div>';
			html += '  <div class="reminderDetail">';
			html += '    <p>纪念日:<span>' + date_string + '</span></p>';
			html += '  </div>';
			html += '  <div class="bottomBorder2"><!----></div>';
			html += '<div class="title">';
			html += '    <input type="button" title="查看详情" onclick="' + this._get_detail_btn_onclick_str('commemo', reminder.Id) + '" />';
			html += '  </div>';
			html += '</div>';
			html += '</div>';


			return html;
		},
		_get_recycle_birthday_td_inner_html : function(reminder) {
			/*
			var html = '';
			html += '<div class="reminderDiv"> <span class="name">';
			html += '<label class="pretty_checkbox"><input type="checkbox" name="selected_birthday_reminder"  id="selected_birthday_reminder' + reminder.Id  + '" value="' + reminder.Id + '" /></label>';
			html += '<span class="bdayName"><span class="grey">(生日)</span> '
					+ reminder.Name + '</span></span><span class="countDown">'
					+ ((reminder.DaysLeft==0) ? '今' : reminder.DaysLeft)
					+ '天</span><span class="operationArea">';
			html += '<a href="javascript:void(0)" class="undo" title="还原" onclick="javascript:jiyiri.page.reminder.IndexPage.GetInstance().move_to_normal(\'birthday\',' + reminder.Id + ');return false;"></a>';
			html += '<a href="javascript:void(0)" class="destroy" title="清空" onclick="javascript:jiyiri.page.reminder.IndexPage.GetInstance().del(\'birthday\',' + reminder.Id + ');return false;"></a>';
			html += '</span> </div><div class="reminderDetailShadow"><div class="reminderDetailArea">';
			html += '<div class="greenUpArrow"><!----></div>';
			html += '<div class="title"> <strong>' + reminder.Name + '的生日百科</strong> </div>';
			html += '<div class="bottomBorder2"><!----></div>';
			html += '<div class="reminderDetail">';
			html += '  <p>生日:<span>'
					+ (reminder.SolarDay ? (jiyiri.date.Output.to_string(
							reminder.SolarDay,
							((reminder.SolarDay.Year != 0) ? '#Y#年#M#月#D#日'
									: '#M#月#D#日'))) : '')
					+ (reminder.LunarDay ? (' 农历' + jiyiri.date.Output
							.to_string(reminder.LunarDay, '#M#月#D#')) : '')
					+ ' '
					+ (reminder.SolarDay && reminder.SolarDay.Year != 0 ? (jiyiri.date.Output
							.weekday_string(reminder.SolarDay))
							: '') + '</span></p>';
			html += '<ul>';
			html += ''
					+ ((reminder.Baike.shuxiang != '') ? ('<li>属相:<span>' + reminder.Baike.shuxiang + '</span></li>')
							: '')
					+ ''
					+ ((reminder.Baike.astro != '') ? ('<li>星座:<span>' + reminder.Baike.astro + '</span></li>')
							: '')
					+ ''
					+ ((reminder.Baike.birthday_flower != '') ? ('<li>生日花:<span>' + reminder.Baike.birthday_flower + '</span></li>')
							: '')
					+ ''
					+ ((reminder.Baike.birthday_stone != '') ? ('<li>幸运石:<span>' + reminder.Baike.birthday_stone + '</span></li>')
							: '')
					+ ''
					+ ((reminder.Baike.tarot != '') ? ('<li>生日塔罗:<span>' + reminder.Baike.tarot + '</span></li>')
							: '');
			html += '</ul><div class="clear"><!----></div>';
			html += '</div>';
			html += '</div></div>';
			return html;
			*/
			var days_left_string = ((reminder.DaysLeft==0) ? '今天' : reminder.DaysLeft + '天后');
			var detail_link_property_string = this._get_detail_link_property_str('birthday',reminder.Id);
			var this_year_date_string = reminder.NextSolarDay.Month + '月' + reminder.NextSolarDay.Day + '日';
			var howold_string = ((reminder.SourceDay.Year!=0) ? this._get_next_age(reminder.SolarDay) +'岁' : '') +
								(( parseInt(reminder.SourceDay.IsSolar) ) ? '公历' : '农历') +
								'生日';

			var date_string = ''
			+ (reminder.SolarDay
					? (jiyiri.date.Output.to_string(reminder.SolarDay,((reminder.SolarDay.Year != 0) ? '#Y#年#M#月#D#日': '#M#月#D#日')))
					:  '')
			+ (reminder.LunarDay
					? (' 农历' + jiyiri.date.Output.to_string(reminder.LunarDay, '#M#月#D#'))
					: '')
			+ ' '
			+ (reminder.SolarDay && reminder.SolarDay.Year != 0 ? (jiyiri.date.Output
							.weekday_string(reminder.SolarDay))
							: '')

			var html = '';
			/* general area */
			html += '	<div class="reminderDiv">';
			html += '		<span class="countDown">' + this_year_date_string + ' | <a ' + detail_link_property_string + '>' + days_left_string + '</a></span>';
			html += '		<span class="bdayName">';
			html += '			<a ' + detail_link_property_string + '>' + reminder.Name + '</a>';
			html += '			<span class="grey">(' + howold_string + ')</span>';
			html += '		</span>';
			html += '		<span class="operationArea">';
			html += '			<a href="javascript:void(0)" class="undo" title="还原" onclick="javascript:jiyiri.page.reminder.IndexPage.GetInstance().move_to_normal(\'birthday\',' + reminder.Id + ');return false;"></a>';
			html += '			<a href="javascript:void(0)" class="destroy" title="清空" onclick="javascript:jiyiri.page.reminder.IndexPage.GetInstance().del(\'birthday\',' + reminder.Id + ');return false;"></a>';
			html += '		</span> ';
			html += '	</div>';
			/* detail area */
			html += '<div class="reminderDetailShadow">';
			html += '<div class="reminderDetailArea">';
			html += '  <div class="greenUpArrow">';
			html += '    <!---->';
			html += '  </div>';
			html += '  <div class="reminderDetail">';
			html += '    <p>生日:<span>' + date_string + '</span></p>';
			html += '    <ul>';
			if(0!=reminder.SourceDay.Year)
			{
				html += '      <li>属相:<span>' + reminder.Baike.shuxiang + '</span></li>';
			}
			html += '      <li>星座:<span>' + reminder.Baike.astro + '</span></li>';
			html += '      <li>生日颜色:<span>' + reminder.Baike.color + '</span></li>';
			html += '      <li>生日花:<span>' + reminder.Baike.birthday_flower + '</span></li>';
			html += '      <li>幸运石:<span>' + reminder.Baike.birthday_stone + '</span></li>';
			html += '      <li>生日塔罗:<span>' + reminder.Baike.tarot + '</span> </li>';
			html += '    </ul>';
			html += '    <div class="clear"><!----></div>';
			html += '  </div>';
			html += '  <div class="bottomBorder2"><!----></div>';
			html += '<div class="title">';
			html += '    <input type="button" title="查看TA的生日百科详情" onclick="' + this._get_detail_btn_onclick_str('birthday', reminder.Id) + '" />';
			html += '  </div>';
			html += '</div>';
			html += '</div>';


			return html;
		},
		_get_detail_link_property_str : function(type, id) {
			if (__MODULE_NAME__ == 'Reminder') {
				rtn = 'href="' + __APP__ + '/Reminder/View/type/' + type
						+ '/id/' + id + '" target="_blank"';
			} else {
				rtn = 'href="' + __APP__ + '/' + __MODULE_NAME__
						+ '/ViewReminder/type/' + type + '/id/' + id
						+ '" target="_self"';
			}
			return rtn;
		},
		_get_detail_btn_onclick_str : function(type, id) {
			if (__MODULE_NAME__ == 'Reminder') {
				rtn = 'window.open(\'' + __APP__ + '/Reminder/View/type/'
						+ type + '/id/' + id + '\')';
			} else {
				rtn = 'location.href=\'' + __APP__ + '/' + __MODULE_NAME__
						+ '/ViewReminder/type/' + type + '/id/' + id + '\'';
			}
			return rtn;
		},
		_fullfill_data_table : function(left_num,is_show_add_btn) {
			var datatable = this._data_table;
			for ( var i = left_num; i > 0; i--) {
				(function(){
				/**/
				var tr = datatable.insertRow(-1);
				var td = tr.insertCell(-1);
				td.onmouseout = ( function() {
					return function(event) {
						$$('td.xhover').each( function(ele) {
							Element.removeClassName(ele, 'xhover');
						});
					};
				})();
				td.onmouseover = ( function() {
					return function(event) {
						Element.addClassName(td, 'xhover');
					};
				})();
				if (i == 1) {
					td.className = 'last';
				}
				if(is_show_add_btn)
				{

					var node_a = document.createElement('a');
                    td.appendChild(node_a);
					node_a.className = 'addBdayLink';
					node_a.innerHTML = '+添加提醒';

					node_a.onmouseover = ( function() {
						return function(event) {
							$$('td.xhover').each( function(ele) {
								Element.removeClassName(ele, 'xhover');
							});
						};
					})();

					node_a.onclick = jiyiri.helper.eventhelper.EventHelper.create_event_function(IndexPage.GetInstance(), 'add_reminder_button_onclick');
				}

				/**/
				})();
			}
		}
	};

	var WidgetsManager = Class.create();
	WidgetsManager._instance = null;
	WidgetsManager.GetInstance = function() {
		if (null === WidgetsManager._instance) {
			WidgetsManager._instance = new WidgetsManager();
		}
		return WidgetsManager._instance;
	};

	WidgetsManager.prototype = {
		_data_info : null,
		initialize : function() {
			this._data_info = _index_widgets_info;
			//this._widget_invite_block = $('widget_invite_block');
			//this._widget_active_phone_block = $('widget_active_phone_block');
			this._widget_notify_setup_block = $('widget_notify_setup_block');
			this._widget_last_add_block = $('widget_last_add_block');
			this._widget_not_login_notice_block = $('widget_not_login_notice_block');
			this._widget_login_form_block = $('widget_login_form_block');
			//this._number_of_active_phone = $('number_of_active_phone');

			//this._widget_invite_reg_confirm = $('widget_invite_reg_confirm');
			//this._my_inviter_name = $('my_inviter_name');
			//this._invite_reg_confirm_btn = $('invite_reg_confirm_btn');
			this._notify_setup_switch_button = null;
		},
		reload : function() {
			jiyiri.helper.net.Ajax.get_tp(_action_name, 'IndexWidgetsInfo',
					new jiyiri.helper.net.Parameter(),
					jiyiri.helper.eventhelper.EventHelper
							.create_callback_function(this,
									'_on_reload_complete'));
		},
		init_show : function() {
			this._show();
		},
		_on_reload_complete : function(response) {
			var data_info = jiyiri.helper.json.JSON
					.parse(response.responseText);
			if (!data_info) {
				throw new Error('there is a Error while load the widgets info');
			}
			this._data_info = data_info;
			this._show();
		},

		_show : function() {
			/* process import friend button */
			if(this._data_info.IsLogined)
			{
				Element.show($('import_friend_button'));
			}
			else
			{
				Element.hide($('import_friend_button'));
			}
			$('import_friend_button').onclick = function()
			{
				var target_url = '';
				if(__MODULE_NAME__=='Reminder')
				{
					target_url = __APP__ + '/InviteFriend/';
				}
				else
				{
					target_url = __APP__ + '/' + __MODULE_NAME__ + '/Import';
				}
				location.href = target_url;
			}
			/*/process import friend button */

			this._toggle_blocks();
			if (this._data_info.IsLogined) {
				this._show_logined();
			} else {
				this._show_unlogined();
                jiyiri.ui.Beautifier.get_beautifier().handle_element($('widget_login_auto'));
			}
		},
		_show_logined : function() {
			//this._process_active_phone_block();
			this._process_notify_setup_block();
			this._process_last_add_block();
            this._process_sms_quota_setup_block();
		},
		/*
		_process_active_phone_block : function() {
			if (this._data_info.IsPhoneActived) {
				Element.hide(this._widget_active_phone_block);
			} else {
				this._number_of_active_phone.innerHTML = this._data_info.NumberOfActivePhone;
				Element.show(this._widget_active_phone_block);
			}
		},
		*/
        _process_sms_quota_setup_block : function()
        {
            var quota = this._data_info.SmsQuotaLeft;
            $('user-left-sms-quota').innerHTML = quota;
        },
		_process_notify_setup_block : function() {
			var notify_info = this._data_info.NotifyInfo;
			var action = (__MODULE_NAME__=='Reminder' ? 'User' : __MODULE_NAME__);
			var is_new = (__MODULE_NAME__=='Reminder');

			$('widget_notify_email').innerHTML =
	            ('<div class="setup-row">'+
	    	     '<div class="name">Email:</div>'+
	    	     '<div class="setup-content">'+notify_info.Email+'</div>'+
	    	     '<a href="' +__APP__+ '/' + action + '/SetupEmailNotifyMethod" ' + (is_new ? 'target="_blank"' : '') + '>[修改]</a>'+
	    	     '<div class="clear"><!----></div>'+
	    	     '</div>');

			$('widget_notify_phone').innerHTML = notify_info.Phone
				?
	            ('<div class="setup-row">'+
	            '<div class="name">手机:</div>'+
	            '<div class="setup-content">'+notify_info.Phone+'</div>'+
	            '<a href="' +__APP__+ '/' + action + '/SetupPhoneNotifyMethod" ' + (is_new ? 'target="_blank"' : '') + '>[修改]</a>'+
	            '<div class="clear"><!----></div>'+
	            '</div>')
	            :
	            '<a href="' +__APP__+ '/' + action + '/SetupPhoneNotifyMethod" target="_blank" class="sms-btn">激活免费手机短信提醒!</a>';

			$('widget_notify_msn').innerHTML = notify_info.MSN
				?
	            ('<div class="setup-row">'+
	            '<div class="name">MSN:</div>'+
	            '<div class="setup-content">'+notify_info.MSN+'</div>'+
	            '<a href="' +__APP__+ '/' + action + '/SetupMSNNotifyMethod" ' + (is_new ? 'target="_blank"' : '') + '>[修改]</a>'+
	            '<div class="clear"><!----></div>'+
	            '</div>')
	            :
	            '<a href="' +__APP__+ '/' + action + '/SetupMSNNotifyMethod" ' + (is_new ? 'target="_blank"' : '') + ' class="msn-btn">激活MSN提醒!</a>';

			if( notify_info.EmailPeriod1 == -1 )
			{
				$('widget_email_period1').innerHTML = '';
			}
			else
			{
				$('widget_email_period1').innerHTML = notify_info.EmailPeriod1 == 0 ? '当天  /'
						: '提前<strong>' + notify_info.EmailPeriod1 + '</strong>天  /';
			}
			if( notify_info.EmailPeriod2 == -1 )
			{
				$('widget_email_period2').innerHTML = '';
			}
			else
			{
				$('widget_email_period2').innerHTML = notify_info.EmailPeriod2 == 0 ? '当天  /'
						: '提前<strong>' + notify_info.EmailPeriod2 + '</strong>天  /';
			}
			if( notify_info.EmailPeriod3 == -1 )
			{
				$('widget_email_period3').innerHTML = '';
			}
			else
			{
				$('widget_email_period3').innerHTML = notify_info.EmailPeriod3 == 0 ? '当天'
						: '提前<strong>' + notify_info.EmailPeriod3 + '</strong>天';
			}
			if( notify_info.PhonePeriod1 == -1 )
			{
				$('widget_phone_period1').innerHTML = '';
			}
			else
			{
				$('widget_phone_period1').innerHTML = notify_info.PhonePeriod1 == 0 ? '当天  /'
						: '提前<strong>' + notify_info.PhonePeriod1 + '</strong>天  /';
			}
			if( notify_info.PhonePeriod2 == -1 )
			{
				$('widget_phone_period2').innerHTML = '';
			}
			else
			{
				$('widget_phone_period2').innerHTML = notify_info.PhonePeriod2 == 0 ? '当天'
						: '提前<strong>' + notify_info.PhonePeriod2 + '</strong>天';
			}

			if( notify_info.MSNPeriod1 == -1 )
			{
				$('widget_msn_period1').innerHTML = '';
			}
			else
			{
				$('widget_msn_period1').innerHTML = notify_info.MSNPeriod1 == 0 ? '当天  /'
						: '提前<strong>' + notify_info.MSNPeriod1 + '</strong>天  /';
			}
			if( notify_info.MSNPeriod2 == -1 )
			{
				$('widget_msn_period2').innerHTML = '';
			}
			else
			{
				$('widget_msn_period2').innerHTML = notify_info.MSNPeriod2 == 0 ? '当天  /'
						: '提前<strong>' + notify_info.MSNPeriod2 + '</strong>天  /';
			}
			if( notify_info.MSNPeriod3 == -1 )
			{
				$('widget_msn_period3').innerHTML = '';
			}
			else
			{
				$('widget_msn_period3').innerHTML = notify_info.MSNPeriod3 == 0 ? '当天'
						: '提前<strong>' + notify_info.MSNPeriod3 + '</strong>天';
			}


			if (!this._notify_setup_switch_button) {
				var switch_button = document.createElement('a');
				switch_button.innerHTML = '显示更多设置信息';
				switch_button.onclick = jiyiri.helper.eventhelper.EventHelper
						.create_event_function(this,
								'_toggle_notify_setup_detail');
				$('widget_notify_detail_switcher').appendChild(switch_button);
				this._notify_setup_switch_button = switch_button;
			}
		},
		_toggle_notify_setup_detail : function() {
			if (Element.hasClassName(this._notify_setup_switch_button,
					'toClose')) {
				this._notify_setup_switch_button.innerHTML = '显示更多设置信息';
				Element.removeClassName(this._notify_setup_switch_button,
						'toClose');
				Element.hide('widget_notify_detail_container');
			} else {
				this._notify_setup_switch_button.innerHTML = '隐藏设置信息';
				Element.addClassName(this._notify_setup_switch_button,
						'toClose');
				Element.show('widget_notify_detail_container');
			}

		},
		_process_last_add_block : function() {
			var last_add = this._data_info.LastAddItems;
			var html = '';
			for ( var i = last_add.length-1; i >= 0; i--) {
				html += get_item_html(last_add[i],(i == 0));
			}
			$('widget_last_add_list').innerHTML = html;

			function get_item_html(item,is_last) {
				var html = '';
				html += '<p class="first"><a href="' + __APP__;
                if(__MODULE_NAME__ == 'Reminder')
                {
                    html +=  '/' + __MODULE_NAME__ + '/View/type/' + item.Type +'/id/' + item.Id + '" target="_blank">';
                }
                else {
                    html +=  '/' + __MODULE_NAME__ + '/ViewReminder/type/' + item.Type +'/id/' + item.Id + '">';
                }

                html +=  item.Name + '</a><span>(' + get_type_des(item.Type)
						+ ') ' + get_source_des(item.Type , item.SourceType)
						+ '</span></p>';
				if(!is_last)
				{
					html +='<div class="bottomBorder2"><!----></div>';
				}
				return html;
			}
			function get_type_des(type) {
				rtn = type == 'birthday' ? '生日' : '纪念日';
				return rtn;
			}
			function get_source_des(type,source)
			{
				rtn = '';
				if( type == 'birthday' )
				{
					switch (parseInt(source)) {
					case 0:
						rtn = '手动添加';
						break;
					case 1:
						rtn = '从51网导入';
						break;
					case 2:
						rtn = '从校内网导入';
						break;
					case 3:
						rtn = '从UCH网站导入';
						break;
					case 4:
						rtn = '从开心网导入';
						break;
					case 10:
						rtn = '链接获取';
						break;
					}
				}
				else  //如果是纪念日 则默认是[手动添加]
				{
					rtn = '手动添加';
				}
				return rtn;
			}
		},
		_show_unlogined : function() {
			this._process_login_block();
		},
		_process_login_block : function() {
			$('login_form').onsubmit = _do_login;
			function _do_login() {
				_hide_err_notice();
				var account = $F('widget_login_account');
				var password = $F('widget_login_password');
				var autologin = $('widget_login_auto').checked ? 1 : 0;
				if (account == '') {
					_show_err_notice('请输入账号');
					return false;
				}

				if (!jiyiri.helper.validatehelper.DataValidater.CheckEmail(account) && !jiyiri.helper.validatehelper.DataValidater.CheckPhone(account))
				{
					_show_err_notice('账号格式出错');
					return false;
				}


				if (password == '') {
					_show_err_notice('请输入密码');
					return false;
				}
				var param = new jiyiri.helper.net.Parameter();
				param.add_param('account', account);
				param.add_param('password', password);
				param.add_param('autologin', autologin);
				$('widget_login_button').disabled = true;
				jiyiri.helper.net.Ajax.post_tp('User', 'doLogin', param,
						_on_login_complete);

				return false;
			}
			function _show_err_notice(msg) {
				$('widget_login_errnotice').innerHTML = msg;
				Element.show('widget_login_errnotice');
			}
			function _hide_err_notice() {
				Element.hide('widget_login_errnotice');
			}
			function _on_login_complete(response) {
				var rst = jiyiri.helper.net.Ajax
						.parse_tp_return(response.responseText);
				if (rst.status) {
					location.reload();
				} else {
					_show_err_notice(rst.info);
					$('widget_login_button').disabled = false;
				}
			}
		},
		_toggle_blocks : function() {
			var is_logined = this._data_info.IsLogined;
			var logined_blocks = [
					this._widget_notify_setup_block,
					this._widget_last_add_block ];
			var unlogined_blocks = [ this._widget_not_login_notice_block,
					this._widget_login_form_block ];
			for ( var i = 0; i < logined_blocks.length; i++) {
				var func = is_logined ? Element.show : Element.hide;
				func(logined_blocks[i]);
			}
			for ( var i = 0; i < unlogined_blocks.length; i++) {
				var func = is_logined ? Element.hide : Element.show;
				func(unlogined_blocks[i]);
			}
		}

	};

	/* Codes End Here */

	/* Register Start Here */
	jiyiri.page.reminder.IndexPage = IndexPage;
	/* Register End Here */
})();

