var $j = jQuery.noConflict();

RGInitTopLayer();

/*
* Builds form elements for child ages.
*/
function updateAges(list) {
	var langAge = 'Leeftijd';
	var langAges = 'Leeftijden';
	var langYear = 'jaar';
	var langSorry = '?'

	var children = document.getElementById('children');
	var ages = document.getElementById('ages');
	
	var flexOption = document.getElementById('RGFlexibleDatesOption');
	
	var showElements = function () {
		jQuery("#RGAgesTr").show();
		jQuery("#RGAgesTrSpacing").show();
	};

	var html = '';				
	if (children.value > 0) {
		
		//html += '&nbsp; <strong>' + (children.value == 1 ? langAge : langAges) + '</strong> ';
		
		document.getElementById('RGAgesTitleTd').innerHTML = (children.value == 1 ? langAge : langAges);
	
		var options = '';
		for(var c = 0; c <= 17; c++) {
			options += '<option value="' + c + '">' + c + ' ' + langYear + '</option>';
		}
	
		for(var c = 0; c < children.value; c++) {
			html += '<select style="float: left; width: 55px; margin: 2px" name="ages<">' + options + '</select>';
		}
	}
		
	ages.innerHTML = html;
	
	
	if (children.value == 1) {
		
		showElements();
		
		if (list.length > 0) {
			children.form["ages<"].value = list[0];
		}
		
	} else {
		var c = 0;
		for (c = 0; c < children.value; c++) {
			if (list.length > c) {
				children.form["ages<"][c].value = list[c];
			}
		}
		
		if (c > 0) {
			showElements();
			
		}
		else {
			jQuery("#RGAgesTr").hide();
			jQuery("#RGAgesTrSpacing").hide();
		}
	}
}
     
function show_return_date(show) {
	

	
    if ( show ) {
        $j('#oneway1').fadeIn();
        $j('#oneway2').fadeIn();
        $j('#oneway3').fadeIn();
        $j('#oneway4').fadeIn();
    } else {
        $j('#oneway1').hide();
        $j('#oneway2').hide();
        $j('#oneway3').hide();
        $j('#oneway4').hide();
    }
}
                  
function filterAirports(obj) {        
    var destAirports = extractValuesFromClass('destinationFilterOptions');    
    var depAirports = extractValuesFromClass('departureFilterOptions');    
    var viaAirports = extractValuesFromClass('viaFilterOptions');

    if ( destAirports.length == 0 || depAirports.length == 0 ) {
        alert('U moet minimaal één vertrek-/aankomstvliegveld kiezen.');
        obj.checked = true;
        return false;
    } 
    rg.air.layout.setSelectedAirports(depAirports, destAirports, viaAirports); 
    rg.air.updateResults();
    return false;
}      

function filterCarriers(obj) {        
    var carriers = extractValuesFromClass('carrierFilterOptions');

    if ( carriers.length == 0 ) {
        alert('U moet minimaal één luchtvaartmaatschappij kiezen.');
        obj.checked = true;
        return false;
    } 

    rg.air.layout.setSelectedCarriers(carriers); 
    rg.air.updateResults();
    return false;
}      

function filterAgents(obj) {        
    var agents = extractValuesFromClass('agentFilterOptions');

    if ( agents.length == 0 ) {
        alert('U moet minimaal één luchtvaartmaatschappij kiezen.');
        obj.checked = true;
        return false;
    } 

    rg.air.layout.setSelectedAgents(agents); 
    rg.air.updateResults();
    return false;
} 

function extractValuesFromClass(className) {
    var elems = document.getElementsByClassName(className);

    var result = new Array();
    for ( var i = 0 ; i < elems.length ; i++ ) {
        if ( elems[i].checked ) { 
            result.push(elems[i].value);
        }
    }                                                 
                                
    return result;
}   

function nonStopToggle(checkbox) {                         
    var elems = document.getElementsByClassName('viaFilterOptions');
    for ( var i = 0 ; i < elems.length ; i++ ) {
        elems[i].checked = !checkbox.checked;
    }
    filterAirports(checkbox);
}           

function toggleAirportFilter(container, event) {      
	if ( event != null || (getHashValue("x") && getHashValue("y")) ) {               
	    if ( event != null ) {
		    var x = RGGetMouseX(event) + 12;                                           
		    var y = RGGetMouseY(event) + 7;

    		if (x + RGGetLayerWidth(container) > RGGetScrollX() + RGGetClientWidth()) {
    			x = (x - 12) - 7 - RGGetLayerWidth(container);
    			if (x < 0) x = RGGetScrollX() + RGGetClientWidth() - RGGetLayerWidth(container) - 12;
    		};

    		if (y + RGGetLayerHeight(container) > RGGetScrollY() + RGGetClientHeight()) {
    			y = (y - 7) - 4 - RGGetLayerHeight(container);
    			if (y < 0) y = RGGetScrollY() + RGGetClientHeight() - RGGetLayerHeight(container) - 7;
    		}

    		RGSetLayerPos(container, x, y);
        } else {
            RGSetLayerPos(container, getHashValue("x"), getHashValue("y"));
        }
        

	}

	if ( container.style.visibility == 'visible' ) {
		container.style.visibility = 'hidden';                          
		window.location.hash = 'hideAirportFilter';
	} else {
		container.style.visibility = 'visible';
		if ( !window.location.hash.match(/showAirportFilter/) ) {
            window.location.hash = 'showAirportFilter=1&x=' + x + '&y=' + y;
        }
	}                                                
}                                               
                                                  
function getHashValue(key) {                      
    var regexp = new RegExp(key + "=([^&|$]+)");      
    var result = regexp.exec(window.location.hash);
    
    if ( result && result.length > 1 ) { 
        return result[1];
    }          
    
    return null;
}  // requires rg_lib.js, jQuery & jQuery ui

rg.datePicker = {
	defaultParams: function () {
		
		return {		
			monthNames: [
				RGMonths[0], RGMonths[1], RGMonths[2],
				RGMonths[3], RGMonths[4], RGMonths[5],
				RGMonths[6], RGMonths[7], RGMonths[8],
				RGMonths[9], RGMonths[10], RGMonths[11]
			],
			monthNamesShort: [
				RGMonths[0].substr(0,3), RGMonths[1].substr(0,3),
				RGMonths[2].substr(0,3), RGMonths[3].substr(0,3),
				RGMonths[4].substr(0,3), RGMonths[5].substr(0,3),
				RGMonths[6].substr(0,3), RGMonths[7].substr(0,3),
				RGMonths[8].substr(0,3), RGMonths[9].substr(0,3),
				RGMonths[10].substr(0,3), RGMonths[11].substr(0,3)
			],
			dayNames: [
				RGWeekdays[6],
				RGWeekdays[0], RGWeekdays[1],
				RGWeekdays[2], RGWeekdays[3],
				RGWeekdays[4], RGWeekdays[5]
				
			],
			dayNamesShort: [
				RGWeekdays[6].substr(0,3),
				RGWeekdays[0].substr(0,3), RGWeekdays[1].substr(0,3),
				RGWeekdays[2].substr(0,3), RGWeekdays[3].substr(0,3),
				RGWeekdays[4].substr(0,3), RGWeekdays[5].substr(0,3)
				
			],
			dayNamesMin: [
				RGWeekdays[6].substr(0,2),
				RGWeekdays[0].substr(0,2), RGWeekdays[1].substr(0,2),
				RGWeekdays[2].substr(0,2), RGWeekdays[3].substr(0,2),
				RGWeekdays[4].substr(0,2), RGWeekdays[5].substr(0,2)
				
			],
			minDate: new Date(new Date().getYear(), new Date().getMonth()-1, new Date().getDay()),
			maxDate: "+2y",
			duration: '',
			dateFormat: 'dd-mm-yy',
			numberOfMonths: 2,
			firstDay: RGFirstDay,
			weekHeader: RGWeekWord.toLowerCase().substr(0,1) + '.',
			showWeeks: true,
			changeFirstDay: false,
			prevText: '&laquo;',
			nextText: '&raquo;',
			changeMonth: true,
			changeYear: true,
			showYearBeforeMonth: true
		};
	},
	
	objectParams: [],
	
	init: function (id, childId, parentId, params, cbfunc) {
		this.objectParams[id] = {
			childId: childId,
			parentId: parentId,
			params: params,
			cbfunc: cbfunc,
			loaded: false
		};
	},
	
	load: function(id) {
		var params = this.objectParams[id];
		if (!params) {
			throw('Datepicker object ' + id + ' does not have any parameters.')
		} else if (params.loaded) {
			return;
		} else {
			params.loaded = true;
		};
		var childId = params.childId;
		var parentId = params.parentId;
		var params = params.params;
		var cbfunc = params.cbfunc;
				
		// if the user clicks the child calendar input first
		if (parentId) {
			this.load(parentId);
			return;
		}
		
		var p = this.defaultParams();
		
		for (var key in params) {
			p[key] = params[key];
		}
		
		// set datepicker
		jQuery("#" + id).datepicker(p);		
		
		if (childId) {
			
			// restrict date based on parent date
			p.beforeShow = function (input) {
				var parentId = id;
				return { minDate: jQuery("#" + parentId).datepicker("getDate") }
			}
			
			this.childInitialized = true;
			
			
			// set params for child calendar
			jQuery("#" + childId).datepicker(p);
			
			// set change event for parent calendar
			jQuery("#" + id).change(function() {
				
				var date = jQuery("#" + id).datepicker("getDate");
				var cc = jQuery("#" + childId);
				var childDate = cc.datepicker("getDate");
				
				if (date && childDate <= date) {
					date.setDate(date.getDate() + 1);
					cc.attr("value", rg.date.format('dd-mm-yy', date));
				}
			});
		}
		
		if (typeof cbfunc != "undefined") cbfunc();
		
	},
	
	ready: function (func) {
		func();
		//jQuery(document).ready(func);
		//if (navigator.userAgent.match(/MSIE/)) setTimeout(func, 1000); else func();
	}
}
