// Miva Merchant
//
// This file and the source codes contained herein are the property of
// Miva, Inc.  Use of this file is restricted to the specific terms and
// conditions in the License Agreement associated with this file.  Distribution
// of this file or portions of this file for uses not covered by the License
// Agreement is not allowed without a written agreement signed by an officer of
// Miva, Inc.
//
// Copyright 1998-2024 Miva, Inc.  All rights reserved.
// http://www.miva.com
//
// Prefix         : MER-PAY-PCP-RUN-
// Next Error Code: 2
//

// PayPal Complete Payments Runtime helper functions
////////////////////////////////////////////////////

function PayPalCommercePlatform_Runtime_FindAndValidateProductAddForm( button_element )
{
	var form;

	for ( form = button_element.parentNode; form && form.nodeName != 'FORM'; form = form.parentNode )
	{
		;
	}

	if ( !form )														return;
	if ( !PayPalCommercePlatform_Runtime_FormIsProductAdd( form ) )		return;

	return form;
}

function PayPalCommercePlatform_Runtime_FormIsProductAdd( form )
{
	return form.elements[ 'Quantity' ] && form.elements[ 'Product_Code' ] && form.elements[ 'Action' ] &&
		   form.elements[ 'Action' ].value === 'ADPR';
}

function PayPalCommercePlatfrom_Runtime_FormGatherInputElements( parent_element )
{
	var i, j, elements, field, type, output_array;

	output_array	= new Array();
	elements		= parent_element.getElementsByTagName( 'input' );

	for ( i = 0; i < elements.length; i++ )
	{
		type		= elements[ i ].type.toLowerCase();

		if ( ( type == 'text' ) || ( type == 'number' ) || ( type == 'tel' ) || ( type == 'hidden' ) )
		{
			field		= new Object();
			field.name	= elements[ i ].name;
			field.value	= elements[ i ].value;

			output_array.push( field );
		}
		else if ( ( type == 'checkbox' ) || ( type == 'radio' ) )
		{
			if ( elements[ i ].checked )
			{
				field		= new Object();
				field.name	= elements[ i ].name;
				field.value	= elements[ i ].value;

				output_array.push( field );
			}
		}
	}

	elements = parent_element.getElementsByTagName( 'textarea' );
	for ( i = 0; i < elements.length; i++ )
	{
		field		= new Object();
		field.name	= elements[ i ].name;
		field.value	= elements[ i ].value;

		output_array.push( field );
	}

	elements = parent_element.getElementsByTagName( 'select' );
	for ( i = 0; i < elements.length; i++ )
	{
		if ( elements[ i ].selectedIndex >= 0 && elements[ i ].options[ elements[ i ].selectedIndex ] )
		{
			if ( !elements[ i ].multiple )
			{
				field		= new Object();
				field.name	= elements[ i ].name;
				field.value	= elements[ i ].options[ elements[ i ].selectedIndex ].value;

				output_array.push( field );
			}
			else
			{
				for ( j = 0; j < elements[ i ].options.length; j++ )
				{
					if ( !elements[ i ].options[ j ].selected )	continue;

					field		= new Object();
					field.name	= elements[ i ].name;
					field.value = elements[ i ].options[ j ].value;

					output_array.push( field );
				}
			}
		}
	}

	output_array = output_array.filter( function( field )
	{
		var name = field.name.toLowerCase();

		if ( name == 'quantity'							||
			 name == 'product_code'						||
			 name == 'product_subscription_term_id'		||
			 name.indexOf( 'product_attributes[' ) == 0 )
		{
			return true;
		}

		return false;
	} );

	return output_array;
}

// PayPal Complete Payments Runtime AJAX calls
////////////////////////////////////////////////////

function PayPalCommercePlatform_Runtime_CreateProductOrder( callback, delegator )
{
	var product_add_form;

	if ( ( product_add_form = PayPalCommercePlatform_Runtime_FindAndValidateProductAddForm( document.getElementById( 'paypalcp-button-container' ) ) ) == null )
	{
		return callback( {
			success:		0,
			error_code:		'MER-PAY-PCP-RUN-00001',
			error_message:	'Unable to locate product form'
		} );
	}

	return AJAX_Call_Module_JSON_FieldList( callback, 'runtime', 'paypalcp', 'Runtime_CreateProductOrder', null, PayPalCommercePlatfrom_Runtime_FormGatherInputElements( product_add_form ), delegator );
}

function PayPalCommercePlatform_Runtime_CreateOrder( callback, delegator )
{
	return AJAX_Call_Module_JSON( callback, 'runtime', 'paypalcp', 'Runtime_CreateOrder', null, delegator );
}

function PayPalCommercePlatform_Runtime_CancelProductOrder( callback, delegator )
{
	return AJAX_Call_Module_JSON( callback, 'runtime', 'paypalcp', 'Runtime_CancelProductOrder', null, delegator );
}

function PayPalCommercePlatform_Runtime_CancelOrder( callback, delegator )
{
	return AJAX_Call_Module_JSON( callback, 'runtime', 'paypalcp', 'Runtime_CancelOrder', null, delegator );
}

function PayPalCommercePlatform_Runtime_PaymentApproved( paypal_orderid, callback, delegator )
{
	return AJAX_Call_Module_JSON( callback, 'runtime', 'paypalcp', 'Runtime_PaymentApproved',
	{
	  PayPalOrderID: paypal_orderid
	}, delegator );
}

function PayPalCommercePlatform_Runtime_UpdateOrderShipping( data, callback, delegator )
{
	return AJAX_Call_Module_JSON( callback, 'runtime', 'paypalcp', 'Runtime_UpdateOrderShipping', data, delegator );
}
