var strJsNewActionToken = "~~*~~";

var strPrevTmpSaveRepop = "";

var reqPop;

var _seedCity;

function showAnError( aNode, aMsg )
{
	setNiceTitleProps( "/js/lt_pink_ptr2.png", "/js/char_x.gif", "eviltextCell", "nicetable" );
	showNiceError( aNode, aMsg );
	setNiceTitleProps( "/js/omgPtr3.gif", "/js/char_x.gif", "helptextCell", "nicetable" );
}

function jump( jump_name ) {
	document.location = '#'+jump_name;
}

function processReqChange_repop() 
{
	// only if req shows "complete"
	if (reqPop.readyState == 4) {
		// only if "OK"

		if (reqPop.status == 200) {
			// ...processing statements go here...

			var xmlDoc = reqPop.responseXML;
			var state = document.getElementById( "tm_state" );
			var city = document.getElementById( "tm_city" );

			var neighbObj = false;
			try {
				neighbObj = xmlDoc.documentElement.getElementsByTagName("neighborhood");
			} catch(exp1) {
				neighbObj = false;
			}
			
			if( neighbObj[0] )
			{
				resetNeighborhoodFinish(neighbObj[0]);
			}
			else
			{
				if( state.value && city.value && city.value != strJsNewActionToken )
				{
					try 
					{
						var neighbList = xmlDoc.documentElement.getElementsByTagName("neighb");
						
						clearNeighborhoods();
						populateNeighborhoods( neighbList )
					}
					catch( e ) {}
				}
				else
				{
					try 
					{
						var cityList = xmlDoc.documentElement.getElementsByTagName("city");

						clearCities();
						populateCities( cityList );
						
						if( globCitySet )
						{
							selectHelper( city, globCitySet );
						}
					}
					catch( e ) {}
				}
			}
		}
	}
}

function loadXMLDoc_repop(url) 
{
	try {
	    // branch for native XMLHttpRequest object
	    if (window.XMLHttpRequest) {
		reqPop = new XMLHttpRequest();
		reqPop.onreadystatechange = processReqChange_repop;
		reqPop.open("GET", url, true);
		reqPop.send(null);
	    // branch for IE/Windows ActiveX version
	    } else if (window.ActiveXObject) {
		reqPop = new ActiveXObject("Microsoft.XMLHTTP");
		if (reqPop) {
		    reqPop.onreadystatechange = processReqChange_repop;
		    reqPop.open("GET", url, true);
		    reqPop.send();
		}
	    }
	} catch( e ) { alert( "loadXMLDoc_repop ERROR: '"+e+"'" ) }
}



function stateChange()
{
/*
	var state = document.getElementById( 'tm_state' );

	hideNewCity();
	
	try {
		hideNewNeighb();
	} catch(e) {}

	clearCities();
	
	try {
		clearNeighborhoods();
	} catch(e) {}

	try {
		if( state.selectedIndex > 0 )
		{
			if( state.options[state.selectedIndex].value != "" )
			{
				loadXMLDoc_repop( "../CsnPop?state=" + state.value ) ;
			}
			else
			{

			}		
		}
	} catch(ig) {}
*/	
}

function cityChange()
{
	var state = document.getElementById( 'tm_state' );
	var city = document.getElementById( 'tm_city' );

	try {
		clearNeighborhoods();
	} catch(e) {}
	

	if( city.selectedIndex > 0 && city.options[city.selectedIndex].value != strJsNewActionToken )
	{	
		loadXMLDoc_repop( "../CsnPop?state=" + state.value + "&city=" + city.value ) ;
	}
	else if( city.selectedIndex > 0 )
	{
		showNewCity();
		
		try {
			showNewNeighb();
		} catch(e) {}
	}
}

function neighbChange()
{
	var seltag = document.getElementById( 'neighborhood' );
	var fk = document.getElementById( 'neighborhood_fk' );

	if( seltag.options[seltag.selectedIndex].value == strJsNewActionToken )
	{
		fk.value = "-1";
		showNewNeighb();
	}
	else
	{
		fk.value = seltag.options[seltag.selectedIndex].value;
	}	
}

function clearCities() {

	try {
		var seltag = document.getElementById( 'tm_city' );

		while( seltag.length > 1 )
			seltag.options[(seltag.length-1)] = null; 

		seltag.selectedIndex = 0;
		
	} catch(ig) {}
}


function clearNeighborhoods() {

	try {
		var seltag = document.getElementById( 'neighborhood' );

		hideNewNeighb();


		while( seltag.length > 1 )
			seltag.options[(seltag.length-1)] = null;

		seltag.selectedIndex = 0;
	} catch(e) {}
}

function populateCities( arCities )
{
	var seltag = document.getElementById( 'tm_city' );	

	seltag.options[0] = new Option(); 
	seltag.options[0].text =  'Select a city...';
//	seltag.options[0].value = strJsNewActionToken;
	seltag.options[0].value = '';

	for (var i = 0; i < arCities.length; i++) 
	{
		seltag.options[i+1] = new Option(); 
		seltag.options[i+1].text = arCities[i].getAttribute("name");
		seltag.options[i+1].value = arCities[i].getAttribute("name");
		
		if( _seedCity && _seedCity == seltag.options[i+1].value )
		{
			seltag.options[i+1].selected = true;
			cityChange();
		}
	}

	seltag.options[i+1] = new Option(); 
	seltag.options[i+1].text =  '[Add a new city...]'
	seltag.options[i+1].value = strJsNewActionToken;
	
	if( _seedCity )
	{
		_seedCity = false;
	}
}

function populateNeighborhoods( arNeighb )
{
	var seltag = document.getElementById( 'neighborhood' );
	
	var blankVal = "";
	
	seltag.options[0] = new Option(); 
	seltag.options[0].text =  'Select a neighborhood...';
//	seltag.options[0].value = strJsNewActionToken;
	seltag.options[0].value = '';

	for (var i = 0; i < arNeighb.length; i++) 
	{
		seltag.options[i+1] = new Option(); 
		seltag.options[i+1].text = arNeighb[i].getAttribute("name");
		seltag.options[i+1].value = arNeighb[i].getAttribute("id");
	}
	
	seltag.options[i+1] = new Option(); 
	seltag.options[i+1].text =  '(any)';
	seltag.options[i+1].value = blankVal;
	i++;

	seltag.options[i+1] = new Option(); 
	seltag.options[i+1].text =  '[Add a new neighborhood...]'
	seltag.options[i+1].value = strJsNewActionToken;
	
	try {
		populateNeighborhoods_callback();
	} catch(e) {}
}

function populateStates()
{
	var arStates=["AK","AL","AR","AZ","CA","CO","CT","DC","DE","FL","GA","HI","IA","ID","IL","IN","KS","KY","LA","MA","MD","ME","MI","MN","MO","MS","MT","NC","ND","NE","NH","NJ","NM","NV","NY","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VA","VT","WA","WI","WV","WY"];

	var seltag = document.getElementById( 'tm_state' );

	try
	{
		for( i=0; i<arStates.length; i++ )
		{
			seltag.options[i+1] = new Option(); 
			seltag.options[i+1].value = arStates[i];
			seltag.options[i+1].text = arStates[i];
		}
	} catch( e ) {
		//alert( "except: '"+e.description+"'" );
	}
}

function selectHelper( elemSelect, myValue )
{
	if( myValue == "~~*~~" )
		myValue = '';

	try {
		var setFlag = false;

		for( i=0; i<elemSelect.options.length; i++ )
		{
			if( elemSelect.options[i].value == myValue )
			{
				elemSelect.selectedIndex = i;
				setFlag = true;
				continue;
			}
		}		

		if( !setFlag )
			elemSelect.selectedIndex = 0;
	}
	catch( e )
	{
		//alert( "omg: "+e );
	}
}

function updateDate()
{
	_hidden		= document.getElementById( "hidden_date" );
	_monthSel	= document.getElementById( "month" );
	_daySel		= document.getElementById( "day" );
	_yearSel	= document.getElementById( "year" );

	/// ditch early if there's no hidden date value.
	if( !_hidden.value )
	{
		_monthSel.selectedIndex = 0;
		_yearSel.selectedIndex = 0;
		_daySel.selectedIndex = 0;
		return;
	}

	arSplit = _hidden.value.split("-");

	myYear	= arSplit[0];
	myMonth	= arSplit[1];
	myDay	= arSplit[2];

	selectHelper( _yearSel, myYear );
	selectHelper( _monthSel, myMonth );
	selectHelper( _daySel, myDay );	
	
	try {
		document.getElementById( 'available_no' ).checked = true;
		
		document.getElementById( 'month' ).disabled = false;
		document.getElementById( 'day' ).disabled = false;
		document.getElementById( 'year' ).disabled = false;
	
	} catch(ig) {}
}

/**
 * Set the city, state, and neighborhood fields based on a neighb_id.
 */
function resetNeighborhood( neighb_id )
{
	loadXMLDoc_repop( "../CsnPop?state=" + neighb_id ) ;
}

function resetNeighborhoodFinish( neighHash )
{
	selectHelper( document.getElementById('tm_state'), neighHash.getAttribute("state") );
	stateChange();

	selectHelper( document.getElementById('tm_city'), neighHash.getAttribute("city") );
	cityChange();
	
	selectHelper( document.getElementById('tm_city'), neighHash.getAttribute("city") );
	cityChange();		
}

function condUpdateDate()
{
	_hidden		= document.getElementById( "hidden_date" );
	_monthSel	= document.getElementById( "month" );
	_daySel		= document.getElementById( "day" );
	_yearSel	= document.getElementById( "year" );

	/// ditch early if there's no hidden date value.
	if( 
		_monthSel.options[_monthSel.selectedIndex].value &&
		_daySel.options[_daySel.selectedIndex].value && 
		_yearSel.options[_yearSel.selectedIndex].value
	)
	{
		_hidden.value = 
			_yearSel.options[_yearSel.selectedIndex].value + "-" +
			_monthSel.options[_monthSel.selectedIndex].value + "-" +
			_daySel.options[_daySel.selectedIndex].value;
			
		ajaxer( _hidden );
	}
}

function hideNewCity()
{
	try {
		var h1 = document.getElementById( 'cityhide' );
		var h2 = document.getElementById( 'cityhide2' );
		var old_city = document.getElementById( 'cityhide_old' );
		var myInp = document.getElementById( 'newcity' );

		myInp.value = '';
		h1.style.display = 'none';
		h2.style.display = 'none';
		old_city.style.display = 'block';
	} catch(ig) {}
}

function hideNewNeighb()
{
	try {
		var h1 = document.getElementById( 'neighbhide' );
		var h2 = document.getElementById( 'neighbhide2' );
		var old_neigh = document.getElementById( 'neighbhide_old' );
		var myInp = document.getElementById( 'newneighb' );

		myInp.value = '';
		h1.style.display = 'none';
		h2.style.display = 'none';
		old_neigh.style.display = 'block';
	} catch(ig) {}
}

function showNewCity()
{
	try {

		var h1 = document.getElementById( 'cityhide' );
		var h2 = document.getElementById( 'cityhide2' );
		var old_city = document.getElementById( 'cityhide_old' );


		h1.style.display = 'block';
		h2.style.display = 'block';
		old_city.style.display = 'none';
	
	} catch( exc ) {}
}

function showNewNeighb()
{
	try {

		var h1 = document.getElementById( 'neighbhide' );
		var h2 = document.getElementById( 'neighbhide2' );
		var old_neigh = document.getElementById( 'neighbhide_old' );

		h1.style.display = 'block';
		h2.style.display = 'block';
		old_neigh.style.display = 'none';
	} catch( exc ) {
	
	}
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// START OF VERIFICATION SECTION
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function checkCustomFields()
{
	var newC = document.getElementById( 'newcity' );
	var newN = document.getElementById( 'newneighb' );
	var hidC = document.getElementById( 'cityhide' );
	var hidN = document.getElementById( 'neighbhide' );
	
	var city = document.getElementById( 'tm_city' );
	var neig = document.getElementById( 'neighborhood' );
	
	var errorTxt = "";

	try {
		if( hidC.style.display == 'block' )
		{
			if( newC.value == '' )
			{
				//errorTxt += "<li>Please enter your custom city information.</li>";

				showAnError( newC, "Please enter your custom city information." );
				jump( "locationTarget" );
				return false;
			}
		}
		else
		{
			if( city.value == '' || city.value == '~~*~~' )
			{
				//errorTxt += "<li>Please select a valid city.</li>";		
				showAnError( city, "Please select a valid city." );
				jump( "locationTarget" );
				return false;
			}
		}
	} catch(ig) {}
	
	
	try {
		if( hidN.style.display == 'block' )
		{
			if( newN.value == '' )
			{
				//errorTxt += "<li>Please enter your custom neighborhood information.</li>";
			}
		}
		else
		{
			if( neig.value == '~~*~~' )
			{
				//errorTxt += "<li>Please select a valid neighborhood.</li>";	
				showAnError( neig, "Please select a valid city." );
				jump( "locationTarget" );
				return false;
			}	
		}
	} catch(ig) {}

	
	if( errorTxt != "" )
	{
		er = document.getElementById( 'error' );

		er.innerHTML = errorTxt;

		return false;
	}
	
	return true;
}

function checkMundaneFields()
{
	try {
		objName = document.getElementById( 'tm_name' );
		if( !objName.value )
		{
			showAnError( objName, "Please enter your name." );
			jump( "aboutyouTarget" );
			return false;
		}
	} catch( e0 ) {}

	try {
		email = document.getElementById( 'email' );
		if( !Validate_Email_Address(email.value) )
		{
			showAnError( email, "Please enter a valid email." );
			jump( "aboutyouTarget" );
			return false;
		}
	} catch( e1 ) {}
	
	try {
		h1 = document.getElementById( 'opt_renttype_apart' );
		h2 = document.getElementById( 'opt_renttype_house' );
		h3 = document.getElementById( 'opt_renttype_condo' );
		h4 = document.getElementById( 'opt_renttype_duplx' );
		h5 = document.getElementById( 'opt_renttype_cottg' );
		h6 = document.getElementById( 'opt_renttype_roomt' );
		
		if( 
			!h1.checked && !h2.checked && !h3.checked &&
			!h4.checked && !h5.checked && !h6.checked
		)
		{
					var housingError = document.getElementById( 'housing_error' );
		
			showAnError( housingError, "Please choose at least one type of housing you'd like." );
			
			jump( "locationTarget" );
			return false;
		}
	} catch( e1 ) {}
	
	try {
		credit = document.getElementById( 'credit' );
		if( !credit.value )
		{
			showAnError( credit, "Please enter your estimated credit rating.  It's fine to guess." );
			jump( "aboutyouTarget" );
			return false;
		}
	} catch( e2 ) {}
	
	try {
		max_lease_term = document.getElementById( 'max_lease_term' );
		if( !max_lease_term.value )
		{
			showAnError( max_lease_term, "Please enter the maximum amount of time you'd like to live in your next apartment." );
			jump( "locationTarget" );
			return false;
		}
	} catch( e3 ) {}
	
	try {
		state = document.getElementById( 'tm_state' );
		if( !state.value )
		{
			showAnError( state, "Please choose a valid state." );
			jump( "locationTarget" );
			return false;
		}
	} catch( e3 ) {}	
	
	try {
		city = document.getElementById( 'tm_city' );
		if( !state.value || state.value=='city:' || state.value=='City:' )
		{
			showAnError( city, "Please choose a valid city." );
			jump( "locationTarget" );
			return false;
		}
	} catch( e3 ) {}	
	
	try {
		month = document.getElementById( 'month' );
		day   = document.getElementById( 'day' );
		year  = document.getElementById( 'year' );
		if( !month.value || !day.value || !year.value )
		{
			showAnError( 
				document.getElementById( 'trigger' ), 
				"Please enter the date you want to move into your next apartment." 
			);
			jump( "locationTarget" );
			return false;
		}
		if (
			(month.value == "02" && (day.value == "30" || day.value == "31")) || 
			((month.value == "04" || month.value == "06" || month.value == "09" || month.value == "11") && day.value == "31")
		) {
			showAnError( 
				document.getElementById( 'trigger' ), 
				"This date is not valid. Please enter a valid date." 
			);
			jump( "locationTarget" );
			return false;
		}
		
	} catch( e4 ) {}

	return true;
}

function checkDescStuff()
{

	try {
		var desc = document.getElementById( 'description_tm' );
		if( desc.value == descText )
		{
			showAnError( desc, "You need to enter a short description (at least 10 words) of your situation for prospective landlords." );
			jump( "descriptionTarget" );

			return false;			
		}

		wcount = document.getElementById( 'wcount' );
		if( !wcount.value || wcount.value < 10 )
		{
			showAnError( wcount, "You must enter at least 10 words explaining your needs and situation to prospective landlords." );
			jump( "descriptionTarget" );

			return false;
		}
	} catch(ig) { 
	}
	
	return true;	
}

function descOnKeyUp()
{
	wcount = document.getElementById( 'wcount' );
	if( wcount.value >= 10 )
	{
		closeAllOpenHelps();
	}
}

function checkContactMe()
{

try {
	var own = document.getElementById( 'opt_con_owners' );
	var age = document.getElementById( 'opt_con_agents' );
	var pro = document.getElementById( 'opt_con_propman' );
	var err = document.getElementById( 'opt_con_error' );
	
	if( !own.checked && !age.checked && !pro.checked )
	{
		showAnError( err, "How can we help you if nobody can contact you?" );
		jump( "employmentTarget" );
		
		return false;
	}
} catch( ig ) {}
	
	return true;
}

function checkMapStuff()
{
	if( !wasCustomLocationSet() )
	{
		var ma = document.getElementById( 'map_anchor' );

		showAnError( ma, "You need to select a custom location for your search.  Please click on the 'change' link or on the map to continue." );
		jump( "map_anchor_target" );
		return false;			
	}
	else
	{
		return true;
	}
}

function ten_checkCaptureSubmit()
{
	if( !checkCaptureSubmit() )
	{
		return false;
	}
	
	return checkMapStuff();
}

function checkCaptureSubmit()
{
	closeAllOpenHelps();
	jump( "" );

	if( !checkMundaneFields() ) {
		return false;
	}

	if( !checkCustomFields() ) {
		return false;
	}

	if( !checkContactMe() )	{
		return false;
	}
		
		
	if( !checkBBP() ) {
		return false;
	}

	var taco = checkDescStuff();
		
	return taco;
}


function checkBBP()
{
	var be = document.getElementById( 'adv_beds' );
	var ba = document.getElementById( 'adv_baths' );
	var pb = document.getElementById( 'price_bottom' );
	var pt = document.getElementById( 'price_top' );
	
	if( !be || !ba || !pb || !pt )
	{
		return true;
	}
	else
	{
		if( !getSelectValue(be) )
		{
			showAnError( be, "Please select how many beds you are looking for in a rental." );
			jump( "bnb" );
			return false;
		}
		
		if( !getSelectValue(ba) )
		{
			showAnError( ba, "Please select how many baths you are looking for in a rental." );
			jump( "bnb" );
			return false;
		}
		
		if( !getSelectValue(pb) )
		{
			showAnError( pb, "Please select the least you'd pay for a place." );
			jump( "philo" );
			return false;		
		}
		
		if( !getSelectValue(pt) )
		{
			showAnError( pt, "Please select the most you'd pay for a place." );
			jump( "philo" );
			return false;
		}
		
		var priceTop = getSelectValue(pt);
		if( priceTop == "6000+" ) {
			priceTop = 6001;
		} else {
			priceTop++;
			priceTop--; //cheesy integerification.
		}
		
		if( getSelectValue(pb) > priceTop )
		{
			showAnError( pt, "You can't have a high price lower than your low price." );
			return false;
		}
	}
	
	return true;
}


var descText = "Tell us about your situation! (10 words or more, please)";
var descCountMode;
function descSetup() 
{

try {
	var desc = document.getElementById( 'description_tm' );
		
	if( !desc.value || desc.value == descText )
	{
		desc.value = descText;
		descCountMode = false;

		var cnt  = document.getElementById( "wcount" );
		var cntDiv  = document.getElementById( "wcountArea" );

		cnt.value = "0";
		cntDiv.style.display = 'none';
	}
	else
	{
		descCountMode = true;
		updateDescCount();
	}
} catch(ig) {}

}

function descOnclick() 
{
	var desc = document.getElementById( 'description_tm' );
	
	if( desc.value == descText )
	{
		desc.value = "";
	}
	
	var cntDiv  = document.getElementById( "wcountArea" );
	
	if( cntDiv.style.display != 'block' )
	{
		descCountMode = true;

		cntDiv.style.display = 'block';	
	}	
}

function wordcount(string) 
{
	var a = string.split(/\s+/g); // split the sentence into an array of words
	return a.length;
}

function updateDescCount() 
{
	if( descCountMode )
	{
		var desc = document.getElementById( "description_tm" );
		var cnt  = document.getElementById( "wcount" );	
		
		myval = wordcount( desc.value );
		if( !myval ) myval = 0;
		
		cnt.value = ""+myval;
	}
}

function chopen()
{
	descOnclick();
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// END OF VERIFICATION SECTION
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function updateStub() 
{
}

function loadXMLDoc(url) 
{
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = updateStub;
        req.open("GET", url, true);
        req.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = updateStub;
            req.open("GET", url, true);
            req.send();
        }
    }
}

var strPrevTmpSave;
function ajaxer( node )
{
	if( "opt_" == node.name.substring(0,4) || node.name == "felony_conviction" || node.name == "previous_eviction" )
	{
		if( node.checked )
		{
			if( strPrevTmpSave != "../tmpsave/?field="+node.name+"&value=1" )
			{		
				strPrevTmpSave = "../tmpsave/?field="+node.name+"&value=1";
				loadXMLDoc( strPrevTmpSave );
			}
		}
		else
		{
			if( strPrevTmpSave != "../tmpsave/?field="+node.name+"&value=0" )
			{		
				strPrevTmpSave = "../tmpsave/?field="+node.name+"&value=0";
				loadXMLDoc( strPrevTmpSave );
			}
		}
	}
	else if( node.name == "neighborhood" )
	{
		try
		{
			tm_state = document.getElementById( 'tm_state' );
			tm_city = document.getElementById( 'tm_city' );
			
			neighborhood_fk = document.getElementById( 'neighborhood_fk' ).value;
			
			//var nId = arNeighId[tm_state.value+";"+tm_city.value+";"+node.value];
			if( neighborhood_fk )
			{
				if( strPrevTmpSave != "../tmpsave/?field=neighborhood&value=" + neighborhood_fk )
				{		
					strPrevTmpSave = "../tmpsave/?field=neighborhood&value=" + neighborhood_fk;
					loadXMLDoc( strPrevTmpSave );
				}
			}
			else
			{
				if( strPrevTmpSave != "../tmpsave/?field=neighborhood&value=&lookup_state=" + tm_state.value + "&lookup_city=" + tm_city.value )
				{		
					strPrevTmpSave = "../tmpsave/?field=neighborhood&value=&lookup_state=" + tm_state.value + "&lookup_city=" + tm_city.value;
					loadXMLDoc( strPrevTmpSave );
				}	
			}
		}
		catch( e )
		{
			//alert( "exception: '"+e+"'" );
		}
	}
	else
	{	
		if( strPrevTmpSave != "../tmpsave/?field="+node.name+"&value="+node.value )
		{		
			strPrevTmpSave = "../tmpsave/?field="+node.name+"&value="+node.value;
			loadXMLDoc( strPrevTmpSave );
		}	
	}
}
