// JavaScript Document
//last modified 2008-04-17

Josn2table = new Class({
		initialize: function(table,send_url,options,senddata){
			this.template = []
			this.clumns = [];
			this.loading = '<samp class="loading" style="font-family: Geneva, Arial, Helvetica, sans-serif;font-size:10px;">LOADING...</samp>';
			this.setTemplate(table);
			this.setOptions(options);
			this.setSenddata(senddata);
			this.MYRequest = new Json.Remote(send_url,
				{onComplete:this.onComplete.bind(this)
				,onFailure:this.onFailure.bind(this)
				,onRequest:this.onRequest.bind(this)
				,onCancel:this.onFailure.bind(this)
				}
			);
			if(senddata)this.MYRequest.send();
		},
		onComplete:function(person){
			this.data = [];
			if (  person.length > 0 ){
				for(var i = 0 ; i < person.length ; i++ ){
					this.data.push(person[i]);
				}
				this.setData(this.data);
			}else{
				this.onEmpty();
			}
			this.fireEvent('onComplete', [person]);
		},
		onFailure:function(transport){
			if ( this.options.onFailure )this.fireEvent('onFailure', [transport]);
			else alert('http code:'+transport.status+'\n'+transport.responseText);
		},
		onEmpty:function(){
			this.innerHTML('沒有符合的資料!');
			this.fireEvent('onEmpty');
		},
		onRequest:function(){
			this.startLoad();
			this.fireEvent('onRequest');
		},
		onCancel:function(){
			this.fireEvent('onCancel');
		},

		/*setsend_url:function(send_url){
			this.send_url = send_url;
		},*/
		setSenddata:function(senddata){
			this.senddata = senddata;
		},
		setTemplate:function(table){
		/*將 目標 table的樣版記錄 並清空*/
			var my_table=$(table);
			if ( my_table ){
				this.table = my_table;
				var my_TRs = my_table.getElementsByTagName('TR');
				var my_remove_TRs = [];
				var my_TDs;
				var my_template_tbody;
				var my_template_trs = [];
				var my_template_start_tr_id = -1;
				//var my_template_tds = [];
				var first_table = 'TD';
				for(var tri = 0 ; tri < my_TRs.length ; tri++ ){
					var tr = $(my_TRs[tri]);
					if ( !my_template_tbody ) my_template_tbody = tr.getParent();
					var TDs = tr.getElementsByTagName('TD');
					if ( TDs.length > 0 ){
						var newtr = tr.clone();
						my_template_trs.push(newtr);
						/* 是TD 時 remove */
						my_remove_TRs.push(tr);
						if(my_template_start_tr_id==-1)my_template_start_tr_id = tri;
						/*if ( !my_TDs ){
							my_TDs=[];
							for(var tdi = 0 ; tdi < TDs.length ; tdi++ ){
								my_TDs.push($(TDs[tdi]).clone());
							}
						}*/
					}else{
						first_table = 'TH';
					}
					if ( first_table ){
						this.setClumns(tr.getElementsByTagName(first_table));
						first_table='';
					}
					
				}
				for(var tri = 0 ; tri < my_remove_TRs.length ; tri++ ){
					my_remove_TRs[tri].remove();
				}
				if(!my_TDs)my_TDs=[];
				this.template={table:my_table,tbody:my_template_tbody,trs:my_template_trs,start_tr_id:my_template_start_tr_id,tds:my_TDs};
				return this.template;
			}else {
				alert(table + '錯誤的table');
				for(var i in this ){
					if ( $type(this[i]) == 'function' ) this[i] = Class.empty;
				}
			}
		},
		setClumns:function(tds){
		/*將clumns 順序記好*/
			this.clumns = [];
			for(var tdi = 0 ; tdi < tds.length ; tdi++ ){
				var td = $(tds[tdi]);
				this.clumns.push(td.getProperty('zc'));
			}
			return this.clumns;
		},
		setData:function(data){
		/*將data 序 順序寫入 */
			this.clearData();
			for(var i = 0 ; i < data.length ; i++ ){
				var tr = this.template.trs[i%this.template.trs.length].clone();
				if( !tr ) tr = new Element("tr");
				/*
				var test = tr.getElementsByTagName('*');
				for(var j = 0 ; j < test.length ; j++ ){
					alert(test[j].tagName);
				}*/
				var d = data[i];
				var tds = tr.getElementsByTagName('td');
				for(var j = 0 ; j < this.clumns.length ; j++ ){
					var v = d[this.clumns[j]];
					if ( !v ) v ='&nbsp;';
					var td = tds[j];
					if(!td){td = new Element("td");
						tr.adopt(td);
					}
					td.innerHTML = v;
					
				}
				this.template.tbody.adopt(tr);		
			}
		},
		clearData:function(table){
		/*table 清空*/
			if ( !table ) table = this.table;
			var my_TRs = table.getElementsByTagName('TR');
			for(var tri = my_TRs.length-1 ; tri >= this.template.start_tr_id  ; tri-- ){
				$(my_TRs[tri]).remove();
			}
		},
		innerHTML:function(innerHTML,Mproperty){
			var property = {colspan:this.clumns.length};
			if($type(Mproperty)=='object')$extend(property, Mproperty);
			this.clearData();
			var tr = new Element("tr");
			//var td = new Element("td",{colspan:this.clumns.length,align:"center",valign:"middle"});
			var td = new Element("td",property);
			td.innerHTML =innerHTML;
			tr.adopt(td);
			this.template.tbody.adopt(tr);
		},
		startLoad:function(){
			this.clearData();
			this.innerHTML(this.loading);
		},
		send:function(senddata){
			if(!senddata) senddata = this.senddata;
			this.startLoad();
			this.MYRequest.send(senddata);
		},
		cancel:function(){
			this.MYRequest.cancel();
		}
		
	});
Josn2table.implement(new Chain, new Events, new Options);

var Ajax2table= Josn2table.extend({
	initialize: function(table,send_url,options,senddata){
			this.template = []
			this.clumns = [];
			this.loading = '<samp class="loading" style="font-family: Geneva, Arial, Helvetica, sans-serif;font-size:10px;">LOADING...</samp>';
			this.setTemplate(table);
			this.setOptions(options);
			this.setSenddata(senddata);
			this.MYRequest = new Ajax(send_url,
				{onComplete:this.onComplete.bind(this)
				,onFailure:this.onFailure.bind(this)
				,onRequest:this.onRequest.bind(this)
				,onCancel:this.onFailure.bind(this)
				}
			);
			if(senddata)this.send();
	},
	onComplete:function(text, xml){
		text = text.trim();
		var person;
		if ( text.substr(0,1) == "[" ){
			try{
				eval('person = '+text+';');
			}catch(e){alert('無法分析資料!\n'+'person = '+text+';')};
		}else{
			try{
				eval(text);
			}catch(e){alert('無法分析回傳資料'+'\ndata:'+text)};
		}
		
		this.data = [];
		if (  person.length > 0 ){
			for(var i = 0 ; i < person.length ; i++ ){
				this.data.push(person[i]);
			}
			this.setData(this.data);
		}else{
			this.onEmpty();
		}
		this.fireEvent('onComplete', [person]);
	},
	send:function(senddata){
		if(!senddata) senddata = this.senddata;
		this.startLoad();
		this.MYRequest.request(senddata);
	}
});
		
showSubmenu_opacity = new Class({
	options: {
		fx_options: {
			onStart: Class.empty,
			onComplete: Class.empty,
			onCancel: Class.empty,
			transition: function(p){
				return -(Math.cos(Math.PI * p) - 1) / 2;
			},
			duration: 500,
			unit: 'px',
			wait: true,
			fps: 50
		}
		,align:'left' // center right
	},
	initialize: function(all_els,options){
		this.setOptions(options);
		this.els = [];
		for(var i = 0 ; i < all_els.length ; i++ ){
			var els = [$(all_els[i][0]),$(all_els[i][1])];
			if ( !els[0] ){
				alert('showSubmenu_opacity error :'+all_els[i][0]);
				this.emptyself();
				return;
			}
			if ( !els[1] ){
				alert('showSubmenu_opacity error :'+all_els[i][1]);
				this.emptyself();
				return;
			}
			this.els.push(els);
			els[1].setStyle('display','none');
		}
		window.addEvent('domready', this.fx_setup.bind(this));
		
		//e = new Event(e);
	},
	setSubpoint:function(){
		for(var i = 0 ; i < this.els.length ; i++ ){
			var els = this.els[i];
				els[1].setStyle('display','');
				var size = els[0].getCoordinates();
				var size2 = els[1].getCoordinates();
				var ws = window.getSize();
				
				switch( this.options.align.toLowerCase() ){
					case 'center':
					case 'c':
						size.left -= (size2.width-size.width)/2;
						break;	
					case 'right':
					case 'r':
						size.left = size.right - size2.width;
						break;	
					case 'left':
					default:
						break;	
				}
				var left = ( ws.scrollSize.x - size2.width );
				if (  left >  size.left ) left = size.left;
				els[1].setStyles({position:'absolute',Zindex:33244794+i,top:size.bottom,left:left});
		}
	},
	fx_setup:function(){
		this.setSubpoint();
		for(var i = 0 ; i < this.els.length ; i++ ){
			var els = this.els[i];
				els[0].ishidde = true;
				els[0].__FX = new Fx.Style(els[1], 'opacity',{}).set(0);
				els[0].addEvent('click', function(e){
					e = new Event(e);
					this.__FX.stop();
					if ( this.ishidde )	this.__FX.start(0,1);
					else this.__FX.start(1,0);
					this.ishidde = !this.ishidde;
					e.stop();
				});

		}
		window.addEvent('resize', this.setSubpoint.bind(this));
		document.addEvent('mousedown', this.fx_hide.bind(this,e));
	},
	fx_hide:function(e){
		e = new Event(e);
		for(var i = 0 ; i < this.els.length ; i++ ){
			var els = this.els[i];
			if ( els[0].ishidde ) continue;
			if ( e.target != els[0] && e.target != els[1] )
			if ( !els[0].hasChild(e.target) )
			if ( !els[1].hasChild(e.target) ){
				els[0].__FX.stop();
				els[0].__FX.start(0);
				els[0].ishidde = true;
			}
		}

	}
});
