var common = function() {
	var urllink = location.toString();
	var caseType = urllink.substring(urllink.lastIndexOf('\/') + 1, urllink.lastIndexOf('.'));
	if(urllink.lastIndexOf('\/') == urllink.length -1) caseType = '';
	var obj = Ext.urlDecode(urllink.substring(urllink.lastIndexOf('?') + 1, urllink.length));
	var tf = ['radioname', 'introduce'];

	function getTemplate(xtpl){
		var word = (Ext.getDom(xtpl)) ? Ext.getDom(xtpl).innerHTML : xtpl;
		word = word.replace(/\%7B/g, '{').replace(/\%7D/g, '}');
		return word.replace(/TPL/g, 'tpl').replace(/ > /g, ' &gt; ').replace(/ < /g, ' &lt; ');
	}
	
	return {
		checking: false,
		zone: [],
		winBox: null,
		backupTemp: {},
		indexPoint: 0,
		
		init: function(){
			for (x in tf) {
				if (!Ext.get(tf[x])) continue;
				var f = new Ext.form.TextField({ emptyText: Ext.getDom(tf[x]).value,
					emptyClass: '', fieldClass: '', applyTo: tf[x], id: 'ext_'+Ext.getDom(tf[x]).id
				});
				f.getEl().removeClass('x-form-text').removeClass('x-form-empty-field');
			}
			if(caseType == 'p3' || caseType == 'basiccourses'){
				var chb = Ext.query('input[type=checkbox]');
				for(var i=0;i<chb.length;i++){
					chb[i].style.margin = '5px';
				}
				if(!obj.ID) return;
				var cb = function(rspn, option){
					var data = Ext.util.JSON.decode(rspn.responseText);
					Ext.getDom('Regions').value = data.CategoryID;
					this.regMonth = data.ID;
					this.regClasses = data.StartDate+' '+data.Name+','+obj.ID;
					this.changeRegion(Ext.getDom('Regions'), 'Month', 'Classes');
				}
				var cn = new Ext.data.Connection({url:'getdata.php?Type=register'}).request({
					scope: this, method: 'POST', success: cb, params: {paramID: obj.ID}
				});
			}
//			if(caseType == 'index') window.open('ch.php?ID='+obj.ID, 'ch');
			if(Ext.get('region')) this.changeClass(Ext.getDom('region'));
			switch(location.hash){
				case '#errorText': alert('帳號密碼錯誤!!'); break;
			}
			if(caseType == 'p2_2' && Ext.isSafari && Ext.isMac) Ext.getBody().child('[class=chen03]', true).style.paddingTop = '40px';
		}, 
		
		setupSlide: function(){
			var c = Ext.get('slidesContent');
//			var btn = Ext.get('slidesTitle').next();
			var btn = Ext.get('buttoms');
			if(c.dom.style.display == 'none'){
				btn.update('x');
				Ext.get('slides').setWidth(390, {callback: function(el){
					c.dom.style.display = 'block';
					c.child('span').slideIn('b');
				}, scope: this});
			}else{
//				task.cancel();
				btn.update('+');
				c.child('span').slideOut('b', {callback: function(el){ 
					c.dom.style.display = 'none'; 
					Ext.get('slides').setWidth(btn.getWidth()+22, true);
				}});
			}
		},
		
		createWinMsg: function(html){
			this.winBox = new Ext.Window({ modal: true, baseCls: '', headerAsText: false, html: html, closeAction: 'hide', closable: false, 
				resizable: false, shim: false, shadow: false, layout:'fit', closeAction:'hide', animate: true });
				
			this.winBox.on('show', function(p){
				p.center();
				if(!Ext.isSafari) return;
				var objects = Ext.query('object');
				for(var i=0;i<objects.length;i++){
					Ext.getDom(objects[i]).style.display = 'none';
				}	
			});
			this.winBox.on('hide', function(p){
				if(Ext.isSafari) return;
				var objects = Ext.query('object');
				for(var i=0;i<objects.length;i++){
					Ext.getDom(objects[i]).style.display = 'block';
				}
			});
		}, 
		
		openWindows: function(str){
			if(this.backupTemp[str]){
				(this.winBox) ? this.winBox.body.update(this.backupTemp[str]) : this.createWinMsg(this.backupTemp[str]);
				Ext.getDoc().on('mousedown', this.closeWin, this);
				this.winBox.show();
			}else{
				var cb = function(rspn, option){
					(this.winBox) ? this.winBox.body.update(rspn.responseText) : this.createWinMsg(rspn.responseText);
					this.backupTemp[str] = rspn.responseText;
					Ext.getDoc().on('mousedown', this.closeWin, this);
					this.winBox.show();
				}
				var cn = new Ext.data.Connection({url:'getdata.php?Type='+str}).request({
					scope: this, method: 'POST', success: cb
				});
			}
		},
		
		loginUser: function(request){
			var inputs = Ext.query('input', request);
			for(var i=0;i<inputs.length;i++){
				if(inputs[i].value != '') continue;
				alert('請您填入'+inputs[i].title+'，謝謝!!');
				inputs[i].focus();
				return false;
			}
			return true;
		},
		
		closeWin: function(e){
			if(e.within(this.winBox.el)) return;
			this.winBox.hide();
			Ext.getDoc().un('mousedown', this.closeWin, this);
		}, 
		
		setMoreVedio: function(btn){
			if(this.checking) return;
			this.checking = true;
			this.moreBtn = Ext.get(btn);
			var target = Ext.get(btn).parent('div[class=holdVedio]');
			Ext.get('vedioList').child('div').setHeight(target.getHeight()+12);
			Ext.get('vedioList').alignTo(target, 'tl-tr', [-10, -4]).child('div').slideIn('l', {callback: function(el){
				this.checking = false;
				Ext.getDoc().on('mousedown', this.closeIf, this);
			}, scope:this});
		},
		
		closeIf: function(e){
			if(e.within(Ext.get('vedioList')) || e.within(this.moreBtn)) return;
			Ext.get('vedioList').slideOut('l', {callback: function(el){
				el.moveTo(-1000, -1000);
			}, scope: this});
			Ext.getDoc().un('mousedown', this.closeIf, this);
		},
		
		loadVedio: function(btn, uid, target){
			Ext.getDom(target).loadVideoById(uid, 0);
			Ext.get('vedioList').slideOut('l', {callback: function(el){
				el.moveTo(-1000, -1000);
			}, scope: this});
			Ext.getDoc().un('mousedown', this.closeIf, this);
		}, 
		
		changeClass: function(select){
			var cb = function(rspn, option){
				var data = Ext.util.JSON.decode(rspn.responseText);
				var tpl = new Ext.XTemplate(getTemplate('selectTpl'));
				Ext.get('clouseList').update(tpl.apply(data)).show(true);
			}
			var cn = new Ext.data.Connection({url:"getdata.php?Type=getClouse"}).request({
				scope: this, method: "POST", success: cb, params: {paramID: select.value}
			});
		}, 
		
		reset: function(){
			
		}, 
		
		isEmptyField: function(request){
			var list = Ext.query("[rel]", request);
			for (var i = 0; i < list.length; i++) {
				if(Ext.getCmp('ext_'+list[i].id)){
					if(Ext.getCmp('ext_'+list[i].id).getRawValue() == '') { alert('請您填入此欄位，謝謝!!'); list[i][list[i].select ? 'select' : 'focus'](); return true; }
				}else{
					if (list[i].value == "") { alert('請您填入此欄位，謝謝!!'); list[i][list[i].select ? 'select' : 'focus'](); return true; }
				}
			}
			return false;
		},
		
		isNonEmpty: function(request){
			if(this.isEmptyField(request)) return false;
			if (Ext.getDom('EMail').value != '' && !Ext.form.VTypes.email(Ext.getDom('EMail').value)) {
                alert('E-Mail 格式有誤!!'); Ext.getDom('EMail').select(); return false;
            }
			if(Ext.get('Mobile') && !Ext.getDom('Mobile').value.match(/^09(\d{2})-{0,1}(\d{6})/)){
				alert('手機格式有誤'); Ext.getDom('Mobile').focus(); return false;
			}
            var arr = Ext.query('[name^=arr]', request);
            var o = {};
            for(var i=0;i<arr.length;i++){
            	if(!arr[i].checked) continue;
            	var n = arr[i].name.replace('arr_', '');
            	if(!o[n]) o[n] = [];
            	o[n].push(arr[i].value);
            }
            for(x in o) Ext.getDom(x).value = o[x].join('<br>');
			return true;
		}, 
		
		Infoform: function(target){
			var f = ['radioname', 'introduce'];
			for(var i=0;i<f.length;i++){
				if(f[i] == target){
					Ext.getDom(target).focus();
//					Ext.getDom(target).rel = Ext.getCmp('ext_'+target).emptyText;
				}else{
					if(Ext.getDom(f[i]).rel) delete(Ext.getDom(f[i]).rel);
				}
			}
		}, 
		
		selectInfo: function(slt){
			var spans = Ext.query('span[class=shidden]', Ext.get(slt).parent('div', true));
			for(var i=0;i<spans.length;i++) spans[i].style.display = 'none';
			switch(slt.value){
				case '廣播':
					Ext.get('radioname').parent('span', true).style.display = '';
					Ext.get('radioname').show(true);
					break;
				case '學員介紹':
					Ext.get('introduce').parent('span', true).style.display = '';
					Ext.get('introduce').show(true);
					break;
			}
		},
		
		selectRadio: function(input, target){
			Ext.getDom(target).checked = true;
			input.rel = Ext.getCmp('ext_'+input.id).emptyText;
		},
		
		changeValue: function(input, target){
			Ext.getDom(target).checked = true;
			Ext.getDom(target).value = input.value+'個月後';
		},

        changeZone: function(f, t) {
            if (this.zone['T_' + f.value]) { this.addCity(this.zone['T_' + f.value], t); } else {
                var cb = function(rspn, option) {
                    var zip = Ext.util.JSON.decode(rspn.responseText);
                    this.zone['T_' + f.value] = zip;
                    this.addCity(zip, t);
                }
                var cn = new Ext.data.Connection({ url: 'getdata.php?Type=getCity' }).request({
                    scope: this, method: 'POST', params: { paramID: f.value }, success: cb
                });
            }
        },
        
        changeRegion: function(r, m, c){
        	var arr = [m, c];
        	for(var j=0;j<arr.length;j++){
        		var d = Ext.getDom(arr[j]);
        		for (var i = d.options.length; i > 0; i--) d.options[i] = null;
        	}
            var cb = function(rspn, option) {
                var data = Ext.util.JSON.decode(rspn.responseText);
                for (var i = 0; i < data.length; i++) {
	                Ext.getDom(m).options[i+1] = new Option(data[i].Name, data[i].ID);
	            }
	            if(this.regMonth){
	            	Ext.getDom('Month').value = this.regMonth;
	            	common.changeMonth('Regions', Ext.getDom('Month'), 'Classes');
	            	this.regMonth = null;
	            }
            }
            var cn = new Ext.data.Connection({ url: 'getdata.php?Type=getMonth' }).request({
                scope: this, method: 'POST', params: { paramID: r.value }, success: cb
            });
        },
        
        changeMonth: function(r, m, c){
        	r = Ext.getDom(r);
    		var d = Ext.getDom(c);
    		for (var i = d.options.length; i > 0; i--) d.options[i] = null;
            var cb = function(rspn, option) {
                var data = Ext.util.JSON.decode(rspn.responseText);
                for (var i = 0; i < data.length; i++) {
	                Ext.getDom(c).options[i+1] = new Option(data[i].StartDate+' '+data[i].Name, data[i].StartDate+' '+data[i].Name+','+data[i].ID);
	            }
	            if(this.regClasses){
	            	Ext.getDom('Classes').value = this.regClasses;
	            	this.regClasses = null;
	            }
            }
            var cn = new Ext.data.Connection({ url: 'getdata.php?Type=getClasses' }).request({
                scope: this, method: 'POST', params: { paramID: r.value, m: m.value }, success: cb
            });
        },

        addCity: function(data, t) {
            var d = Ext.getDom(t);
            for (var i = d.options.length; i > 0; i--) d.options[i] = null;
            for (var i = 0; i < data.length; i++) {
                d.options[i] = new Option(data[i].Name, data[i].Zip);
            }
        }
	}
} ();

Ext.onReady(common.init, common);
