// faq class for yolax.com ver 2.0

var FAQClass = Class.create(Base, {
	targetList: {
		classArea: 'faqsort', dataList: 'faqlistarea', dataTitle: 'faqcontenttitle', dataArea: 'faqcontent',
		defaultArea: 'conduct', showGuilder: 'show_guilder'
	},
	faqClassData: null,
	faqData: null,
	areaStatus: 0,
	_launcherSets: null,

	initialize: function() {
		this.initTargets();
		this.quickLauncher();
	},

	getSorts: function() {
		new _ajax({api:'xml/faqclass.xml', callFunc:[this, 'setSorts']});
		new _ajax({api:'xml/faq.xml', callFunc:[this, 'initData']});
	},

	setSorts: function(xml) {
		var lst = this.initClassData($A(xml.getElementsByTagName("item")));
		var area = this.targetList.classArea;
		area.update();

		lst.findAll(function(node){
			return node.parentid == 0;
		}).each((function(node){
			var sublst = lst.findAll(function(n){
				return n.parentid == node.fgid;
			});

			new Insertion.Bottom(area, "<li class=\"root\">"+node.title+"</li>");
			sublst.each(function(subnode){
				new Insertion.Bottom(area, "<li class=\"title\"><a _fgid=\""+subnode.fgid+"\" href=\"javascript:void(0)\">"+subnode.title+"</a></li>");
			})

		}).bind(this));

		lst = $A(area.getElementsByTagName("a"));
		lst.each((function(node){
			$(node).observe("click", (function(event){
				this.showDetail(Event.element(event).readAttribute("_fgid"));
			}).bind(this))
		}).bind(this));

		this.targetList.showGuilder.observe("click", this.setAreaStatus.bind(this, 0));
	},

	initClassData: function(lst) {
		var returnArray = [];
		lst.each(function(node){
			returnArray.push({
				parentid: Element.nodeText(node.getElementsByTagName("parentid")[0]),
				fgid: Element.nodeText(node.getElementsByTagName("fgid")[0]),
				title: Element.nodeText(node.getElementsByTagName("title")[0])
			});
		});
		this.faqClassData = returnArray;
		return returnArray;
	},

	initData: function(xml) {
		var lst = $A(xml.getElementsByTagName("item")), resultArray = {};
		lst.each((function(node){
			if (!Object.isArray(resultArray[Element.nodeText(node.getElementsByTagName("fgid")[0])]))
				resultArray[Element.nodeText(node.getElementsByTagName("fgid")[0])] = [];

			resultArray[Element.nodeText(node.getElementsByTagName("fgid")[0])].push({
				title: Element.nodeText(node.getElementsByTagName("title")[0]),
				description: Element.nodeText(node.getElementsByTagName("description")[0]),
				displayorder: Element.nodeText(node.getElementsByTagName("displayorder")[0]),
				fid: Element.nodeText(node.getElementsByTagName("fid")[0])
			});
		}).bind(this));
		this.faqData = resultArray;
		if (this._launcherSets) this.quickFinder();
	},

	showDetail: function(id) {
		if (!this.faqData) return;
		var lst = this.faqData[id];
		this.targetList.dataTitle.update(this.faqClassData.find(function(node){return node.fgid == id}).title);

		if (Object.isUndefined(lst)) {
			this.targetList.dataList.update("<p style=\"color:#446;text-align:center;\">未找到相关主题...<p>");
		} else {
			this.targetList.dataList.update();
			lst.sortBy(function(node){
				return node.displayorder;
			}).each((function(node, index){
				new Insertion.Bottom(this.targetList.dataList, "<li id=\"faq_detail_"+id+"_"+index+"\"><p style=\"color:#336;font-weight:bolder;\">问: " + node.title + "</p><p style=\"color:#446;\">答: " + node.description + "<p></li>");
			}).bind(this));
		}

		this.setAreaStatus(1);
	},

	setAreaStatus: function(n) {
		if (n != this.areaStatus) {
			this.areaStatus = n;
			this.targetList.dataArea.toggle();
			this.targetList.defaultArea.toggle();
		}
		$(document.documentElement).scrollTo();
	},
	
	quickLauncher: function() {
		var sets = location.search.substring(1).toQueryParams();
		if (Object.isUndefined(sets.s)&&Object.isUndefined(sets.f)) return;
		sets = [sets.s, sets.f];
		if (Object.isArray(sets)) this._launcherSets = sets;
	},
	
	quickFinder: function() {
		var lh = this._launcherSets, cd = this.faqClassData, fd = this.faqData, cidx, fidx;
		if (Object.isUndefined(lh[0])) {
			cidx = $H(fd).find(function(p){
				return p[1].find(function(node, index){
					fidx = index;
					return node.fid == lh[1];
				});
			})
			cidx = cidx[0];
		} else {
			if (Object.keys(fd).indexOf(lh[0])<0) return;
			cidx = lh[0];
			this.showDetail(cidx);
			if (Object.isUndefined(lh[1]) || !fd[cidx].find(function(p, index){
				fidx = index;
				return p.fid == lh[1];
			})) fidx = null;
		}
		if (!cidx) return;
		this.showDetail(cidx);
		if (fidx!==null) $('faq_detail_'+cidx+'_'+fidx).setStyle({"background":'#bdf'}).scrollTo();
	}
});