/*
    1. argument je forma koju treba validirati.
    2. argument je array indexa elemenata forme koje treba validirati na nepraznost.
    3. argument je array indexa elemenata forme koji predstavljaju obavezne e-mail adrese, i treba ih validirati na e-mail format.
        Ako je samo jedan e-mail element na formi, u array treba dodati jos jedan negativni broj! Ako nema e-mail elemenata na formi,
        stavi se prazan array
    4. argument je array indexa elemenata forme koji predstavljaju cijenu, dakle najvise dva decimalna mjesta odijeljena tockom od cjelobrojnog dijela.
    	Ako nema takvih elemenata u formi, stavi se prazan array
    5. argument je array indexa elemenata forme koji predstavljaju eksterni link, tj. URL. Ako nema takvih elemenata u formi, stavi se prazan array
*/

var errorTextNonEmptyStart = 1;
var errorTextNonEmptyEnd = 2;
var errorTextEMailFormatStart = 3;
var errorTextEMailFormatEnd = 4;
var errorTextPriceStart = 5;
var errorTextPriceEnd = 6;
var errorTextURLStart = 7;
var errorTextURLEnd = 8;
var passwordtext1 = 9;
var passwordtext2 = 10;
var passwordtext3 = 11;
var passwordtext4 = 12;

/**/

var admin_language = 0;			// 0 = hrvatski,   1 = engleski

//var messageArray = new Array(2, 12);

var messageArrayHrv = new Array(13);
var messageArrayEng = new Array(13);

messageArrayHrv[1] = "Element \"";
messageArrayHrv[2] = "\" je prazan!";
messageArrayHrv[3] = "E-mail format neispravan!";
messageArrayHrv[4] = "";
messageArrayHrv[5] = "Element \"";
messageArrayHrv[6] = "\" mora biti cijeli ili decimalni broj, pri čemu su decimale odvojene točkom!";
messageArrayHrv[7] = "Element \"";
messageArrayHrv[8] = "\" mora biti valjani URL!";
messageArrayHrv[9] = "Stara zaporka ne može biti prazna!\n";
messageArrayHrv[10] = "Nova zaporka ne može biti prazna!\n";
messageArrayHrv[11] = "Unosi za novu zaporku se razlikuju!";
messageArrayHrv[12] = "Zaporka promijenjena";

messageArrayEng[1] = "Element \"";
messageArrayEng[2] = "\" is empty!";
messageArrayEng[3] = "E-mail format invalid!";
messageArrayEng[4] = "";
messageArrayEng[5] = "Element \"";
messageArrayEng[6] = "\" has to be integer or float, decimal sign is a dot!";
messageArrayEng[7] = "Element \"";
messageArrayEng[8] = "\" has to be a valid URL!";
messageArrayEng[9] = "Old password must be non-empy!\n";
messageArrayEng[10] = "New password must be non-empy!\n";
messageArrayEng[11] = "New password entries differ!";
messageArrayEng[12] = "Password changed";

var messageArray = new Array(messageArrayHrv, messageArrayEng);

/**/

function checkForm(forma, arrayOfNonEmptyIndexes, arrayOfEMails, arrayOfPrices, arrayOfURLs)		// arrayOfURLs
{
    var allOK = true;
    errorIndexes = new Array();
    errorMessages = new Array();
    var bool1 = checkFormForNonEmptyElements(forma, arrayOfNonEmptyIndexes)
    var bool2 = checkFormForEMails(forma, arrayOfEMails);
    var bool3 = checkFormPrices(forma, arrayOfPrices);
    var bool4 = checkFormURLs(forma, arrayOfURLs);
    
    allOK = bool1 && bool2 && bool3 && bool4;	// && bool4
    
    if (!allOK)
    {
    	alert(conc(errorMessages));
    	forma.elements[errorIndexes[0]].select();
    }
    return allOK;
}

function checkFormForNonEmptyElements(forma, arrayOfNonEmptyIndexes)
{
    var allOK = true;

    // Ovaj odsjecak provjerava nepraznost elemenata
    // prođi kroz array indeksa elemenata koji ne smiju biti prazni
    for (i=0; i<arrayOfNonEmptyIndexes.length; i++) //alert(forma.elements[arrayOfNonEmptyIndexes[i]].name+" = "+forma.elements[arrayOfNonEmptyIndexes[i]].value);
    {
    	if (arrayOfNonEmptyIndexes[i]>=0)	// ako je indeks elementa koji ne smije biti prazan veci ili jednak 0 (ako je -1, to znači da je kraj arraya), onda
    	{
	        if (forma.elements[arrayOfNonEmptyIndexes[i]].value.length==0)		// ako je element s indeksom arrayOfNonEmptyIndexes[i] prazan onda
	        {
	            errorIndexes[errorIndexes.length] = arrayOfNonEmptyIndexes[i];	// strpaj njegov indeks u odgovarajuci array
	            // strpaj poruke u odgovarajuci array
	            errorMessages[errorMessages.length] = messageArray[admin_language][1]+forma.elements[arrayOfNonEmptyIndexes[i]].name+messageArray[admin_language][2];
	            allOK = false;
	        }
	}
    }
    
    return allOK;
}

function checkFormForEMails(forma, arrayOfEMails)
{
    var allOK = true;
     
    // Ovaj odsjecak provjerava e-mail formate
    for (i=0; i<arrayOfEMails.length; i++)
    {
        if (arrayOfEMails[i]>=0)
        {
            //alert("Format e-maila "+forma.elements[arrayOfEMails[i]].value+" je OK: "+checkEMailFormat(forma.elements[arrayOfEMails[i]].value));
            if ( !checkEMailFormat(forma.elements[arrayOfEMails[i]].value) )
            {
                idx = contains(errorIndexes, arrayOfEMails[i]);
                if (idx>-1)
                {
                    errorMessages[idx] += " "+messageArray[admin_language][3];
                }
                else
                {
                    errorIndexes[errorIndexes.length] = arrayOfEMails[i];
                    errorMessages[errorMessages.length] = messageArray[admin_language][3];
                }
                allOK = false;
            }
        }
    }
    return allOK;
}

function checkFormPrices(forma, arrayOfPrices)
{
	var allOK = true;
	
	// Ovaj odsjecak provjerava format realnih brojeva s dvije decimale
	
	// prođi kroz array indeksa elemenata koji moraju biti realni brojevi s dva decimalna mjesta
	for (i=0; i<arrayOfPrices.length; i++)
	{
		if (arrayOfPrices[i]>=0) // ako je indeks elementa koji mora biti valjani decimalni broj veci ili jednak 0 (ako je -1, to znači da je kraj arraya), onda
		{
			if (!checkPrice(forma.elements[arrayOfPrices[i]].value))		// ako cijena nije valjana
			{
				idx = contains(errorIndexes, arrayOfPrices[i]);
				if (idx>-1)
				{
					errorMessages[idx] += " "+messageArray[admin_language][5] + forma.elements[arrayOfPrices[i]].name + messageArray[admin_language][6];
				}
				else
				{
					errorIndexes[errorIndexes.length] = arrayOfPrices[i];
					errorMessages[errorMessages.length] = messageArray[admin_language][5] + forma.elements[arrayOfPrices[i]].name + messageArray[admin_language][6];
				}
				allOK = false;
			}
		}
	}
	
	return allOK;
}

function checkFormURLs(forma, arrayOfURLs)
{
	var allOK = true;
	
	// Ovaj odsjecak provjerava nepraznost eksternih linkova
	
	// prođi kroz array indeksa elemenata koji moraju biti realni brojevi s dva decimalna mjesta
	for (i=0; i<arrayOfURLs.length; i++)
	{
		if (arrayOfURLs[i]>=0)	// ako je indeks elementa koji mora biti valjani URL veci ili jednak 0 (ako je -1, to znači da je kraj arraya), onda
		{
			if (!checkURL(forma.elements[arrayOfURLs[i]].value))		// ako URL nije valjan
			{
				idx = contains(errorIndexes, arrayOfURLs[i]);
				if (idx>-1)
				{
					errorMessages[idx] += " "+messageArray[admin_language][7] + forma.elements[arrayOfURLs[i]].name + messageArray[admin_language][8];
				}
				else
				{
					errorIndexes[errorIndexes.length] = arrayOfURLs[i];
					errorMessages[errorMessages.length] = messageArray[admin_language][7] + forma.elements[arrayOfURLs[i]].name + messageArray[admin_language][8];
				}
				allOK = false;
			}
		}
	}
	return allOK;
}

// Concatenate all error messages into a single string.
// Separate different types of errors with a new line.
function conc(messageArray1)
{
    var str = "";
    for (i=0; i<messageArray1.length; i++)
    {
        str += messageArray1[i]+"\n";
    }
    return str;
}

// float number starts with zero or more digits, followed by an optional decimal sign (a dot) followed by 0 or 1 or 2 more digits
function checkPrice(floatNumber)
{
	var regex = /^([0-9])+\.{0,1}([0-9]{0,2})$/;
	var result = regex.test(floatNumber);
	return result;
}

function checkEMailFormat(email)
{
	var regex = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	var result = regex.test(email);
	return result;
}

function checkURL(urlstring)
{
	if (urlstring.length<7 || urlstring=="http://" || urlstring=="https://" || urlstring=="ftp://") return false;
	else return true;
}

function checkPW(old, new1, new2)
{
	var allOK = true;
	messageCP = "";
	if (old.length==0)
	{
		allOK = false;
		messageCP += messageArray[admin_language, 9];
	}
	if (new1.length==0)
	{
		allOK = false;
		messageCP += messageArray[admin_language, 10];
	}
	if (new2.length==0)
	{
		allOK = false;
		messageCP += messageArray[admin_language, 10];
	}
	if (new1!=new2)
	{
		allOK = false;
		messageCP += messageArray[admin_language, 11];
	}
	
	if (!allOK) alert(messageCP);
	//else alert(messageArray[admin_language, 12]);
	
	return allOK;
}

// If array of error indexes already contains current _index_, then return this array index, otherwise return -1
function contains(arrayErrorIndexes, index)
{
    for (z=0; z<arrayErrorIndexes.length; z++)
    {
        if (arrayErrorIndexes[z]==index) return z;
    }
    return -1;
}
