/* 
 * Donation specific Javascript
 */
var payment_type = 'card';

//TODO. Test
//if( $.browser.msie ) //IE WILL NOT RECOGNIZE THE onkeyup EVENT LISTENER SET in the Donation.ini form file
//{
//	$('card1').addListener( 'keyup', function( event ) { jumpCCField( event, 1, 2 ); } );
//	$('card2').addListener( 'keyup', function( event ) { jumpCCField( event, 2, 3 ); } );
//	$('card3').addListener( 'keyup', function( event ) { jumpCCField( event, 3, 4 ); } );
//}

function addressRequired()
{
	if( country == 'gb' || country == 'us' || country == 'ca' )
		return true
	else
		return false;
}

function changeFormDisplay( input )
{
	var method = input.value;
	switch( method )
	{
		case 'amex':
			switchToAmericanExpressLayout();
			payment_type = 'card';
			break;
		case 'paypal':
			switchToPaypalLayout();
			payment_type = 'paypal';
			break;
		case 'laser':
			switchToLaserLayout();
			payment_type = 'card';
			break;
		case 'maestro':
			switchToMeastroLayout();
			payment_type = 'card';
			break;
		case 'ideal':
			switchToIDEALLayout();
			payment_type = 'ideal';
			break;
		default:
			switchToNormalLayout();
			payment_type = 'card';
			break;
	}
		
}

function clearCCVals()
{
	for( var i = 1 ; i <= 4 ; i++ )
	{
		$('#card'+i).val("");
	}
}

/**
 * This function does all the required operations necessary to change
 * the CC fields and CVV fields to American Express Orientation
 */
function switchToAmericanExpressLayout()
{
	clearCCVals();
	$('#card_details').css( 'display', 'block' );
	$('#card1').css( { 'display' : 'inline', 'width' : '70px' } );
	$('#card1').attr( 'maxlength', '4' );
	$('#card2').css( 'display', 'none' );
	$('#card3').css( { 'display' : 'inline', 'width' : '106px' } );
	$('#card3').attr( 'maxlength', '6' );
	$('#card4').css( { 'display' : 'inline', 'width' : '88px' } );
	$('#card4').attr( 'maxlength', '5' );
	//Make the CVV 4 characters long
	$('#cvv').attr( 'maxlength', '4' );
	//Display the right CVV graphic
	$('#cvv-normal-graphic').hide();
	$('#cvv-amex-graphic').show();
	$('#card_issue_num').addClass( 'displayNone' );
	$('#card_start_date').addClass( 'displayNone' );
	displayAddressFields();
}

function switchToLaserLayout()
{
	clearCCVals();
	$('#card_details').css( 'display', 'block' );
	//Hide 2, 3 and 4
	$('#card2').css( 'display', 'none' );
	$('#card3').css( 'display', 'none' );
	$('#card4').css( 'display', 'none' );
	//Lengthen card1
	$('#card1').css( 'width', '280px' );
	$('#card1').attr( 'maxlength', '19' );
	$('#card_issue_num').addClass( 'displayNone' );
	$('#card_start_date').addClass( 'displayNone' );
	$('#cvv-normal-graphic').show();
	$('#cvv-amex-graphic').hide()
}

function switchToPaypalLayout()
{
    //Hide all card details
	$('#card_details').hide();
	//Hide all address details
	if( $('#billing_address:visible') )
		$('#billing_address').hide();
}

function switchToIDEALLayout()
{
    //Hide all card details
	$('#card_details').hide();
    $('#donate-donating-button-instructions').hide();
    
	//Hide all address details
	if( $('#billing_address:visible') )
		$('#billing_address').hide();
    
    // Show IssuerList field
    $('#donate-donating-ideal-instructions').show();
    $('#ideal_details').show();
}
function disableIDEALLayout()
{
    $('#donate-donating-ideal-instructions').hide();
    $('#ideal_details').hide();
}
function switchToMeastroLayout()
{
	switchToNormalLayout();
	//Hide 2, 3 and 4
	$('#card2').hide();
	$('#card3').hide();
	$('#card4').hide();
	//Lengthen card1
	$('#card1').css( 'width', '280px' );
	$('#card1').attr( 'maxlength', '19' );
	$('#card_issue_num').removeClass( 'displayNone' );
	$('#card_start_date').removeClass( 'displayNone' );
}

function switchToNormalLayout()
{
    disableIDEALLayout();
	clearCCVals();
	$('#card_details').show();
	$('#card1').css( { 'display' : 'inline', 'width' : '64px' } );
	$('#card1').attr( 'maxlength', '4' );
	$('#card2').css( { 'display' : 'inline', 'width' : '64px' } );
	$('#card1').attr( 'maxlength', '4' );
	$('#card3').css( { 'display' : 'inline', 'width' : '64px' } );
	$('#card3').attr( 'maxlength', '4' );
	$('#card4').css( { 'display' : 'inline', 'width' : '64px' } );
	$('#card4').attr( 'maxlength', '4' );
	$('#cvv').attr( 'maxlength', '3' );
	$('#cvv').val( $('#cvv').val().slice(0,3) );
	$('#cvv-normal-graphic').show();
	$('#cvv-amex-graphic').hide();
	$('#card_issue_num').addClass( 'displayNone' );
	$('#card_start_date').addClass( 'displayNone' );
    $('#donate-donating-button-instructions').show();
	displayAddressFields();
}

/**
 * This function controls the auto jump to the next field
 */
function jumpCCField( event, from, to )
{
	var element1 = 'card'+from;
	var element2 = 'card'+to;
	if( $('#'+element2).css('display') == 'none' ) //ie, if this is an American Express card....
		element2 = 'card'+(to+1);
	var length = $('#'+element1).attr('maxlength');
	allowNumbersOnly( element1 );
	if( !( event.keyCode >= 48 && event.keyCode <= 57 ) && !( event.keyCode >= 96 && event.keyCode <= 105 ) )
		return;
	if( $('#'+element1).val().length >= length ) {
        if (document.getElementById( element2 ).value.length > 1 ) {
            document.getElementById( element2 ).focus();
            document.getElementById( element2 ).select();
        } else {
            document.getElementById( element2 ).focus();
        }

	}

}
function allowNumbersOnly( element )
{
	var re = /^[0-9]*$/;
	if ( !re.test( $('#'+element).val() ) )
	{
		$('#'+element).val( $('#'+element).val().replace(/[^0-9]/g,"") );
		return false;
	}
	return true;
}

function displayEnteredInfo(purchaseType)
{
	var cardnum = $('#card1').val() + $('#card2').val() + $('#card3').val() + $('#card4').val();
	var lastFour = cardnum.substr( (cardnum.length-4), cardnum.length );
	var displayCard = "";
	for( var i = 0 ; i < cardnum.length-4 ; i++ )
		displayCard += 'x';
	displayCard += lastFour;

	$('#paymentConfirmation-payment-method').html( getFullMethodName($("input[name='method']:checked").val()) );
	$('#paymentConfirmation-payment-name-on-card').html( $("#card_name").val() );
	$('#paymentConfirmation-payment-card-num').html( displayCard );
	$('#paymentConfirmation-payment-amount').html(  $('#amount').val() );

	//Show the details and hide the form
	$('#paymentConfirmation').show();
	$('#payment-header').hide();
	$('#confirmation-header').show();
	$('#payment_form').hide();
	$('#card-images').hide();
	//Also hide any previous errors
	$('div.errors').hide();

	if( addressRequired() )
	{
		$('#paymentConfirmation-billingaddress').html( buildAddressHtml() );
		$('#paymentConfirmation-billingaddress-info').show();
	}
	setTimeout( 'window.scrollTo(0,0);$("#payment-processing-image").hide();', 2000 );

	if( purchaseType == "galaticket" )
	{
		$('.instruction-gp-payment').hide();
		$('.instruction-gp-review').show();
	}

	//Finally change the steps
	updatePaymentSteps('show', purchaseType);
	window.scrollTo(0,0);
}

function buildAddressHtml()
{
	var html = $('#address1').val() + "<br />";
	if( $('#address2').val() )
		html += $('#address2').val() + "<br />";

    if( $('#city').val() )
        html += $('#city').val() + ", ";

    if( $('#state').val() != '0' && $('#state').val() != '' )
        html += $('#state').val();
    if ($('#postcode').val())
        html += ", " + $('#postcode').val();
	html += "<br />" + $('#country').val().toUpperCase();
	return html;
}

function updatePaymentSteps( mode, purchaseType )
{
	if( mode == 'show' )
	{
		if( purchaseType == "donation" )
		{
			$('#donate-step3').attr( 'class', 'past' );
			$('#donate-step4').attr( 'class', 'active');
		}
		else if( purchaseType == "galaticket" )
		{
			$('#galapurchase-step2').attr( 'class', 'past' );
			$('#galapurchase-step3').attr( 'class', 'active');
		}

	}
	else
	{
		if( purchaseType == "donation" )
		{
			$('#donate-step3').attr( 'class', 'active' );
			$('#donate-step4').attr( 'class', 'future');
		}
		else if( purchaseType == "galaticket" )
		{
			$('#galapurchase-step2').attr( 'class', 'active' );
			$('#galapurchase-step3').attr( 'class', 'future');
		}
	}
}

function displayAddressFields()
{
	if( addressRequired() )
	{
		$('#billing_address').css('display','block');
        $('#fieldset-billing_address').css('display','block');
	}
}

function insertCurrency( returnInCode, elementId )
{
	if( elementId == null )
		elementId = 'amount';
	
	var currency;
	switch( country )
	{
		case 'nz':
			currency = 'NZD$';
			break;
		case 'gb':
			currency = 'GBP£';
			break;
		case 'us':
			currency = 'USD$';
			break;
		case 'ca':
			if ( $P.strpos(window.location.pathname, '/fr/') > 0)
				currency = '$ CAN';
			else
				currency = 'CAD$';
			break;
		case 'ie':
        case 'fi':
        case 'be':
        case 'nl':
        case 'es':
			currency = 'EUR€';
			break;
        case 'za':
			currency = 'ZAR';
			break;
        case 'cz':
			currency = 'CZK';
			break;
        case 'no':
			currency = 'NOK';
			break;
        case 'dk':
			currency = 'DKK';
			break;
		case 'au':
		default:
			currency = 'AUD$';
			break;
	}
	if( !returnInCode )
		$('#'+elementId).before( '<span class="currency">' + currency + '</span>' );

	return currency;
}

function validateCCnumber(card_number)
{
	var digit_string = "";
	var digit_sum = 0;
	var evenMultiplier = 0;
	var oddMultiplier = 0;

	if( card_number.length % 2 == 0 )
	{
		evenMultiplier = 1;
		oddMultiplier = 2;
	}
	else
	{
		evenMultiplier = 2;
		oddMultiplier = 1;
	}

	for ( var counter=0 ; counter < card_number.length ; counter++ )
	{
		current_digit = parseInt( card_number.charAt(counter) );
		if( (counter+1) % 2 == 0 ) //Add 1 to counter here as digit 0 is really the 1st digit.
			digit_string += current_digit*evenMultiplier;
		else
			digit_string += current_digit*oddMultiplier;
	}

	for ( counter=0; counter<digit_string.length; counter++ )
	{
		current_digit = parseInt( digit_string.charAt(counter) );
		digit_sum += current_digit;
	}

	if ( digit_sum % 10 == 0 )
	{
		return true;
	}
	else
	{
		return false;
	}

}

function validateCCLength( cardnum, cardtype )
{
	var cardlength = cardnum.length;
	if( cardlength == 0 )
		return false;
	else if( cardtype == 'laser' && ( cardlength > 19 || cardlength < 16 ) )
		return false;
	else if( cardtype == 'maestro' && cardlength != 16 && cardlength != 18 && cardlength != 19 )
		return false;
	else if( ( cardtype == 'visa' || cardtype == 'mc' ) && ( cardlength != 16 ) )
		return false;
	else if( cardtype == 'amex' && cardlength != 15 )
		return false;
	else
		return true;
}

function validateCCdate()
{
	month = $('#expiry_month').val();
	year = $('#expiry_year').val();
	day = 1;

	if( month == 0 || year == 0 )
		return false;

	var now = new Date();
	now = now.getTime(); //NN3

	var dateToCheck = new Date();
	dateToCheck.setYear(20+year);
	dateToCheck.setMonth(month);
	dateToCheck.setDate(day);
	var checkDate = dateToCheck.getTime();
	return (now < checkDate);
}

function validateCVV( card_type )
{
	var tempCvv =  $('#cvv').val();
	
	if ( allowNumbersOnly('cvv') != true )
		return false;
	
	if( card_type == 'visa' || card_type == 'mc' )
	{
		if( $('#cvv').val().length < 3)
			return false;
	}
	else if( card_type == 'amex' )
	{
		if( $('#cvv').val().length < 4)
			return false;
	}
	else if( card_type == null )
		return false;

	return true;
}

function getFullMethodName( type )
{
	if( type == 'visa' )
		return 'Visa';
	else if( type == 'mc' )
		return 'Mastercard';
	else if( type == 'laser' )
		return 'Laser';
	else if( type == 'maestro' )
		return 'Maestro';
	else if( type == 'amex' )
		return 'American Express';
	else if( type == 'discover' )
		return 'Discover';
	else
		return 'Paypal';
}

function returnToPaymentForm()
{
	$('#paymentConfirmation').hide()
	$('#payment_form').show();
	$('#card-images').show();
	$('.instruction-gp-payment').show();
	$('.instruction-gp-review').hide();
	updatePaymentSteps( 'close' );
}

function submitPaymentForm()
{    
    //$("#payment_form").submit();
	//Display Pending payment info
    var result = confirm(refresh_message);
	if( result )
	{
        $('.back').hide();
        $('#continue').hide();
		$('#payment-continue-button').hide();
        $('#payment-processing-button').show();
	 	$('#payment-overlay').show();
		document.payment_form.submit();
        return false;
	}
}

/**
 * This looks at #Tickets and an optional Discount Code and determines total cost for those tickets
 * (minus an optional free ticket)
 * 
 */
function calculateTicketCost()
{
	var party_id = 's'+$('#galaparty_id').val();

	var purchasedTickets = $('#total_tickets').val();

	if( purchasedTickets > 20 )
	{
		alert( 'You can only purchase a maximum of 20 tickets' );
		$('#total_tickets').val( 20 );
		purchasedTickets = 20;
	}

	if( $('#discount_code').val() )
	{
		$.getJSON( sBaseUrl+'events/validate-discount-code/code/' + $('#discount_code').val(), function( json ) {
			if( json.result === true )
			{
				purchasedTickets = purchasedTickets - 1;

				total = ( parteLocations['cost'][party_id] * purchasedTickets );
				$('#total_cost').val( total.toFixed( 2 ) );
			}
			else
			{
				alert(json.result);
				$('#discount_code').val('');

				total = ( parteLocations['cost'][party_id] * purchasedTickets );
				$('#total_cost').val( total.toFixed( 2 ) );
			}
		} );
	}
	else
	{
		total = ( parteLocations['cost'][party_id] * purchasedTickets );
		$('#total_cost').val( total.toFixed( 2 ) );
	}
}

function updateGalapartyDisplay()
{
	//Remove the old one
	$('#galaparty_address').remove();
	var id = 's'+$('#galaparty_id').val();
	var html = '<p id="galaparty_address">' + parteLocations['venue'][id] + '<br />' + parteLocations['address'][id];
	html += '<br />' + parteLocations['date'][id] + '</p>';
	$('#galaparty_id').after( html );
	$('#msg_partyLocation').text(parteLocations['location'][id]);
}

