// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults
function attachBuyFormEvents() {
	if( $('buy_form') ) {
		if( Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5))==6 ) {
			$('address_container_toggler').hide();
			$('address_container').show();
			$('send_invoice_to').show();
		} else {
			//The toggle-links
			Event.observe('ssn_container_toggler', 'click', function(e){
				$('credential_type').value = 'ssn';
				toggleFieldsets();
				$('times_container').hide();
			});
			Event.observe('address_container_toggler', 'click', function(e){
				//$('credential_type').value = 'address';
				$('credential_type').value = 'give';
				toggleFieldsets(); 
				$('send_invoice_to').replace( '<h5 id="send_invoice_to">Skicka fakturan till</h5>' );
				$('address_label').replace( '<h5 id="address_label">Skicka strumporna till</h5>' );
				$('times_container').show();
			});
			
			Event.observe('address_container_toggler_none_giva_away', 'click', function(e){
				$('credential_type').value = 'address';
				$('send_invoice_to').replace( '<h5 id="send_invoice_to">Jag bor här</h5>' );
				$('address_label').hide();
				$('times_container').hide();
				
				new Effect.BlindDown('address_container');
				new Effect.BlindDown('ssn_container_toggler');
				new Effect.BlindUp('address_container_toggler');
				new Effect.BlindDown('send_invoice_to');
			});
			
			Event.observe('swesocks_head', 'click', function(e){
				$('credential_type').value = 'address';
				toggleFieldsets();
			});
			
		}
		
		attachSSNEvents();
		attachOtherInputEvents();
		
		//the submit		
		$('buy_form').onsubmit = function() {
		  return checkForAccept() && checkSSN() && checkAddresses();
		}
	}
}

function checkAddresses() {
	highlighted = false;
	if( $('credential_type').value == 'address' || $('credential_type').value == 'give' ) {
		return (
			insertError( 'Namn är inte ifyllt korrekt', 'lev_receiver_error', ($('lev_receiver').value != 'Namn' && $('lev_receiver').value != '') ) &&
			insertError( 'Gatuadress inte ifyllt korrekt', 'lev_street_error', ($('lev_street').value != 'Gatuadress' && $('lev_street').value != '') ) &&
			insertError( 'Postnummer inte ifyllt korrekt', 'lev_zip_error', ($('lev_zip').value != 'Postnummer' && $('lev_zip').value != '') )
		);	
	} else {
		$('form_errors').hide();
		if( $('lev_receiver_error') ) {
			$('lev_receiver_error').remove();
		}
		if( $('lev_street_error') ) {
			$('lev_street_error').remove();
		}
		if( $('lev_zip_error') ) {
			$('lev_zip_error').remove();
		}
		return true;
	}
	return false;
}

function checkSSN() {
	highlighted = false;
	return insertError( 'Personnummer måste vara i formatet YYMMDDNNN', 'ssn_error', RegExp(/\d{10}/).test(parseInt($('ssn').value)) );
}

function checkForAccept() {
	highlighted = false;
	return insertError( 'Du måste acceptera avtalet för att kunna beställa', 'accept_error', $('accept').checked );
}


function insertError( msg, id, res ) {
	if( res ) {
		if( $(id) ) {
			$(id).remove();
		}
	} else {
		$('form_errors').show();
		if( $(id) == null ) {
			$('form_errors').insert("<p id='" + id + "'>" + msg + ".</p>");
		}
		if( highlighted == false || highlighted == undefined ) {
			new Effect.Highlight('form_errors', {startcolor: '#E0581C', endcolor: '#231001'});
			highlighted = true;
		}
	}
	return res;
}

function attachOtherInputEvents() {
	var inputs_ids = new Array( 'lev_receiver', 'lev_street', 'lev_zip' );
	var values = new Array( 'Namn', 'Gatuadress', 'Postnummer' );
	var event_types = new Array( 'focus', 'blur' );
	
	$A(inputs_ids).each(function(element_id){
		var element = $(element_id);
		if( element ) {
			$A(event_types).each(function(event_type){
				Event.observe(element, event_type, function(e){
					if( values.include( element.value ) || element.value == '' ) {
						if( event_type == 'focus' ){
							element.backup = element.value;
							element.value = '';
						} else {
							element.value = element.backup;
						}
					}
				});
			});
		}
	});
}

function attachSSNEvents() {
	if( Prototype.Browser.Gecko ) {
		Event.observe('ssn', 'keyup', function(e){
			var pos = numberOfIntsInString( $('ssn').value );
			if( e.keyCode >= 96 && e.keyCode <= 105 ) {
				switch( pos ) {
					case 1: {$('ssn').value = $('ssn').value.slice(0,pos) + 'YMMDDNNNN'; $('ssn').setSelectionRange(pos,pos); break;}
					case 2: {$('ssn').value = $('ssn').value.slice(0,pos) + 'MMDDNNNN'; $('ssn').setSelectionRange(pos,pos); break;}
					case 3: {$('ssn').value = $('ssn').value.slice(0,pos) + 'MDDNNNN'; $('ssn').setSelectionRange(pos,pos); break;}
					case 4: {$('ssn').value = $('ssn').value.slice(0,pos) + 'DDNNNN'; $('ssn').setSelectionRange(pos,pos); break;}
					case 5: {$('ssn').value = $('ssn').value.slice(0,pos) + 'DNNNN'; $('ssn').setSelectionRange(pos,pos); break;}
					case 6: {$('ssn').value = $('ssn').value.slice(0,pos) + 'NNNN'; $('ssn').setSelectionRange(pos,pos); break;}
					case 7: {$('ssn').value = $('ssn').value.slice(0,pos) + 'NNN'; $('ssn').setSelectionRange(pos,pos); break;}
					case 8: {$('ssn').value = $('ssn').value.slice(0,pos) + 'NN'; $('ssn').setSelectionRange(pos,pos); break;}
					case 9: {$('ssn').value = $('ssn').value.slice(0,pos) + 'N'; $('ssn').setSelectionRange(pos,pos); break;}
					case 10: {$('ssn').value = $('ssn').value.slice(0,pos); $('ssn').setSelectionRange(pos,pos); break;}
				}
			}
		});
	}
	
	
	Event.observe('ssn', 'focus', function(e){
		if( ssnOkeyToOverwrite() ) {
			$('ssn').value = 'YYMMDDNNNN';
		}
		if( Prototype.Browser.Gecko ) {
			$('ssn').setSelectionRange(0,0);
		}
	});
	Event.observe('ssn', 'click', function(e){
		if( ssnOkeyToOverwrite() ) {
			$('ssn').value = 'YYMMDDNNNN';
		}
	});
	Event.observe('ssn', 'keydown', function(e){
		if( ssnOkeyToOverwrite() ) {
			$('ssn').value = '';
		}
	});
	
	Event.observe('ssn', 'blur', function(e){
		if( ssnOkeyToOverwrite() ) {
			$('ssn').value = 'Personnummer';
		}
	});
	
	Event.observe('ssn', 'keydown', function(e){
		$('ssn').value = $('ssn').value.replace( /NaN/, '' );
	});
	
}


function ssnOkeyToOverwrite() {
	if( $('ssn').value == '' || $('ssn').value == 'YYMMDDNNNN' || $('ssn').value == 'Personnummer' ) {
		return true;
	} else {
		return false;
	}
}

function toggleFieldsets() {
	new Effect.toggle('address_container','blind');
	new Effect.toggle('ssn_container_toggler');
	new Effect.toggle('address_container_toggler');
	new Effect.toggle('send_invoice_to');
	
	return false;
}

function numberOfIntsInString( string ) {
	int_part = parseInt(string);
	as_string = toString(int_part);
	return as_string.length;
}

function toString( integer ) {
	string = integer += '';
	return string;
}