function booking_form_preventivo_validate(form, formato_data, oggi_1) {
	var errors='';

// CONTROLLO CORRETTEZZA DATE //
	var err=date_controlla_periodo(form_input_retrieve_value(form.arrivo_giorno)+'-'+form_input_retrieve_value(form.arrivo_mese_anno), form_input_retrieve_value(form.partenza_giorno)+'-'+form_input_retrieve_value(form.partenza_mese_anno), formato_data, true, true, oggi_1);
	if (typeof(err) == 'string') errors += err;

	var is_case=0;
	var camere=form_input_retrieve_value(form.nc);
	var max_letti_x_camera=4;

	var campo_nr_adulti='';
	var campo_nr_bambini='';
	var campo_eta_bambini='';
	var eta_max_bambini_culla=2;
	for(var j=1; j <= camere; j++) {
		
		
		// X OGNI BAMBINO E' OBBLIGATORIA L'ETA'//
		eval ('campo_nr_adulti=form.na' + j + ';');
		eval ('campo_nr_bambini=form.nb' + j + ';');
		var nr_bambini=parseInt(form_input_retrieve_value(campo_nr_bambini));
		var nr_persone=parseInt(form_input_retrieve_value(campo_nr_adulti));
		for (var i=1; i <= nr_bambini; i++) {
			
			eval ('campo_eta_bambini=form.b' + i + 'eb' + j + ';');
			if (form_input_retrieve_value(campo_eta_bambini) == "") {
				errors+="- ";
				if (!is_case) errors+="Camera "+j+" - ";
				errors+="Bambino "+ i +": indicare l'eta'\n";
			}
			if (form_input_retrieve_value(campo_eta_bambini) > eta_max_bambini_culla) {
				nr_persone++;
			}
		}
		// CONTROLLO NR. LETTI IN BASE A NR. ADULTI + BAMBINI SOPRA I 2 ANNI //
		if (
			is_case == 0 &&
			nr_persone > max_letti_x_camera
		) {
			errors += '- Camera ' + j +': Capienza massima 4 persone\n';
		}
		// CONTROLLO NR. LETTI IN BASE A NR. ADULTI + BAMBINI SOPRA I 2 ANNI //
		if (
			nr_persone < 1
		) {
			errors += '- Camera ' + j +': Il numero di persone selezionato non e\' valido\n';
		}
	}

	if (errors != '') {
		alert('Attenzione: \n'+errors);
		return false;
	}
}

function booking_form_preventivo_validate_lang(form, formato_data, oggi_1, lang) {
	var errors='';

// CONTROLLO CORRETTEZZA DATE //
	var err=date_controlla_periodo_lang(form_input_retrieve_value(form.arrivo_giorno)+'-'+form_input_retrieve_value(form.arrivo_mese_anno), form_input_retrieve_value(form.partenza_giorno)+'-'+form_input_retrieve_value(form.partenza_mese_anno), formato_data, true, true, oggi_1, lang);
	if (typeof(err) == 'string') errors += err;

	var is_case=0;
	var camere=form_input_retrieve_value(form.nc);
	var max_letti_x_camera=4;

	var campo_nr_adulti='';
	var campo_nr_bambini='';
	var campo_eta_bambini='';
	var eta_max_bambini_culla=2;
	for(var j=1; j <= camere; j++) {
		
		
		// X OGNI BAMBINO E' OBBLIGATORIA L'ETA'//
		eval ('campo_nr_adulti=form.na' + j + ';');
		eval ('campo_nr_bambini=form.nb' + j + ';');
		var nr_bambini=parseInt(form_input_retrieve_value(campo_nr_bambini));
		var nr_persone=parseInt(form_input_retrieve_value(campo_nr_adulti));
		for (var i=1; i <= nr_bambini; i++) {
			
			eval ('campo_eta_bambini=form.b' + i + 'eb' + j + ';');
			if (form_input_retrieve_value(campo_eta_bambini) == "") {
				if(lang == 'it')
				{
					errors+="- ";
                	errors+="Camera "+j+" - ";
					errors+="Bambino "+ i +": indicare l'eta'\n";
				}
				else if(lang == 'en')
				{
					errors+="- ";
                	errors+="Room "+j+" - ";
					errors+="Child "+ i +": type in age\n";
				}
				else if(lang == 'de')
				{
					errors+="- ";
                	errors+="Zimmer "+j+" - ";
					errors+="Kind "+ i +": Alter eingeben\n";
				}
				else 
				{
					errors+="- ";
                	errors+="Camera "+j+" - ";
					errors+="Bambino "+ i +": indicare l'eta'\n";
				}
			}
			if (form_input_retrieve_value(campo_eta_bambini) > eta_max_bambini_culla) {
				nr_persone++;
			}
		}
		// CONTROLLO NR. LETTI IN BASE A NR. ADULTI + BAMBINI SOPRA I 2 ANNI //
		if (nr_persone > max_letti_x_camera) {
			if(lang == 'it')errors += '- Camera ' + j +': Capienza massima 4 persone\n';
			else if(lang == 'en')errors += '- Room ' + j +': Max 4 persons per room\n';
			else if(lang == 'de')errors += '- Zimmer ' + j +': Max 4 Personen pro Zimmer\n';
			else errors += '- Camera ' + j +': Capienza massima 4 persone\n';
		}
		// CONTROLLO NR. LETTI IN BASE A NR. ADULTI + BAMBINI SOPRA I 2 ANNI //
		if (
			nr_persone < 1
		) {
			if(lang == 'it')errors += '- Camera ' + j +': Il numero di persone selezionato non e\' valido\n';
			else if(lang == 'en')errors += '- Room ' + j +': The number of people you indicated is invalid\n';
			else if(lang == 'de')errors += '- Zimmer ' + j +': Die gew\u00FCnschte Personenanzahl ist nicht g\u00FCltig\n';
			else errors += '- Camera ' + j +': Il numero di persone selezionato non e\' valido\n';
		}
	}

	if (errors != '') {
		if(lang == 'it')alert('Attenzione: \n'+errors);
		else if(lang == 'en')alert('Attention: \n'+errors);
		else if(lang == 'de')alert('Achtung: \n'+errors);
		else alert('Attenzione: \n'+errors);
		return false;
	}
}

function booking_form_preventivo_validate_lang_suite(form, formato_data, oggi_1, lang) {
	var errors='';

// CONTROLLO CORRETTEZZA DATE //
	var err=date_controlla_periodo_lang(form_input_retrieve_value(form.arrivo_giorno)+'-'+form_input_retrieve_value(form.arrivo_mese_anno), form_input_retrieve_value(form.partenza_giorno)+'-'+form_input_retrieve_value(form.partenza_mese_anno), formato_data, true, true, oggi_1, lang);
	if (typeof(err) == 'string') errors += err;

	var is_case=0;
	var camere=form_input_retrieve_value(form.nc);
	var max_letti_x_camera=20;

	var campo_nr_adulti='';
	var campo_nr_bambini='';
	var campo_eta_bambini='';
	var eta_max_bambini_culla=2;
	for(var j=1; j <= camere; j++) {
		
		
		// X OGNI BAMBINO E' OBBLIGATORIA L'ETA'//
		eval ('campo_nr_adulti=form.na' + j + ';');
		eval ('campo_nr_bambini=form.nb' + j + ';');
		var nr_bambini=parseInt(form_input_retrieve_value(campo_nr_bambini));
		var nr_persone=parseInt(form_input_retrieve_value(campo_nr_adulti));
		for (var i=1; i <= nr_bambini; i++) {
			
			eval ('campo_eta_bambini=form.b' + i + 'eb' + j + ';');
			if (form_input_retrieve_value(campo_eta_bambini) == "") {
				if(lang == 'it')
				{
					errors+="- ";
                	errors+="Camera "+j+" - ";
					errors+="Bambino "+ i +": indicare l'eta'\n";
				}
				else if(lang == 'en')
				{
					errors+="- ";
                	errors+="Room "+j+" - ";
					errors+="Child "+ i +": type in age\n";
				}
				else if(lang == 'de')
				{
					errors+="- ";
                	errors+="Zimmer "+j+" - ";
					errors+="Kind "+ i +": Alter eingeben\n";
				}
				else 
				{
					errors+="- ";
                	errors+="Camera "+j+" - ";
					errors+="Bambino "+ i +": indicare l'eta'\n";
				}
			}
			if (form_input_retrieve_value(campo_eta_bambini) > eta_max_bambini_culla) {
				nr_persone++;
			}
		}
		// CONTROLLO NR. LETTI IN BASE A NR. ADULTI + BAMBINI SOPRA I 2 ANNI //
		if (nr_persone > max_letti_x_camera) {
			if(lang == 'it')errors += '- Camera ' + j +': Capienza massima 4 persone\n';
			else if(lang == 'en')errors += '- Room ' + j +': Max 4 persons per room\n';
			else if(lang == 'de')errors += '- Zimmer ' + j +': Max 4 Personen pro Zimmer\n';
			else errors += '- Camera ' + j +': Capienza massima 4 persone\n';
		}
		// CONTROLLO NR. LETTI IN BASE A NR. ADULTI + BAMBINI SOPRA I 2 ANNI //
		if (
			nr_persone < 1
		) {
			if(lang == 'it')errors += '- Camera ' + j +': Il numero di persone selezionato non e\' valido\n';
			else if(lang == 'en')errors += '- Room ' + j +': The number of people you indicated is invalid\n';
			else if(lang == 'de')errors += '- Zimmer ' + j +': Die gew\u00FCnschte Personenanzahl ist nicht g\u00FCltig\n';
			else errors += '- Camera ' + j +': Il numero di persone selezionato non e\' valido\n';
		}
	}

	if (errors != '') {
		if(lang == 'it')alert('Attenzione: \n'+errors);
		else if(lang == 'en')alert('Attention: \n'+errors);
		else if(lang == 'de')alert('Achtung: \n'+errors);
		else alert('Attenzione: \n'+errors);
		return false;
	}
}

function show_camere(form, num) {
	var campo_nr_bambini='';
	for (var i=1; i <= 4; i++) {
		if (i <= num) {
			dhtml_set_inline_or_block(document.getElementById('camera_' + i));
			eval ('campo_nr_bambini=form.nb' + i + ';');
			bambini_qs_camera=form_input_retrieve_value(campo_nr_bambini);
			show_bambini(i, bambini_qs_camera);
		}
		else {
			document.getElementById('camera_' + i).style.display='none';
			show_bambini(i, 0);
		}
		
		if(num > 1)
		dhtml_set_inline_or_block(document.getElementById('id_camera1'));
		else if(num == 1)
		document.getElementById('id_camera1').style.display='none';
		
	}
}

function show_bambini(j, num) {

	for (var i=1; i <= 2; i++) {
		if (i <= num) {
			dhtml_set_inline_or_block(document.getElementById("bambino_eta_" + j + "_" + i));
		}
		else {
			//alert("dati j:"+j+" i:"+i);
			document.getElementById("bambino_eta_" + j + "_" + i).style.display='none';
		}
		
		if(num > 1)
		dhtml_set_inline_or_block(document.getElementById('id_indice_bambino'+j));
		else if(num == 1)
		document.getElementById('id_indice_bambino'+j).style.display='none';
		
	}

	if (num==0) {
		document.getElementById('camera_bambini_' + j).style.display='none';
	}
	else {
		dhtml_set_inline_or_block(document.getElementById('camera_bambini_' + j));
	}
	
}

function display_hide(form, table) {
	// VOCI ADULTI E VOCI BAMBINI //
	var adulti_attuali=form.na1.options.length;
	var bambini_attuali=form.nb1.options.length;
	if (
		table=='CASE_VACANZE' ||
		table=='RESIDENCE'
	) {
		if (adulti_attuali < 12) {
			for (i=adulti_attuali+1;i<=12;i++) {
				form.na1.options[(i-1)]=new Option(i,i);
			}
		}
		if (bambini_attuali<4) {
			for (i=bambini_attuali+1;i<=4;i++) {
				form.nb1.options[(i-1)]=new Option(i,i);
			}
		}
	}
	else {
		if (adulti_attuali>4) {
			for (i=adulti_attuali;i>=4;i--) {
				form.na1.options[i]=null;
			}
		}
		if (bambini_attuali>4+1) {
			for (i=bambini_attuali;i>=4+1;i--) {
				form.nb1.options[i]=null;
			}
		}
	}
	


	// CAMERE //
	if (
		typeof(form.nc) != "undefined" &&
		table != 'CASE_VACANZE' &&
		table != 'RESIDENCE'
	) {
		dhtml_set_inline_or_block(document.getElementById('div_camere'));
					dhtml_set_inline_or_block(document.getElementById('camera_testo_1'));
					dhtml_set_inline_or_block(document.getElementById('camera_testo_2'));
				show_camere(form, form_input_retrieve_value(form.nc));
	}
	else {
		if (typeof(form.nc) != "undefined") {
			document.getElementById('div_camere').style.display='none';
							document.getElementById('camera_testo_1').style.display='none';
							document.getElementById('camera_testo_2').style.display='none';
					}
		show_camere(form, 1);
	}
}

function show_hide_simple(obj)
{

	if(obj.style.display == 'none')
	dhtml_set_inline_or_block(obj);
	else
	obj.style.display='none';

}

function show_hide_simple_price(nome1, msg1, msg2)
{
	
	//alert(height);
	
	var obj = document.getElementById(nome1);
	var label = document.getElementById(nome1+"_mostra");
	
	if(obj.style.display == 'none')
	{
		dhtml_set_inline_or_block(obj);
		label.innerHTML = "<img src=\"img/minus.gif\">"+msg2;
	}
	else
	{
		obj.style.display='none';
		label.innerHTML = "<img src=\"img/plus.gif\">"+msg1;
	}
}

function show_hide_simple_slide(nome1, msg1, msg2)
{
	
	//alert(height);
	
	var obj = document.getElementById(nome1);
	var label = document.getElementById(nome1+"_mostra");
	
	if(obj.style.display == 'none')
	{
		dhtml_set_inline_or_block(obj);
		label.innerHTML = "<img src=\"img/minus.gif\">"+msg2;
	}
	else
	{
		obj.style.display='none';
		label.innerHTML = "<img src=\"img/plus.gif\">"+msg1;
	}
}



function show_hide_simple_slide2bis(flag, lingua)
{
	
	//alert(height);
	
	var obj1 = document.getElementById("dettaglio_carta1");
//	var obj2 = document.getElementById("dettaglio_carta2");
//	var obj3 = document.getElementById("dettaglio_carta3");
//	var obj4 = document.getElementById("dettaglio_carta4");
//	var obj5 = document.getElementById("dettaglio_carta5");
//	var obj6 = document.getElementById("dettaglio_carta6");
//	var obj7 = document.getElementById("dettaglio_carta7");
//	var obj8 = document.getElementById("dettaglio_carta8");
	var objb1 = document.getElementById("dettaglio_bonifico1");
//	var objb2 = document.getElementById("dettaglio_bonifico2");
//	var objb3 = document.getElementById("dettaglio_bonifico3");
//	var label1 = document.getElementById("imagecarta");
//	var label2 = document.getElementById("imagebonifico");
	var label3 = document.getElementById("campo_hidden");
	
	if(flag == 1)
	{	
		if(obj1.style.display == 'none')
		{
			dhtml_set_inline_or_block(obj1);
//			dhtml_set_inline_or_block(obj2);
//			dhtml_set_inline_or_block(obj3);
//			dhtml_set_inline_or_block(obj4);
//			dhtml_set_inline_or_block(obj5);
//			dhtml_set_inline_or_block(obj6);
//			dhtml_set_inline_or_block(obj7);
//			dhtml_set_inline_or_block(obj8);
			objb1.style.display='none';
//			objb2.style.display='none';
//			objb3.style.display='none';

//			label1.src = "templates/charmingru/img/cartacredito2_"+lingua+".gif";
//			label2.src = "templates/charmingru/img/bonifico_"+lingua+".gif";
			label3.innerHTML = "<input type=\"hidden\" name=\"pagamento\" value=\"carta\">";
		}
		else
		{
			obj1.style.display='none';
//			obj2.style.display='none';
//			obj3.style.display='none';
//			obj4.style.display='none';
//			obj5.style.display='none';
//			obj6.style.display='none';
//			obj7.style.display='none';
//			obj8.style.display='none';
			objb1.style.display='none';
//			objb2.style.display='none';
//			objb3.style.display='none';
//			label1.src = "templates/charmingru/img/cartacredito_"+lingua+".gif";
//			label2.src = "templates/charmingru/img/bonifico_"+lingua+".gif";
			label3.innerHTML = "<input type=\"hidden\" name=\"pagamento\" value=\"\">";
		}
	}
	else
	{
		if(objb1.style.display == 'none')
		{
			dhtml_set_inline_or_block(objb1);
//			dhtml_set_inline_or_block(objb2);
//			dhtml_set_inline_or_block(objb3);
			obj1.style.display='none';
//			obj2.style.display='none';
//			obj3.style.display='none';
//			obj4.style.display='none';
//			obj5.style.display='none';
//			obj6.style.display='none';
//			obj7.style.display='none';
//			obj8.style.display='none';
//			label1.src = "templates/charmingru/img/cartacredito_"+lingua+".gif";
//			label2.src = "templates/charmingru/img/bonifico2_"+lingua+".gif";
			label3.innerHTML = "<input type=\"hidden\" name=\"pagamento\" value=\"bonifico\">";
		}
		else
		{
			objb1.style.display='none';
//			objb2.style.display='none';
//			objb3.style.display='none';
			obj1.style.display='none';
//			obj2.style.display='none';
//			obj3.style.display='none';
//			obj4.style.display='none';
//			obj5.style.display='none';
//			obj6.style.display='none';
//			obj7.style.display='none';
//			obj8.style.display='none';
//			label1.src = "templates/charmingru/img/cartacredito_"+lingua+".gif";
//			label2.src = "templates/charmingru/img/bonifico_"+lingua+".gif";
			label3.innerHTML = "<input type=\"hidden\" name=\"pagamento\" value=\"\">";
		}
    }
}	


function show_hide_simple2(obj)
{

	if(obj.style.display == 'none')
	dhtml_set_inline_or_block(obj);

}


function show_hide_simple2(obj)
{

	if(obj.style.display == 'none')
	dhtml_set_inline_or_block(obj);

}


function form_input_retrieve_value(obj) {
	if (window.debug_attivo) { alert('in "form_input_retrieve_value"'); }

	if (typeof(obj) == "undefined") {
		return null;
	}
	if (typeof(obj.length) != "undefined" && obj[0].tagName.toLowerCase() == 'input' && obj[0].type.toLowerCase() == 'radio') {
		for (var i=0; i<obj.length; i++) {
			if (obj[i].checked) return obj[i].value;
		}
		return null;
	}

	if (obj.tagName.toLowerCase() == 'select') return obj[obj.selectedIndex].value;

	if (obj.tagName.toLowerCase() == 'input' && obj.type.toLowerCase() == 'checkbox') {
		if (obj.checked) return obj.value;
		else return 0;
	}

	return obj.value;
}

function dhtml_set_inline_or_block(obj) {
	var ret='';
	if (typeof(obj.tagName) == 'undefined') {
		ret = 'inline'
	}
	else if (
		obj.tagName == 'ADDRESS' ||
		obj.tagName == 'BLOCKQUOTE' ||
		obj.tagName == 'BODY' ||
		obj.tagName == 'CENTER' ||
		obj.tagName == 'COL' ||
		obj.tagName == 'COLGROUP' ||
		obj.tagName == 'DD' ||
		obj.tagName == 'DIR' ||
		obj.tagName == 'DIV' ||
		obj.tagName == 'DL' ||
		obj.tagName == 'DT' ||
		obj.tagName == 'FIELDSET' ||
		obj.tagName == 'FORM' ||
		obj.tagName == 'hn' ||
		obj.tagName == 'HR' ||
		obj.tagName == 'IFRAME' ||
		obj.tagName == 'LEGEND' ||
		obj.tagName == 'LISTING' ||
		obj.tagName == 'MARQUEE' ||
		obj.tagName == 'MENU' ||
		obj.tagName == 'OL' ||
		obj.tagName == 'P' ||
		obj.tagName == 'PLAINTEXT' ||
		obj.tagName == 'PRE' ||
		obj.tagName == 'TABLE' ||
		obj.tagName == 'TD' ||
		obj.tagName == 'TH' ||
		obj.tagName == 'TR' ||
		obj.tagName == 'UL' ||
		obj.tagName == 'XMP'
	) {
		ret = 'block';
	}
	else {
		ret = 'inline'
	}

	if (navigator.appName.indexOf("Netscape") != -1) {
		obj.style.display='';
	}
	else {
		obj.style.display=ret;
	}
	return;
}

function date_controlla_periodo(periodo_dal, periodo_al, formato_data, required, controlla_futuro, oggi_2) {
	var errors='';

// CONTROLLO CORRETTA SEQUENZA DATE //
	var pippo=compareDates(periodo_al, formato_data, periodo_dal, formato_data);
	var pippo1=compareDates(periodo_dal, formato_data, oggi_2, formato_data);
	var pippo2=compareDates(periodo_al, formato_data, oggi_2, formato_data);
	
		if (pippo != 1) {
			//errors+= 'dal:'+periodo_dal+' al:'+periodo_al+' oggi:'+oggi_2+'  La data di partenza deve essere successiva a quella di arrivo\n';
			errors+= 'La data di partenza deve essere successiva a quella di arrivo\n';
		}
// CONTROLLO DATE NEL FUTURO//
		if (
			controlla_futuro &&
			pippo1 != 1 ||
			pippo2 != 1
		) {
			//errors+= '(dal:'+periodo_dal+' oggi:'+oggi_2+' formato:'+formato_data+') 0:'+pippo+' 1:'+pippo1+'- 2:'+pippo2+' La data di arrivo e quella di partenza non possono essere precedenti alla data attuale\n';
			errors+= 'La data di arrivo o quella di partenza non possono essere anteriori alla data attuale\n';
		}

	return errors;
}

function date_controlla_periodo_lang(periodo_dal, periodo_al, formato_data, required, controlla_futuro, oggi_2, lang) {
	var errors='';

// CONTROLLO CORRETTA SEQUENZA DATE //
	var pippo=compareDates(periodo_al, formato_data, periodo_dal, formato_data);
	var pippo1=compareDates(periodo_dal, formato_data, oggi_2, formato_data);
	var pippo2=compareDates(periodo_al, formato_data, oggi_2, formato_data);
	
		if (pippo != 1) {
			//errors+= 'dal:'+periodo_dal+' al:'+periodo_al+' oggi:'+oggi_2+'  La data di partenza deve essere successiva a quella di arrivo\n';
			if(lang == 'it') errors+= 'La data di partenza deve essere successiva a quella di arrivo\n';
			else if(lang == 'en') errors+= 'Departure date must be after arrival date\n';
			else if(lang == 'de') errors+= 'Abreisedatum soll nach dem Ankunftsdatum sein\n';
			else errors+= 'La data di partenza deve essere successiva a quella di arrivo\n';
		}
// CONTROLLO DATE NEL FUTURO//
		if (
			controlla_futuro &&
			pippo1 != 1 ||
			pippo2 != 1
		) {
			//errors+= '(dal:'+periodo_dal+' oggi:'+oggi_2+' formato:'+formato_data+') 0:'+pippo+' 1:'+pippo1+'- 2:'+pippo2+' La data di arrivo e quella di partenza non possono essere precedenti alla data attuale\n';
			if(lang == 'it') errors+= 'La data di arrivo o quella di partenza non possono essere anteriori alla data attuale\n';
			else if(lang == 'en') errors+= 'Arrival or departure date cannot precede today\'s date\n';
			else if(lang == 'de') errors+= 'Ankunfts and Abreisedatum k\u00F6nnen nicht vor das Heutige Datum sein\n';
			else errors+= 'La data di arrivo o quella di partenza non possono essere anteriori alla data attuale\n';
		}

	return errors;
}


function compareDates(date1,dateformat1,date2,dateformat2) {
	var d1=getDateFromFormat(date1,dateformat1);
	var d2=getDateFromFormat(date2,dateformat2);
	if (d1==0 || d2==0) {
		return -1;
	}
	else if (d1 > d2) {
		return 1;
	}
	return 0;
}


function getDateFromFormat(val, format) {
	val=val+"";
	format=format+"";
	var i_val=0;
	var i_format=0;
	var c="";
	var token="";
	var token2="";
	var x,y;
	var now=new Date();
	var year=null;
	var month=null;
	var date=null;
	var hh=now.getHours();
	var mm=now.getMinutes();
	var ss=now.getSeconds();
	var ampm="";

	// dd/MM/yyyy HH:mm:ss //
	while (i_format < format.length) {
		/*if (year!=null && month!=null && date!=null) {
			break;
		}*/
		// Get next token from format string
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
		}
		// Extract contents of value based on format token
		if (token=="yyyy" || token=="yy" || token=="y") {
			if (token=="yyyy") {
				x=4;y=4; 
			}
			if (token=="yy") {
				x=2;y=2; 
			}
			if (token=="y") {
				x=2;y=4; 
			}
			year=_getInt(val,i_val,x,y);
			if (year==null) { 
				return 0;
			}
			i_val += year.length;
			if (year.length==2) {
				if (year > 70) {
					year=1900+(year-0);
				}
				else {
					year=2000+(year-0);
				}
			}
		}
		else if (token=="MMM"||token=="NNN"){
			month=0;
			for (var i=0; i<MONTH_NAMES.length; i++) {
				var month_name=MONTH_NAMES[i];
				if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {
					if (token=="MMM"||(token=="NNN"&&i>11)) {
						month=i+1;
						if (month>12) { 
							month -= 12;
						}
						i_val += month_name.length;
						break;
					}
				}
			}
			if ((month < 1)||(month>12)){
				return 0;
			}
		}
		else if (token=="EE"||token=="E"){
			for (var i=0; i<DAY_NAMES.length; i++) {
				var day_name=DAY_NAMES[i];
				if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) {
					i_val += day_name.length;
					break;
				}
			}
		}
		else if (token=="MM"||token=="M") {
			month=_getInt(val,i_val,token.length,2);
			if(month==null||(month<1)||(month>12)){
				return 0;
			}
			i_val+=month.length;
		}
		else if (token=="dd"||token=="d") {
			date=_getInt(val,i_val,token.length,2);
			if(date==null||(date<1)||(date>31)){
				return 0;
			}
			i_val+=date.length;
		}
		else if (token=="hh"||token=="h") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>12)){
				return 0;
			}
			i_val+=hh.length;
		}
		else if (token=="HH"||token=="H") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>23)){
				return 0;
			}
			i_val+=hh.length;
		}
		else if (token=="KK"||token=="K") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>11)){
				return 0;
			}
			i_val+=hh.length;
		}
		else if (token=="kk"||token=="k") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>24)){
				return 0;
			}
			i_val+=hh.length;hh--;
		}
		else if (token=="mm"||token=="m") {
			mm=_getInt(val,i_val,token.length,2);
			if(mm==null||(mm<0)||(mm>59)){
				return 0;
			}
			i_val+=mm.length;
		}
		else if (token=="ss"||token=="s") {
			ss=_getInt(val,i_val,token.length,2);
			if(ss==null||(ss<0)||(ss>59)){
				return 0;
			}
			i_val+=ss.length;
		}
		else if (token=="a") {
			if (val.substring(i_val,i_val+2).toLowerCase()=="am") {
				ampm="AM";
			}
			else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {
				ampm="PM";
			}
			else {
				return 0;
			}
			i_val+=2;
		}
		else {
			if (val.substring(i_val,i_val+token.length)!=token) {
				return 0;
			}
			else {
				i_val+=token.length;
			}
		}
	}
	//var year=now.getYear();
	//var month=now.getMonth()+1;
	//var date=1;

	// If there are any trailing characters left in the value, it doesn't match
	if (i_val != val.length) { 
		return 0; 
	}
	// Is date valid for month?
	if (month==2) {
		// Check for leap year
		if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
			if (date > 29){ 
				return 0; 
			}
		}
		else { 
			if (date > 28) { 
				return 0; 
			} 
		}
	}
	if ((month==4)||(month==6)||(month==9)||(month==11)) {
		if (date > 30) { 
			return 0; 
		}
	}
	// Correct hours value
	if (hh<12 && ampm=="PM") { 
		hh=hh-0+12; 
	}
	else if (hh>11 && ampm=="AM") { 
		hh-=12;
	}
	var newdate=new Date(year,month-1,date,hh,mm,ss);
	return newdate.getTime();
}

function _isInteger(val) {
	var digits="1234567890";
	for (var i=0; i < val.length; i++) {
		if (digits.indexOf(val.charAt(i))==-1) {
			return false;
		}
	}
	return true;
}

function _getInt(str,i,minlength,maxlength) {
	for (var x=maxlength; x>=minlength; x--) {
		var token=str.substring(i,i+x);
		if (token.length < minlength) {
			return null;
		}
		if (_isInteger(token)) {
			return token;
		}
	}
	return null;
}
