function showErrors( errors )
{
	$H( errors ).each( function(pair) {
		var id = pair.key;
		var res = pair.value;
		var field = id + '_error';
		if( $( field ) )
		{
			if( $( field ).firstDescendant() )
				$( field ).firstDescendant().update( res );
			$( field ).show();
		}
	});
}

function hideErrors( simple )
{
	var divs = $$('div[id]');
	for( var i = 0; i < divs.length; i++ )
		if( divs[i].id.matches( /_error$/ ) )
			hideError( divs[i].id.replace( /_error$/, '' ), simple );
}

function hideError( id, simple )
{
	var field = id + '_error';
	if( $( field ) && $( field ).visible() )
	{
		if( simple )
			$( field ).hide();
		else
			Effect.SlideUp( field, { duration: 0.5 } ); 
	}
}

function submitForm( formid, url )
{
	$( formid ).action = url;
	$( formid ).request({
		parameters: { ajax: true },
		onSuccess: function( response )
		{
			var res = response.responseText;
			res = trim( res );
			if( res.length && res.match( /^URL:(.*)$/ ) )
				window.location.href = res.replace( /URL:\s*/, '' );
			else
				alert( res );					
		}
	}); 
}

function validateAnyForm( formid, url )
{
	if( !$( formid ) )
		return false;
	
	var valid = false;
	var old_action = $( formid ).action;
	$( formid ).action = url;
	$( formid ).request({
		asynchronous: false,
		onSuccess: function( response )
		{
			var res = trim( response.responseText );
			
			if( res.length > 0 )
			{
				var errors = res.evalJSON();
				showErrors( errors );
				valid = false;
			}
			else
			{
				valid = true;
			}					
		}
	});
	
	$( formid ).action = old_action;
	return valid;
}

function alterState( ccode, state_id )
{
	if( $( state_id ) )
	{
		if( ccode != 'US' && ccode != 'CA' )
		{
			$( state_id ).value = 'XX';
			if( $( state_id+'_error' ) && $( state_id+'_error' ).visible() )
				Effect.SlideUp( state_id+'_error', { duration: 0.5 } );
			if( $( 'zip_error' ) && $( 'zip_error' ).visible() )
				Effect.SlideUp( 'zip_error', { duration: 0.5 } );
		}
	}
}

function trim( str ) {
	str = str.replace(/^\s+/, '');
	for (var i = str.length - 1; i >= 0; i--) {
		if (/\S/.test(str.charAt(i))) {
			str = str.substring(0, i + 1);
			break;
		}
	}
	return str;
}

function toggleSlideRow( value, baseid )
{ 
	if( value == 1 && !$( baseid+'_row' ).visible() )
	{
		$( baseid+'_row' ).show();
		Effect.SlideDown( baseid+'_title', { duration: 0.5 } );
		Effect.SlideDown( baseid+'_content', { duration: 0.5 } );
		if( $( baseid ) )
			setTimeout( function() { $( baseid ).focus() }, 600 );
	}
	else if( value == 0 && $( baseid+'_row' ).visible() )
	{
		if( $( baseid ) ) 
			$( baseid ).value = '';
		$( baseid+'_row').hide();
		$( baseid+'_title').hide();
		$( baseid+'_content').hide();
	}
}