// Copyright (c)2004,2005 All rights reserved.

MONTHS=new Array('January','February','March','April','May','June','July','August','September','October','November','December');

function getX(o){if(document.layers)return o.left;return o.offsetLeft+(o.offsetParent?getX(o.offsetParent):0);}
function getY(o){if(document.layers)return o.top;return o.offsetTop+(o.offsetParent?getY(o.offsetParent):0);}
function getW(o){if(document.layers)return o.clip.width;return o.offsetWidth;}
function getH(o){if(document.layers)return o.clip.height;return o.offsetHeight;}
function getParent(o){return o.parentNode;}
function isInside(o,x,y,dx1,dy1,dx2,dy2){var l=getX(o);var t=getY(o);return ((x-(dx1?dx1:0)>=l)&&(y-(dy1?dy1:0)>=t)&&(x-(dx2?dx2:0)<l+getW(o))&&(y-(dy2?dy2:0)<t+getH(o)));}

//function moveObject(o,x,y){if(document.layers)o.moveToAbsolute(x,y);else if(o.style.left&&(!o.style.pixelLeft)){o.style.left=x+'px';o.style.top=y+'px';}else{o.style.pixelLeft=x;o.style.pixelTop=y;}}
function moveObject(o,x,y){	//uses css manipulation instead of layers; moveToAbsolute is deprecated
	o.style.left=x+'px';
	o.style.top=y+'px';
}

function writeObject(o,c){if(document.layers){o.document.open('text/html');o.document.write(c);o.document.close();}else o.innerHTML=c;}
function trackMouseClick(f){if(document.layers)document.captureEvents(Event.MOUSEDOWN);document.onmousedown=f;}
function untrackMouseClick(){if(document.layers)document.releaseEvents(Event.MOUSEDOWN);document.onmousedown=null;}
function getEventX(e){return (document.all?event.clientX+document.body.scrollLeft:e.pageX);}
function getEventY(e){return (document.all?event.clientY+document.body.scrollTop:e.pageY);}
var cookie_map=null;
function getCookie(n){if((!cookie_map)&&document.cookie){cookie_map=new Object();var cs=document.cookie.split(/; ?/);for(var i=0;i<cs.length;i++){var c=cs[i].indexOf('=');cookie_map[cs[i].substr(0,c)]=unescape(cs[i].substr(c+1));}}return cookie_map[n];}
function setCookie(n,v,t,d){var e=(t?new Date(new Date().getTime()+(3600000*24*t)):null);document.cookie=n+'='+v+((e)?'; expires='+e.toGMTString():'')+'; path=/'+((d)?'; domain='+d:'');if(cookie_map)cookie_map[n]=v;}
function openWindow(url,l,x,y,w,h,f){if(!l)l='OTWIN';if(!w)w=420;if(!h)h=540;if(x<0)x=(screen.width-w)/2;if(y<0)y=(screen.height-h)/2;try{return window.open(url,l,'screenX='+x+',screenY='+y+',left='+x+',top='+y+',width='+w+',height='+h+(f?',toolbar=1,location=1,directories=1,status=1,menubar=1':'')+',scrollbars=1,resizable=1');}catch(e){alert('ERROR opening window.');}}
function openPartnerWindow(url,x,y,l){return openWindow(url,l,x,y,(screen.width>1000?800:(screen.width>800?640:520)),(screen.width>1000?600:(screen.width>800?460:400)),true);}
function openConsole(win,type,partners,data,head){
	urchinTracker('/poppup_blocker_resolution_launch_attempt');
	var url='/console.php?'+type+'@';
	var console,i,j;
	for(i=1;i<win.length;i++)
		if(win[i]&&(!win[i].closed))
			win[i].close();
	for(i=0;i<partners.length;i++){
		if(i>0)url+='|';
		for(j=0;j<partners[i].length;j++){
			if(j>0)
				url+=':';url+=partners[i][j];
		}
	}
	url+='@'+data+'&head='+head;
	if(win[0]&&(!win[0].closed)){
		console=win[0];
		console.name='OTConsole';
		console.location=url;
		console.moveTo(0,0);
		console.resizeTo(240,600);
		console.focus();
	}else { 
		(console=openWindow(url,'OTConsole',0,0,240,screen.height,false)).focus();
	}
}
function buildQueryURL(b,d) {	var f=true;	var t=b+(b.indexOf('?')>=0 ? '&' : '?');	for (var i=0; i<d.elements.length; i++) {		var e=d.elements[i];		if (e.name && e.value) {			if (!f) t+='&';			t+=e.name+'='+escape(e.value);			f=false;		}	}	return t;}
function getAirportCode(target,search){var param="?target="+target;if(search != null){param=param.concat("&search=true");	}var url = "/airpcode_usa.html"+param;var optionlist = "scrollbars=yes,width=480,height=400,resizable=yes";window.open(url, "aircodes", optionlist);}
function openKwDailyStats(url,l){return openWindow(url,l,20,20,850,330,false);}
function destroyFormValue(n){var v=''; for(i=0;i<document.forms.length;i++){var q=document.forms[i];if(q.elements[n])q.elements[n].value=v;}}
function refreshPage(){var url=unescape(window.location.pathname); if(window.location.reload){window.location.reload(true);}else if(window.location.replace){window.location.replace(url);}else{window.location.href=url;}}
function addToFav(url,name) { if (window.external){ window.external.AddFavorite(url,name); } else if (window.sidebar) { window.sidebar.addPanel(name,url,"");} else { alert("Sorry! Your browser doesn't support this function.\n Please press Ctrl+D."); } }

function distributeFormValue(e){
	var f=e.form;
	var n=e.name;
	var v=e.value;
	for(i=0;i<document.forms.length;i++){
		var q=document.forms[i];
		if((q!=f)&&q.elements[n])
			q.elements[n].value=v;
	}
}

function formatNumber(n){
var nStr = ""+n;
dec = nStr.indexOf(".");
result = "";
if(dec != -1){
	decStr = nStr.substring(dec, nStr.length);
	nStr = nStr.substring(0, dec);
}
len = nStr.length;
count = 1;
while(len > 0){
	if(count == 4){
		result = "," + result;
		count = 1;
	}
	result = nStr.substring(len-1, len) + result;
	count++;
	len--;
}
if(dec != -1)
	result += decStr;
return result;
}

//Hiding or showing page elements ******************
function setDisplayStyle(o,value){o.style.display=value;}
function getDisplayStyle(o){return o.style.display;}
function showObject(o){if(o.style)o.style.visibility='visible';else o.visibility='show';}
function hideObject(o){if(o.style)o.style.visibility='hidden';else o.visibility='hide';}
//**************************************************


//Element by ID, Tag, Name functions ******************
function getObject(n){
	if(document.all)
		return document.all[n];
	else if(document.getElementById)
		return document.getElementById(n);
	else return document[n];
}

function getObjectByName(n){
	return document.getElementsByName(n);
}

function getObjectByTag(tag,o){
	if(o=="null")
		return document.getElementsByTagName(tag);
	else
		return o.getElementsByTagName(tag);
}
//****************************************************


//toggle checkboxes, radios  *****************
function distributeRadioValue(e){
	var f=e.form;
	var n=e.name;
	var v=e.value;
	for(i=0;i<document.forms.length;i++){
		var q=document.forms[i];
		if((q!=f)&&q.elements[n]){
			var l=q.elements[n].length;
			if(!l){
				q.elements[n].value=v;
			}
			else{
				for(var i=0;i<l;i++){
					if(q.elements[n][i].value==v)
						q.elements[n][i].checked=true;
				}
			}
		}
	}
}

function toggleList(pTag,o){
	hideObject(o);
	var parent=getParent(o);
	var childArr=getObjectByTag(pTag,parent);

	if(getDisplayStyle(childArr[0])!="block")
		setDisplayStyle(childArr[0],"block");
	else
		setDisplayStyle(childArr[0],"none");

	return false;
}


function toggleLRobjectsList(limitObjectId,remnantObjectId,displayOnlyRemnant){
	var limitObject = document.getElementById(limitObjectId);
	var remnantObject = document.getElementById(remnantObjectId);

	if( displayOnlyRemnant ) {
		limitObject.style.display = "none";
		remnantObject.style.display = "block";
	} else {
		limitObject.style.display = "block";
		remnantObject.style.display = "none";
	}

	return false;
}

function toggleCheck(id){
	var o=getObject(id);
	var c=o.checked;
	if(c==true)
		c=false;
	else
		c=true;
	o.checked = c;
}

function toggleOnewayCheck(id){
	var owRadio=getObject('oneWay');
	var owRadioChecked=owRadio.checked;
	
	if(owRadioChecked==false)
		toggleCheck(id);
}

// toggle disabling partners with no one-way support
function toggleNoOneway(){
	var divObj = getObject('cLabels');
	
	if (divObj != null) {
		//Initialize tag arrays inside campaign div
		var inputArr = getObjectByTag('input', divObj);
		var imgArr = getObjectByTag('img', divObj);
		var tdArr = getObjectByTag('td', divObj);
		var inputArrLen = inputArr.length;
		var imgArrLen = imgArr.length;
		var tdArrLen = tdArr.length;
		var owRadio=getObject('oneWay');
		var owRadioChecked=owRadio.checked;
	
		//Traverse input tags within camp div (toggles checkboxes)
		for (i=0;i<inputArrLen;i++) {
			if (inputArr[i].id.match('noOneway')) {
				if((inputArr[i].disabled)==false) {
					inputArr[i].disabled=true;
					inputArr[i].checked=false;
				}
				else
					inputArr[i].disabled=false;
			}
		}
	
		//Traverse img tags within camp div (toggles limit images)
		for (i=0;i<imgArrLen;i++) {
			if (imgArr[i].id.match('noOneway')) {
				var id = imgArr[i].id;
				var cp = id.substring(9);
				if(owRadioChecked==true)
					src='/images/contentPartner/' + cp + 'b.gif';
				else
					src='/images/contentPartner/' + cp + '.gif';
				
				imgArr[i].src = src;
			}
		}

		//Traverse tr tags within camp div (toggles remnant text)
		for (i=0;i<tdArrLen;i++) {
			if (tdArr[i].id.match('noOneway')) {
				var subText = getObjectByTag('span',tdArr[i])[0];			

				if(owRadioChecked==true) {
					tdArr[i].className="grey top"; //change main text class
					if (subText != null) {	//check for subtext
						subText.className="grey copySm";
					}
				}
				else {
					tdArr[i].className="top"; //change main text class
					if (subText != null) {	//check for subtext
						subText.className="black copySm";
					}
				}
			}
		}
		
	}
}

function setCSSClass(elementID, className) {
	var element = getObject(elementID);
	element.className = className;
	

}
function toggleLRList(showRemnant,limitClass,remnantClass){
	LRtoggler (document.getElementsByTagName("div"), showRemnant,limitClass,remnantClass);
	LRtoggler (document.getElementsByTagName("li"), showRemnant,limitClass,remnantClass);
}

function LRtoggler (tagsArray, showRemnant,limitClass,remnantClass) {
	var i=0;
	while  (tagsArray[i]){
		var currentTag = tagsArray[i];
		if(currentTag.className) {
			var currentClassArr = currentTag.className.split(" ");
			for (j in currentClassArr) {
	 			if (currentClassArr[j]==limitClass) {
		 			if(!showRemnant)
						currentTag.style.display='block';
					else
						currentTag.style.display='none';
			 	} else if (currentClassArr[j]==remnantClass) {
		 			if(showRemnant)
						currentTag.style.display='block';
					else
						currentTag.style.display='none';
			 	}
			}
		}
		i++;
	}
}


function toggleLRCat(showRemnant,limitClass,remnantClass,LRtagID){
	var LRtags = document.getElementById(LRtagID).childNodes;
	LRtoggler (LRtags, showRemnant,limitClass,remnantClass);
}
function uncheckBoxes(f){
	for(i=0;i<f.elements.length;i++){
		var p=f.elements[i];
		if((p.name.match(/^C\.([0-9]+)\.([0-9]+)\.([0-9]+)\.(.*)$/)))
			p.checked = false;
	}
}

//***************************************************


//Manipulate guest, rooms, passengers values ******************
function rewriteGuestSelect( rooms ) {

	var min = rooms.value;
	var max = rooms.value * 4;
	var listVals = new Array();
	var travelBoxes =	getObjectByTag('select', 'null');

	for(i=0;i<travelBoxes.length;i++) {	//traverse all the select boxes on the page
		if (travelBoxes[i].name == 'travelers') {	//check to see if the box is travelers
	
			//Reset listVals and options array to get rid of old vals
			listVals.length =0;
			travelBoxes[i].options.length=0;
	
			optCount = 0;	//listVals index (always needs to start with 0)
			for (count=min-1; count<max; count++) {
				num = count+1;	//list text and value index
				listVals[count] = new Option(num, num);
				travelBoxes[i].options[optCount] = listVals[count] ;
				optCount ++;
			}	//end for

		}	//end if 

	}	//end for #1

}
//**************************************************************


//Date Functions ***********************************************
// Accepts dates of the format: MM/DD/YYYY, M/D/YY, MM-DD-YYYY  (and all 16 combinations of those three forms)
// Also accepts: Day.Month.Year (using periods with the same allowance digit allowance as specified above)
// Returns: Parsed date in a 3 element numeric array (month,day,4-dig year).  If the date cannot be retrieved from the 
// given text returns null.
function formatDate(pDateStr) {
	var month, day, year, currYear;
	var dateArr = pDateStr.split(/[-/]/);  // Allow 'month/day/year' or 'month-day-year' formats
	var currDate=new Date();
	currYear = currDate.getFullYear();
	
	if( dateArr.length==3 ) {	
		month = parseInt(dateArr[0],10);
		day =parseInt(dateArr[1],10);
		year =parseInt(dateArr[2],10);
	} 
	else {
		dateArr = pDateStr.split(/\./);  // Allow 'day.month.year' format
		if( dateArr.length==3 ) {
			day =parseInt(dateArr[0],10);
			month = parseInt(dateArr[1],10);
			year =parseInt(dateArr[2],10);
		}
		else
			return null;
	}
	
	// Verify good month, day and year ranges
	if (year<2000)	//if they enter only last two digits of the year
		year += 2000;
		
	if((isNaN(day)) || (isNaN(month)) || (isNaN(year)))	//Check to see if text(or nothing) was entered instead of numbers
		return null;	
	else if((month<1 || month>12) || (day<1 || day>31) || (year<currYear || year> currYear+7))	//check ranges
		return null;
	else 
		return new Array(month,day,year);
}
//**************************************************************




