//Start på formcheck

window.addEvent('domready', function() {
	var myCheck =new FormCheck('form_id', { 'onValidateFailure': failedVal });

	
	if ($$('input[name=isPayerMember]').length > 0) {
		$$('input[name=isPayerMember]')[0].removeAttribute("onclick");
		$$('input[name=isPayerMember]').addEvent('click', isPayerMemberDidChange);
	}
	$$('table.form-customer-info-payer input').addEvent('keyup', payerInformationDidChange);
});

function failedVal() {
	var failedtext = 'Om du inte lyckas slutföra din anmälan efter två försök, hjälper vi dig gärna att ta upp din anmälan via telefon. Ring och lämna din anmälan muntligen på telefon 08-624 74 14 (telefontid 9:00-13:00). Tack för ditt viktiga stöd!';
	
	if ($('val_failed')) {
		$('val_failed').appendText(failedtext);
	}
}

function validateMinimumAge18(element) {
    if (!validatePersonId(element)) {
        return false;
    }
    var dateParts = element.value.match(/(\d{2})(\d{2})(\d{2})-(\d{4})/);
    var currentYear = new Date().getFullYear() % 100;
    dateParts[1] = parseInt(dateParts[1]) + (dateParts[1] > currentYear ? 1900 : 2000);
    var newDate = dateParts[1]+"/"+dateParts[2]+"/"+dateParts[3];
    var birthDate = new Date(newDate);
    var maximumBirthDate = new Date();
    maximumBirthDate.setFullYear(maximumBirthDate.getFullYear() - 18);
    if (birthDate < maximumBirthDate) {
        return true;
    }
    element.errors.push("Du måste vara minst 18 år gammal.");
    return false;
}

function validateMaximumAge18(element) {
	if (!element.value.test(/^\d{4}-\d{2}-\d{2}$/)) {
		element.errors.push("Skriv in ett giltigt datum: <br /><span>T.ex. " + (typeof(new Date().format) == 'function' ? new Date().format("%Y-%m-%d") : '2009-04-19') + "</span>");
        return false;
    }
    var dateParts = element.value.match(/(\d{4})-(\d{2})-(\d{2})/);
    var currentYear = new Date().getFullYear() % 100;
    var newDate = dateParts[1]+"/"+dateParts[2]+"/"+dateParts[3];
    var birthDate = new Date(newDate);
    var maximumBirthDate = new Date();
    maximumBirthDate.setFullYear(maximumBirthDate.getFullYear() - 18);
    if (birthDate > maximumBirthDate) {
        return true;
    }
    element.errors.push("Du måste vara maximum 18 år gammal.");
    return false;
} 

function validatePersonId(element) {
	if (element.value.test(/^\d{10}$/)) {
		element.value = (element.value.substring(0, 6) + '-' + element.value.substr(6, 9));
	}
	
	if (!element.value.test(/^(\d{2})(\d{2})(\d{2})-(\d{4})$/)) {
		element.errors.push("Skriv ett giltigt personnummer (ååmmdd-xxxx).");
		return false;
	}
	if (!validatePersonIdChecksum(element.value)) {
		element.errors.push("Skriv ett giltigt personnummer (ååmmdd-xxxx).");
		return false;
	}
	return true;
}

function validatePersonIdChecksum(personId) {
	var personIdParts = personId.match(/(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})-(\d{1})(\d{1})(\d{1})(\d{1})/);
	var providedChecksum = personIdParts[10];
	
	var calculatedChecksum = 0;
	calculatedChecksum += (personIdParts[1] * 2 % 10) + Math.floor(personIdParts[1] * 2 / 10);
	calculatedChecksum += (personIdParts[3] * 2 % 10) + Math.floor(personIdParts[3] * 2 / 10);
	calculatedChecksum += (personIdParts[5] * 2 % 10) + Math.floor(personIdParts[5] * 2 / 10);
	calculatedChecksum += (personIdParts[7] * 2 % 10) + Math.floor(personIdParts[7] * 2 / 10);
	calculatedChecksum += (personIdParts[9] * 2 % 10) + Math.floor(personIdParts[9] * 2 / 10);
	calculatedChecksum += parseInt(personIdParts[2]);
	calculatedChecksum += parseInt(personIdParts[4]);
	calculatedChecksum += parseInt(personIdParts[6]);
	calculatedChecksum += parseInt(personIdParts[8]);
	calculatedChecksum = (10 - (calculatedChecksum % 10)) % 10;
	
	return (providedChecksum == calculatedChecksum);
}

//Lägg till och ta bort pandasyskon

function showRangeLayer(range){
var el = document.getElementById('syskon'+range);
el.style.display = "block";
}

function hideRangeLayer(range){
	var el = document.getElementById(range);
	el.style.display = "none";
}

//Längden på telegrammeddelanden

function checkLength(obj,dispobj,mlength){
if(obj.value.length>mlength){
	obj.value = obj.value.substr(0,mlength);
	alert('Detta fält maximalt innehålla '+mlength+' tecken.');
	obj.focus();
}
dispobj.value=mlength-obj.value.length;
}

//Pandabetalaren är också medlem

function isPayerMember() {
	var isPayerMemberInput = $$('input[name=isPayerMember]')[0];
	return isPayerMemberInput.get('checked');
}

function isPayerMemberDidChange() {
	if (isPayerMember()) {
		autofilloutform();
	} else {
		autoclearform();
	}
}

function payerInformationDidChange() {
	if (isPayerMember()) {
		autofilloutform();
	}
}

function autofilloutform() {
	document.getElementById('Firstname[0]').value = document.getElementById('PayerFirstname[0]').value;
	document.getElementById('Lastname[0]').value = document.getElementById('PayerLastname[0]').value;
	document.getElementById('CareOf[0]').value = document.getElementById('PayerCareOf[0]').value;
	document.getElementById('Streetaddress[0]').value = document.getElementById('PayerAddress[0]').value;
	document.getElementById('Postcode[0]').value = document.getElementById('PayerPostcode[0]').value;
	document.getElementById('City[0]').value = document.getElementById('PayerCity[0]').value;
	document.getElementById('Email[0]').value = document.getElementById('PayerEmail[0]').value;
	document.getElementById('Phone[0]').value = document.getElementById('PayerPhone[0]').value;
	document.getElementById('Mobilephone[0]').value = document.getElementById('PayerMobilephone[0]').value;
}

function autoclearform() {
	document.getElementById('Firstname[0]').value = '';
	document.getElementById('Lastname[0]').value = '';
	document.getElementById('CareOf[0]').value = '';
	document.getElementById('Streetaddress[0]').value = '';
	document.getElementById('Postcode[0]').value = '';
	document.getElementById('City[0]').value = '';
	document.getElementById('Email[0]').value = '';
	document.getElementById('Phone[0]').value = '';
	document.getElementById('Mobilephone[0]').value = '';
}

// --------------------------------------------------------


window.addEvent('domready', function() {
	var form = $('form_id');
	
	if (form == null) {
		return;
	}
	
	if (haveFilledOutElementsInForm(form)) {
		return;
	}
	
	if (form.hasClass('PdEngagement')) {
		splitFormAtElement($('Lastname[0]'));
	} else if (form.hasClass('PdTelegram')) {
		splitFormAtElement($('date-help'));
	} else if (form.hasClass('PdDonation')) {
		splitFormAtElement($$('div.gift-option span.gift-option-description').getLast());
	} else if (form.hasClass('PdMembership')) {
		splitFormAtElement($$('div.member-options div.member-description').getLast());
	} else if (form.hasClass('PdSponsorCompany')) {
		splitFormAtElement($('City[0]'));
	} else if (form.hasClass('PdPandaClub')) {
		splitFormAtElement($('payer_membership_checkbox'));
	}
});

function haveFilledOutElementsInForm(form) {
	return form.getElements('input[type=text]').some(function(element) {
		if (element.type == 'text') {
			return element.value != '';
		}
	});
}

function splitFormAtElement(splitAtElement) {
	var newContainer = new Element('div');
	var brokenOutScaffold = createScaffoldFromElement(splitAtElement.getParent());

	var currentlyTreatedElement = splitAtElement.getParent();
	while (currentlyTreatedElement != null && currentlyTreatedElement.get('tag') != 'form' && brokenOutScaffold.getParent() != null) {
		var nextParent = currentlyTreatedElement.getParent();
		moveElementSiblingsTo(currentlyTreatedElement, brokenOutScaffold);
		if (currentlyTreatedElement.getChildren().length == 0) {
			currentlyTreatedElement.dispose();
		}
		currentlyTreatedElement = nextParent;
		brokenOutScaffold = brokenOutScaffold.getParent();
	}
	
	var expandableSection = new Element('div', { 'id': 'form-expanded-section' });
	expandableSection.adopt(brokenOutScaffold);
	currentlyTreatedElement.adopt(expandableSection, 'after');
	expandableSection.set('slide', { resetHeight: true });
	expandableSection.slide('hide');
	
	var triggerButton = new Element('a', { 'id': 'form-expansion-trigger', 'class': 'buttontext-2', 'html': 'Nästa steg' });
	triggerButton.addEvent('click', expandSplitForm);
	triggerButton.addEvent('click',addMeasurePoint);
	var triggerButtonContainer = new Element('div', { 'class': 'button-2 expansion-trigger-container' });
	triggerButtonContainer.adopt(triggerButton);
	currentlyTreatedElement.adopt(triggerButtonContainer, 'after');
}

function createScaffoldFromElement(element) {
	var outerElement = element.getParent();
	var innerScaffold = scaffoldElement(outerElement);
	var outerScaffold = innerScaffold;
	outerElement = outerElement.getParent();
	
	while (outerElement.get('tag') != 'form') {
		outerScaffold = scaffoldElement(outerElement, outerScaffold);
		outerElement = outerElement.getParent();
	}
	
	return innerScaffold;
}

function submitWithTracker(formName, trackerCode) {
	if ($('tracker_submit') && $('tracker_submit').value != '') {
		eval($('tracker_submit').value);
	}
	
	if ($('measurepoint_submit') && $('measurepoint_submit').value != '') {
		var html = $('measurepoint_submit').value;
		$('mp').set('html', html);
	}
	
	if (trackerCode != '') {
		eval(trackerCode);
	}
	$(formName).submit();
}

function scaffoldElement(element, child) {
	var scaffold = new Element(element.get('tag'), {
		'class': element.get('class')
	});
	if (child != null) {
		scaffold.adopt(child);
	}
	return scaffold;
}

function moveElementSiblingsTo(sourceElement, targetElement) {
	var nextSibling;
	var currentElement = sourceElement.nextSibling;
	while (currentElement != null) {
		nextSibling = currentElement.nextSibling;
		targetElement.adopt(currentElement);
		currentElement = nextSibling;
	}
}

function expandSplitForm() {
	if ($('tracker_next_step') && $('tracker_next_step').value != '') {
		eval($('tracker_next_step').value);
	}
	
	if ($('measurepoint_next_step') && $('measurepoint_next_step').value != '') {
		var html = $('measurepoint_next_step').value;
		$('mp').set('html', html);

	}
	
	$('form-expanded-section').slide('in');
	$('form-expansion-trigger').getParent().slide('out');
	(function() { new Fx.Scroll(document.body).toElement($('form-expanded-section')) }).delay(500);
}

function addMeasurePoint(action) {
	if (action=='verify') {
		console.log("Verify!!");
		if ($('measurepoint_verify') && $('measurepoint_verify').value != '') {
			var html = $('measurepoint_verify').value;
			$('mp').set('html', html);
			console.log("Set second image!!");
		}	
	} else if (action=='submit') {
		
	
	}
	
	
	
	
}
