var categoriesOptional = 1;
var yearOptional = 1;
var mainCategory = 'category';

function validateForm(formId){
	if(formId == 'frmContribute'){
		var i;
		if(document.frmContribute.newret){
			for (i=0; i<document.frmContribute.newret.length; i++){
				if (document.frmContribute.newret[i].checked){
					break;
				}
			}

			if (document.frmContribute.newret[i].value == 'new' && isEmpty(document.getElementById('username').value)){
				alert('\Please, enter a name for your collection');
				return false;
			}
		}
		if (document.getElementById('email') && !isValidMail(document.getElementById('email').value)){
			alert('\Please, enter a valid email address');
			return false;
		}
		if (document.getElementById('password') && isEmpty(document.getElementById('password').value)){
			alert('\Please, enter a password');
			return false;
		}
		if (isEmpty(document.getElementById('file').value)){
			alert('\Please, select a file to submit');
			return false;
		}
		if (isEmpty(document.getElementById('description').value)){
			alert('\Please, enter a title for the item');
			return false;
		}
		if (!yearOptional && isEmpty(document.getElementById('year').value) || !validateYear('year')){
			alert('\'Circa\' field must be a year');
			return false;
		}
		if (!categoriesOptional && document.getElementById('category0').value < 1){
			alert('Please, enter at least one '+mainCategory);
			return false;
		}
	}
	if(formId == 'frmLogin'){
		if (!isValidMail(document.getElementById('email').value)){
			alert('\Please, enter a valid email address');
			return false;
		}
		if (document.getElementById("rm").value != 'lostpass' && isEmpty(document.getElementById('password').value)){
			alert('\Please, enter a password');
			return false;
		}	
	}
}

function validateYear(fieldId){
	var year = document.getElementById(fieldId).value;
	if (isEmpty(year))
		return true;

	if (!isFinite(year))
		return false;

	return (year.length == 4) && (year > 1500);
}

function isEmpty(value){
	return /^\s*$/.test(value);
}

function areValidEmails(fields){
	for (var i = 0; i < fields.length; i++){
		text = document.getElementById(fields[i]).value;
		if(text != '' && !isValidMail(text)){
			alert('Please, enter valid email addresses!');
			return false;
		}
	}
	return true;
}

function  isValidMail(text) {
	var objRegExp  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if(!objRegExp.test(text)) {
		return false;
	}
	return true;
}

function clearFields(fields) {
	for (i=0; i<fields.length; i++) {
		document.getElementById(fields[i]).value = "";
	}
}

function deleteUserRow(){
	document.getElementById("rowPreview").style.display = "none";
	document.getElementById("rowName").style.display = "none";
	document.getElementById("rowAvailability").style.display = "none";
}

function insertUserRow(){
	document.getElementById("rowPreview").style.display = "";
	document.getElementById("rowName").style.display = "";
	document.getElementById("rowAvailability").style.display = "";
}

function checkAndSubmit(chkId, action, formId){
	if(action == "deleteitems"){
		if(!confirm("Are you sure you want to delete this item from the Museum?"))
			return;
	}
	selectAll(formId, false);
	document.getElementById(chkId).checked = true;
	submit(action, formId);
}

function submit(action, formId){
	document.getElementById("rm").value = action;
	document.getElementById("url").value = window.location.href;
	document.getElementById(formId).submit();
}

function selectAll(formId, selected){
	for (i = 0; i < document.getElementById(formId).elements.length; i++){
		if(document.getElementById(formId).elements[i].type == "checkbox"){
			document.getElementById(formId).elements[i].checked = selected;
		}
	}
}

function startList() {
	if (document.all&&document.getElementById) {
		navRoot = document.getElementById("nav");
		for (i=0; i<navRoot.childNodes.length; i++) {
			node = navRoot.childNodes[i];
			if (node.nodeName=="LI") {
				node.onmouseover=function() {
					this.className+=" over";
				}
				node.onmouseout=function() {
					this.className=this.className.replace(" over", "");
				}
			}
		}
	}
}

function setPageAndSubmit(formId, page) {
	document.getElementById('page').value = page;
	document.getElementById(formId).submit();
}

function showHideDiv(divId) {
	if(document.getElementById(divId).style.display == "none"){
		document.getElementById(divId).style.display="block";
	}
	else{
		document.getElementById(divId).style.display="none";
	}
}

function showInDiv(spanId, fieldId){
	textValue = document.getElementById(fieldId).value;

	var objRegExp = new RegExp("[</>]", "g");
	document.getElementById(fieldId).value = document.getElementById(fieldId).value.replace(objRegExp, "");

	var objRegExp1 = new RegExp("[^a-zA-Z0-9_\-]", "g");
	document.getElementById(spanId).innerHTML = document.getElementById(fieldId).value.replace(objRegExp1, "").toLowerCase();
}

function lostPass(){
	if(document.getElementById("rm").value == "login"){
		document.getElementById("rowPassword").style.display = "none";
		document.getElementById("spanForgot").innerHTML = "Login";
		document.getElementById("btnSubmit").value = "Retrieve";
		document.getElementById("rm").value = "lostpass";
	}
	else{
		document.getElementById("rowPassword").style.display = "";
		document.getElementById("spanForgot").innerHTML = "Forgot my password";
		document.getElementById("btnSubmit").value = "Login!";
		document.getElementById("rm").value = "login";
	}
}

function checkCollName(){
	$('loading').style.display = "";
	$('availability').innerHTML = "";
	var url = '';
	var pars = 'rm=checkcollname&collectionname='+escape($F('username'));
	var myAjax = new Ajax.Request(
			url, 
			{
				method: 'get',
				parameters: pars,
				onComplete: showAvailability
			});
}

function showAvailability(originalRequest) {
		$('availability').innerHTML = originalRequest.responseText;
		$('loading').style.display = "none";
}

function getNextPic(){
	var picNumber = $('picnumber').value;
	picNumber++;
	getPic(picNumber);
}

function getPreviousPic(){
	var picNumber = escape($F('picnumber'));
	picNumber--;
	getPic(picNumber);
}

function getPic(picNumber){
	$('picnumber').value = picNumber;
	$('loadingpic').style.display = "";
	$('rowarrows').style.display = "none";
	var url = '';
	var pars = 'rm=getPic&username='+escape($F('username'))+'&picnumber='+picNumber;
	var myAjax = new Ajax.Request(
			url,
			{
				method: 'get',
				parameters: pars,
				onComplete: showPic
			});
}

function showPic(originalRequest) {
	$('defaultpic').src = originalRequest.responseText.split("|")[0];
	$('iditem').value = originalRequest.responseText.split("|")[1];
	$('loadingpic').style.display = "none";
	$('rowarrows').style.display = "";
	$('btnsave').disabled=false;
}

function changeDefaultPic() {
	$('loadingpic').style.display = "";
	$('rowarrows').style.display = "none";
	$('btnsave').disabled=true;
	var url = '';
	var pars = 'rm=changeDefaultPic&username='+escape($F('username'))+'&iditem='+$F('iditem');
	var myAjax = new Ajax.Request(
			url,
			{
				method: 'get',
				parameters: pars,
				onComplete: showSaved
			});
}

function showSaved(originalRequest) {
	if(originalRequest.responseText == 1){
		$('message').innerHTML = "Changes saved";
		$('btnsave').disabled=true;
	}
	else{
		$('message').innerHTML = "There was a problem saving your changes";
		$('btnsave').disabled=false;
	}

	$('loadingpic').style.display = "none";
	$('rowarrows').style.display = "";
}

function changePassword() {
	$('loadingpass').style.display = "";
	$('btnchange').disabled=true;
	var url = '';
	var pars = 'rm=changepass&username='+escape($F('username'))+'&oldpass='+escape($F('oldpassword'))+'&newpass='+escape($F('newpassword'));
	var myAjax = new Ajax.Request(
			url,
			{
				method: 'get',
				parameters: pars,
				onComplete: showChanged
			});
}

function showChanged(originalRequest) {
	$('message').innerHTML = originalRequest.responseText;

	$('btnchange').disabled=false;
	$('loadingpass').style.display = "none";
	$('oldpassword').value = "";
	$('newpassword').value = "";
}

function insertEmailRow(){
	document.getElementById('recipients').value++;
	var row=document.getElementById('emails').insertRow(document.getElementById('emails').rows.length-2);
	var cell1=row.insertCell(0);
	var cell2=row.insertCell(1);

	cell1.innerHTML="";
	cell2.innerHTML="<input name=\"email"+document.getElementById('recipients').value+"\" type=\"text\" id=\"email"+document.getElementById('recipients').value+"\"/>";
}

function getSubcategories(categoryFieldId, contribute) {
	var categoryNumber = categoryFieldId.replace("category", "");
	if($(categoryFieldId).value > 0){
		loading();

		var url = '';
		var pars = 'rm=getcategories&idcategory='+$(categoryFieldId).value+'&categorynumber='+categoryNumber+'&contribute='+contribute;
		var myAjax = new Ajax.Request(
				url,
				{
					method: 'get',
					parameters: pars,
					onComplete: showSubcategories
				});
	}
	else {
		$('spanSubcategories'+categoryNumber).innerHTML = "";
	}
}

function getSubcategoriesWithNumbers(categoryFieldId) {
	var categoryNumber = categoryFieldId.replace("category", "");
	if($(categoryFieldId).value > 0){

		loading();

		var url = '';
		var pars = 'rm=getcategories&idcategory='+$(categoryFieldId).value+'&categorynumber='+categoryNumber+'&withnumbers=1';
		var myAjax = new Ajax.Request(
				url,
				{
					method: 'get',
					parameters: pars,
					onComplete: showSubcategories
				});
	}
	else {
		$('spanSubcategories'+categoryNumber).innerHTML = "";
	}
}

function showSubcategories(originalRequest) {
	if(originalRequest.responseText.split("|")[0] == 1){
		$('spanSubcategories'+originalRequest.responseText.split("|")[1]).innerHTML = originalRequest.responseText.split("|")[2];
		if($('message'))
			$('message').innerHTML = '';
	}
	else{
		if($('message'))
			$('message').innerHTML = originalRequest.responseText.split("|")[1];
	}
	
	finishLoading();
}

function showAddField(subcategoryFieldId) {
	var i = subcategoryFieldId.replace("subcategory", "");
	
	if($('newsubcategory'+i)){
		if($('subcategory'+i).value == 0)
			$('newsubcategory'+i).style.display = '';
		else
			$('newsubcategory'+i).style.display = 'none';
	}
}

function showAddCategoryField() {
	if($('category0').value == 0)
		$('newcategory0').style.display = '';
	else
		$('newcategory0').style.display = 'none';
}

function anotherCat(contribute) {
	var url = '';
	var pars = 'rm=getcategories&numofcategories='+$('numofcategories').value+'&contribute='+contribute;
	var myAjax = new Ajax.Request(
			url,
			{
				method: 'get',
				parameters: pars,
				onComplete: showCategoryRow
			});
}

function showCategoryRow(originalRequest) {
	var row = $('categoriesTable').insertRow($('categoriesTable').rows.length);
	row.id = 'rowCategory'+$('numofcategories').value;
	var cell = row.insertCell(0);

	cell.innerHTML= originalRequest.responseText;

	$('numofcategories').value++;

	showDeleteIcons();
}

function deleteCategory(rowNumber) {
	removeElement('rowCategory'+rowNumber);
	renumberRows(rowNumber);

	showDeleteIcons();
}

function removeElement(idElement) {
	document.getElementById(idElement).parentNode.removeChild(document.getElementById(idElement));
}

function renumberRows(deletedNumber){
	var num = Number(deletedNumber)+1;
	while($('rowCategory'+num)){
		var newNum = num-1;
		$('rowCategory'+num).id = 'rowCategory'+newNum;		
		$('category'+num).id = 'category'+newNum;
		$('category'+newNum).name = 'category'+newNum;
		document.getElementById(num).id = newNum;
		
		if($('subcategory'+num)){
			$('subcategory'+num).id = 'subcategory'+newNum;
			$('subcategory'+newNum).name = 'subcategory'+newNum;
		}
		if($('newsubcategory'+num)){
			$('newsubcategory'+num).id = 'newsubcategory'+newNum;
			$('newsubcategory'+newNum).name = 'newsubcategory'+newNum;
		}
		if($('spanSubcategories'+num)){
			$('spanSubcategories'+num).id = 'spanSubcategories'+newNum;
		}

		num++;
	}
	
	if($('numofcategories').value >1){
		$('numofcategories').value--;
	}
}

function showDeleteIcons(){
	if(!categoriesOptional){
		if($('categoriesTable').rows.length>1){
			var i;
			for(i=0; i<$('categoriesTable').rows.length; i++){
				$(i.toString()).style.display = '';
			}
		}
		else {
			$('0').style.display = 'none';
		}
	}
	else{
		for(i=0; i<$('categoriesTable').rows.length; i++){
			$(i.toString()).style.display = '';
		}
	}
}

function saveCategories() {
	var pars;
	if($('category0').value == 0){
		pars = 'rm=savecategories&categoryname='+escape($('newcategory0').value);
	}
	else if($('subcategory0') && $('subcategory0').value == 0) {
		pars = 'rm=savecategories&subcategoryname='+escape($('newsubcategory0').value)+'&categoryid='+$('category0').value;
	}
	
	loading();

	var url = '';
	var myAjax = new Ajax.Request(
			url,
			{
				method: 'get',
				parameters: pars,
				onComplete: refreshCategories
			});

}

function deleteCategories() {
	var pars;
	if($('category0').value <= 0){
		alert('You must select a category in order to delete it!');
		return;
	}
	else if($('subcategory0') && $('subcategory0').value == 0) {
		alert('You must select a subcategory in order to delete it!');
		return;
	}
	else if($('subcategory0').value > 0) {
		pars = 'rm=deletecategories&subcategoryid='+$('subcategory0').value;
	}
	else {
		pars = 'rm=deletecategories&categoryid='+$('category0').value;
	}

	loading();

	var url = '';
	var myAjax = new Ajax.Request(
			url,
			{
				method: 'get',
				parameters: pars,
				onComplete: refreshCategories
			});
}

function renameCategories() {
	var pars;
	var name;
	if($('category0').value <= 0){
		alert('You must select a category in order to rename it!');
		return;
	}
	else if($('subcategory0') && $('subcategory0').value == 0) {
		alert('You must select a subcategory in order to rename it!');
		return;
	}
	else if($('subcategory0').value > 0) {
		pars = 'rm=renamecategories&categoryid='+$('subcategory0').value;
		name = escape($('subcategory0').options[$('subcategory0').selectedIndex].text);
	}
	else {
		pars = 'rm=renamecategories&categoryid='+$('category0').value;
		name = escape($('category0').options[$('category0').selectedIndex].text);
	}

	var newName = prompt("New name for "+name+"?", "");
	if(!newName || newName == ''){
		finishLoading();
		return;
	}
	pars = pars+'&newname='+escape(newName);

	loading();

	var url = '';
	var myAjax = new Ajax.Request(
			url,
			{
				method: 'get',
				parameters: pars,
				onComplete: refreshCategories
			});

}

function moveItems() {

	var pars;
	if($('category0').value <= 0){
		alert('You must select a category in order to move its items!');
		return;
	}
	else if($('subcategory0') && $('subcategory0').value == 0) {
		alert('You must select a subcategory in order to move its items!');
		return;
	}
	else if($('spanCategories1').style.display == "none"){
		loading();
		$('btnok').onclick = moveItems;

		var url = '';
		var pars = 'rm=getcategory1&move=items';
		var myAjax = new Ajax.Request(
				url,
				{
					method: 'get',
					parameters: pars,
					onComplete: showCategory1
				});
		return;
	}

	if($('category1').value <= 0){
		alert('You must select a category in order to move its items!');
		return;
	}
	else if($('subcategory1') && $('subcategory1').value == 0) {
		alert('You must select a subcategory in order to move its items!');
		return;
	}

	if($('subcategory0').value > 0) {
		pars = 'rm=moveitems&categoryidfrom='+$('subcategory0').value;
	}
	else {
		pars = 'rm=moveitems&categoryidfrom='+$('category0').value;
	}

	if($('subcategory1').value > 0) {
		pars = pars +'&categoryidto='+$('subcategory1').value;
	}
	else {
		pars = pars +'&categoryidto='+$('category1').value;
	}

	loading();

	var url = '';
	var myAjax = new Ajax.Request(
			url,
			{
				method: 'get',
				parameters: pars,
				onComplete: finishMove
			});
}

function moveCategories() {

	var pars;
	if($('category0').value <= 0){
		alert('You must select a category in order to move it!');
		return;
	}
	else if($('subcategory0') && $('subcategory0').value == 0) {
		alert('You must select a subcategory in order to move it!');
		return;
	}
	else if($('spanCategories1').style.display == "none"){
	
		loading();
		$('btnok').onclick = moveCategories;

		var url = '';
		var pars = 'rm=getcategory1&move=category';
		var myAjax = new Ajax.Request(
				url,
				{
					method: 'get',
					parameters: pars,
					onComplete: showCategory1
				});
		return;
	}

	if($('category1').value <= 0){
		if(!confirm("You are about to transform a subcategory in a category. Do you want to continue?"))
			return;
	}

	if($('subcategory0').value > 0) 
		pars = 'rm=movecategories&categoryidfrom='+$('subcategory0').value;
	else
		pars = 'rm=movecategories&categoryidfrom='+$('category0').value;

	if($('category1').value > 0)
		pars = pars +'&categoryidto='+$('category1').value;

	loading();

	var url = '';
	var myAjax = new Ajax.Request(
			url,
			{
				method: 'get',
				parameters: pars,
				onComplete: finishMove
			});
}

function showCategory1(originalRequest) {

		$('spanCategories1').style.display = "";
		$('spanDropDownCat1').innerHTML = originalRequest.responseText.split("|")[1];

		if($('loading'))
			$('loading').style.display = "none";
		if($('btnok'))
			$('btnok').disabled = false;
		if($('btncancel'))
			$('btncancel').disabled= false;
}

function finishMove(originalRequest) {
	$('spanCategories1').style.display = "none";
	refreshCategories(originalRequest);
}

function cancel(){
	$('spanCategories1').style.display = "none";
	$('category1').onchange = restoreCategory1Function;
	finishLoading();
}

function restoreCategory1Function(){
	getSubcategoriesWithNumbers("category1");
}

function refreshCategories(originalRequest) {
	if(originalRequest.responseText.split("|")[0] == 1){
		$('spanCategories0').innerHTML = originalRequest.responseText.split("|")[2];
	}
	$('message').innerHTML = originalRequest.responseText.split("|")[1];

	finishLoading();
}

function loading() {
	if($('loading'))
		$('loading').style.display = "";
	if($('btnsave'))
		$('btnsave').disabled=true;
	if($('btndelete'))
		$('btndelete').disabled=true;
	if($('btnrename'))
		$('btnrename').disabled=true;
	if($('btnmovecat'))
		$('btnmovecat').disabled=true;
	if($('btnmoveit'))
		$('btnmoveit').disabled=true;
	if($('btnok'))
		$('btnok').disabled=true;
	if($('btncancel'))
		$('btncancel').disabled=true;
}

function finishLoading() {
	if($('loading'))
		$('loading').style.display = "none";
	if($('btnsave'))
		$('btnsave').disabled=false;
	if($('btndelete'))
		$('btndelete').disabled=false;
	if($('btnrename'))
		$('btnrename').disabled=false;
	if($('btnmovecat'))
		$('btnmovecat').disabled=false;
	if($('btnmoveit'))
		$('btnmoveit').disabled=false;
	if($('btnok'))
		$('btnok').disabled=false;
	if($('btncancel'))
		$('btncancel').disabled=false;
}

function replaceUrlEntities(stringToSend){
	stringToSend = stringToSend.replace(/\#/g, "%23");
	stringToSend = stringToSend.replace(/\&/g, "%26");
	stringToSend = stringToSend.replace(/\+/g, "%2B");
	stringToSend = stringToSend.replace(/\;/g, "%3B");

	return stringToSend;
}