/* Course listing filter */
FnCourseFilter = Class.create();
FnCourseFilter.prototype = {

	initialize: function(elm){
		this.baseElm = elm;

    // add behavior if filter exists
    if(this.baseElm.select('form select').first()){
		  this.baseElm.select('form select').first().observe('change',this.handleChangeFilter.bind(this));
    }
	},

	/* Handle dropdown filter type change */
	handleChangeFilter: function(event){
		var el = Event.element(event);
		event.stop();
		this.setFilter(el.getValue());
	},

	/* Set a new filter for courses list */
	setFilter: function(filter) {
		this.baseElm.className = "";
		this.baseElm.addClassName(filter);
	}

};


/* News yearly switcher behavior */
var FnYearArchiveSwitcher = Class.create();
FnYearArchiveSwitcher.prototype = {

	initialize : function(){
		this.baseElm = $('news').select('form').first();
		this.selYear = this.baseElm.select('select').first();

		// Ad change handler on select
		this.selYear.observe('change', this.handleYearChange.bind(this));
	},

	/* Handle change event on Year Archive Filter */
	handleYearChange : function(event){
		var elm = Event.element(event);
		var url = '/index.php/news-and-events/' + elm.getValue();
		window.location = url;
	}

};

/**
 * Header search form clear/restore default value
 */
FnSearchInput = Class.create();
FnSearchInput.prototype = {

	initialize : function(){
		this.baseElm = $$('#header form').first();
		this.input = this.baseElm.select('input[name=keywords]').first();

		if( this.input){
			this.defaultValue = this.input.getValue();
			this.input.observe('focus', this.handleFocus.bind(this));
			this.input.observe('blur', this.handleBlur.bind(this));
			this.baseElm.observe('submit', this.handleFormSubmit.bind(this));
		}
	},

	handleFocus : function(event){
		if(this.input.getValue() == this.defaultValue){
			this.input.setValue('');
		}
	},

	handleBlur : function(event){
		if(this.input.getValue() == ""){
			this.input.setValue(this.defaultValue);
		}
	},

	handleFormSubmit : function(event){
		if((this.input.getValue() == '') || (this.input.getValue() == this.defaultValue) ){
			event.stop();
		}
	}

};

/**
 * handle click on links with rel="external"
 */
function handleRelExternalLink(event){
	event.stop();
	window.open($(this).readAttribute('href'));
}

function validateExpiryYear(value, elm) {
    // make sure the date has 2 characters only
    if (value.length != 2) { return false; }

    var month_elm = jQuery('#enrol [name=cc_expiry_month]'),
    entered_month = month_elm.val();

    // make sure the month has 2 characters only
    if (entered_month.length != 2) { return false; }

    // make sure it's the current or future month
    var date = new Date(),
    year = date.getFullYear(),
    month = date.getMonth()+1;

    // zero-pad the month
    month = (month < 10) ? '0'+month : ''+month;
    year = ''+year;

    // ** y3k bug alert **
    var min_expiry = (year+month)*1,
    entered_expiry = ('20' + value + entered_month)*1;

    return (entered_expiry >= min_expiry);
}

function loadFnBehaviour() {
	$$('#enrol-enquire', '.course-delivery').each(function(el){ new FnTabs(el);});

	// Course filter
	var courseList=$('courses-list');
	if(courseList){
		new FnCourseFilter(courseList);
	}

	// Enrol form
	var enrolFormElm=$('enrol');
	if(enrolFormElm){

        Validation.add('validate-expiry-year', 'The date you entered is invalid or already expired.', validateExpiryYear);

		// Validation
		var enrolRules = [
			['title',['required']],
			['first_name',['required']],
			['surname',['required']],
			['date_of_birth',['required','validate-date-au']],
			['email_address',['required', 'validate-email']],
			['phone',['required']],
			['address',['required']],
			['suburb',['required']],
			['postcode',['required']],
			['state',['required']],
			['country',['validate-selection'], 'Please select your <strong>Country</strong>'],
            ['programmetype', ['required']],
            ['programme', ['required']],
            ['location', ['required']],
			['cc_number', ['required']],
            ['cc_expiry_year', ['required', 'validate-expiry-year']],
            ['cc_name', ['required']],
            ['cc_type', ['required']],
            ['terms_agree', ['required'], 'You must agree to <strong>Terms and conditions</strong>']

		];

		new FnForm(enrolFormElm, enrolRules);

		// Behavior
		var enrolForm = new FnEnrol(enrolFormElm);
	}

	// Enquire form
	var enquireFormElm=$('enquire');
	if(enquireFormElm){

		// Validation
		var enquireRules = [
			['first_name',['required']],
			['surname',['required']],
			['email_address',['required', 'validate-email']],
			['phone',['required']],
			['suburb',['required']],
			['postcode',['required']],
			['state',['required']],
			['country',['validate-selection'], 'Please select your <strong>Country</strong>']
			];

		new FnForm(enquireFormElm, enquireRules);

		// Behavior
		var enquireForm = new FnEnrol(enquireFormElm);
	}

	// News year archive
	var newsEl = $('news');
	if(newsEl) {
		new FnYearArchiveSwitcher();
	}

	new FnSearchInput();


	// Check for Flash Plugin
	// var requiredMajorVersion = 8;
	var requiredMinorVersion = 0;
	var requiredRevision = 0;

	var flashVersion = deconcept.SWFObjectUtil.getPlayerVersion();
	if( flashVersion['major'] > 0){
		$$('div.video').each(function(elm){
								new FnVideo(elm);
								}
							);
	}

	// Open links with rel="external" in another window
	$$('a[rel~=external]').each(function(elm){
									elm.observe('click', handleRelExternalLink);
								}
							);

	// Open links with class="ext" in another window
	$$('a.ext').each(function(elm){
						elm.observe('click', handleRelExternalLink);
						}
					);

};

