/**
 * @author BNU <dev@perbiz.co.kr>
 * @brief bloghub 카테고리 위젯 스크립트
 **/
;(function($) {

var bloghubCategory = xe.createApp('bloghubCategory', {
	configs : {},
	init : function() {
	},
	getConfig : function(key) {
		return this.configs[key] || {};
	},
	API_ONREADY : function(oSender, args) {
	},
	API_SET_CATEGORY : function(oSender, args) {
		var self = this;
		var key = args[0]
		var config = args[1];

		if(!config) return;
		if(!config.category) config.category = '.category';
		if(!config.content) config.content = '.content';
		if(!config.pagination) config.pagination = '.pagination';
		if(!config.pagediv) config.pagediv = '.pageDiv';

		config.container = $(config.container);
		config.category = $(config.category, config.container);
		config.content = $(config.content, config.container);
		config.pagediv = $(config.pagediv, config.content);
		config.pagination = $(config.pagination, config.container);

		config.container.data('bloghub_category', {'key':key});

		if(config.recommended == 'Y') {
			category_id = 'recommend';
			total_page = 100;
			page = 1;
		} else {
			category_id = config.categories[0].id;
			total_page = config.categories[0].total_page;
			page = config.categories[0].page;
		}
		if(config.list_count) {
			list_count = config.list_count;
		} else {
			list_count = 15;
		}

		this.configs[key] = config;

		this.cast('SET_PAGINATION', {
			'key':key,
			'category_id':category_id,
			'total_page':total_page,
			'list_count':list_count,
			'page':page,
			'mode':'init'
		});

		config.pagination.data('total_page', config.categories[0]);

		/* 카테고리 탭 토글 이벤트 */
		config.container.find('.btn', config.category).click(function() {
			self.cast('TOGGLE_CATEGORY', {'el':this});
			return false;
		});

		/* pagination 더 보기 이벤트 */
		config.pagination.find('.viewNextPage').click(function() {
			self.cast('VIEW_NEXT_PAGE', {'el':this});
			$(this).blur();
			return false;
		});

		config.pagination.find('.go_top').click(function() {
			$('html, body').animate( { scrollTop:0 }, { queue:false, duration:1000, easing:'easeOutQuart'} );
			return false;
		});
	},
	API_TOGGLE_CATEGORY : function(oSender, args) {
		var self = this;
		var $el = $(args.el);
		var key = this.getKey($el);
		var config = this.getConfig(key);
		var category_id = $el.attr('category_id');
		var category = this.getCategory(key, category_id);
		var data = {};
		var pagination = config.pagination.data('bloghub_category');

		// 탭 활성 상태 초기화
		config.category.find('.active').removeClass('active');
		// 탭 활성 상태 세팅
		if($el.hasClass('item')) {
			$el.addClass('active');
		} else {
			$el.closest('.item').addClass('active');
		}

		// 컨텐츠 초기화
		config.content.find('.postListBox').hide();
		// 컨텐츠 활성화
		var $contentBox = config.content.find('#bloghubContent_'+category_id);
		if(config.skin == "handypia_list") {
			config.container.find('.postListBox tr').remove();
		} else {
			$contentBox.find('.pageDiv').eq(0).nextAll().remove();
		}
		$contentBox.show();
		if(config.list_count) {
			list_count = config.list_count;
		} else {
			list_count = 15;
		}

		data.category_srl = category_id;
		data.list_count = list_count;
		data.page = 1;
		data.skin = config.skin;

		pagination.category_id = category_id;

		var pageDiv = $contentBox.find('.pageDiv');
		if(!pageDiv.size()) {
			this._ajaxLoad(key, pagination, config, data);
		}

	},
	API_VIEW_NEXT_PAGE : function(oSender, args) {
		var self = this;
		var $el = $(args.el);
		var key = this.getKey($el);
		var config = this.getConfig(key);
		var data = {};
		var pagination = config.pagination.data('bloghub_category');

		data.category_srl = pagination.category_id;
		data.list_count = pagination.list_count;
		data.page = pagination.page +1;
		data.skin = config.skin;

		this._ajaxLoad(key, pagination, config, data);
	},
	_ajaxLoad : function(key, pagination, config, data) {
		var self = this;
		var module = 'bloghub';
		if(pagination.category_id == 'recommend') {
			query_id = 'getBloghubCategoryRecommendDocumentList';
			delete(data.category_srl);
			data.recommend = 'Y';
		} else if(pagination.category_id == 'livexe') {
			query_id = 'dispLivexeDocumentList';
			module = 'livexe';
			delete(data.category_srl);
		} else {
			query_id = 'getBloghubCategoryDocumentList';
		}

		exec_xml(module, query_id, data, function(result) {
			if(result['content']) config.content.find('#bloghubContent_'+pagination.category_id).append(result['content']);
			self.cast('SET_PAGINATION', {
				'key':key,
				'category_id':pagination.category_id,
				'total_page':result['page_navigation']['total_page'],
				'list_count':data.list_count,
				'page':result['page_navigation']['cur_page'],
				'mode':'loaded'
			});
		}, ['content', 'page_navigation']);
	},
	API_SET_PAGINATION : function(oSender, args) {
		if(!args.mode) args.mode = 'init';

		var config = this.getConfig(args.key);
		var pagination = config.pagination.data('bloghub_category');
		args.page = parseInt(args.page);
		args.total_page = parseInt(args.total_page);

		if(args.mode == 'loaded') {
			if(args.total_page > args.page) {
				config.pagination.find('.viewNextPage').css('display','block');
				config.pagination.find('.no_more_page, .loadding').hide();
			} else {
				config.pagination.find('.viewNextPage, .loadding').hide();
				config.pagination.find('.no_more_page').css('display','block');
			}
			config.pagination.data('bloghub_category', {'category_id':args.category_id, 'page':args.page, 'total_page':args.total_page, 'list_count':list_count});

		} else {
			if(args.total_page > 1) {
				config.pagination.find('.viewNextPage').css('display','block');
				config.pagination.find('.no_more_page, .loadding').hide();
			} else {
				config.pagination.find('.viewNextPage, .loadding').hide();
				config.pagination.find('.no_more_page').css('display','block');
			}

			config.pagination.data('bloghub_category', {'category_id':args.category_id, 'page':1, 'total_page':args.total_page, 'list_count':list_count});
		}
	},
	getCategoryPage : function() {
	},
	getKey : function(el) {
		return el.closest('.bloghub_category').data('bloghub_category').key;
	},
	getCategory : function(key, category_id) {
		var config = this.getConfig(key);
		var category = {};

		for(var idx in config.categories) {
			if(config.categories[idx].id == category_id) {
				return config.categories[idx];
			}
		}

		return {};
	}
});

var oBloghubCategory = new bloghubCategory;
xe.registerApp(oBloghubCategory);

}) (jQuery);

