//Function for Landing page

var textDivider = function(incomingDivId, forcedDivideAt) {
	var sourceDiv = $(incomingDivId);
	var sourceHtml = sourceDiv.innerHTML;
	var divideAt = sourceHtml.substring(0,forcedDivideAt).lastIndexOf(" ");
	var addlSpan = $(document.createElement("span"));
	var slicedHtml = sourceHtml.substring(0,divideAt) + "...";
	var isExpanded = false;
	var showText = "more";
	var hideText = "hide text";
	sourceDiv.hide();
	addlSpan.className = "js";
	addlSpan.innerHTML = showText;	
	sourceDiv.update(slicedHtml);
	sourceDiv.appendChild(addlSpan);
	sourceDiv.show();

	function _hideRevealClick(){
		if (isExpanded == false) {
			sourceDiv.update(sourceHtml);
			addlSpan.innerHTML = hideText;
			addlSpan.className = "js block";
		} else {
			sourceDiv.update(slicedHtml);
			addlSpan.innerHTML = showText;
			addlSpan.className = "js";
		}
		isExpanded = !isExpanded;
		sourceDiv.appendChild(addlSpan);
	}

	Event.observe(addlSpan,'click',_hideRevealClick);
}

function tellFriend(page) {		
	window.open(page,'popup','width=420,height=450,resizable=yes,menubar=no,status=no,scrollbars=yes,toolbar=no,directories=no,location=no,top=0,left=0');
    return false;
}

//code for IFRAME calendar and drop downs

function switchMenuAndDates(dCity,rCity,departDate,returnDate,url){
document.dl2.elements["slice1:departCity"].value=dCity;
document.dl2.elements["slice1:arriveCity"].value=rCity;
document.dl2.elements["startDate"].value=departDate;
document.dl2.elements["endDate"].value=returnDate;
top.frames['airCalendarsIframe'].location.replace(url);
}

function switchMenu(dCity,rCity){
document.dl2.elements["slice1:departCity"].value=dCity;
document.dl2.elements["slice1:arriveCity"].value=rCity;
parent.focus();}

function switchPull(rd,theCity){
if (rd=="depart"){document.dl2.elements["slice1:departCity"].value=theCity;}
if (rd=="arrive"){document.dl2.elements["slice1:arriveCity"].value=theCity;}
parent.focus();}

function switchDate(rd,theDate){
if (rd=="depart"){document.dl2.elements["startDate"].value=theDate;}
if (rd=="arrive"){document.dl2.elements["endDate"].value=theDate;}
parent.focus();}

// rollover code

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

var dealsMgr = new function () {
	this.dealTravelerTypes = ['adults','seniors','youths','children'];
	this.FORM_NAME = 'dl2';
	this.init = function() {
		this.addBehavior();
		this.behaviorBotForms();// need to reset some fields
	}

	this.addBehavior = function() {
		this.behaviorTravelers();
		this.behaviorBotForms();
	}
	
	this.behaviorBotForms =  function() {
			var botsRef=document.getElementById("orbot");
			if (!botsRef) return;
			var formList = botsRef.getElementsByTagName('form');
			for (var j=0; j<formList.length; j++)
			{
				if (formList[j].name==this.FORM_NAME) {
					for (var k = 0; k < formList[j].elements.length; k++) {
						var elemRef = formList[j].elements[k];
						switch (elemRef.type)
							{
								case "submit":
									if (this.hasClass(elemRef, 'aph'))
										elemRef.onclick = new Function("dealsMgr.setSearchType('airhotel');"+elemRef.onclick);
								break;
							}
						}
					
				}
				
			}
	}
	
        this.setSearchType = function(searchType) {
        	var elemRef = document.getElementById('dealSearchType');
        	var delRef=document.getElementById('hidBtnName');
        		if(delRef) delRef.name='dealsAPHSearch';
			if (elemRef) elemRef.value = searchType;
		
	}
	
	this.behaviorTravelers = function(bId) {
		for (var k=0; k < this.dealTravelerTypes.length; k++) {
			var elemId = "deal" + this.dealTravelerTypes[k];
			var travelerSelectRef = getRef(elemId);
			if (travelerSelectRef) {
				travelerSelectRef.onchange = new Function("", "dealsMgr.dealDropDownChange();");
			}
		}
		this.hideShowFlightPlusHotelButton(this.countTravelers());
	}

	this.dealDropDownChange = function() {
		this.hideShowFlightPlusHotelButton(this.countTravelers());
	}
		
	//Counts the total number of travellers selected in the Deal Orbot drop down. Functionality same as in the bot.js
	this.countTravelers = function() {
		var travCount = 0;
		for (var k=0; k < dealsMgr.dealTravelerTypes.length; k++) {
			elemRef = getRef("deal" + dealsMgr.dealTravelerTypes[k]);
			if (elemRef) travCount += parseInt(elemRef.value); 
		}
		return travCount;
	}

	//Hides the Find Flights + Hotel button. Functionality same as in the bot.js
	this.hideShowFlightPlusHotelButton = function (numTravelers) {
		var aphButton = getRef('dealsAPHButton');
		if (aphButton != null) {
			if (numTravelers > 4) {
				dealsMgr.swapClasses(aphButton, 'visible', 'invisible');
			} else {
				dealsMgr.swapClasses(aphButton, 'invisible', 'visible');
			}
		}
	}

	//Removes oldClass and appends newClass to elementRef. Functionality same as in the bot.js
	this.swapClasses = function(elementRef, oldClass, newClass) {
		if (elementRef != null) {
			this.removeClass(elementRef, oldClass);
			this.appendClass(elementRef, newClass);
		}
	}

	//Adds the 'newClass' to 'element' className and returns true. Functionality same as in the bot.js
	this.appendClass = function (element, newClass) {
		if (!element) return false;
		var length = element.className ? element.className.length : 0;

		if (length > 0) {
			if (this.hasClass(element, newClass)) {
				//the class already exists in className
				//dlog.alert('WARNING: appendClass(): className for ' + element.id + ' already contains "' + newClass + '"');
			} else {
				//className has classes, so let's append the new class
				element.className = element.className + " " + newClass;
				dlog.alert('appendClass(): class "' + newClass + '" added to ' + element.id + "'s className");
			}
		}
		else {
			//className is empty so the new class is assigned as the only class
			element.className = newClass;
			dlog.alert('appendClass(): className for ' + element.id + ' changed to "' + newClass + '"');
		}
		return true;
	}

	//Removes 'currentClass' from the 'element' className.  If the removal was
	//successful, returns true; otherwise returns false. Functionality same as in the bot.js
	this.removeClass = function(element, currentClass) {
		dlog.alert("removeClass('"+element.className+"', '"+currentClass+"')");
		var removed = false;
		if (element){
			var classes = element.className.split(" ");
			if (classes.length == 1 && classes[0]==currentClass) {
				element.className = ""; //the element only has a single class, so set it to an empty string
			} else {
				var newClassString = "";
				for (var i = 0; i < classes.length; i++) {
					if (classes[i] == currentClass) {
						removed = true;
					} else {
						newClassString +=  ((newClassString) ? " ": "") + classes[i];
				}
				}
				element.className = newClassString;
			}
			if (removed) dlog.alert('removeClass(): class "'+currentClass+'" for ' + element.id + ' was removed: "'+element.className+'"');
		}
		return removed;
	}
	
	//Returns true if 'currentClass' is in 'element'
	//className; returns false otherwise. Functionality same as in the bot.js
	this.hasClass = function(element, currentClass) {
		var found = false;
		if (element && element.className) { //check to see if the element even has a classname attribute
			var classes = element.className.split(" ");

			//find the class in the className
			for (var i=0; i < classes.length; i++) {
				if (classes[i] == currentClass) {
					found = true;
					break;
				}
			}
		}
		return found;
	}
}

//Returns the reference to the element ID. Functionality same as in the bot.js
function getRef(elemId) {
	var element = document.getElementById(elemId);
	if (!element) return null;
		return element;
}

function botInit(where) {
	dealsMgr.init();
}
