﻿/* *******************************************
    Javascript form validation functions used
    by the donorclick extension.
    Author: M. Stopp, EYE Communications AG
   ******************************************* */

// form validation for onsubmit
function validateForm(frm,fields,labels,mssg) {
	// params: frm = name of form, fields = array of field names to be checked, labels = array of field labels, mssg = basic alert message (list of empty fields will be appended)
	// note: fields + labels arrays should be parallel and same length -> fields[0] -> labels[0] etc.
	var back = true;
	var out = "";
	var isCC = 0;  // check credit card type+number (set to 3 to disable)
	for(var i=0;i<fields.length;i++) {
		if ( fields[i]=='cc_type' || fields[i]=='cc_number' ) isCC++;
		// warning: this can't catch field groups (eg. checkbox groups) with a naming scheme of fieldname[] (-> used for php array)
		fname = 'tx_donorclick_pi1['+fields[i]+']';
		if ( document.forms[frm].elements[fname] ) {
			if ( labels[i] == 'donation_xdata' && document.getElementById('label_donation_xdata') ) labels[i] = document.getElementById('label_donation_xdata').innerHTML;
			// check type of input field:
			var etype = document.forms[frm].elements[fname].type;
			if ( etype == 'select-one' ) {
				if ( document.forms[frm].elements[fname].options[document.forms[frm].elements[fname].selectedIndex].value == '' ) {
					out += "- "+labels[i] + "\n";
					back = false;
				}
			}
			else if ( etype == 'text' || etype == 'textarea' ) {
				// note: form values should probably be trimmed first to prevent cheating...
				// if ( document.forms[frm].elements[fname].value == '' ) {
				if ( document.forms[frm].elements[fname].value.replace(/^\s+|\s+$/g,"") == '' ) {
					out += "- "+labels[i] + "\n";
					back = false;
				}
			}
			else if ( document.forms[frm].elements[fname].length && document.forms[frm].elements[fname].length>0 ) {
				var field_arr = document.forms[frm].elements[fname];
				var selected = false;
				for (var j=0;j<field_arr.length;j++) {
					if ( field_arr[j].type == 'radio' && field_arr[j].checked ) selected = true;
					else if ( field_arr[j].type == 'checkbox' && field_arr[j].checked ) selected = true;
					// are there any other form field types with a field array???
				}
				if ( !selected ) {
					out += "- "+labels[i] + "\n";
					back = false;
				}
			}
		}
	}
	if ( ! back ) alert(mssg+"\n"+out);
	else if ( isCC==2 ) {
		back = checkCC(frm,'cc_type','cc_number');
		// we need a localized error message here...
		if ( ! back ) alert('ACHTUNG: Kartentyp und Kartennummer stimmen nicht überein!');
	}
	return back;
}

// check if minimum donation amount is reached
function checkMinAmount(frm,field,minamount,mssg) {
	// params: frm = name of form, field = field name of donation amount, minamount = min. donation amount, mssg = alert message
	var elems = document.forms[frm].elements;
	fname = 'tx_donorclick_pi1['+field+']';
	fname2 = 'tx_donorclick_pi1['+field+'_user]';
	if ( elems[fname] ) {
		var amount = 0;
		for(i=0;i<elems[fname].length;i++) {
			if ( elems[fname][i].checked ) {
				amount = elems[fname][i].value;
				if ( amount == 'user' ) amount = parseInt(elems[fname2].value);
			}
		}
		if ( amount < minamount ) {
			alert(mssg);
			return false;
		}
		else {
			return true;
		}
	}
}

// very simple check of card number against card type (see http://www.kreditkarte.net/ratgeber/kreditkartennummer/)
function checkCC(frm,ctype,cnumber) {
	// these prefixes should probably go into TS config
	var prefixes = new Array();
	prefixes['Visa'] = ['4'];
	prefixes['Mastercard'] = ['51','52','53','54','55'];
	prefixes['American Express'] = ['34','37'];
	prefixes['Saferpay-Test'] = ['94'];

	var elems = document.forms[frm].elements;
	ccType = 'tx_donorclick_pi1['+ctype+']';
	ccNumber = 'tx_donorclick_pi1['+cnumber+']';
	isOk = false;
	if ( elems[ccType].value!='' ) {
		if ( prefixes[elems[ccType].value] ) {
			for(var i=0;i<prefixes[elems[ccType].value].length;i++) {
				if ( elems[ccNumber].value.indexOf(prefixes[elems[ccType].value][i])==0 ) isOk = true;
			}
		}
	}
	return isOk;
}


// silly, but we seem to need it for webkit...
var dc_busy = new Image();
dc_busy.src = "/fileadmin/templates_mission21/ext_templ/donorclick/gui/busy.gif";

function donorclickShowOverlay() {
	jQuery('<div class="donorclick_overlay"><div class="donorclick_overlay_bg" style="display: none;"></div><img src="/fileadmin/templates_mission21/ext_templ/donorclick/gui/busy.gif" alt="loading..." width="32" height="32" /></div>').prependTo('body');
	jQuery('.donorclick_overlay_bg').fadeTo('fast', 0.5);
}

