/* $Id: age_preference.js,v 1.18 2012/01/16 00:49:07 tim Exp $ */

///////////////////////////////////////
//
//  Client sniffer by Brothercake
//  http://www.brothercake.com/
//
///////////////////////////////////////

var exclude=1;
var agt=navigator.userAgent.toLowerCase();
var win=0;var mac=0;var lin=1;
if(agt.indexOf('win')!=-1){win=1;lin=0;}
if(agt.indexOf('mac')!=-1){mac=1;lin=0;}
var lnx=0;if(lin){lnx=1;}
var ice=0;
var ie=0;var ie4=0;var ie5=0;var ie6=0;var com=0;var dcm;
var op5=0;var op6=0;var op7=0;
var ns4=0;var ns6=0;var ns7=0;var mz7=0;var kde=0;var saf=0;
if(typeof navigator.vendor!="undefined" && navigator.vendor=="KDE"){
	var thisKDE=agt;
	var splitKDE=thisKDE.split("konqueror/");
	var aKDE=splitKDE[1].split("; ");
	var KDEn=parseFloat(aKDE[0]);
	if(KDEn>=2.2){
		kde=1;
		ns6=1;
		exclude=0;
		}
	}
else if(agt.indexOf('webtv')!=-1){exclude=1;}
else if(typeof window.opera!="undefined"){
	exclude=0;
	if(/opera[\/ ][5]/.test(agt)){op5=1;}
	if(/opera[\/ ][6]/.test(agt)){op6=1;}
	if(/opera[\/ ][7-9]/.test(agt)){op7=1;}
	}
else if(typeof document.all!="undefined"&&!kde){
	exclude=0;
	ie=1;
	if(typeof document.getElementById!="undefined"){
		ie5=1;
		if(agt.indexOf("msie 6")!=-1){
			ie6=1;
			dcm=document.compatMode;
			if(dcm!="BackCompat"){com=1;}
			}
		}
	else{ie4=1;}
	}
else if(typeof document.getElementById!="undefined"){
	exclude=0;
	if(agt.indexOf("netscape/6")!=-1||agt.indexOf("netscape6")!=-1){ns6=1;}
	else if(agt.indexOf("netscape/7")!=-1||agt.indexOf("netscape7")!=-1){ns6=1;ns7=1;}
	else if(agt.indexOf("gecko")!=-1){ns6=1;mz7=1;}
	if(agt.indexOf("safari")!=-1 || (typeof document.childNodes!="undefined" && typeof document.all=="undefined" && typeof navigator.taintEnabled=="undefined")){mz7=0;ns6=1;saf=1;}
	}
else if((agt.indexOf('mozilla')!=-1)&&(parseInt(navigator.appVersion)>=4)){
	exclude=0;
	ns4=1;
	if(typeof navigator.mimeTypes['*']=="undefined"){
		exclude=1;
		ns4=0;
		}
	}
if(agt.indexOf('escape')!=-1){exclude=1;ns4=0;}
if(typeof navigator.__ice_version!="undefined"){exclude=1;ie4=0;}
var is_macie5 = (mac && ie5);

var has_been_run = false;

var agelowid = "age_range_low";
var agehighid = "age_range_high";

// age range rules
var older = 12; // overwritten later
var younger = 12; // overwritten later
var offset = 4; // overwritten later
var age_floor = 18; // FI_AGE_FLOOR
var age_ceil = 75; // FI_AGE_CEIL
var min_age_range = 10; // overwritten later
var size = "";
var sex = "";

var optionslistlow = new Array( "k", "v" );
var optionslisthigh = new Array( "k", "v" );
optionslistlow[0] = new Array( "" );
optionslistlow[1] = new Array( "..." );
optionslisthigh[0] = new Array( "" );
optionslisthigh[1] = new Array( "..." );

function populatecheckbox(id,keys,values) {
	if( typeof keys != "object" || typeof values != "object" ) {
		return false;
	}
	else if( keys.length != values.length ) {
		return false;
	}
	
	el = document.getElementById('registrationform').getElementsByTagName( "select" );
	var y = false;
	for( var i = 0; i<el.length; i++ ) {
		if( el[i].id == id ) {
			y = el[i];
		}
	}
	if( !y ) {
		return false;
	}
	x = y.options;
	// remember previous selection
	v = parseInt(y.value);
	// unset all options first
	x.length = 0;
	var indextoselect = "";
	if( v > parseInt( keys[keys.length-1] ) ) {
		indextoselect = "end";
	} else if ( v < parseInt( keys[0] ) ) {
		indextoselect = 0;
	} else {
		for( i = 0; i<keys.length; i++ ) {
			if( parseInt( keys[i] ) == v ) {
				indextoselect = i;
			}
		}
	}
	var xselect = false;
	for (i = 0; i < keys.length; i++) {
		if( ( i == (keys.length -1) && indextoselect == "end" ) || i == indextoselect ) {
			x[i] = new Option(values[i],keys[i],true);
			// this is for IE - it's stupid
			x.selectedIndex = i;
		} else {
			x[i] = new Option(values[i],keys[i]);
		}
	}
	// sanity check in IE - if selected index out of range, set it to first option
	if( x.selectedIndex == - 1 && indextoselect == "" ) {
		x.selectedIndex = 0;
	}
	
	return true;
}

function city_change(z) {
	size = city_size[z];
}

function sex_change(z) {
	sex = z;
}

function agecalculations( age, o ) {
	var ret = new Array();
	age = parseInt( age );

	// minimum range
	if ( size == "big" ) {
		if( age < 30 ) {
			min_age_range = 8;
		} else if( age < 40 ) {
			min_age_range = 9;
		} else if( age < 50 ) {
			min_age_range = 10;
		} else {
			min_age_range = 12;
		}
	}
	if ( size == "small" ) {
		if( age < 40 ) {
			min_age_range = 10;
		} else if( age < 50 ) {
			min_age_range = 12;
		} else {
			min_age_range = 15;
		}
	}
		
	// offset and bounds
	if ( (sex == "man-men") || (sex == "man-women") ) {
		if( age < 25 ) {
			older = 10;
			younger = 10;
			offset = 2;
		} else if( age < 42 ) {
			older = 10;
			younger = 12;
			offset = 3;
		} else {
			older = 15;
			younger = 15;
			offset = 4;
		}
	}
	if ( (sex == "woman-women") || (sex == "woman-men") )
	{
		if( age < 27 ) {
			older = 12;
			younger = 12;
			offset = 4;
		} else if( age < 38 ) {
			older = 15;
			younger = 10;
			offset = 5;
		} else {
			older = 15;
			younger = 6;
			offset = 5;
		}
	}
	
	var age_min = age - younger;
	var age_max = age + older;
	var age_upper_offset = age + offset;
	var age_lower_offset = age - offset;
	
	ret[0] = Array();
	ret[1] = Array();

	low_age_start = Math.max( age_floor, age_min );
	low_age_finish = parseInt(age) + parseInt(offset);
	high_age_start = parseInt(age) - parseInt(offset);
	high_age_start = Math.max( high_age_start, (low_age_start + min_age_range) );
	high_age_finish = Math.min( age_ceil, age_max );
	high_age_finish = Math.max( high_age_finish, high_age_start );
	// overwrite the offset rules
	low_age_finish = Math.min( low_age_finish, (high_age_finish - min_age_range) );
	high_age_start = Math.max( high_age_start, (low_age_start + min_age_range) );
	
	//alert( high_age_finish );
	if( o == agehighid ) {
		// high age was selected
		low_age_finish = Math.min( low_age_finish, (parseInt( document.getElementById( agehighid ).value) - min_age_range));
	}
	else if( o == agelowid ) {
		// low age was selected
		high_age_start = parseInt( document.getElementById( agelowid ).value) + min_age_range;
		low_age_finish = high_age_start - min_age_range;
	}
	
	// do the loops
	i = 0;
	for( x = low_age_start; x <= low_age_finish; x++ ) {
		ret[0][i] = x;
		i++;
	}

	i = 0;
	for( x = high_age_start; x <= high_age_finish; x++ ) {
		ret[1][i] = x;
		i++;
	}
	return ret;
}

function calculate_age( day, month, year ) {
	x = "ERROR";
	y = new Date();
	gdate = y.getDate();
	gmonth = y.getMonth();
	gyear = y.getFullYear();
	age = gyear - year;
	if((month == (gmonth + 1)) && (day <= parseInt(gdate))) {
		x = age;
	} else {
		if(month <= (gmonth)) {
			x = age;
		} else {
			x = age - 1; 
		}
	}
	return x;
}

function age_preference(redo) {
	day = document.getElementById('registrationform').dob_day;
	month = document.getElementById('registrationform').dob_month;
	year = document.getElementById('registrationform').dob_year;
	dayvalue = day.options[day.selectedIndex].value;
	monthvalue = month.options[month.selectedIndex].value;
	yearvalue = year.options[year.selectedIndex].value;
	// check we have values for everything
	if( dayvalue == "" || 
		monthvalue == "" || 
		yearvalue == "" )
	{
		return false;
	}
	if( size == "" || sex == "" ) {
		return false;
	}
	
	age = calculate_age( dayvalue, monthvalue, yearvalue );
	calcs = agecalculations( age, redo );
	if( redo != agehighid ) {
		var x1 = populatecheckbox( agehighid, calcs[1], calcs[1] );
	}
	if( redo != agelowid ) {
		var x2 = populatecheckbox( agelowid, calcs[0], calcs[0] );
	}
	return true;
}

function loadfunction() {
	if( has_been_run ) {
		return;
	}
	var x = document.getElementById("age_range_input");
	if( x == undefined ) return;
	if (is_macie5) {
		// take advantage of the fact that input is, by default, a textbox
		agelow = document.createElement('input');
		agelow.size = '3';
	} else {
		agelow = document.createElement("select");
		addEvent( agelow, "change", function(){age_preference(agelowid)}, false );
	}
	agelow.name = agelowid;
	agelow.id = agelowid;
	if (is_macie5) {
		// take advantage of the fact that input is, by default, a textbox
		agehigh = document.createElement('input');
		agehigh.size = '3';
	} else {
		agehigh = document.createElement("select");
		addEvent( agehigh, "change", function(){age_preference(agehighid)}, false );
	}
	agehigh.name = agehighid;
	agehigh.id = agehighid;
	
	// put nodes into document
	x.appendChild( agelow );
	x.appendChild( document.createTextNode( " and " ) );
	x.appendChild( agehigh );
	x.appendChild( document.createTextNode( " years old" ) );
	
	if (!is_macie5) {
		populatecheckbox( agelowid, optionslistlow[0], optionslistlow[1] );
		populatecheckbox( agehighid, optionslisthigh[0], optionslisthigh[1] );
	}
	
	has_been_run = true;
	return true;
}

addLoadEvent( loadfunction );

