var lang = {
	'Sun':			'So',
	'Mon':			'Mo',
	'Tue':			'Di',
	'Wed':			'Mi',
	'Thu':			'Do',
	'Fri':			'Fr',
	'Sat':			'Sa',
	'Prev':			'',
	'Next':			'',
	'NetFailed':	'Netzwerk Fehler!',
	'DelItem':		'Möchten Sie wirklich löschen?',
	'NameAvail':	'Gültig',
	'NameExist':	'Bereits vergeben, bitte verwenden Sie einen Anderen.',
	'OConfirm':		'Möchten Sie die Bestellung bestätigen?',
	'OCancel':		'Möchten Sie die Bestellung ablehnen?',
	'Unavailable'	:'Nicht verfügbar',
	'Available'		:'Verfügbar',
	'In_basket' :'Bereits im Warenkorb.',
	'Meterial'		:'Artikel : ',
	'bookit'		:'Bestellen',
	'From'			:'Von',
	'To'			:'Bis',
	'PutInBasket'	:'Dieser Artikel steht jetzt in Ihrem Warenkorb!',
	'AcceptAll'		:'Sie müssen alle Ausleihbedingungen akzeptieren!',
	'FormComplete'	:'Bitte f&uuml;llen Sie das Formular vollständig aus!',
	'Success'		:'Erfolgreich behandelt',
	'ContinueBook'	:'Möchten Sie weitere Termine für diesen Artikel reservieren? Ansonsten Abbrechen klicken!'
};

//扩展Date
Date.implement({
	// 上指定天数
	addDate: function(days){
		this.setTime(this.getTime() + days * 86400000);
		return this;
	},

	//获得与指定日期之间相距天数
	getDateSpan: function(date){
		return Math.floor((this.getTime() - date.getTime()) / 86400000);
	}
});

var CalendarView = new Class({
	initialize: function(){
		//初始化参数
		this.days_name = [lang['Sun'],lang['Mon'],lang['Tue'],lang['Wed'],lang['Thu'],lang['Fri'],lang['Sat']];
		this.today = new Date();
	}
});

//月历显示类
var MonthView = CalendarView.extend({

	//取得指定月份的天数
	getMonthDays: function(year,month){
		return new Date(year,month+1,0).getDate();
	},
		
	//取得指定月份的行数
	getMonthRows: function(year,month){
		return Math.ceil((this.getMonthDays(year,month)+new Date(year,month,1).getDay())/7);
	},
	
	//画出日历图
	draw: function(year,month){

		this.dates = new Array();
		this.dates.empty();

		var cal = new Element("div",{
			"id":"calendar"
		});
		
		var table = new Element("table",{
			"id":"cal_table",
			"cellspacing":0
		});
		
		//表头，显示星期 
		var thead = new Element("thead").inject(table);
		var row   = new Element("tr").inject(thead);
		
		for (var i=0;i<7;i++){
			td = new Element("th").inject(row);
			new Element("div",{
				"html":this.days_name[i]
			}).inject(td);
		}
		
		rows = this.getMonthRows(year,month);
		
		current_day = new Date(year,month,1).addDate(-new Date(year,month,1).getDay());
		
		if ( current_day.getHours() == 23) 
    {		
		  current_day = new Date(current_day.getTime() + 60*60*1000);
		}
    else if ( current_day.getHours() == 1)
    {
		  current_day = new Date(current_day.getTime() - 60*60*1000);
    } 
		
		//表体，显示月历
		var tbody = new Element("tbody").inject(table);
		
		for (var i=0;i<rows;i++){
			row = new Element("tr").inject(tbody);
			for (var j=0;j<7;j++){
				td_id = "cal_day";
				td_id = (current_day.getDay() === 6 || current_day.getDay() === 0)?"cal_weekend":td_id;
				td_id = (current_day.getMonth() === month)?td_id:"cal_outday";
				td_id = (this.today.getDateSpan(current_day) === 0)?"cal_today":td_id;
				td = new Element("td",{
					"id":td_id
				}).inject(row);
				//this.dates[i*7+j] = [td,current_day.getFullYear()+"-"+(current_day.getMonth()+1)+"-"+current_day.getDate()];
				new Element("div",{
					"html":current_day.getDate()
				}).inject(td);
				
				if(current_day.getMonth() === month){
					this.dates[current_day.getDate()] = td;
				}
				
				//current_day.addDate(1);
				current_day.setDate(current_day.getDate()+1);
			}
		}
		table.inject(cal);
		return cal;
	}
});

//月历模型，操作逻辑实现
var MonthModel = new Class({
	initialize: function(mid){
		this.y = new Date().getFullYear();//当前年份
		this.m = new Date().getMonth();//当前月份
		//this.today();
		this.mid = mid;
		//this.selectStart = false;
		this.Req = new Request.JSON();
	},

	pre: function(){
		if (this.m === 0){
			this.y--;
			this.m = 11;
		} else {
			this.m--;
		}
		return this.show();
	},
	
	next: function(){
		if (this.m === 11){
			this.y++;
			this.m = 0;
		} else {
			this.m++;
		}
		return this.show();
	},

	today: function(){
		this.y = new Date().getFullYear();//当前年份
		this.m = new Date().getMonth();//当前月份
		return this.show();
	},

	show: function(){
		View	= new MonthView();
		el		= View.draw(this.y,this.m);
		var url = AjaxURL+"index.php?id="+ajax_pid+"&no_cache=1&type=222&tx_edlend_pi1[mode]=mstatus&tx_edlend_pi1[id]="+this.mid+"&tx_edlend_pi1[year]="+this.y+"&tx_edlend_pi1[month]="+(this.m+1);
		this.Req.cancel();	
		this.Req = new Request.JSON({method:'get',url:url,onSuccess:function(days){
			for (day in days){
				if(days[day] == 2){
					var ava = new Element("p",{
						"id":"in_basket"
					}).inject(View.dates[day]);
				} else if(days[day] == 1){
					var ava = new Element("p",{
						"id":"available"
					}).inject(View.dates[day]);
				}else{
					var ava = new Element("p",{
						"id":"unavailable"
					}).inject(View.dates[day]);
				}
				
			}
		}}).get();
		return el;
	},

	current: function(){
		return (this.m+1)+"/"+this.y;
	}
});

//日历
var MyCalendar = {

	start: function(mname,mid,display){
		Dialog.open(750,300,true);
		
		month = new MonthModel(mid);
		var controller = new Element("div",{
			"id":"cal_control"
		}).inject($('dialog_box'));
		
		var close = new Element("input",{
			"id":"cal_close",
			"type":"button",
			"value":"Close",
			"events":{
				"click":Dialog.close
			}
		}).inject(controller);
		
		if(display){
			this.control();
		}
		
		var book = new Element("div",{
			"id":"bookname",
			"html":"<h3>"+lang['Meterial']+mname+"</h3>"
		}).inject($('dialog_box'));
		if(display){
			var cal = new Element("div",{
				"id":"calendar"
			}).inject($('dialog_box'));
			month.today().replaces($("calendar"));
		}
		this.datepicker(mid,mname);
	},
	
	control: function(){

		var control_bar = new Element("div",{
			"id":"control_bar"
		}).inject($('dialog_box'));

		var prev = new Element("input",{
			"id":"cal_prev",
			"type":"button",
			"value":"<< "+lang['Prev']+" ",
			"events":{
				"click":function(){
					month.pre().replaces($("calendar"));
					cdate.innerHTML = month.current();
				}
			}
		}).inject(control_bar);

		var next = new Element("input",{
			"id":"cal_next",
			"type":"button",
			"value":" "+lang['Next']+" >>",
			"events":{
				"click":function(){
					month.next().replaces($("calendar"));
					cdate.innerHTML = month.current();
				}
			}
		}).inject(control_bar);

		var today = new Element("input",{
			"id":"cal_today",
			"type":"button",
			"value":"Heute",
			"events":{
				"click":function(){
					month.today().replaces($("calendar"));
					cdate.innerHTML = month.current();
				}
			}
		}).inject(control_bar);

		var current = month.current();

		var cdate = new Element("span",{
			"id":"cal_date",
			"html":current
		}).inject(control_bar);
		
		var avail = new Element("span",{
			"id":"available",
			"html":"&nbsp;"+lang['Available']+"&nbsp;"
		}).inject(control_bar);
		
		var avail = new Element("span",{
			"id":"unavailable",
			"html":"&nbsp;"+lang['Unavailable']+"&nbsp;"
		}).inject(control_bar);

		var avail = new Element("span",{
			"id":"in_basket",
			"html":"&nbsp;"+lang['In_basket']+"&nbsp;"
		}).inject(control_bar);

	},

	datepicker:function(mid,mname){
		var url = AjaxURL+"index.php?id="+ajax_pid+"&no_cache=1&type=222&tx_edlend_pi1[mode]=book&tx_edlend_pi1[mid]="+mid+"&tx_edlend_pi1[mname]="+mname;

		var pickeddate = new Element("div",{
			"id":"pickeddate"
		}).inject($('dialog_box'));

		var picker = new Element("form",{
			"action":url,
			"method":"get",
			"id":"datepicker",
			"html":lang['From']+": &nbsp; <input type='text' name='tx_edlend_pi1[from]' id='from_date' onFocus=\"WdatePicker({lang:'de'})\">"+
					" &nbsp; "+lang['To']+": <input type='text' name='tx_edlend_pi1[to]' id='to_date' onFocus=\"WdatePicker({lang:'de'})\">"+
					" &nbsp; <input type='button' value='"+lang['bookit']+"' id='booksend'>"
		}).inject($('dialog_box'));
		
		$('booksend').addEvent('click',function(){
			var bookForm = $('datepicker');
			bookForm.send();
			bookReq = bookForm.get('send');
			bookReq.onSuccess = function(rText){
				if(rText == 'Success'){
					if($('basketnum')){
						num = $('basketnum');
						num.innerHTML = parseInt(num.innerHTML)+1;
					}
					//alert(lang['PutInBasket']);
					if (confirm(lang['ContinueBook'])){
						month.today().replaces($("calendar"));
					}else{
						Dialog.close();
					}
					
					
				}else{
					alert(rText);
				}
			}
		});
	}
};

//对话窗
var Dialog = {
	open: function(width,height,space_click){
		width = width?width:200;
		var overlay_iframe = new Element("iframe",{
			"id":"overlay_iframe"
		}).inject(document.body);
		
		var overlay = new Element("div",{
			"id":"overlay",
			"events":{
				"click":function(){
					if (space_click)	Dialog.close();
				}
			}
		}).inject(document.body);
		
		var dialog_box = new Element("div",{
			"id":"dialog_box",
			"styles":{
				"width":width,
				"margin-left":0-width/2
			}
		}).inject(document.body);
		if(!Browser.Engine.trident4)	dialog_box.setStyle("margin-top",0-height/2-50);
	},

	close: function(){
		$('overlay_iframe').destroy();
		$('overlay').destroy();
		$('dialog_box').destroy();
	}
};

//提示信息
var Msg = {
	main: function(message){
		Dialog.open(200,100);
		var msg_box = new Element("div",{
			"id":"msg_box",
			"html":"<p>"+message+"</p>"
		}).inject($('dialog_box'));
	},
	
	//提示
	show: function(message){
		Msg.main(message);
		var button = new Element("input",{
			"type":"button",
			"value":"OK",
			"events":{
				"click":Dialog.close
			}
		}).inject($('msg_box'));
	},
	
	//确认
	confirm: function(message,fn){
		Msg.main(message);
		var button = new Element("input",{
			"type":"button",
			"value":"Ja",
			"events":{
				"click":function(){
					(fn)();
					Dialog.close();
				}
			}
		}).inject($('msg_box'));
		
		var button = new Element("input",{
			"type":"button",
			"value":"Nein",
			"events":{
				"click":Dialog.close
			}
		}).inject($('msg_box'));
	}
};

//数据操作
var Data = {
	
	del: function(sendUrl,fn,item_id){
		item_id = (item_id == "ldel") ? item_id : 'del';
		$$('a[id='+item_id+']').each(function(item){
			item.addEvent('click',function(){
				Msg.confirm(lang['DelItem'],function(){
					var el = item.getParent().getParent();
					url = sendUrl+el.id;
					var delRequest = new Request({method:'get',url:url}).send();
					delRequest.onSuccess = function(rText){
						if (rText.substring(0,7) == "Success"){
							if(fn != ""){
								eval(fn);
							}
							el.destroy();
						}else{
							Msg.show(rText);
						}
					};
		
					delRequest.onFailure = function(){
						Msg.show(lang['NetFailed']);
					};
				});
			});
		});
	}
};

//初始化操作
var Site = {

	start: function(){
		if ($('booklist'))		Site.parseBookName();
		if ($('bookit'))		Site.parseBookList();
		if ($('userlist'))		Site.parseUserList();
		if ($('Registriert'))	Site.checkUserName();
		if ($('material_list'))	Site.parseMaterialList();
		if ($('orders'))		Site.parseOrders();
		if ($('region_list'))	Site.parseRegionList();
		if ($('category_edit'))	Site.parseCategoryList();
		if ($('bcat_id')){
			//Site.getSubCat();
			$('bcat_id').addEvent('change',Site.getSubCat);
		}
		if($('basket_list'))	Site.parseBasket();
		if($('remove_img'))	Site.removeImg();
	},
	
	removeImg: function(){
		url = AjaxURL+"index.php?id="+ajax_pid+"&no_cache=1&type=222&tx_edlend_pi1[mode]=idel&tx_edlend_pi1[mid]=";
		var item = $('remove_img');
		item.addEvent('click',function(){
			Msg.confirm(lang['DelItem'],function(){
				var el = item.getParent().getParent();
				url = AjaxURL+url+el.id;
				var delRequest = new Request({method:'get',url:url}).send();
				delRequest.onSuccess = function(rText){
					if (rText.substring(0,7) == "Success"){
						item.getParent().destroy();
					}else{
						Msg.show(rText);
					}
				};
		
				delRequest.onFailure = function(){
					Msg.show(lang['NetFailed']);
				};
			});
		});
	},
	
	parseBasket: function(){
		url = AjaxURL+"index.php?id="+ajax_pid+"&no_cache=1&type=222&tx_edlend_pi1[mode]=bdel&tx_edlend_pi1[mid]=";
		Data.del(url,"el.getNext().destroy();if($('basketnum')){num = $('basketnum');num.innerHTML = parseInt(num.innerHTML)-1;}");
		$('basket').addEvent('submit',function(){
			allAccepted = true;
			notEmpty = true;
			$$('input[name=accept]').each(function(item){
				if(item.checked === false){
					allAccepted = false;
				}
			});
			$$('input[type=text]').each(function(item){
				if(item.value === ''){
					notEmpty = false;
				}
			});
			
			if(allAccepted === false){
				Msg.show(lang['AcceptAll']);
				return false;
			}
			
			if(notEmpty === false){
				Msg.show(lang['FormComplete']);
				return false;
			}
			
		});
	},
	
	parseBookName: function(){
		$$('a[id=bookname]').each(function(item){
			item.addEvent('mouseup',function(e){
				el = item.getParent().getParent().getLast();
				if(el.style.display === 'none'){
					item.innerHTML = "[ mehr -- ]";
					el.style.display = 'block';
				}else{
					item.innerHTML = "[ mehr ++ ]";
					el.style.display = 'none';
				}
			});
		});
		$$('a[id=contact]').each(function(item){
			item.addEvent('mouseup',function(e){
				div = item.getParent().getNext();
				if(div.style.display === 'none'){
					item.innerHTML = "[ kontakt -- ]";
					div.style.display = 'block';
				}else{
					item.innerHTML = "[ kontakt ++ ]";
					div.style.display = 'none';
				}
			});
		});
		
		$$('a[id=lightbox]').each(function(item){
			item.addEvent('click',function(e){
				Dialog.open(640,480,true);
				var controller = new Element("div",{
					"id":"cal_control"
				}).inject($('dialog_box'));
				
				var close = new Element("input",{
					"id":"cal_close",
					"type":"button",
					"value":"Close",
					"events":{
						"click":Dialog.close
					}
				}).inject(controller);
				
				var src = item.getChildren().getProperty('id');
				var img = new Element('img',{
					"src":src,
					"styles":{
						"max-width":640
					}
				}).inject($('dialog_box'));;
			});
		});
	},
	
	parseBookList: function(){
		$$('a[id=bookit]').each(function(item){
			item.addEvent('click',function(){
				var display = true;
				if(item.getNext()){
					display = (item.getNext().id == "0")?false:true;
				}
				MyCalendar.start(item.parentNode.id,item.parentNode.parentNode.id,display);
			});
		});
	},
	
	parseUserList: function(){
		url = AjaxURL+"index.php?id="+ajax_pid+"&no_cache=1&type=222&tx_edlend_pi1[mode]=udel&tx_edlend_pi1[uid]=";
		Data.del(url);
	},
	
	parseRegionList: function(){
		url = AjaxURL+"index.php?id="+ajax_pid+"&no_cache=1&type=222&tx_edlend_pi1[mode]=rdel&tx_edlend_pi1[rid]=";
		Data.del(url);
	},
	
	parseCategoryList: function(){
		$('delete').addEvent('click',function(){
			$('catform').action += "cdel";
			$('catform').submit();
		});
		$('rename').addEvent('click',function(){
			$('catform').action += "cedit";
			$('catform').submit();
		})
	},
	
	checkUserName: function(){
		var username = $('username');
		username.addEvent('blur',function(){
			if (username.value != ''){
				url = AjaxURL+"index.php?id="+ajax_pid+"&no_cache=1&type=222&tx_edlend_pi1[mode]=ucheck&tx_edlend_pi1[uname]="+username.value;
				var checkReq = new Request({method:'get',url:url}).send();
				checkReq.onSuccess = function(rText){
					if (rText.substring(0,7) == "Success"){
						$('is_username_ok').innerHTML = lang['NameAvail'];
						$('is_username_ok').setStyle('color','green');
					}else{
						$('is_username_ok').innerHTML = lang['NameExist'];
						$('is_username_ok').setStyle('color','red');
					}
				};
				
				checkReq.onFailure = function(){
					Msg.show(lang['NetFailed']);
				};
			}
		});
	},
	
	parseMaterialList: function(){
		url = AjaxURL+"index.php?id="+ajax_pid+"&no_cache=1&type=222&tx_edlend_pi1[mode]=mdel&tx_edlend_pi1[mid]=";
		Data.del(url);
	},
	
	parseOrders: function(){
		$$('a[id=customer]').each(function(item){
			item.addEvent('click',function(){
				var el = item.parentNode.childNodes[0];
				Msg.show(el.innerHTML);
			});
		});
		$$('a[id=confirm]').each(function(item){
			item.addEvent('click',function(){
				Msg.confirm(lang['OConfirm'],function(){
					Site.lendConfirm(1,item);
				})
			});
		});
		$$('a[id=cancel]').each(function(item){
			item.addEvent('click',function(){
				Msg.confirm(lang['OCancel'],function(){
					Site.lendConfirm(2,item);
				})
			});
		});
		url = AjaxURL+"index.php?id="+ajax_pid+"&no_cache=1&type=222&tx_edlend_pi1[mode]=ldel&tx_edlend_pi1[lid]=";
		Data.del(url,"el.getParent().destroy();",'ldel');
	},
	
	lendConfirm: function(cfm,el){
		var lid = el.parentNode.id;
		var url = AjaxURL+"index.php?id="+ajax_pid+"&no_cache=1&type=222&tx_edlend_pi1[mode]=lcfm&tx_edlend_pi1[lid]="+lid+"&tx_edlend_pi1[cfm]="+cfm;
		var conReq = new Request({method:'get',url:url}).send();
		conReq.onSuccess = function(rText){
			if (rText.substring(0,7) == "Success"){
				if(cfm == 1){
					el.parentNode.parentNode.childNodes[4].innerHTML = "Best&auml;tigt";
				}else{
					el.parentNode.parentNode.childNodes[4].innerHTML = "Abgelehnt";
				}
			}else{
				Msg.show(rText);
			}
		};
			
		conReq.onFailure = function(){
			Msg.show(lang['NetFailed']);
		};
	},
	
	getSubCat: function(){
		if($('bcat_id').selectedIndex == 0){
			$('cat_id').length = 1;
			return;
		}
		
		var url = AjaxURL+"index.php?id="+ajax_pid+"&no_cache=1&type=222&tx_edlend_pi1[mode]=scat&tx_edlend_pi1[cid]="+$('bcat_id').value;
		
		var catReq = new Request.JSON({method:'post',url:url,onSuccess:function(cats){
			var cat = $('cat_id');
			cat.length = 1;
			for (id in cats){
				cat.options[cat.options.length] = new Option(cats[id],id);
			}
		}}).get();
		
		catReq.onFailure = function(){
			Msg.show(lang['NetFailed']);
		}

	}

};

window.addEvent('domready',Site.start);
