function saveItinerary(){
	var params = serializeItinerary();
	var url = fuse_root + '/itinerary/ajax_saveitinerarydays.cfm';

	jQuery.ajax({
		   type: "get",
		   url: url,
		   data: params,
		   success: function(response){
			   return false;
		   },
		   failure: function(response){
			   alert('Unable to save itinerary');
		   }
		}
	);			
}

function displayRelated(listingid,itineraryThemeId,catid){
	var params = new Object();
	params.listingid = listingid;
	params.catid = catid;
	params.fuse_root = fuse_root;
	params.itineraryThemeId = itineraryThemeId;
	//alert('catid = ' + catid + ' listingid = ' + listingid);
	//alert(fuse_root + '/itinerary/ajax_getRelated.cfm');
	var url = fuse_root + '/itinerary/ajax_getRelated.cfm';

	jQuery.ajax({
		   type: "get",
		   url: url,
		   data: params,
		   success: function(response){
			   document.getElementById('relatedInterests').innerHTML = response;
				jQuery('.draglistR').each(
					function(index,itm){
						new YAHOO.util.DDTarget(itm);
						jQuery(itm).find('li.itinitem').each(
							function(index,itm){
								new TripBuilderApp.DDList(itm);
							}
						)
					}
				);
			   return false;
		   },
		   onFailure: function(response){
			   document.getElementById('relatedInterests').innerHTML = response.responseText;
			   return false;
		   }	
		   });	
	
}

function removeFromItin(type,id,linkobject){
	var params = new Object();
	if(type=='listing'){
		params.type = 1;
	}else if(type=='listing'){
		params.type = 2;			
	}
	params.recid = id;
	var url = fuse_root + '/TripBuilder/ajaxremoveitin.cfm';
	jQuery.ajax({
		   type: "post",
		   url: url,
		   data: params,
		   success: function(response){
				var listElement = linkobject.parentNode.parentNode.parentNode.parentNode;
				var listContainer = listElement.parentNode;
				listContainer.removeChild(listElement);
		   },
		   failure: function(response){
			   alert('Unable to save itinerary');
		   }
		}
	);
}

function serializeItinerary(){
	var alldays = jQuery('.droplist');
	var params = new Object();
	for (var i = 0; i < alldays.length; i++){
		var idlist = '';
		var day = alldays[i];
		var listings = jQuery(day).find('input[name=key]').map(function(indx,itm){return itm.value}).each(function(indx,itm){idlist = idlist + ',' + itm});

		if(idlist.indexOf(',') == 0)
			idlist = idlist.substr(1,idlist.length);

		params['day' + (i + 1)] = idlist;
	}
	return params;
}

function updateCounts(){
	var alldays = jQuery('.itinerarycolumnRight .listingsWrapper').each(
		function(indx,itm){
			jQuery(itm).find('.numStops').text(jQuery(itm).find('input[name=key]').length);
	   }
	);
}

function removeFromDay(type,id,linkobject){
	var listElement = linkobject.parentNode.parentNode.parentNode.parentNode;			
	var listContainer = listElement.parentNode;
	listContainer.removeChild(listElement);
	updateCounts();
	saveItinerary();
	return false;
}

function getImg(display) {
	if (jQuery(display).find('img')[0].src.indexOf('arrow-blue1.gif') > 0) {
		imgsrc = fuse_root + '/includes/images/shell/arrow-blue1-dwn.gif';
	} else {
		imgsrc = fuse_root + '/includes/images/shell/arrow-blue1.gif';
	}
	
	return imgsrc;
}


function displayDayListings (display,listingids,itineraryThemeIds) {
	imgsrc = getImg(display);
	
	if (imgsrc == fuse_root + '/includes/images/shell/arrow-blue1-dwn.gif') {
		displayRelated(listingids,itineraryThemeIds,0);	
	}
	
	jQuery(display).find('img')[0].src = imgsrc;			
	jQuery(display.parentNode.parentNode.parentNode).children(".itincatitems").slideToggle();
	
	return false;
}


function displayListings (display,catid,related) {
	imgsrc = getImg(display);

	if(imgsrc == fuse_root + '/includes/images/shell/arrow-blue1-dwn.gif' && related == 1){
		displayRelated(0,0,catid);	
	}
	jQuery(display).find('img')[0].src = imgsrc;
	jQuery(display.parentNode.parentNode).children(".itincatitems").slideToggle();
	return false;			
}

function displayListingDetail (display,listingid,itineraryThemeid,related) {
	imgsrc = getImg(jQuery(display).parent());
	
	if(imgsrc == fuse_root + '/includes/images/shell/arrow-blue1.gif' && related == 1){
		displayRelated(listingid,itineraryThemeid,0);
	}
	
	display.src = imgsrc;
	jQuery(display).parents(".l-itinLists").children(".listing-details").slideToggle();
	
	return true;			
}

var _cb;
function itin_add(id, cb, itype, noBoldTxt, uCase) {
	var _id = id;
	_cb = cb;
	ajaxAddItin(fuse_root, id, itype, 0, noBoldTxt, uCase);
	return false;
}
	
function cbListing(id, num) {
	var ispan = jQuery('itin_' + id);
	if(ispan != null)
		ispan.innerHTML = '<b class="itin_added">Added to Itinerary</b>';
	//jQuery('itin_cnt').innerHTML = '&nbsp;(' + num + ')';

	/*Google Maps Code*/
	if(placemarks && updatePlacemarkItinerary){
		updatePlacemarkItinerary(id);
	}
	/*End Google Maps Code*/
}

var ajaxAddItin = function(imgroot, recid, itype, tripID, noBoldTxt, uCase){
	if (typeof tripID == 'undefined') tripID = 0;
	
	initItin();
	ajaxAddItin(imgroot, recid, itype, tripID, noBoldTxt, uCase);
}

//Initialize the additin function to choose between jquery or prototye version
function initItin(){
	if(typeof(window['Ajax']) != 'undefined' && Ajax.Request){
		ajaxAddItin = ajaxAddItin_prototype;
	}
	else{
		ajaxAddItin = ajaxAddItin_jquery;
	}
}

//Handle Failures
function handlerFailure(response){
	alert('We were unable to comply with your requrest.  Please reload the page and try again');
}


/*Begin JQuery Functions*/

//JQuery version - do not call this version directly all calls should be made through ajaxAddITin
function ajaxAddItin_jquery(imgroot, recid, itype, tripID, noBoldTxt, uCase)
{
	var thisUrl  = imgroot+'/TripBuilder/ajaxAddItin.cfm';
	var thisData = 'type=' + itype + '&recid=' + recid + '&tripid=' + tripID;
	//alert("here1");
	jQuery.ajax({
	   type: "POST",
	   url: thisUrl,
	   data: thisData,
	   success: function (response){
			if(itype == 1){
				jQuery('#itin_' + recid).html('<a href="'+imgroot+'/TripBuilder/index.cfm?action=previous"  class="vwItin" ><b class="itin_added">Added to Trip Planner</b></a>');
				jQuery('#itin_' + recid).removeClass('itineraryAdd');
				jQuery('#itin_' + recid).addClass('itineraryAdded');
				if (response.responseText != '0') eval(_cb + '(recid, response.responseText);');
			}
		//Calendar
			else{
				jQuery('#itin_' + recid).html('<a href="'+imgroot+'/TripBuilder/index.cfm?action=previous"  class="vwItin"  ><b class="itin_added">Added to Trip Planner</b></a>');
				jQuery('#itin_' + recid).removeClass('itineraryAdd');
				jQuery('#itin_' + recid).addClass('itineraryAdded');
			}
			return true;
		},
	   	onFailure: function (response){
			document.getElementById('itin_' + recid).innerHTML = response.responseText;	
		}
	 });
}
/*End Jquery Functions*/


/*Begin Prototype Functions*/

//Prototype version - *****do not call this version directly all calls should be made through ajaxAddItin***
function ajaxAddItin_prototype(imgroot, recid, itype, tripID, noBoldTxt, uCase)
{
	var thisUrl  = imgroot+'/TripBuilder/ajaxAddItin.cfm';
	var thisData = 'type=' + itype + '&recid=' + recid + '&tripid=' + tripID;
	new Ajax.Request(thisUrl,{
		method: 'post',
		parameters: thisData,
		onSuccess: function (response){

			if(itype == 1){				
				//$P('itin_' + recid).innerHTML = ('<a href="'+imgroot+'/TripBuilder/index.cfm" class="vwItin" ><b class="itin_added">Added to Itinerary</b></a>');
				/*$P('itin_' + recid).removeClassName('itineraryAdd');
				$P('itin_' + recid).addClassName('itineraryAdded');
				if (response.responseText != '0') {
					eval(_cb + '(recid, response.responseText);');
				}*/
				
				var htmlString = '<a href="'+imgroot+'/TripBuilder/index.cfm?action=previous" class="vwItin" >';
				
				if (!noBoldTxt) {
					htmlString += '<b class="itin_added">';
				}
				
				if (uCase) {
					htmlString += 'View in Trip Planner';
				} else {
					htmlString += 'view in trip planner';
				}
				
				if (!noBoldTxt) {
					htmlString += '</b>';
				}
				
				htmlString += '</a>';
				
				document.getElementById('itin_' + recid).innerHTML = htmlString;
				
				addCount();
			}
		//Calendar
			else{
				$P('itin_' + recid).innerHTML = ('<a href="'+imgroot+'/TripBuilder/index.cfm?action=previous"  class="vwItin" ><b class="itin_added">View in Trip Planner</b></a>');
				$P('itin_' + recid).removeClassName('itineraryAdd');
				$P('itin_' + recid).addClassName('itineraryAdded');
				//document.getElementById('itinerary').innerHTML = response.responseText;	
			}
			return true;
		},
		onFailure: function (response){
			document.getElementById('itin_' + recid).innerHTML = response.responseText;	
		}
 });
}

function addCount(){
	try{
		var elem = document.getElementById('itinCount');
		var cnt = parseInt(elem.innerHTML);
		elem.innerHTML = cnt+1;
	}catch(e){}
}
/*End Prototype Functions*/

function removeEventFromItinAjax(imgroot,eventid)
{
	var thisUrl  = imgroot+'/includes/itinerary/index.cfm';
	var thisData = 'action=ajax_removeEventItin&eventid='+eventid;
	

	jQuery.ajax({
	   type: "POST",
	   url: thisUrl,
	   data: thisData,
	   success: function (response){
		   	try{
				try{
				$P('itin_' + eventid).removeClassName('itineraryAdded');
				$P('itin_' + eventid).addClassName('itineraryAdd');
				//$P('itinEvent_' + eventid).html('add to itinerary');
				document.getElementById('itin_' + eventid).innerHTML = '<a href="javascript:ajaxAddItin(\''+imgroot+'\', '+eventid+', 2)"></a>';
				}catch(e){}
				document.getElementById('itinerary').innerHTML = response;
					
			}catch(e){}
				return true;
			},
	   error: function(response){	
			  document.getElementById('itinerary').innerHTML = response.responseText;
	   }
	 });
}

function removeListingFromItinAjax(imgroot,listingid)
{
	var thisUrl  = imgroot+'/includes/itinerary/index.cfm';
	var thisData = 'action=ajax_removeItin&listingid='+listingid;

	jQuery.ajax({
	   type: "POST",
	   url: thisUrl,
	   data: thisData,
	   success: function (response){
		   		try{
					try{
					$P('itin_' + listingid).removeClassName('itineraryAdded');
					$P('itin_' + listingid).addClassName('itineraryAdd');
					document.getElementById('itin_' + listingid).innerHTML = '<a href="javascript:ajaxAddItin(\''+imgroot+'\', '+listingid+', 1);"></a>';
				//	$P('itin_' + listingid).html('add to itinerary');
					}catch(e){}
					document.getElementById('itinerary').innerHTML = response;
				}catch(e){}
				return true;
			},
	   error: function(response){	
			  document.getElementById('itinerary').innerHTML = response.responseText;
	   }
	 });
}

if (typeof(window['YAHOO']) != 'undefined' && YAHOO.util) {
	(function() {
		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.categories = window['categories'];
				this.numdays = window['numdays'];
		
				/*Initialize Listings*/
		
				jQuery('.draglist').each(
					function(index,itm){
						new YAHOO.util.DDTarget(itm);
						jQuery(itm).find('li.itinitem').each(
							function(index,itm){
								new TripBuilderApp.DDList(itm);
							}
						)
					}
				);
				
				jQuery('.draglistR').each(
					function(index,itm){
						new YAHOO.util.DDTarget(itm);
						jQuery(itm).find('li.itinitem').each(
							function(index,itm){
								new TripBuilderApp.DDList(itm);
							}
						)
					}
				);
		
				/*Initialize Days*/		
				for (var i = 1; i <= this.numdays; i++){
					new YAHOO.util.DDTarget('listingsWrapper_' + i);
					var elems = Dom.getElementsByClassName('itinitem','li','listingsWrapper_' + 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();
			
			/* Let the whole element be draggable, so don't define a handle */
			/*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");
				// 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 #EEE';
				li.style.backgroundColor = '#b79a74';
				li.style.lineHeight = '32px';
				li.style.color = '#FFF';
				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;
				
				jQuery(dragEl).find('.dragRightImg').remove();
				jQuery(dragEl).css('color', jQuery(clickEl).css('color'));
				jQuery(dragEl).css('background-color', jQuery(clickEl).css('background-color'));
				jQuery(dragEl).css('font-family', jQuery(clickEl).css('font-family'));
				jQuery(dragEl).css('font-size', jQuery(clickEl).css('font-size'));
				jQuery(dragEl).css('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 = jQuery(clickEl).clone()[0];
				var clickKey = jQuery(clickEl).find('input[name="key"]').attr('value').split('_');
				var listID = clickKey[1];
				var themeID = clickKey[2];
				Dom.setStyle(clone, "opacity", 1.00);
				clone.id = new Date().getTime();
				jQuery(clone).find('a.removeLink').each(
					function(index,itm){
						var listingID = jQuery(clone).find('input.listingID')[0].value;
						var tempRemove = function() {
							removeFromDay('listing', listingID, itm);
							return false;
						};
						itm.onclick = tempRemove;
					}
				);
				jQuery(clone).find('.dragRightImg').remove();
				jQuery(clone).find('.itemName-l img')[0].src = fuse_root + '/includes/images/shell/arrow-blue1.gif';
		
				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);
				/*displayListingDetail(jQuery(clone).find('.dragHandle'), listID, themeID, 1);*/
				DDM.refreshCache();
				updateCounts();
				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){
				//alert("dragout");
				try {
					if(this.tmpli.parentNode == jQuery('#' + id).find('ul')[0]){
						this.tmpli.parentNode.removeChild(this.tmpli);
						DDM.refreshCache();
					}
				} catch(err) {
				}
				Event.stopPropagation(e);
			},
		
			onDragEnter: 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
				if (destEl.nodeName.toLowerCase() == "li" && !jQuery(destEl).hasClass('listSpacer') && !jQuery(destEl).parent().hasClass('draglist')) {
					try {this.tmpli.parentNode.removeChild(this.tmpli);}catch(e){}
					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 (destEl.nodeName.toLowerCase() == "ul" && !jQuery(destEl).hasClass('draglist')) {
					if(jQuery(destEl).children('li.itinitem').length == 0){
						destEl.appendChild(this.tmpli);
						DDM.refreshCache();					
					}
				} else if (destEl.nodeName.toLowerCase() == 'div' && !jQuery(destEl).find('ul').hasClass('draglist')) {
					if (jQuery(destEl).children('li.itinitem').length == 0) {
						jQuery(destEl).find('ul')[0].appendChild(this.tmpli);
						DDM.refreshCache();
					} else {
						jQuery(destEl).find('ul').prepend(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.scrollTop = logdiv.scrollHeight;
		}
	}
}