var state	= "";

jQuery(function($) {

	validate_posting( 'entryform', 'form-error' );
	validate( 'form-register', 'form-error', '' );

	//	State selector field change
	$("div#state_fields select").change( function(event) {
	
		var cat_id	= $(this).attr("value");
		
		var abbr	= $(this).children("option:selected").attr("id");
		
		$("input#state_field").val( abbr.substr(12) );
		
		$("input#city_field").val("");
		
		$("div#metros_fields select").empty();
		
		$("div#metros_fields select").load( "/classifieds/inc-metro-menu", { parent_id: cat_id } );
		
		metros();
	});

	//	State browse field change
	$("div#state select").change( function(event) {
	
		var cat_id	= $(this).attr("value");
		
		state	= $(this).children("option:selected").attr("id");
		
		$("div#metros select").empty();
		
		$("div#metros select").load( "/classifieds/inc-metro-browse", { parent_id: cat_id } );
		
		metros_browse();
	});
	
	//	Order by field change	
	$("body#directory div#orderby form select").change( function(event) {
		$(this).parents("form")[0].submit();
	});
	
	//	Expiration date
	$("a#exp_date_renew").click( function(event) {
		$("input[@name='expiration_date']").val( $("input[@name='exp_date']").val() );
		return false;
	});
	
	//	Photo delete
	$("div#photo a#photo_delete").click( function(event) {
		$("div#photo").load( "/classifieds/ajax-photo-delete/", { entry_id:$(this).attr("href") }, function(event) { $("div#photo_form").show() });
		return false;
	});
	
	//	Status change
	$("a#status_change").click( function(event) {
		var status	= $("input[@name='status']").val();
		
		if ( status == "hold" )
		{
			$("input[@name='status']").val( "open" );
		}
		else
		{
			$("input[@name='status']").val( "hold" );
		}
		
		return false;
	});
});

function metros ()
{
	$("div#metros_fields select").unbind("change");
	
	$("div#metros_fields select").change( function(event) {
	
		var cat_id	= $(this).attr("value");
		
		$("input#city_field").val( $(this).children("option:selected").text() );
	});
}

function metros_browse ()
{
	var temp_return	= "/classifieds/";
	
	$("div#metros select").unbind("change");
	
	$("div#metros select").change( function(event) {
		var cat_id	= $(this).attr("value");
		
		window.location	= temp_return + state + "/" + cat_id;
	});
}



function validate ( form, error, realtor )
{
	var fields		= new Array('first', 'last', 'password', 'password_confirm');
	var phones		= new Array();

	if ( realtor == "_realtor" )
	{
		fields.push( 'phone_work' );
		phones.push( 'phone_work' );
		phones.push( 'phone_mobile' );
	}

	//	-------------------------------------
	//	Validate reg form
	//	-------------------------------------
	
	$("form#" + form).submit( function(event)
	{
		//	-------------------------------------
		//	Reset
		//	-------------------------------------
		
		var msg	= "";
		
		$("form#" + form + " input").parent("span").removeClass("error");
		
		//	-------------------------------------
		//	Validate email
		//	-------------------------------------
		
		var email	= $("form#" + form + " input[@name='email']").val();
		
		if ( /^[^\s,;]+@([^\s.,;]+\.)+[\w-]{2,}$/i.test(email) == false )
		{
			$("form#" + form + " input[@name='email']").parent("span").addClass("error");
			
			msg	+=	"<li>Please provide a valid email address.</li>"; 
		}
		
		//	-------------------------------------
		//	Validate phone
		//	-------------------------------------
		
		var phone			= '';
		
		var invalid_phone	= false;
		
		$.each( phones, function(i,n)
		{
			if ( $("form#" + form + " input[@name='" + n + "']").val() != '' )
			{
				phone	= $("form#" + form + " input[@name='" + n + "']").val();
		
				if ( /^[1-9]\d{2}\-?\d{3}\-\d{4}$/.test(phone) == false )
				{
					$("form#" + form + " input[@name='" + n + "']").parent("span").addClass("error");
					
					invalid_phone	= true;
				}
			}		
		});
		
		if ( invalid_phone )
		{
			msg	+=	"<li>Please format phone numbers as xxx-xxx-xxxx.</li>"; 
		}
		
		//	-------------------------------------
		//	Check password match
		//	-------------------------------------
		
		if ( $("form#" + form + " input[@name='password']").val() != $("form#" + form + " input[@name='password_confirm']").val() )
		{
			$("form#" + form + " input[@name='password']").parent("span").addClass("error");
			
			$("form#" + form + " input[@name='password_confirm']").parent("span").addClass("error");
			
			msg	+= "<li>Please make sure that your password confirmation matches your password.</li>";
		}
		
		//	-------------------------------------
		//	Check empties
		//	-------------------------------------
	
		var empty	= false;
		
		$.each( fields, function(i,n)
		{			
			if ( $("form#" + form + " input[@name='" + n + "']").val() == '' )
			{
				empty	= true;
				
				$("form#" + form + " input[@name='" + n + "']").parent("span").addClass("error");
			}		
		});
		
		if ( empty === true )
		{
			msg	+= "<li>Please complete the required fields.</li>";
		}
		
		//	-------------------------------------
		//	Check url
		//	-------------------------------------
		
		if ( realtor == '_realtor' )
		{	
			var empty	= false;
			
			$.each( ['url'], function(i,n)
			{			
				if ( $("form#" + form + " input[@name='" + n + "']").val() == 'http://' )
				{
					empty	= true;
					
					$("form#" + form + " input[@name='" + n + "']").parent("span").addClass("error");
				}		
			});
			
			if ( empty === true )
			{
				msg	+= "<li>Please complete the Web Site URL field.</li>";
			}
		}
		
		//	-------------------------------------
		//	State
		//	-------------------------------------
		
		if ( $("form#" + form + " div#state_fields" + realtor + " select").attr("value") == "select" )
		{
			$("form#" + form + " div#state_fields" + realtor + " select").parent("span").addClass("error");
			
			msg	+=	"<li>Please select a state.</li>"; 
		}
		
		//	-------------------------------------
		//	Metro
		//	-------------------------------------
		
		if ( $("form#" + form + " div#metros_fields" + realtor + " select").attr("value") == "select" )
		{
			$("form#" + form + " div#metros_fields" + realtor + " select").parent("span").addClass("error");
			
			msg	+=	"<li>Please select a metro area.</li>"; 
		}
		
		//	-------------------------------------
		//	Terms
		//	-------------------------------------
		
		if ( $("form#" + form + " input[@name='accept_terms']")[0].checked == false )
		{
			$("form#" + form + " input[@name='accept_terms']").parent("span").addClass("error");
			
			msg	+=	"<li>Your acceptance of the Terms of Service is required.</li>"; 
		}
		
		//	-------------------------------------
		//	Show message
		//	-------------------------------------
		
		if ( msg != '' )
		{
			$("div#" + error + "").show();
			$("div#" + error + " ul").empty();
			$("div#" + error + " ul").append( msg );
		
			return false;
		}
	});
}

function validate_posting ( form, error )
{
	var fields		= new Array('title_field', 'address_field', 'city_field', 'zip_field', 'price_field', 'brief_field', 'extended_field' );
	var phones		= new Array();

	//	-------------------------------------
	//	Validate reg form
	//	-------------------------------------
	
	$("form#" + form).submit( function(event)
	{
		//	-------------------------------------
		//	Reset
		//	-------------------------------------
		
		var msg	= "";
		
		$("form#" + form + " input").parent("span").removeClass("error");
		
		//	-------------------------------------
		//	Validate email
		//	-------------------------------------
		
		var price	= $("form#" + form + " input#price_field").val();
		
		if ( /-?[0-9]$/i.test(price) == false )
		{
			$("form#" + form + " input#price_field").parent("span").addClass("error");
			
			msg	+=	"<li>Please provide a valid price.</li>"; 
		}
		
		$("form#" + form + " input#price_field").val( addCommas( price ) );
		
		//	-------------------------------------
		//	Check empties
		//	-------------------------------------
	
		var empty	= false;
		
		$.each( fields, function(i,n)
		{
			if ( $("form#" + form + " #" + n).val() == '' )
			{
				empty	= true;
				
				$("form#" + form + " #" + n).parent("span").addClass("error");
			}		
		});
		
		if ( empty === true )
		{
			msg	+= "<li>Please complete the required fields.</li>";
		}
		
		//	-------------------------------------
		//	State
		//	-------------------------------------
		
		if ( $("form#" + form + " div#state_fields" + " select").attr("value") == "select" )
		{
			$("form#" + form + " div#state_fields" + " select").parent("span").addClass("error");
			
			msg	+=	"<li>Please select a state.</li>"; 
		}
		
		//	-------------------------------------
		//	Metro
		//	-------------------------------------
		
		if ( $("form#" + form + " div#metros_fields" + " select").attr("value") == "select" )
		{
			$("form#" + form + " div#metros_fields" + " select").parent("span").addClass("error");
			
			msg	+=	"<li>Please select a metro area.</li>"; 
		}
		
		//	-------------------------------------
		//	Show message
		//	-------------------------------------
		
		if ( msg != '' )
		{
			$("div#" + error + "").show();
			$("div#" + error + " ul").empty();
			$("div#" + error + " ul").append( msg );
		
			return false;
		}
	});
}


	
function addCommas( strValue )
{
/************************************************
DESCRIPTION: Inserts commas into numeric string.

PARAMETERS:
  strValue - source string containing commas.

RETURNS: String modified with comma grouping if
  source was all numeric, otherwise source is
  returned.

REMARKS: Used with integers or numbers with
  2 or less decimal places.
*************************************************/
  var objRegExp  = new RegExp('(-?[0-9]+)([0-9]{3})');

    //check for match to search criteria
    while(objRegExp.test(strValue)) {
       //replace original string with first group match,
       //a comma, then second group match
       strValue = strValue.replace(objRegExp, '$1,$2');
    }
  return strValue;
}