$( document ).ready( function() {

	// add form validation
	$( 'form.verify_form' ).submit( function() {
		return verifyForm( this );
	});

	// clean form fields
	$( 'form.verify_form input' ).blur( function() {
		return convert( this );
	});

	// dev/external links
	$( 'a[@rel="dev"],a[@rel="external"]' ).click( function() {
		window.open( this.href );
		return false;
	});

});

function verifyForm( theForm ) {

	for( i = 0; i < theForm.elements.length; i ++ ) {

		var theFld = theForm.elements[ i ];
		var reqFld = ( theFld.id.indexOf( '_Req' ) != -1 ) ? true : false;
		var valSet = ( theFld.value == 0 || theFld.value == '' ) ? false : true;
		var fldChop = theFld.id.split( '_Req' );
		var fldName = fldChop[ 0 ].split( '_' ).join( ' ' );

		if( reqFld == true && ( valSet == false || ( theFld.type == 'checkbox' && theFld.checked == false ) ) ) {
			alert( fldName + ' cannot be left blank' );

			if( theFld.type == 'text' || theFld.type == 'textarea' ) {
				theFld.focus();
				theFld.select();
			} else {
				theFld.focus();
			}
			return false;
		}

		if( ( fldName.indexOf( 'Email' ) != -1 || fldName.indexOf( 'E-mail' ) != -1 ) && valSet ) {
			if( !/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test( theFld.value )) {
				alert( fldName + ' \'' + theFld.value + '\' is not in a recognised format' );
				theFld.focus();
				theFld.select();
				return false;
			}
		}

		if( fldName.indexOf( 'Card Number' ) != -1 && theFld.value.length < 16 ) {
			alert( fldName + ' must contain at least 16 characters' );
			theFld.focus();
			return false;
		}

		if( fldName.indexOf( 'Card Type' ) != -1 ) {
			if( theFld.value.indexOf( 'Switch' ) != -1 || theFld.value.indexOf( 'Solo' ) != -1 ) {
				var cardIssue = theForm.elements[ 'card_issue_number' ];
				if( cardIssue.value == '' ) {
					alert( 'Issue Number must be completed when paying by Switch or Solo' );
					cardIssue.focus();
					return false;
				}
			}
		}
	}

	var btns = document.getElementsByTagName( 'input' );
	for( btn = 0; btn < btns.length; btn ++ ) {

		if( btns[ btn ].type == 'submit' ) {
			btns[ btn ].disabled = true;
			btns[ btn ].value = 'Sending...';
		}
	}
	return true;
}

function convert( str ) {

	if( str.type == 'text' && str.name && str.value != '' ) {

		var fldName = str.name.toLowerCase();
		str.value = str.value.toLowerCase();

		if( fldName.indexOf( 'email' ) != -1 || fldName.indexOf( 'e-mail' ) != -1 || fldName.indexOf( 'e_mail' ) != -1 || fldName.indexOf( 'web_address' ) != -1 ) {

			str.value = str.value.replace( /\s/g, '' );

		} else if( fldName.indexOf( 'telephone' ) != -1 || fldName.indexOf( 'other_number' ) != -1 ) {

			str.value = str.value.replace( /([^.0-9-extmob\+\(\)\s])/g, '' );

		} else {

			var a = str.value.split( /\s+/g );
			for( i = 0 ; i < a.length; i ++ ) {
				var word = a[ i ];
				if( word ) {
					word = word.replace( word.charAt( 0 ), word.charAt( 0 ).toUpperCase() );
					if( word.indexOf( '-' ) != -1 ) {
						var pos = ( word.lastIndexOf( '-' ) + 1 );
						word = word.replace( word.charAt( pos ), word.charAt( pos ).toUpperCase() );
					}
					if( word.indexOf( '(' ) != -1 ) {
						var pos = ( word.indexOf( '(' ) + 1 );
						word = word.replace( word.charAt( pos ), word.charAt( pos ).toUpperCase() );
					}
					if( word.charAt( 1 ) == '\'' ) {
						word = word.replace( word.charAt( 2 ), word.charAt( 2 ).toUpperCase() );
					}
					if( word.charAt( 0 ) == 'M' && word.charAt( 1 ) == 'c' ) {
						word = word.replace( word.charAt( 2 ), word.charAt( 2 ).toUpperCase() );
					}
					a[ i ] = word;
				}
			}
			str.value = a.join( ' ' );
		}
		str.value = normalizeString( str.value );
	}
}

function normalizeString( s ) {

	// Regular expressions for normalizing white space.
	var whtSpEnds = new RegExp( '^\\s*|\\s*$', 'g' );
	var whtSpMult = new RegExp( '\\s\\s+', 'g' );

	s = s.replace( whtSpMult, ' ' );  // Collapse any multiple whites space
	s = s.replace( whtSpEnds, '' );   // Remove leading or trailing white space

	return s;
}

function getObj( name ) {

	if( document.getElementById ) { // Level 1 DOM - Moz, IE 5+, Opera 5+, Konqueror, Safari, iCab, OmniWeb 4.5
		this.obj = document.getElementById( name );
		this.style = document.getElementById( name ).style;
	} else if( document.all ) { // IE 4+, Opera 6+, iCab, Omniweb 4.2
		this.obj = document.all[ name ];
		this.style = document.all[ name ].style;
	} else if( document.layers ) { // NS 4, Omniweb 4.2
		this.obj = document.layers[ name ];
		this.style = document.layers[ name ];
	}
}

var eleCnt = 1;
function addUpload() {

	var maxCalculations = 5;
	eleCnt ++;

	if( eleCnt <= maxCalculations ) {

		// element which holds upload
		var holderDiv = new getObj( 'holderDiv' );

		if( holderDiv.obj ) {

			// create new div element
			var theDiv = holderDiv.obj.appendChild( document.createElement( 'div' ) );

			// add new upload element
			var string = '<div class="formLegend">&nbsp;</div><div class="formElement"><input type="file" name="file' + eleCnt + '" /></div>';
			theDiv.innerHTML = string;
		}
	} else {
		alert( 'Maximum ' + maxCalculations + ' file attachments allowed!' );
		var au = new getObj( 'au' );
		if( au.obj ) {
			au.obj.disabled = true;
		}
	}
}