// Includes the following functions:
//    cnsPageInit()
//          CLASS - CnsDates(formId,aMonth,aDay,bMonth,bDay,months)
//          METHOD - CnsDates.prototype.popDates
//    populateForm() - populates date elements for air, car and hotel booking modules
//    selectOffer(company, carType, promoType, promoCode, city)
// 	prePopForm() - used to populate form elements using URL params
//		prePopOther() - used to populate other types of elements using URL params
//		arCities - definition of city listings
//		cityDefs(fldOutbound,fldReturn) - used to populate cities in dropdown



var schedMonths = getMonthList('eos');  // array of months in current booking schedule
var ElvnMonths = getMonthList(11);     // array of 12 months starting with current month
function pageInit() {
   self.onerror = function() { return true; }
   displayClass("jsOnly","div");
   CnSLinkAddIn("CnSTop", "div");  
   hideFromBiz("comOnly");
	showBizOnly("bizOnly");    
	popBookingDates(); 
	cityDefs("outboundCities","returnCities");
   return true;  
}


function CnsDates(formId,aMonth,aDay,bMonth,bDay,months) {  // CnsDates Class
   this.id = formId;
   this.departMonth = aMonth;
   this.departDay = aDay;
   this.returnMonth = bMonth;
   this.returnDay = bDay;
   this.schedule = months;
}

//cnsDates Objects
var AirDateElems   = new CnsDates(  'cnsAir', 
                                    'outbound_depart_month',
                                    'outbound_depart_day',
                                    'return_depart_month',
                                    'return_depart_day', 
                                     schedMonths);

var CarDateElems   = new CnsDates(  'cnsCar', 
                                    'cPickUpMonth',
                                    'cPickUpDay',
                                    'cDropOffMonth',
                                    'cDropOffDay', 
                                     schedMonths); 

var HotelDateElems = new CnsDates(  'cnsHotel', 
                                    'hCheckInMonth',
                                    'hCheckInDay',
                                    'hCheckOutMonth',
                                    'hCheckOutDay', 
                                     ElvnMonths);

var cnsFormIds  = ["cnsAir", "cnsCar", "cnsHotel"];
var dateElems   = [AirDateElems, CarDateElems, HotelDateElems];

// *** MULTI FORM SCENARIO START *** 
//Use when the formID is variable; all other fields must still exist!
function multiPopBookingDates(variableID) {
	var multiDateElems = new CnsDates( variableID, 'hCheckInMonth', 'hCheckInDay', 'hCheckOutMonth', 'hCheckOutDay', ElvnMonths);
	alert(variableID);
	multiDateElems.popDates();
}
// *** MULTI FORM SCENARIO END *** 

CnsDates.prototype.popDates = function() {   
	// Check to see if anything was preselected
	var preDepartMo = document.getElementById(this.departMonth).value;
	var preReturnMo = document.getElementById(this.returnMonth).value;
	var preDepartDay = document.getElementById(this.departDay).value;
	var preReturnDay = document.getElementById(this.returnDay).value;
	// Before pre-pop with dynamic month/day options, blank out the defaults used for noscript scenario but leave the first one
	document.getElementById(this.departMonth).options.length=1;
	document.getElementById(this.returnMonth).options.length=1;
   for (var j = 0; j < this.schedule.length; j++) {
		document.getElementById(this.departMonth).options[(j+1)] = new Option(this.schedule[j], this.schedule[j]);
		if (preDepartMo == this.schedule[j]) document.getElementById(this.departMonth).options[(j+1)].selected = true;
		document.getElementById(this.returnMonth).options[(j+1)] = new Option(this.schedule[j], this.schedule[j]);
		if (preReturnMo == this.schedule[j]) document.getElementById(this.returnMonth).options[(j+1)].selected = true;
   }
   for (var j = 1; j <= 31; j++) {
   	document.getElementById(this.departDay).options[j] = new Option(j, j);
		if (preDepartDay == j) document.getElementById(this.departDay).options[j].selected = true;
		document.getElementById(this.returnDay).options[j] = new Option(j, j);
		if (preReturnDay == j) document.getElementById(this.returnDay).options[j].selected = true;
	} 
   return true;
}

function popBookingDates() {     
   var i = 0;   
   for (i=cnsFormIds.length-1; i >= 0; i--) {
      if (document.getElementById(cnsFormIds[i])) {
         dateElems[i].popDates();
         break;
      } 
    //  else { 
    //     populateList();
    //  } 
   }
   return true;  
}

function CnSLinkAddIn(clsName, tag) {
	var elemTop = document.getElementsByTagName(tag);
	var elemNum = 2;
	for (var i = (elemTop.length -1); i >= 0; i --) {
		if (elemTop[i].className == clsName ) {
			elemTop[i].innerHTML = "<div id=\"comOnly_" + elemNum + "\"><a href='#book'><b>Book Now</b></a><br/></div>";
			elemTop[i].innerHTML += "<div id=\"bizOnly_" + elemNum + "\"><a href='/cgi-bin/buildItinerary2'><b>Book Now</b></a><br/></div>";
			elemTop[i].innerHTML += "<a href=\"#top\">Return to Top</a>";
			elemNum++;
		}
   }
	return;
}


/* CAR ONLY */
// Car Type Values
//  0 = Economy
//  1 = Compact
//  2 = Mid-size  - DEFAULT
//  3 = Full-size
//  4 = Premium
//  5 = Luxury
//  6 = MiniVan
//  7 = Convertible
//  8 = Sports Utility
//  9 = Full-size Van

// Promo Type Values
//  PC = Promotion Code field
//  CR = Corporate ID/Rate  field  - DEFAULT
//  FR = Frequent Renter  field  - DEFAULT
//  RC = Corporate ID/Rate  field  - DEFAULT

function selectOffer(company, carType, promoType, promoCode) { 
   var frmFields = document.getElementsByTagName("input");   
   var carFields = ['cShopWho', 'cCarType', 'cCRCompany', 'cRCCompany', 'cFRCompany', 'cPCCompany'];   
   /* Clear fields */
   for (var i=(carFields.length-1); i>=0; i--) {     
     document.getElementById(carFields[i]).value = "";
   }  
   for (var j=(frmFields.length-1); j>=0; j--) {
      if (frmFields[j].type == 'radio') { frmFields[j].checked = false; }      }   
   /* Populate offer details */
   document.getElementById("cShopWho").value = company;
   document.getElementById("c" + promoType + "Company").value = company;
   document.getElementById("cCarType").value = carType;   
   document.getElementById(promoCode).checked = true;
   
   return;
}



// Created to prepop form with formatted links.  Will need the following two arrays:
// arParams  	param name on link
//					* Names must be unique
//					* Only assign int with INT in array
//					* Only assign text blocks with VID in array
// arIDs  		form field id
// On static pages, add addLoadEvent(prePopCnSForm);
// Notes: 
// v1		Added space replacers for link values.  
// v1.1	Added VID value assignment		
// v1.2	Added INT value assignment
function prePopCnSCarForm() {
	var params = getParams();
	for ( var i=0, len=arParams.length; i<len; ++i ){
		var paramValue = eval("params."+arParams[i]);
		if(typeof(paramValue) != "undefined") { 
			var paramField = eval("document.getElementById('"+arIDs[i]+"')");
			if(arParams[i] == "VID") {
				prePopVID(arIDs[i],paramValue);
			}
			if(arParams[i] == "INT") {	
				prePopINT(paramValue);
			}
			paramField.value = unescape(paramValue);
		}
	}
}
function prePopVID(elemName,elemValue) {
	if(document.getElementById(elemName) != "") {
		var elements = document.getElementById(elemName);
		if(elements.hasChildNodes()) {
			var count = 0;
			for( i=0; i<elements.childNodes.length; i++) {
				if (elements.childNodes[i].id) {
					if (elements.childNodes[i].id == elemValue) {
						elements.childNodes[i].style.display = "block";
						count++;
					} else {
						elements.childNodes[i].style.display = "none";
					}
				}
			}
			if (count == 0) document.getElementById('default').style.display = "block";
		}
	}
}
function prePopINT(elemValue) {
	if(document.getElementById('cnsBizCar')) {
		var cnsBizLink = modURL(document.getElementById('cnsBizCar').href,elemValue);
		document.getElementById('cnsBizCar').href = cnsBizLink;
	}
	if(document.getElementById('cnsCar')) {
		var cnsComLink = modURL(document.getElementById('cnsCar').action,elemValue);
		document.getElementById('cnsCar').action = cnsComLink;
	}
}
function modURL(url,elemValue) {
	var checkForInt = new RegExp(/(\?|\&)int=(\w+)/); // INT must only contain A-Z, a-z, 0-9, _
	if (url.match(checkForInt)) {
		url = url.replace(checkForInt,"$1int="+elemValue);
	} else {
		var checkForAppend = new RegExp(/\?(.*)/);
		if(url.match(checkForAppend)) {
			url = url.replace(checkForAppend,"?$1&int="+elemValue);
		} else {
			url = url + "?int=" + elemValue;
		}
	}
	return url;
}


// Created to display a tabbed navigation for hotel bookings
// This script is based off various other settings.  Please 
// refer to documentation for instructions on how to used it.
function bookHotel(roomMasterId) { 
	hotelProfileRevert();
	var nodeID = document.getElementById(roomMasterId);
	var nodeForm = document.getElementById('formFields');
	document.getElementById('hRoomMasterId').value = roomMasterId;
	//document.bookNowForm.hRoomMasterId.value = roomMasterId;
	var nodeIDLocation = nodeID.offsetParent.offsetLeft;
	if ( nodeIDLocation < 10) {
		var nextElem = getNext(nodeID.parentNode);
		if(nextElem) nextElem.className = "hotelProfileResizer";
	} else {
		var prevElem = getPrev(nodeID.parentNode);
		if(prevElem) prevElem.className = "hotelProfileResizer";
	}
	nodeForm.parentNode.removeChild(nodeForm);
	nodeID.appendChild(nodeForm);
	nodeID.parentNode.className = "hotelProfileExpanded";
}
function hotelProfileRevert() {
	var elements = document.getElementsByTagName("div");
	for( i=0; i<elements.length; i++) {
		if (elements[i].className == "hotelProfileExpanded" || elements[i].className == "hotelProfileResizer" ) {
			elements[i].className = "hotelProfile";
		}
	}
}
// Used for mega promos that draw content from XML file
function formSaver() {
	var nodeForm = document.getElementById('formFields');
	var nodeOrigLocation = document.getElementById('cnsContent');
	nodeForm.parentNode.removeChild(nodeForm);
	nodeOrigLocation.appendChild(nodeForm);
}


// CITY LISTING PREPOP
// Array format is [fldText, fldValue]
var arCities = new Array(
	['Albany, NY - ALB','Albany - ALB'],
	['Albuquerque, NM - ABQ','Albuquerque - ABQ'],
	['Amarillo, TX - AMA','Amarillo - AMA'],
	['Austin, TX - AUS','Austin - AUS'],
	['Baltimore, MD - BWI','Baltimore - BWI'],
	['Birmingham, AL - BHM','Birmingham - BHM'],
	['Boise, ID - BOI','Boise - BOI'],
	['Boston Logan, MA - BOS','Boston - BOS'],
	['Buffalo, NY - BUF','Buffalo - BUF'],
	['Burbank, CA - BUR','Burbank - BUR'],
	['Chicago (Midway), IL - MDW','Chicago Midway - MDW'],
	['Cleveland, OH - CLE','Cleveland - CLE'],
	['Columbus, OH - CMH','Columbus - CMH'],
	['Corpus Christi, TX - CRP','Corpus Christi - CRP'],
	['Dallas (Love Field), TX - DAL','Dallas Love - DAL'],
	['Denver, CO - DEN','Denver - DEN'],
	['Detroit, MI - DTW','Detroit - DTW'],
	['El Paso, TX - ELP','El Paso - ELP'],
	['Ft. Lauderdale, FL - FLL','Ft. Lauderdale - FLL'],
	['Ft. Myers, FL - RSW','Ft. Myers - RSW'],
	['Harlingen, TX - HRL','Harlingen - HRL'],
	['Hartford, CT - BDL','Hartford - BDL'],
	['Houston (Hobby), TX - HOU','Houston Hobby - HOU'],
	['Indianapolis, IN - IND','Indianapolis - IND'],
	['Jackson, MS - JAN','Jackson - JAN'],
	['Jacksonville, FL - JAX','Jacksonville - JAX'],
	['Kansas City, MO - MCI','Kansas City - MCI'],
	['Las Vegas, NV - LAS','Las Vegas - LAS'],
	['Little Rock, AR - LIT','Little Rock - LIT'],
	['Long Island, NY - ISP','Long Island - ISP'],
	['Los Angeles, CA - LAX','Los Angeles - LAX'],
	['Louisville, KY - SDF','Louisville - SDF'],
	['Lubbock, TX - LBB','Lubbock - LBB'],
	['Manchester, NH - MHT','Manchester - MHT'],
	['Midland/Odessa, TX - MAF','Midland/Odessa - MAF'],
	['Milwaukee, WI - MKE','Milwaukee - MKE'],
	['Minneapolis/St. Paul - MSP','Minneapolis/St. Paul - MSP'],
	['Nashville, TN - BNA','Nashville - BNA'],
	['New Orleans, LA - MSY','New Orleans - MSY'],
	['New York(LaGuardia), NY - LGA','New York - LGA'],
	['Norfolk, VA - ORF','Norfolk - ORF'],
	['Oakland, CA - OAK','Oakland - OAK'],
	['Oklahoma City, OK - OKC','Oklahoma City - OKC'],
	['Omaha, NE - OMA','Omaha - OMA'],
	['Ontario, CA - ONT','Ontario - ONT'],
	['Orange County, CA - SNA','Orange County - SNA'],
	['Orlando, FL - MCO','Orlando - MCO'],
	['Philadelphia, PA - PHL','Philadelphia - PHL'],
	['Phoenix, AZ - PHX','Phoenix - PHX'],
	['Pittsburgh, PA - PIT','Pittsburgh - PIT'],
	['Portland, OR - PDX','Portland - PDX'],
	['Providence, RI - PVD','Providence - PVD'],
	['Raleigh/Durham, NC - RDU','Raleigh/Durham - RDU'],
	['Reno, NV - RNO','Reno - RNO'],
	['Sacramento, CA - SMF','Sacramento - SMF'],
	['Salt Lake City, UT - SLC','Salt Lake City - SLC'],
	['San Antonio, TX - SAT','San Antonio - SAT'],
	['San Diego, CA - SAN','San Diego - SAN'],
	['San Francisco, CA - SFO','San Francisco - SFO'],
	['San Jose, CA - SJC','San Jose - SJC'],
	['Seattle/Tacoma, WA - SEA','Seattle/Tacoma - SEA'],
	['Spokane, WA - GEG','Spokane - GEG'],
	['St. Louis, MO - STL','St. Louis - STL'],
	['Tampa Bay, FL - TPA','Tampa Bay - TPA'],
	['Tucson, AZ - TUS','Tucson - TUS'],
	['Tulsa, OK - TUL','Tulsa - TUL'],
	['Washington (Dulles), DC - IAD','Washington Dulles - IAD'],
	['West Palm Beach, FL - PBI','West Palm Beach - PBI']
);
// Uses arCities to create city selection dropdowns
// If not using pageInit to call script, then pass IDs for outbound/return fields
function cityDefs(fldOutbound,fldReturn) {
	for(i=0; i<arCities.length; i++) {
		if(fldOutbound != "" && (document.getElementById(fldOutbound))) document.getElementById(fldOutbound).options[i+1] = new Option(arCities[i][0],arCities[i][1]);
		if(fldReturn != "" && (document.getElementById(fldReturn))) document.getElementById(fldReturn).options[i+1] = new Option(arCities[i][0],arCities[i][1]);
	}
}