window.tripbuilder = new Object();

window.tripbuilder.toggleSection = function(sect) {
	if ($(sect).hasClass('active')) {
		$(sect).parent().next().slideUp();				
		$(sect).removeClass('active')			
	} else {
		$(sect).addClass('active')						
		$(sect).parent().next().slideDown();
	}
	return false;
}

window.tripbuilder.toggleItem = function(itm) {
	if ($(itm).hasClass('active')) {
		$(itm).parent().find('.detailView').slideUp();				
		$(itm).removeClass('active')			
	} else {
		$(itm).addClass('active')						
		$(itm).parent().find('.detailView').slideDown();
	}
	return false;
}

window.tripbuilder.removeFromItin = function(recid,itype) {
	// remove from UI
	$('.draglist').each(
		function(index,itm) {
			$(itm).find('li.itinitem').each(
				function(index,itm) {
					if ($(itm).find('input[name=id]').length > 0) {
						var thisid = $(itm).find('input[name=id]')[0].value;
						var thistype = $(itm).find('input[name=type]')[0].value;
						if (recid == thisid && itype == thistype) {
							$(itm).empty();
							return;
						}
					}
				}
			)
		}
	);

	$('.droplist').each(
		function(index,itm) {
			$(itm).find('li.itinitem').each(
				function(index,itm) {
					if ($(itm).find('input[name=id]').length > 0) {
						var thisid = $(itm).find('input[name=id]')[0].value;
						var thistype = $(itm).find('input[name=type]')[0].value;
						if (recid == thisid && itype == thistype) {
							$(itm).empty();
						}
					}
				}
			)
		}
	);
	this.updateCounts();
	this.saveItinerary();			

	// remove from session
	var params = new Object();
	params.recid = recid;
	params.itype = itype;
	var url = siteURL + 'trip-builder/ajax/ajax_removeItin.cfm';
	$.ajax({
		type: "get",
		url: url,
		data: params,
		success: function(response){
			eval('var rtn = ' + response);
			window.tripbuilder.updateItinHead(rtn);
			return false;
		},
		failure: function(response) {
			alert('Unable to save itinerary');
		}
	});
	return false;
}


window.tripbuilder.removeFromDay = function(type,id,linkobject) {
	$(linkobject).parent().parent().empty();
	this.updateCounts();
	this.saveItinerary();
	return false;
}


window.tripbuilder.updateCounts = function() {
	var alldays = $('.itinerarycolumnRight .listingsWrapper').each(
		function(indx,itm) {
			$(itm).find('.numStops').text($(itm).find('input[name=key]').length);
		}
	);
}

window.tripbuilder.saveItinerary = function() {
	var days = this.serializeItinerary();
	var url = siteURL + 'trip-builder/ajax/ajax_updateDays.cfm';
	$.ajax({
		type: "post",
		url: url,
		data: {itindays: $.toJSON(days)},
		success: function(response){
			return false;
		},
		failure: function(response){
			alert('Unable to save itinerary');
		}
	});
}

window.tripbuilder.serializeItinerary = function() {
	var alldays = $('.droplist');
	var days = new Array();
	for (var i = 0; i < alldays.length; i++) {
		days[i] = new Array();
		var listings = $(alldays[i]).find('input[name=key]').map(function(indx,itm){return itm.value});
		for (var j = 0; j < listings.length; j++) {
			var key = listings[j].split('_');
			days[i][j] = {itype: key[0], recid: key[1]};
		}
	}
	return days;
}


window.tripbuilder.updateItinHead = function(rtn) {
	var items = rtn.itincount;
	$('#itin_count').html(items);
	if (items == 1)
		$('#itin_descriptor').html('Item');
	else
		$('#itin_descriptor').html('Items');
}

window.tripbuilder.deleteTrip = function(tripid) {
	if (confirm('Are you sure you want to permanently delete this trip?'))
		window.location = siteURL + 'trip-builder/trips/index.cfm?action=deltrip&tripid=' + tripid;
}

	
var Dom = YAHOO.util.Dom;
var Event = YAHOO.util.Event;
var DDM = YAHOO.util.DragDropMgr;
var dropcount = 0;
//////////////////////////////////////////////////////////////////////////////
// example app
//////////////////////////////////////////////////////////////////////////////
TripBuilderApp = {
	init: function() {
		<!---Get List of distinct categories--->
		this.numdays = window['numdays'];
		this.numdays = this.numdays + 1;
		/*Initialize Listings*/

		$('.draglist').each(
			function(index,itm){
				new YAHOO.util.DDTarget(itm);
				$(itm).find('li.itinitem').each(
					function(index,itm){
						new TripBuilderApp.DDList(itm);
					}
				)
			}
		);
		
		$('.draglistR').each(
			function(index,itm){
				new YAHOO.util.DDTarget(itm);
				$(itm).find('li.itinitem').each(
					function(index,itm){
						new TripBuilderApp.DDList(itm);
					}
				)
			}
		);

		/*Initialize Days*/		
		for (var i = 0; i < this.numdays; i++){
			new YAHOO.util.DDTarget('daydrop_' + i);
			var elems = Dom.getElementsByClassName('itinitem','li','daydrop_' + i);
			for (var j = 0; j < elems.length; j++){
				new TripBuilderApp.DDList(elems[j]);
			}
		}	
		Event.on("switchButton", "click", this.switchStyles);
	},

	showOrder: function() {
		var parseList = function(ul, title) {
			var items = ul.getElementsByTagName("li");
			var out = title + ": ";
			for (i=0;i<items.length;i=i+1) {
				out += items[i].id + " ";
			}
			return out;
		};

		var ul1=Dom.get("ul1"), ul2=Dom.get("ul2");
		alert(parseList(ul1, "List 1") + "\n" + parseList(ul2, "List 2"));

	},

	switchStyles: function() {
		Dom.get("ul1").className = "draglist_alt";
		Dom.get("ul2").className = "draglist_alt";
	}
};

//////////////////////////////////////////////////////////////////////////////
// custom drag and drop implementation
//////////////////////////////////////////////////////////////////////////////

TripBuilderApp.DDList = function(id, sGroup, config) {
	TripBuilderApp.DDList.superclass.constructor.call(this, id, sGroup, config);
	this.logger = this.logger || YAHOO;
	var el = this.getDragEl();
	var handle = Dom.getElementsByClassName('dragHandle',null,this.getEl());
	if(handle.length > 0){
		//this.setHandleElId(Dom.generateId(handle[0]));
	}
	
	Dom.setStyle(el, "opacity", 0.67); // The proxy is slightly transparent

	this.goingUp = false;
	this.lastY = 0;
};

YAHOO.extend(TripBuilderApp.DDList, YAHOO.util.DDProxy, {
	startDrag: function(x, y) {
		//this.logger.log(this.id + " startDrag");
		logit(this.id + " startDrag");
		// make the proxy look like the source element
		var dragEl = this.getDragEl();
		var clickEl = this.getEl();
		Dom.setStyle(this.getEl(), "opacity", 0.10);
		var li = document.createElement('LI');
		li.id = 'tmpli';
		li.innerHTML = 'Insert Here';
		li.style.borderBottom = 'dashed 1px #000';
		li.style.backgroundColor = '#666666';
		li.style.lineHeight = '32px';
		li.style.color = '#FFF';
		li.style.fontSize = "14px";
		this.tmpli = li;
		this.tmpli.style.lineHeight = this.tmpli.style.height = (clickEl.scrollHeight + 'px');
		this.tmpli.style.textAlign = 'center';
		this.tmpli.style.fontWeight = 'bold';

		dragEl.innerHTML = clickEl.innerHTML;

		Dom.setStyle(dragEl, "color", Dom.getStyle(clickEl, "color"));
		Dom.setStyle(dragEl, "backgroundColor", Dom.getStyle(clickEl, "backgroundColor"));
		Dom.setStyle(dragEl, "border", "2px solid gray");
	},

	endDrag: function(e) {
	},

	onDragDrop: function(e, id) {
		var destEl = Dom.get(id);
		var destDD = DDM.getDDById(id);
		var clickEl = this.getEl();
		var dstParent = destEl.parentNode;
		var srcParent = clickEl.parentNode;
		var clone = null;
		var clone = $(clickEl).clone()[0];
		Dom.setStyle(clone, "opacity", 1.00);		
		clone.id = new Date().getTime();

		var p = this.tmpli.parentNode;
		if(p == srcParent){
			p.removeChild(clickEl);
			p.insertBefore(clickEl,this.tmpli);
			p.removeChild(this.tmpli);
		}
		else if(p){
				p.insertBefore(clone,this.tmpli);
				p.removeChild(this.tmpli);
				new TripBuilderApp.DDList(clone);
		}
		Dom.setStyle(this.getEl(), "opacity", 1.00);
		DDM.refreshCache();
		window.tripbuilder.updateCounts();
		window.tripbuilder.saveItinerary();

	},

	onDrag: function(e) {
		// Keep track of the direction of the drag for use during onDragOver
		var y = Event.getPageY(e);

		if (y < this.lastY) {
			this.goingUp = true;
		} else if (y > this.lastY) {
			this.goingUp = false;
		}

		this.lastY = y;
	},	
	onDragOut: function(e,id){
		if(this.tmpli.parentNode == Dom.get(id)){
			this.tmpli.parentNode.removeChild(this.tmpli);
		}
		Event.stopPropagation(e);
	},

	onDragOver: function(e, id) {
		var srcEl = this.getEl();
		var destEl = Dom.get(id);
		var dragEl = this.getDragEl();
		//If we're hovering over a droppable list item
		//logit('e: ' + e + '-- id: ' + id);
		//logit('nodename: '+destEl.nodeName.toLowerCase()+' -- is droplist: '+Dom.hasClass(destEl,'droplist'));
		logit('nodename: '+destEl.nodeName.toLowerCase()+' -- is droplist: '+Dom.hasClass(destEl,'droplist')+' -- html: '+destEl.innerHTML);
		if (destEl.nodeName.toLowerCase() == "li" && !Dom.hasClass(destEl,'listSpacer') && !Dom.hasClass(destEl.parentNode,'draglist')) {
			var orig_p = srcEl.parentNode;
			var p = destEl.parentNode;
			if (this.goingUp) {
				p.insertBefore(this.tmpli, destEl); // insert above
			} else {
				p.insertBefore(this.tmpli, destEl.nextSibling); // insert below
			}
			DDM.refreshCache();
			Event.preventDefault(e);
			Event.stopPropagation(e);			
		}
		//Else if hovering over an empty list
		else{
			if (destEl.nodeName.toLowerCase() == "ul" && !Dom.hasClass(destEl,'draglist')) {
				if(Dom.getElementsByClassName('itinitem','li',destEl).length == 0){
					destEl.appendChild(this.tmpli);
					DDM.refreshCache();					
				}
			}
		}
	},
	onInvalidDrop: function(e, id){
		Dom.setStyle(this.getEl(), "opacity", 1.00);		
		var p = this.tmpli.parentNode;
		if(p){
			p.removeChild(this.tmpli);
		}
	}

});

Event.onDOMReady(TripBuilderApp.init, TripBuilderApp, true);
	


var logit = function(txt,nobr){
	var logdiv = YAHOO.util.Dom.get('logdiv');
	if(logdiv){
		logdiv.innerHTML = txt + (!nobr ? '<br>' : '') + logdiv.innerHTML;
		logdiv.scrollTop = logdiv.scrollHeight;
	}
}

