var customsearch =  {
	timeMode : 0,
	calendarInputField:false,
	listResultDetailLink:false,
	listResultTicketLink:false,
	listURL: false,
	is_list:false,
	showEmptyDetailResult : function(json) {
		
	},
	showDetailResult : function(json) {
		
		var e = json.event;
		var prev = jQuery('#iv_'+e.id);
		
		var detail = jQuery("<div></div>");
		
		detail.slideDown(200);
		detail.insertAfter(prev);
	},
	showSpinner : function () {
		jQuery('#wait').fadeIn(100);
	},
	hideSpinner : function () {
		jQuery('#wait').fadeOut(100);
	},
	showEmptyListResult : function() {
		this.showSearchHeadline();
		jQuery('#results').empty();
		jQuery('#results').append("<h2 class='listung_termin'>Ihre Suchanfrage brachte keine Treffer</h2>");
		jQuery('.footer_valistung').empty();
	},
	showSearchHeadline : function () {
		var headline_elem = jQuery('.listung h1.list_head');
		switch (this.timeMode) {
		case 0:
			headline_elem.html("Tagesübersicht: "+this.from);
			break;
		case 1:
			headline_elem.html("Tagesübersicht: "+this.from);
			break;
		case 2:
			headline_elem.html("Wochenübersicht: "+this.from +" - "+this.to);
			break;
		case 3:
			headline_elem.html("Wochenende: "+this.from +" - "+this.to);
			break;
		case 4: 
			headline_elem.html("Zeitraum: "+this.from +" - "+this.to);
			break;
		default:
			headline_elem.html("");
			break;
			
		}
	},
	showListResults : function(json) {
		console.debug("showListResults");
		this.result = json;
		this.showSearchHeadline();
		jQuery('#results').empty();
		var last_date = 0;
		jQuery.each(json.events, jQuery.proxy(function(k,e) {
			var start = (e.start) ? e.start :false;
			var end = (e.end) ? e.end :false;
			var detailLink = this.listResultDetailLink;
			var ticketLink = this.listResultTicketLink;
			var regSearch = /\{\{([^\{\}]*)\}\}/g;
			
			if (e.detailLink != false) {
				//console.debug(e.detailLink);
				detailLink = e.detailLink;
			} else {
				// Das zieht Performance...
				while (res = regSearch.exec(this.listResultDetailLink)) {
					detailLink = detailLink.replace(eval("/\{\{"+res[1]+"\}\}/"), e[res[1]]);
				}
			}
			if (e.ticketLink != false) {
				ticketLink = e.ticketLink;
			} else {
				// Das zieht Performance...
				while (res = regSearch.exec(this.listResultTicketLink)) {
					ticketLink = ticketLink.replace(eval("/\{\{"+res[1]+"\}\}/"), e[res[1]]);
				}
			}
			
			if (k == 0 || start.date != last_date) { 
				jQuery('#results').append(jQuery("<div class='grouping'>" +
					"	<h1 class='grouping'>"+start.date+"</h1>" +
					"</div>"));
			
			} 
			var entry = jQuery('<div id="iv_'+e.eventId+'" class="item_veranstaltung"></div>');
			var veranstaltungszeitraum="";
			
			if (start.date != undefined && end.date != undefined) {
				if (start.date != end.date) {
					veranstaltungszeitraum = start.date+" - "+end.date+"<br/>";
				}
			}
			if (start.time != undefined) {
				if (start.time != "00:00") {
					veranstaltungszeitraum += "<br/>"+start.time;
				}
			}
			if (veranstaltungszeitraum=="") {
				veranstaltungszeitraum = "&#160";
			}
			
			
			var termin_left = jQuery("<div class='terminLeft'>" +
					"	<a target='_top' href='"+detailLink+"'>" +
					"		<div class='veranstaltungszeitraum'>" +
									veranstaltungszeitraum +
					"		</div>" +
					"	</a>" +
					"</div>");
			
			var has_ticket = false;
			if (e.miniTicketInfo != undefined) {
				if (e.miniTicketInfo.ticketPrices != undefined) {
					var prices = e.miniTicketInfo.ticketPrices;
						for (var i=0;i<prices.length;i++) {
							if (prices[i].available_online == "1" && this.validateOrderTime(start.date, start.time)) {
								has_ticket = true;
								break;
							}
						}
				}
			}
			var maz_cardrabatt = false;
			if (e.customInfo6!=undefined) {
				maz_cardrabatt = (e.mazcardbonus) ? true : false;
			}
			
			
			var termin_right = jQuery("<div class='terminRight'>" +
					"	<h2 class='listung_termin'>" +
					"		<div class='veranstaltungskategorie'>"+e.categoryCombination.category1+"</div>" +
					((maz_cardrabatt)? "<div class='mazcard_rabatt'><img src='http://www.maerkischeallgemeine.de/g/icon_mazcard.gif' width='27' height='18' border='0'/></div>" : "") +
					"		<div class='veranstaltungstitel'>" +
					"			<a target='_top' href='"+detailLink+"'>"+e.eventIdentifier+"</a>" + 
					((has_ticket) ? "&nbsp;<a target='_top' href='"+ticketLink+"' class='tickets'>» Tickets</a>" : "") +
					"		</div>" +
					"		<div class='floatclear'></div>" +
					"	</h2>" +
					"	<h3 class='listung_termin'>" +
					"		<div class='veranstaltungstitel'>" +
					"			<a target='_top' href='"+detailLink+"'>"+e.venueIdentifier+" ("+e.town+")</a>" +
					"		</div>" +
					"	</h3>" +
					"</div>");
			entry.append(termin_left);
			entry.append(termin_right);
			entry.append(jQuery("<div class='floatclear'></div>"));
			jQuery('#results').append("<div id='wait'><br/></div>");
			jQuery('#results').append(entry);
			last_date = start.date;
		},this));
		// Paging
		
		jQuery('.footer_valistung').empty();
		 var footer_left = jQuery("<div class='left'>" +
		 		"	<div class='treffer'>" +
		 				json.result_info +
		 		"	</div>" +
		 		"</div>" +
		 		"<div class='floatclear'></div>");
		 
		 jQuery('.footer_valistung').append(footer_left);
		 
		 var pageination ="";
		 jQuery.each(json.pages, jQuery.proxy(function(k,p) {
			var li_class = (k == (json.pages.length - 1) ) ? "last" : "";
			if (p.isCurrentPage) { 
				pageination+="<li class='"+li_class+"'><strong>"+p.number+"</strong></li>";	
			} else {
				pageination+="<li class='"+li_class+"'><a target='_top' href='javascript:"+p.js_callback+"'>"+p.number+"</a></li>";
			}
		 },this));
		 
		 var footer_right =jQuery("<div class='right'>" +
		 		"	<div class='seitenzahlen'>" +
		 		"		<a name='sr_navSeite' id='sr_navSeite' title='Navigation innerhalb der Seite'></a>" +
		 		"		<div class='none'><h1>Seitennavigation</h1></div>" +
		 		"		<span class='prefix'>Seite:&#160;</span>" +
		 		"		<ul class='seitenzahlen'>" +
		 					pageination +
		 		"		</ul>" +
		 		"	</div>" +
		 		"</div>");
		 jQuery('.footer_valistung').append(footer_right);
			
	},
	
	changeTimespan : function(num) {
		console.debug("changeTimespan:"+num);
		var frm = this.searchForm;
		this.timeMode=num;
		frm.timemode.value=num;
		
		
		for (i=0; i<6; i++) {
			var butName="#kat"+i;
			var but = jQuery(butName);
			if (but) {
				if (i==num) {
					but.removeClass('cal_button_inactive').addClass('cal_button');
					if (i==4) {
						
						// Zeitraumeingabe einschalten
						jQuery('#timespan').css('display', 'inline');
						var start= jQuery('#i_from');
						
						start.focus();
						this.calendarInputField = start;
					} else {
						this.calendarInputField=false;
						// Zeitraumeingabe ausschalten
						jQuery('#timespan').css('display', 'none');
						jQuery('#i_from').css('border', '');
						jQuery('#i_to').css('border', '');
						jQuery('#calendar-container').className="calendar_container";
					}
				} else {
					but.removeClass('cal_button').addClass('cal_button_inactive');
				}
			}
		}
	},
	focusInput : function (obj) {
		var myID = obj.id;
		obj = jQuery("#"+myID);
		var opponents_id = (myID == 'i_from') ? '#i_to' : '#i_from';
		var opp_obj= jQuery(opponents_id);
		var calendar_obj= jQuery('#calendar-container');
		calendar_obj.toggleClass="calendar_container_active";
		obj.css('border','1px solid #E0000E');
		opp_obj.css('border','');
		this.calendarInputField=obj;
	},
	initSearch : function (opts) {
		var from_isset = false;
		var to_isset = false;
		console.debug(opts);
		if (	(opts.to != undefined && opts.to != '')  || 
				(opts.from!= undefined && opts.from!= '') ||
				(opts.category!= undefined && opts.category!= '') || 
				(opts.region != undefined && opts.region != '') || 
				(opts.attribute != undefined && opts.attribute != '') || 
				(opts.query!= undefined && opts.query !='')
			) {
			var attribute_search = (opts.attribute != undefined) ? true : false;
			if ((opts.to != undefined && opts.to != '') && this.searchForm) {
				this.searchForm.to.value = opts.to;
				to_isset = true;
			}
			if ((opts.from!= undefined && opts.from!= '') && this.searchForm) {
				this.searchForm.from.value = opts.from;
				from_isset = true;
			}
			
			if (!from_isset && this.searchForm) {
				this.searchForm.from.value = this.from;
			}
			if (!to_isset && this.searchForm) {
				
				if (attribute_search) {
					var Jahr = this.today.getFullYear();
					var Monat = this.today.getMonth();
					var Tag = this.today.getDate();
					var one_year_later = new Date((Jahr + 1),Monat,Tag);
					this.searchForm.to.value = this._jsDateToString(one_year_later);
				} else {
					this.searchForm.to.value = this.from;
				}
				
			}
			
			this.timeMode = ((to_isset && from_isset) || attribute_search) ? 4 : 0;
			if (typeof(this.changeTimespan)=='function') {
				if ((to_isset && from_isset) || attribute_search) {
					
					
					this.changeTimespan(4);
					
					
				} else {
					//Calendar.setup({date:this._stringToDate(this.from)});
					this.searchForm.dat_selected.value = (this.from==this.getToday()) ? "» Heute "+this.from : "» "+this.from;
					
					this.changeTimespan(0);
				}
			}
			
			
			if (opts.region != undefined && this.searchForm) {
				jQuery.each(this.searchForm.region, function(k,v){
					if(v.value != undefined) {
						if (v.value.toLowerCase() == opts.region.toLowerCase()) {
							v.selected = true;
							
							return false;
						}
					}
				});
				
			}
			if (opts.category != undefined && this.searchForm) {
				
				jQuery.each(this.searchForm.category, function(k,v){
					if(v.value != undefined) {
						if (v.value.toLowerCase() == opts.category.toLowerCase()) {
							v.selected = true;
							
							return false;
						}
					}
				});
				
			}
			if (opts.query != undefined && this.searchForm) {
				this.searchForm.query.value=opts.query;
			}
			if (opts.attribute != undefined && this.searchForm) {
				this.searchForm.attribute.value=opts.attribute;
			}
			
			this.is_list=true;
			this.submitSearch();
		}
	},
	submitSearch : function () {
		var frm = this.searchForm;
		var attribute = (frm.attribute) ? frm.attribute.value : false;
		attribute = (attribute!="") ? attribute : false;
		
		
		var category = frm.category.value;
		
		
		this.category = (category!="" && !attribute) ? category : false;
		
		var region = frm.region.value;
		this.region =  (region != "" && !attribute) ?  region : false;
		
		if(frm.query.value.length>2 && !attribute) {
			this.query = frm.query.value;
		} else {
			this.query=false;
		}
		
		var Jahr = this.today.getFullYear()
		var Monat = this.today.getMonth();
		var Tag = this.today.getDate();
		//timemode = (!isNaN(timemode)) ? timemode : 5;
		//console.debug("suchmodus:"+this.timeMode);
		switch (this.timeMode) {
			case 0:
				var regs = frm.dat_selected.value.match(/(\d{2}\.\d{2}\.\d{4})/);
				var calendar_value = regs[1];
				this.from = calendar_value;
				this.to = calendar_value;
				frm.from.value=this.from;

			break;
			case 1:
				var tomorrow = new Date(Jahr,Monat,(Tag + 1));
				this.from = this._jsDateToString(tomorrow);
				this.to = this._jsDateToString(tomorrow);
				
				frm.from.value=this.from;
			break;
			case 2:
				var sevenday = new Date(Jahr,Monat,(Tag + 7));
				this.from = this._jsDateToString(this.today);
				this.to = this._jsDateToString(sevenday);
				frm.from.value=this.from;
				frm.to.value=this.to;
			break;
			case 3:
				if (this.today.getDay() != 0 && this.today.getDay() != 6) {
					var saDiff = (6 - this.today.getDay());
					var soDiff = saDiff + 1;
					
					var saturday = new Date(Jahr,Monat,(Tag + saDiff));
					var sunday = new Date(Jahr,Monat,(Tag + soDiff));
				} else {
					if (this.today.getDay() == 6) {
						var saturday = this.today;
						var sunday = new Date(Jahr,Monat,(Tag+1));
					}
					if (this.today.getDay() == 0) {
						var saturday = new Date(Jahr,Monat,(Tag-1));
						var sunday = this.today;
					}
				}
				this.from = this._jsDateToString(saturday);
				this.to = this._jsDateToString(sunday);
				frm.from.value=this.from;
				frm.to.value=this.to;

			break;
			case 4:


				var d_von_val = frm.from.value;
				var d_bis_val = frm.to.value;
				// durch den datumsvalidater laufen, egal ob input oder nicht
				var d_von_Date = this._stringToDate(d_von_val);
				var d_bis_Date = this._stringToDate(d_bis_val);
				if (!d_von_Date || !d_bis_Date) {
					alert("Kein korrekter Zeitraum eingegeben!");
					jQuery('#i_from').focus();
					start
					return false;
				}
				// enddatum darf nicht for startdatum liegen
				if (d_von_Date && d_bis_Date
						 && d_von_Date > d_bis_Date) {
					alert("Enddatum darf nicht vor Startdatum liegen!");
					jQuery('#i_to').focus();
					return false;
				}
				this.from = d_von_val;
				this.to = d_bis_val;
				frm.from.value=this.from;
				frm.to.value=this.to;


			break;
		}
		// wenn ich nicht auf der List-Seite bin, dann Formular zur List-Seite posten
		if (!this.is_list && this.listURL) {
			frm.action = this.listURL;
			return true;
		} else {
			
			this.dateSearch();
		}
		
		return false;
		
	},
	validateOrderTime : function (start_date, start_time) {
		
		var start = this._stringToDate(start_date);
		var time_parts = start_time.split(":");
		start.setHours(time_parts[0]);
		start.setMinutes(time_parts[1]);
		
		var today_time_parts = this.time.split(":");
		var now = this.today;
		now.setHours(today_time_parts[0]);
		now.setMinutes(today_time_parts[1]);
		//console.debug(now);
		//console.debug(start);
		var now_ms = now.getTime();
		var start_ms = start.getTime();
		var diff = (start_ms-now_ms)/(86400*1000);
		//console.debug("Start in: "+((start_ms-now_ms)/(1000*86400))+" Tagen");
		//console.debug("DIFF: "+diff);
		if (diff>10) {
			return true;
		} else {
			return false;
		}
	} 
}
