//
// Code by ACe
//

var defs = new Array();

function test(key, silent) {
	if (defs[key].getItem('patterns') != null) {
		// Chain filters!
		result = av_filter_stack(document.getElementById(key), defs[key].getItem('patterns'), defs[key].getItem('minlen'), defs[key].getItem('maxlen'));
	} else {
		// Only one filter
		var filter = defs[key].getItem('pattern');
		result = av_filter(document.getElementById(key), patterns[filter], defs[key].getItem('minlen'), defs[key].getItem('maxlen'));
	}
	if (result) {
		if (typeof(result) == 'object') {
			// Format Error
			if (!silent) {
				document.getElementById(key).className += ' errorfield';
				if (defs[key].getItem('ico') != null) 
					document.getElementById(defs[key].getItem('ico')).className = 'response_ko';
				if (defs[key].getItem('msg') != null) {
					if (defs[key].getItem('patterns') != null) {
						document.getElementById(defs[key].getItem('msg')).innerHTML = messages['format_not_valid'];
					}
					else {
						document.getElementById(defs[key].getItem('msg')).innerHTML = messages['char_not_allowed'] + result[1];
					}
				}
			}
			document.getElementById('s' + key).value = 0;
			return false;
		} else {
			document.getElementById(key).className = document.getElementById(key).className.replace(/ errorfield/g, '');
			if (!silent) {
				if (defs[key].getItem('ico') != null) 
					document.getElementById(defs[key].getItem('ico')).className = 'response_ok';
				if (defs[key].getItem('msg') != null) 
					document.getElementById(defs[key].getItem('msg')).innerHTML = '&nbsp;';
			}
			document.getElementById('s' + key).value = 1;
			return true;
		}
	} else {
		// Generic Error
		if (!silent) {
			document.getElementById(key).className += ' errorfield';
			if (defs[key].getItem('ico') != null) 
				document.getElementById(defs[key].getItem('ico')).className = 'response_ko';
			if (defs[key].getItem('msg') != null) {
				msg = messages['format_not_allowed'];
				if (defs[key].getItem('minlen') == defs[key].getItem('maxlen') && typeof(defs[key].getItem('minlen')) == 'number') {
					msg += messages['fixed_length'] + defs[key].getItem('maxlen') + messages['char'];
				}
				else {
					if (typeof(defs[key].getItem('minlen')) == 'number') 
					msg += messages['min_length'] + defs[key].getItem('minlen') + messages['char'];
					if (typeof(defs[key].getItem('maxlen')) == 'number') 
					msg += messages['max_length'] + defs[key].getItem('maxlen') + messages['char'];
				}
				document.getElementById(defs[key].getItem('msg')).innerHTML = msg;
			}
		}
		document.getElementById('s' + key).value = 0;
		return false;
	}
}

/*
function testCode(key) {
	document.getElementById(key).className = document.getElementById(key).className.replace(/ errorfield/g, '');
	document.getElementById('err_code').innerHTML = '';
	if (test(key)) {
		checkCode(document.getElementById(key));
	}
}
*/

function testDomain(key) {
	document.getElementById(key).className = document.getElementById(key).className.replace(/ errorfield/g, '');
	document.getElementById('void').style.display = 'block';
	document.getElementById('wait').style.display = 'none';
	document.getElementById('OK').style.display = 'none';
	document.getElementById('KO').style.display = 'none';
	if (document.getElementById('aliasbox')) {
		document.getElementById('aliasbox').style.display = 'none';
		document.getElementById('aliasvoid').style.display = 'block';
	}
	if (test(key)) {
		document.getElementById('void').style.display = 'none';
		domainControl(document.getElementById(key));
	}
}

function testEmail(key) {
	if (test(key)) {
		verifyMail();
	}
}

function checkCaptcha() {
	if (test('code', true)) {
		captchaControl(document.getElementById('code'));
	} else {
		document.getElementById('code').className += ' errorfield';
		document.getElementById('err_code').innerHTML = messages['code_err'];
		document.getElementById('res_code').className = 'response_ko';
	}
}

function verifyMail(){
	if (document.getElementById('semail2').value != '-1') 
		if (document.getElementById('email').value == document.getElementById('email2').value) {
			document.getElementById('res_email2').className = document.getElementById('res_email').className;
			document.getElementById('err_email2').innerHTML = document.getElementById('err_email').innerHTML;
			document.getElementById('semail2').value = document.getElementById('semail').value;
			document.getElementById('email2').className = document.getElementById('email').className;
		} else {
			document.getElementById('res_email2').className = 'response_ko';
			document.getElementById('err_email2').innerHTML = messages['email_confirm_failure'];
			document.getElementById('semail2').value = 0;
			document.getElementById('email2').className += ' errorfield';
		}
}

function verifyAuth() {
	if (document.getElementById('subscription_y').checked) {
		document.getElementById('err_auth').innerHTML = '';
		return true;
	} else {
		document.getElementById('err_auth').innerHTML = 'L\'accettazione di <b>Termini e Condizioni</b> &egrave; obbligatoria per continuare';
		return false;
	}
}

// Smart code

function img_reload(sid) {
	var d = new Date();
	var el = document.getElementById('code_img');
	if(el)
		el.src = '/service/gd_image.php?sid=' + sid + '&ipc=local&t=' + d.getTime();
	else
		document.code_img.src = '/service/gd_image.php?sid=' + sid + '&ipc=local&t=' + d.getTime();
	document.getElementById('code').value = '';
	document.getElementById('res_code').className = '';
	document.getElementById('err_code').innerHTML = '';
	document.getElementById('scode').value = -1;
}

function check_sid(img) {
	var match;
	// Prevents wrong browser (Safari) form filling after a history back
	if (match = img.src.match(/\/service\/gd_image.php\?sid=([a-zA-Z0-9]+)/)) document.getElementById('sid').value = match[1];
}

function clearfirst(id) {
	document.getElementById(id).value = '';
	document.getElementById(id).onfocus = ''; // no mercy, no forgive
}

// AJAX events

function domainControl(element) {

	if (element.value != '') {
		var rnd = new Date().getTime();
		getContent('http://' + location.hostname + '/cgi-bin/av_nick_available.pl?' + element.value + '&' + rnd, new Array( 'OK', 'KO', 'blank'), 'wait', whois );
	}
}

function captchaControl(element){

	if (element.value != '' && element.value.length == 6) {
		var rnd = new Date().getTime();
		getContent('http://' + location.hostname + '/api/captcha_check.php?sid=' + document.getElementById('sid').value + '&Code=' + element.value + '&' + rnd,
			new Array(), '', captcha);
	} else {
		document.getElementById('code').className += ' errorfield';
		document.getElementById('err_code').innerHTML = messages['code_err'];
		document.getElementById('res_code').className = 'response_ko';
	}
}

function loadNations(object) {
	if(document.getElementById(object + 'Txt'))
		document.getElementById(object + 'Txt').style.display = 'none';
	if(document.getElementById(object + 'TxtW'))
		document.getElementById(object + 'TxtW').style.display = 'none';

	// Keep default value!
	document.getElementById(object)[0].value = document.getElementById(object).value;
	document.getElementById(object).selectedIndex = 0;
	
	var rnd = new Date().getTime();
	getContent('http://' + location.hostname + '/cgi-bin/av_countries.pl?' + rnd, new Array(object), 'wait' + object, countriesList, new Array( document.getElementById(object).value) );
}

function changeNation(nation, state) {
	nCode = document.getElementById(nation)[document.getElementById(nation).selectedIndex].value;
	if (nCode == 'IT') {
		document.getElementById('zip').style.display = 'block';
		test('cap', true);
	} else {
		document.getElementById('zip').style.display = 'none';
		document.getElementById('scap').value = 1;
	}
	// constant name
	if (!checkSelectValue(nation))
		return false;
	document.getElementById('keepNation').value = nCode;

	// Nation is changed from the just populated SELECT box on the form,
	// now we need to populate and show States SELECT form, now!	
	if (document.getElementById(nation)[document.getElementById(nation).selectedIndex].value != '') {
		var rnd = new Date().getTime();
		getContent('http://' + location.hostname + '/cgi-bin/av_countries.pl?' + document.getElementById(nation)[document.getElementById(nation).selectedIndex].value + '&' + rnd, new Array(state), 'wait' + state, countriesList, new Array( document.getElementById(state).value) )
	}
}

function checkSelectValue(itemName) {
	if (document.getElementById(itemName)[document.getElementById(itemName).selectedIndex].value == '') {
		document.getElementById('s' + itemName).value = 0;
		document.getElementById('res_' + itemName).className = 'response_ko';
		document.getElementById('err_' + itemName).innerHTML = messages['choice_err'];
		return false;
	}
	document.getElementById('s' + itemName).value = 1;
	document.getElementById('res_' + itemName).className = 'response_ok';
	document.getElementById('err_' + itemName).innerHTML = '';
	return true;
}

//
// AJAX Services
//  AJAX Answers functions
// use it with ajax_async_get_xml.js lib
//
	
	function whois(xmlhttp, clids, wlid) {
		// Load the Root Element!
		var xmlDoc = xmlhttp.responseXML.documentElement;
		var result = xmlDoc.getAttribute('exists');
		var domain = xmlDoc.getAttribute('site');
	
		document.getElementById(wlid).style.display = 'none';
		document.getElementById('susername').value = 0;
		document.getElementById('username').className += ' errorfield';
		if (result == 'false') {
			// Dominio disponibile! OK
			document.getElementById(clids[0]).style.display = 'block';
			document.getElementById('susername').value = 1;
			document.getElementById('username').className = document.getElementById('username').className.replace(/ errorfield/g, '');
			if (document.getElementById('aliasbox')) {
				document.getElementById('aliastext').innerHTML = document.getElementById('username').value + '@altervista.org';
				document.getElementById('aliasbox').style.display = 'block';
				document.getElementById('aliasvoid').style.display = 'none';
			}
		} else if (result == 'error') {
			// NS Lookup Timeout or... another error!
			document.getElementById(clids[1]).style.display = 'block';
			document.getElementById('err_username').innerHTML = messages['procedure_err'];
		} else if (result == 'invalid') {
			// NS Lookup Timeout or... another error!
			document.getElementById(clids[1]).style.display = 'block';
			document.getElementById('err_username').innerHTML = messages['init_digit_err_addr'];
		} else {
			// Dominio NON diponibile! KO
			var e = xmlDoc.getElementsByTagName("free");

			document.getElementById(clids[1]).style.display = 'block';
		}
	}

	function captcha(xmlhttp, clids, wlid) {
		// Load the Root Element!
		var xmlDoc = xmlhttp.responseXML.documentElement;
		var result = xmlDoc.childNodes[0].nodeValue;

		if (result == 'OK') {
			// Codice verificato! OK
			document.getElementById('code').className = document.getElementById('code').className.replace(/ errorfield/g, '');
			document.getElementById('err_code').innerHTML = '';
			document.getElementById('res_code').className = 'response_ok';
			document.getElementById('scode').value = 1;
		} else {
			// Codice non verificato! KO
			document.getElementById('code').className += ' errorfield';
			document.getElementById('err_code').innerHTML = messages['code_err'];
			document.getElementById('res_code').className = 'response_ko';
			document.getElementById('scode').value = -1;
		}
	}

	function countriesAjaxProcess(xmlhttp, clids, currentVal) {
		// Load the Root Element!
		var xmlDoc = xmlhttp.responseXML.documentElement;
		var entries = xmlDoc.getElementsByTagName("entry");

		var list = document.getElementById(clids[0]);
		var oldies = list.options.length;
		var i=0;

		if (entries.length == 0) {
			//list.innerHTML += '<option value="XX">N/A</option>';
			list[0] = new Option('N/A', 'XX', true, true);
			i--;
		} else {
			//list.innerHTML += '<option value="">Scegli dalla lista</option><option value=""></option>';
			list[0] = new Option(messages['choose_from_list'], '', false, false);
			list[1] = new Option('', '', false, false);
			
			for(; i<entries.length; i++) {
				var selected = false;
				if (entries[i].getAttribute('code') == currentVal) {
					selected = true;
					
					if (clids.length > 1) {
						document.getElementById(clids[1]).innerHTML = entries[i].getAttribute('name');
					}
				}

				list[i+2] = new Option(entries[i].getAttribute('name'), entries[i].getAttribute('code'), selected, selected);
				if (selected) {
					// create entry, first!
					list.selectedIndex = i+2;
				}
			}
		}
		
		for (var j = oldies -1; j >= i+2; j--) {
			list[j].text = '';
			list[j].value = '';
			list[j] = null;
		}
	}

	function countriesList(xmlhttp, clids, wlid, process_args) {
		countriesAjaxProcess(xmlhttp, clids, process_args[0]);

		resetWaitMsg(clids, wlid);
	}

function checkField(field, block) {
	if (document.getElementById('s' + field).value <= 0) {
		if (document.getElementById('s' + field).value == -1) {
			if (typeof(block) != 'undefined') {
				document.getElementById(block).style.display = 'block';
			} else {
				document.getElementById(field).className += ' errorfield';
				document.getElementById('res_' + field).className = 'response_ko';
			}
		}
		return false;
	}
	return true;
}

// AV Easy's join page

function check_easy_form() {
	var form = document.getElementById('crea_sito');
	var focus = true;

	var res = checkField('title');
	if (focus && !res) { form.title.focus(); focus = false; alert(messages['no_title']); }
	res = checkField('tags') && res;
	if (focus && !res) { form.tags.focus(); focus = false; alert(messages['no_tags']); }
	res = checkField('username', 'blank') && res;
	if (focus && !res) { form.username.focus(); focus = false; alert(messages['no_site_addr']); }
	document.getElementById('void').style.display = 'none';
	res = checkField('name') && res;
	if (focus && !res) { form.name.focus(); focus = false; alert(messages['no_fname']); }
	res = checkField('surname') && res;
	if (focus && !res) { form.surname.focus(); focus = false; alert(messages['no_lname']); }
	res = checkField('email') && res;
	if (focus && !res) { form.email.focus(); focus = false; alert(messages['no_email']); }
	res = checkField('email2') && res;
	if (focus && !res) { form.email2.focus(); focus = false; alert(messages['no_email_confirm']); }
	res = checkField('code') && res;
	if (focus && !res) { form.code.focus(); focus = false; alert(messages['no_code']); }

	if (res) {
		// Pending
		if (document.getElementById('install_theme').value <= 0) {
			//~ document.getElementById('missing_theme').style.display = 'block';
			document.getElementById('res_theme').style.display = 'block';
			document.getElementById('themes').className += ' errorfield';
			document.getElementById('themes').style.borderColor = '#ff0000';

			alert(messages['no_theme'])
			return false;
		}
	}

	res = verifyAuth() && res;
	if (focus && !res) { form.code.focus(); focus = false; alert(messages['no_term']); }

	if (res) {
		document.getElementById('Go').innerHTML = messages['wait'];
	}

	return res;
}

var select_theme_image;

function select_theme(image, value) {
	document.getElementById('themes').className = document.getElementById('themes').className.replace(/ errorfield/g, '');
	if (select_theme_image) select_theme_image.parentNode.style.backgroundPosition = '0px 0px';
	document.getElementById('install_theme').value = value;
	select_theme_image = image;
	select_theme_image.parentNode.style.backgroundPosition = '0px -274px';
	document.getElementById('res_theme').style.display = 'none';
}

function over_theme(image) {
	if (image === select_theme_image) return;
	image.parentNode.style.backgroundPosition = '0px -137px';
}

function out_theme(image) {
	if (image === select_theme_image) return;
	image.parentNode.style.backgroundPosition = '0px 0px';
}

function turnoff(obj) {
	obj.style.display = 'none';
}

Themes = {
	isie: false,
	choose_id: null,
	scroller_div: null,
	scroller_prev: null,
	scroller_next: null,
	scroller_pos: 0,
	rowlength: 10,

	sequence: null,
	counter: null,
	accumulator: null,
	current: 0,
	handler: null,
	direction: null,

	app: null,
	imagepreload: null,

	init: function(app) {
		if (!this.scroller_div) this.scroller_div = document.getElementById('gallery_block');
		if (!this.scroller_prev) this.scroller_prev = document.getElementById('theme_prev');
		if (!this.scroller_next) this.scroller_next = document.getElementById('theme_next');
		if (navigator.userAgent.search(/MSIE/) >= 0) this.isie = true;
		this.slide_button('prev', true);
		this.slide_button('next', true);
		this.app = app;
	},

	rollover: function(div, mode) {
		if (this.choose_id) return false;
	
		if (mode) {
			div.style.opacity = 0.8;
			div.style.filter = 'alpha(opacity=80)';
		} else {
			div.style.opacity = 1;
			div.style.filter = 'alpha(opacity=100)';
		}

		return false;
	},

	choose: function(div, id, code) {
		if (this.choose_id) return;

		// Hide selection div
		this.scroller_div.style.opacity = 0.2;
		this.scroller_div.style.filter = 'alpha(opacity=20)';
		this.slide_button('prev', false);
		this.slide_button('next', false);

		// Reset error
		var themes = document.getElementById('themes');
		if (themes.className.indexOf(' ') >= 0) {
			themes.className = themes.className.substring(0, themes.className.indexOf(' '));
			themes.style.borderColor = '#ffffff';
			document.getElementById('res_theme').style.display = 'none';
		}

		// Show preview
		document.getElementById('screenpreviewimg').style.display = 'none';
		document.getElementById('screenpreviewtitle').innerHTML = id.substring(0, 36);
		this.imagepreload = new Image();
		this.imagepreload.onload = this.image_loaded;
		this.imagepreload.src = 'http://im.altervista.org/ap_mirror/apps/'+this.app+'/themes/'+code+'/screenshot.jpg';
		document.getElementById('screenpreviewdiv').style.display = 'block';
		
		// Set form data
		document.getElementById('install_theme').value = this.choose_id = id;
		
		return false;
	},

	revert: function() {
		// Reset form data
		this.choose_id = null;
		document.getElementById('install_theme').value = '-1';

		// Hide preview
		document.getElementById('screenpreviewdiv').style.display = 'none';
		document.getElementById('screenpreviewimg').src = '';

		// Show selection div
		this.scroller_div.style.opacity = 1;
		this.scroller_div.style.filter = 'alpha(opacity=100)';
		this.slide_button('prev', true);
		this.slide_button('next', true);

		return false;
	},

	image_loaded: function() {
		document.getElementById('screenpreviewimg').src = Themes.imagepreload.src;
		document.getElementById('screenpreviewimg').style.display = 'block';
	},

	slide: function(mode) {
		if (this.counter !== null || this.choose_id) return;
		if (this.rowlength <= 5) return;

		var scroller_old_pos = this.scroller_pos;

		if (mode) { // To right
			this.scroller_pos += 4;
			if (this.scroller_pos > this.rowlength - 5) this.scroller_pos = this.rowlength - 5;
			this.direction = true;
		} else { // To left
			this.scroller_pos -= 4;
			if (this.scroller_pos <	0) this.scroller_pos = 0;
			this.direction = false;
		}

		if (scroller_old_pos == this.scroller_pos) return;

		// Sequence = ACCELERATOR + (30 x (3 + 5 * (n-1))) + BRAKE
		this.sequence = [1, 2, 4, 8, 15];
		for (var i = 0; i < 3 + (5 * (Math.abs(scroller_old_pos - this.scroller_pos) - 1)); i++) this.sequence.push(30);
		this.sequence = this.sequence.concat(15, 8, 4, 2, 1);

		this.slide_button('prev', false);
		this.slide_button('next', false);

		this.counter = 0;
		this.handler = setInterval('Themes.scroll()', 75)
	},
	
	slide_button: function(which, mode) {
		var div;

		switch (which) {
			case 'prev':
				divstyle = this.scroller_prev.style;
				if (mode && this.scroller_pos <= 0) mode = false;
			break;
			case 'next':
				divstyle = this.scroller_next.style;
				if (mode && (this.scroller_pos >= this.rowlength - 5 || this.rowlength <= 5)) mode = false;
			break;
			default: return;
		}

		if (this.choose_id) mode = false;

		if (mode) {
			divstyle.backgroundPosition = '0 0'
			divstyle.cursor = 'pointer';
		} else {
			divstyle.backgroundPosition = '0 -45px';
			divstyle.cursor = 'default';
		}
	},

	scroll: function() {
		if (this.counter == 0) {
			this.accumulator = 0;
			this.current = isNaN(parseInt(this.scroller_div.style.left)) ? 0 : parseInt(this.scroller_div.style.left);
		}

		this.accumulator += this.sequence[this.counter];

		this.scroller_div.style.left = (this.current + (this.direction ? -1 : 1) * this.accumulator) + 'px';

		if (++this.counter == this.sequence.length) {
			clearInterval(this.handler);
			this.handler = null;
			this.counter = null;

			this.slide_button('prev', true);
			this.slide_button('next', true);
		}
	}
};

// AV Classic functions

function check_site_form() {
	var form = document.getElementById('crea_sito');
	var focus = true;

	var res = checkField('username', 'blank');
	if (focus && !res) { form.username.focus(); focus = false; alert(messages['no_site_addr']); }
	var res = checkField('tags') && res;
	if (focus && !res) { form.tags.focus(); focus = false; alert(messages['no_tags']); }
	var res = checkField('name') && res;
	if (focus && !res) { form.name.focus(); focus = false; alert(messages['no_fname']); }
	var res = checkField('surname') && res;
	if (focus && !res) { form.surname.focus(); focus = false; alert(messages['no_lname']); }
	var res = checkField('birthyear') && res;
	if (focus && !res) { form.birthyear.focus(); focus = false; alert(messages['no_birth']); }
	var res = checkField('Nation') && res;
	if (focus && !res) { form.Nation.focus(); focus = false; alert(messages['no_country']); }
	var res = checkField('State') && res;
	if (focus && !res) { form.State.focus(); focus = false; alert(messages['no_province']); }
	var res = checkField('cap') && res;
	if (focus && !res) { form.cap.focus(); focus = false; alert(messages['no_cap']); }
	var res = checkField('email') && res;
	if (focus && !res) { form.email.focus(); focus = false; alert(messages['no_email']); }
	var res = checkField('email2') && res;
	if (focus && !res) { form.email2.focus(); focus = false; alert(messages['no_email_confirm']); }
	var res = checkField('code') && res;
	if (focus && !res) { form.code.focus(); focus = false; alert(messages['no_code']); }

	res = verifyAuth() && res;
	if (focus && !res) { form.code.focus(); focus = false; alert(messages['no_term']); }

	document.getElementById('Go').innerHTML = messages['wait'];

	return res;
}

function onLoadClassic(sid, set_state) {
	d = new Date();
	rnd = d.getTime();
	
	document.getElementById('birthyear').options[document.getElementById('birthyear').options.length] = new Option(messages['select_year'], '', false, false);
	writeSelectOptions(document.getElementById('birthyear'), d.getFullYear() - 14, 100, false, d.getFullYear());
	document.getElementById('sbirthyear').value = '-1';

	img_reload(sid);
	getContent('http://' + location.hostname + '/cgi-bin/av_countries.pl?' + document.getElementById('Nation')[0].value + '&' + rnd, new Array('State'), 'waitState', countriesList, new Array( document.getElementById('State').value));
	if(set_state) {
		document.getElementById('sState').value = '-1';
	}
}

function testage() {
	d = new Date();
	if (document.getElementById('birthyear').options[document.getElementById('birthyear').selectedIndex].value == '') {
		document.getElementById('res_birthyear').className = 'response_ko';
		document.getElementById('sbirthyear').value = -1;
		return;
	} else {
		document.getElementById('res_birthyear').className = 'response_ok';
		document.getElementById('sbirthyear').value = 1;
	}

	if ((d.getFullYear() - document.getElementById('birthyear').options[document.getElementById('birthyear').selectedIndex].value) <= 18) {
		document.getElementById('young').style.display = 'block';
	} else {
		document.getElementById('young').style.display = 'none';
	}
}

/*
	Form validator
	<input id="in1" onkeyup="check(this, <function name>)" onchange="check(this, <function name>)">
*/

var objs = {};

// Simply Check
function check(o, func, timeout) {
	if (!timeout || timeout < 500) {
		timeout = 1500;
	}
	if (objs[o.id] == undefined) objs[o.id] = {'tt':undefined, 'value':''};

	if (o.value !== objs[o.id].value) {
		objs[o.id].value = o.value;
		if (objs[o.id].tt !== undefined) clearTimeout(objs[o.id].tt);
		objs[o.id].tt = setTimeout(func + '("'+o.id+'")', timeout); /* <-- Timeout */
	}
}
