/************************************************************************
 * 		Erstellung der Einträge im Planner								*
 * 		C 2008 by René Lange & Thomas Müller & Steve Rohrlack @ mindbox	*
 ************************************************************************/
 
var PlannerList = AbstractTabContent.extend({
	dcAcco: new Array(),
	
	initialize : function(tour){
		this.container = new Element('div',{'id':'dayEntrys'});
		this.tour = tour;
		//this.notepadItems = new DcDay();
	},
	
	// Inhalt erstellen
	build : function(rebuild){
		
		// Dann die normalen Tage
		var counter = 0;
		var last = false;
		this.dcAcco = TourPlanner.instance.currentTour.dcAcco;
		TourPlanner.instance.currentTour.dcDays.each(function (day,i){
			if(TourPlanner.instance.currentTour.dcDays.length-1 == i) {
				last = true;	
			}
			this.container.adopt(this.buildToggler(day,i,last));
		}.bind(this));
		return this.container;
	},

	// Ganzen Tag erstellen
	buildToggler : function(day,count,last){
		var accEl = new Element('div',{'class':'accEl '+day.color});
		accEl.adopt(this.buildTogglerHead(day, count)).adopt(this.buildTogglerContent(day, count,last));
		if(last != false) {
			accEl.adopt(new Element('div',{'class':'last'}));
		}
		return accEl;
	},
		
	//
	noItemsToShow: function(){
		return new Element('h5').set('text','There are no entry that could be displayed');
	},
		
	// Eintragskopf erstellen
	buildTogglerHead : function(day,count){
		var accId = day.id_day;
		return new Element('h5',{'class':'accToggler', 'id':'accEl_'+accId}).adopt(
			new Element('span').set('html',this.getHeadTextOfDay(day, count))
		).adopt(new Clearer());
				
	},
	
	// Kopfzeilentext
	getHeadTextOfDay : function (day, count) {
		return 'Day ' + (count+1);
	},
	
	// Inhalt
	buildTogglerContent : function(day, count, last){
		var accContent = new Element('div',{'class':'accContent','id':'accContent_'+count});
		var ffC = 0;
		var j = 0;
		var ffClass = '';
		if(count == 0){
			accContent.adopt(this.buildDescElement('The starting point of yout tour'));
			accContent.adopt(this.buildStartPointContent(day.dcEntries[0], day));
		}
		
		entryCount = day.dcEntries.length;
		accContent.adopt(this.buildDescElement('Your jaunts for the day. Starting with the first.'));
		for (var i = 0; i < entryCount; i++) {
			if (day.dcEntries[i].id_sg_entry != 0 && day.dcEntries[i].shortDetails != '') {
				accContent.adopt(this.buildTogglerEntryContent(day.dcEntries[i], day, count, entryCount, ffClass, j));
				if (ffC++ == 1) {
					ffClass = '';
					ffC = 0;
				} else {
					ffClass = ' blueBg';
					ffC = 1;
				}
				j += 1;
			}
		}
		
		if (!last || count == 0) {
			accContent.adopt(this.buildDescElement('Choose your overnight accommodation for this day'));
			accContent.adopt(this.buildAccomodationList(day.id_acco, count));
		}
		return accContent;
	},
	
	// ein Element was den folgenden Abscshnitt beschreibt
	buildDescElement: function(text){
		return new Element('div',{'class':'accContentDesc'}).set('text',text);
	},
	
	// den Inhalt eines entries bündeln
	buildTogglerEntryContent: function(entry, day, count, entryCount, ffClass, j){
		if(!entry){
			return null;
		}
		if ($defined(entry.highlight) && entry.highlight != 0) {
			entry.shortDetails = string_replace(entry.shortDetails, '<h6>', '<h6 class="highlight">');
		}
		
		// Hack wegen gebrochenen Strings bei einem Entry
		if (entry.img.indexOf('</div>') == -1) {
			entry.img += '"></div>';
		}
		
		var html = entry.img + entry.shortDetails;
		var divId = 'accContentItem_' + count + (isNaN(count) ? '' : '_' + j);
		
		if (html == '') { // SG-Daten wurden nicht gefunden
			html = '<p class="tpNotFound">Entry Information not found</p>';
			
			var accContentItem = new Element('div', {
				'class': 'accContentItem' + ffClass,
				'id': divId
			});
			// Adress Details werden für Druckansicht eingefügt
			html = html + '<div class="hiddenAdressDetails">' + entry.adressDetails + '</div>'; 
			accContentItem.set('html',html).adopt(new RemoveButton(entry.id_entry,'Remove','Details')).adopt(new Clearer());
		} else if (count == 'start') {
			var accContentItem = new Element('div', {
				'class': 'accContentItem' + ffClass,
				'id': divId
			})
			
			// Adress Details werden für Druckansicht eingefügt
			html = html + '<div class="hiddenAdressDetails">' + entry.adressDetails + '</div>'; 
			accContentItem.set('html',html).adopt(new OptionsForm(day, entry, this.tour.dcDays.length, count, 'start')).adopt(new RemoveButton(entry.id_entry,'Remove','start')).adopt(new DetailButton(entry,'Details','start')).adopt(new Clearer());
		} else {
			var accContentItem = new Element('div', {
				'class': 'accContentItem' + ffClass,
				'id': divId
			})
			// Adress Details werden für Druckansicht eingefügt						
			html = html + '<div class="hiddenAdressDetails">' + entry.adressDetails + '</div>'; 
			accContentItem.set('html',html).adopt(new OptionsForm(day, entry, this.tour.dcDays.length, count)).adopt(new RemoveButton(entry.id_entry,'Remove')).adopt(new DetailButton(entry,'Details'));
			accContentItem.adopt(new SortingOptions(entry.id_entry))
			accContentItem.adopt(new Clearer());
		}
		if(count == 'start'){
			accContentItem.getElement('.tpDayOfEntry').setStyle('display','none');
			accContentItem.getElement('.tpDayOfEntry').getPrevious('label').setStyle('display','none');
			accContentItem.getElement('.tpStayTimeOfEntry').setStyle('visibility','hidden');
			accContentItem.getElement('.tpStayTimeOfEntry').set('value',0);
			accContentItem.getElement('.tpStayTimeOfEntry').getPrevious('label').setStyle('visibility','hidden');
		}
		return accContentItem;
	},
	
	// der startpunkt-entry wird zusammengesetzt
	buildStartPointContent: function(entry,day){
		if(TourPlanner.instance.currentTour.tourStart.dcEntries[0] != null){
			entry = TourPlanner.instance.currentTour.tourStart.dcEntries[0];
			day = TourPlanner.instance.currentTour.tourStart;
			return this.buildTogglerEntryContent(entry, day, 'start', 0, ' greenBg', 0);
		}
	},

	// die Liste der Übernachtungsmöglichkeiten zusammensetzen
	buildAccomodationList: function(accoId,count){
		// wrapeer für die Liste aller Accomodations 
		var accAccList = new Element('div',{'class':'accAccoList'});
		var accAccEl = null;
		// im Letzten Tag keine Accos mehr
		var accoLength = this.dcAcco.length;
		
		for (var i = 0; i < accoLength; i++) {
			// wrapper für Inhalte zu einer Accomodation
			accAccEl = new Element('div', {'class':'accEl accAccoListItem'});			
			accAccEl.adopt(this.buildAccoTogglerHead(this.dcAcco[i],count,i,accoId));
			accAccEl.adopt(this.buildAccoTogglerContent(this.dcAcco[i]));
			accAccList.adopt(accAccEl);
		}
		return accAccList;
	},

	// inhalt für den Kopf einer Übernachtungsmöglichkeit
	buildAccoTogglerHead: function(entry,count,i,accoId){
		
		// der Radiobutton
//		var rdBtn = new Element('input',{'type':'radio', 'class':'tpAccoItem', 'name':'tpAccoItem_'+count, 'id':'acco_' + count + '_' + i}).set('value',entry.id_entry);
		if (Number(entry.id_entry) == Number(accoId)) {
			rdBtnChecked = ' checked="checked"';
		}else{
			rdBtnChecked = '';
		}
		rdBtn = '<input' + rdBtnChecked + ' type="radio" name="tpAccoItem_' + count + '" id="acco_' + count + '_' + i + '" class="tpAccoItem" value="'+entry.id_entry+'">';
		// erzeugen headcontainer
		var head = new Element('h5',{'class':'accToggler'})
			.set('html',rdBtn)
			.adopt(new Element('span',{'class':'visibleAdressDetails'}).set('html',entry.name_entry.replace(/&amp;amp;/, '&amp;'), ' (' + entry.zip + ' ' + entry.city + ')'))
			.adopt(new Element('div',{'class':'hiddenAdressDetails'}).set('html',entry.adressDetails));
			
		// startpunktlink
		var stBtn = new Element('div',{'class':'startButton'});
		if(count == 0){
			stBtn.adopt(new Element('a',{'href':'#','class':'tpStartItem','name':entry.id_entry,'title':'set as starting point'}).set('text','set as starting point'));
			/*if (entry.id_entry == accoId) {
				stBtn.addClass('inactive');
			}*/
		}else{
			stBtn.set('html','&nbsp;');
		}
		
		head.adopt(stBtn);
		
		head.adopt(new RemoveButton(count + '_' + entry.id_entry,'Remove'))
			.adopt(new DetailButton(entry.id_entry,'Details'))
			.adopt(new Clearer());
		return head;
	},

	// inhalt für den Kopf einer Übernachtungsmöglichkeit
	buildAccoTogglerContent: function(acco){
		return new Element('div',{'class':'accContent'})
		.adopt(new Element('div', {'class':'shortDetails'})
			.set('html',acco.shortDetails.replace(/.*<\/h6>/,'')).adopt(new Element('div', {'class':'clear'}))
		).adopt(new Clearer());
	},
	
	// Führt die Änderungen bei einer Sortierung aus
	updateTourList : function(el,todo){
		switch (todo) {
			case 'move':
				var elToMove = el.getParent('.accContentItem');
				switch (el.getProperty('class')) {
					case 'tpMoveUp':
						elToMove.injectBefore(elToMove.getPrevious());
						break;
					case 'tpMoveDown':
						elToMove.injectAfter(elToMove.getNext());
						break;
				}
				this.updateTagIds(elToMove.getParent());
				break;
			case 'delete':
				var elToDelete = el.getParent('.accContentItem');
				if(!elToDelete){
					elToDelete = el.getParent('.accToggler');
				}
				var elToUpdate = el.getParent('.accContent');
				elToDelete.dispose();
				this.updateTagIds(elToUpdate);
				break;
		}
		return true;
	},
	
	// Aktualisiert die ID nach Sortieren
	updateTagIds : function(entryContainer){
		var i = 0;
		entryContainer.getChildren('.accContentItem').each(function(entry, pos){
		  	var curIdStr = entry.getProperty('id')
			if (!curIdStr.contains('_start')) {
				newIdStr = curIdStr.substr(0, 16) + '_' + (pos);
				entry.setProperty('id', newIdStr);
				entry.removeClass('blueBg');
				if (i != 0) {
					i = 0;
					entry.addClass('blueBg');
				}
				else {
					i++;
				}
			}
		});
	}
}); 