var BrowserType = GetBrowserType();

/**************************************************************************************************
 ***    POMOCNE FUNKCE										***
 **************************************************************************************************/

function AddUrlArg(Url, Arg)
{
	var delimiter = "&";
	if (Url.indexOf("?") == -1)
		delimiter = "?";
		
	return delimiter + Arg;
}


// Opravi event object vzhledem k jinemu pristupu ruznych prohlizecu
//      IE: window.event, window.event.x, window.event.y, window.event.srcElement
//      FF: parametr e, e.layerX, e.layerY, e.target
function FixE(e)
{
        e = (e) ? e : (window.event) ? window.event : "";
	
        if (!e.x && e.layerX)
                e.x = e.layerX;
        if (!e.y && e.layerY)
                e.y = e.layerY;
        
        e.targetElement = (e.target) ? e.target : e.srcElement;

        e.targetElement = (e.targetElement.nodeType == 1) ? e.targetElement : e.targetElement.parentNode;
        
        return e;
}

function GetBrowserType()
{
	var ret;
	
	switch (navigator.appName)
	{
		case "Microsoft Internet Explorer":
		        if (navigator.userAgent.search("MSIE 8.0") == -1)
	                	ret = "IE";
			else
			        ret = "IE8";
	                break;
		case "Opera":
	                ret = "O";
	                break;
  		default:
  		        if (navigator.appVersion.search("Safari") != -1)
  		                ret = "S";
			else
			        ret = "FF";
	}
	return ret;
}

function GetIEVersion()
{
	var ret = -1;
	
	switch (BrowserType)
	{
	        case "IE":
	                if (navigator.userAgent.search("MSIE 7.0") == 1)
	                	ret = 7;
			else
			        ret = 6;
	                break;
	        case "IE8":
	                ret = 8;
	                break;
	}
	
	return ret;
}

// Vrati uzel vytvoreny pomoci DOM predstavujici korektni textovy uzel
//      -> Pokud retezec obsahuje odradkovani, budou tyto nahrazeny (pomoci DOM) BR elementy 
function createCorrectTextNode(str)
{        
        var ReturnNode;
        var strLines = str.split("\n");
        
        if (strLines.length > 1)
        {
                ReturnNode = document.createDocumentFragment();
                for (var i = 0; i < strLines.length; i++)
                {
                        ReturnNode.appendChild(document.createTextNode(strLines[i]));
                        if (i != strLines.length - 1)
                                ReturnNode.appendChild(CreateBRNode());
                }
        }
        else
                ReturnNode = document.createTextNode(str);
        
        return ReturnNode;
}

// Pomocna funkce vracejici BR element vytvoreny pomoci DOM
function CreateBRNode()
{
        var BRNode = document.createElement("BR");
        return BRNode;
}

// Funkce volana na onsubmit formulare - provede validaci formularovych prvku
function ControlDataByJS(frmObj, arrValidating)
{
        for (var i = 0; i < frmObj.elements.length; i++)
        {
                if (arrValidating[i])
                {
                        var elemObj = frmObj.elements[i];
                        if (!arrValidating[i].Validate(elemObj))
                                return false;
                }
        }
        return true;
}

function restoreCookieArr()
{
	var cookieData = Array();
	var temp1 = Array();
	var temp2 = Array();
	temp1 = document.cookie.split('; ');
	for (var i=0;i<temp1.length;i++)
	{
    		temp2 = temp1[i].split('=');
    		if (temp2[0] && temp2[1])
		{
      			cookieData[temp2[0]] = temp2[1];
    		}
  	}
  	return cookieData;
}
/**************************************************************************************************
 ***    FUNKCE PRO ZOBRAZENI HLASKY PRI SPATNE VALIDITE FORMULAROVEHO PRVKU                     ***
 **************************************************************************************************/

        function FieldMustBeSetAlert(fieldName)
        {
                alert(ALERT_MUSTBE.replace("{0}","["+fieldName+"]"));
        }

        function ManyCharsInFieldAlert(NumOfChars, fieldName, MaxNumOfChars)
        {
                alert(ALERT_MANYCHARS.replace("{0}",NumOfChars).replace("{1}","["+fieldName+"]").replace("{2}",MaxNumOfChars));
        }

        function FewCharsInFieldAlert(NumOfChars, fieldName, MaxNumOfChars)
        {
                alert(ALERT_FEWCHARS.replace("{0}",NumOfChars).replace("{1}","["+fieldName+"]").replace("{2}",MaxNumOfChars));
        }
        
        function FileNameIsNotCorrectAlert(fieldName)
        {
                alert (ALERT_BAD_FILENAME.replace("{0}","["+fieldName+"]"));
        }
        
        function FileNameTooBigAlert(fieldName, NumOfChars)
        {
                alert (ALERT_FILENAME_TOOBIG.replace("{0}","["+fieldName+"]").replace("{1}",NumOfChars));
        }
        
        function BadDateTimeAlert(fieldName)
        {
        	alert (ALERT_DATETIME_BADFORMAT.replace("{0}","["+fieldName+"]"));
	}
	
	function EmailIsNotCorrectAlert(fieldName)
	{
	        alert (ALERT_BAD_EMAIL.replace("{0}","["+fieldName+"]"));
	}

/**************************************************************************************************
 ***    KONSTRUKTORY A FUNKCE PRO VALIDACE JEDNOTLIVYCH TYPU FORMULAROVYCH PRVKU                ***
 **************************************************************************************************/
        
        // Konstruktor pro validaci formularoveho prvku typu "text" (muze byt samozrejme pouzito i pro textarea...) 
        function FormText(strName, bMustBe, MinChars, MaxChars)
        {
                this.strName = strName;    
                this.bMustBe = bMustBe;
                this.MaxChars = MaxChars;
                this.MinChars = MinChars;
                this.Validate = function(field)
                {
                        var bValidateFalse = false;
                        if (this.bMustBe && field.value == "")
                        {
                                FieldMustBeSetAlert(this.strName);
                                bValidateFalse = true;
                        }
                        else
                        {
                                if (this.MaxChars && field.value.length > this.MaxChars)
                                {
                                        ManyCharsInFieldAlert(field.value.length, this.strName, this.MaxChars);
                                        bValidateFalse = true;
                                }
                                else
                                        if (this.MinChars && field.value.length < this.MinChars)
                                        {
                                                FewCharsInFieldAlert(field.value.length, this.strName, this.MinChars);
                                                bValidateFalse = true;
                                        }
                        }                
                        if (bValidateFalse)
                        {
                                try
                                {
                                	field.focus();
				}
				catch(e)
				{;}
			}
                                
                        return !bValidateFalse;
                }
        }
        
        function FormTextEmail(strName, bMustBe)
        {
                this.strName = strName;
                this.bMustBe = bMustBe;
                this.MaxChars = 100;
                this.Validate = function(field)
                {
                        var bValidateFalse = false;
                        if (this.bMustBe && field.value == "")
                        {
                                FieldMustBeSetAlert(this.strName);
                                bValidateFalse = true;
                        }
                        else
                        {
                                if (field.value != "")
                                {
                                	if (this.MaxChars && field.value.length > this.MaxChars)
                                	{
                                        	ManyCharsInFieldAlert(field.value.length, this.strName, this.MaxChars);
                                        	bValidateFalse = true;
                                	}
                                	else
                                	{
                                        	var re = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
                                        	if (!re.test(field.value))// email neodpovida regularnimu vyrazu -> spatny format -> alert
                                        	{
                                                	EmailIsNotCorrectAlert(this.strName);
                                                	bValidateFalse = true;
                                        	}
					}
				}
			}
			if (bValidateFalse)
                        {
                                try
                                {
                                	field.focus();
				}
				catch(e)
				{;}
			}

                        return !bValidateFalse;
		}
	}
        
        // Konstruktor pro validaci hidden formularoveho prvku, v kterem je sestaven datum a cas, ktere uzivatel zadal
        // v roletkach, resp. v textovem poli
        function DateTime(strName, BadValidateFocusObj, bMustBe)
        {
        	this.strName = strName;    
                this.bMustBe = bMustBe;
                this.BadValidateFocusObj = BadValidateFocusObj;
                this.Validate = function(field)
                {
                	var bValidateFalse = false;
                	if (this.bMustBe && field.value == "")
                        {
                                FieldMustBeSetAlert(this.strName);
                                bValidateFalse = true;
                        }
                        else
                        {
                        	var DateArr = field.value.split("-");
                        	var DateObj = new Date(DateArr[0], DateArr[1]*1-1, DateArr[2], DateArr[3], DateArr[4]);
                        	if (!DateObj || isNaN(DateObj) || DateObj.getFullYear() != DateArr[0] || DateObj.getMonth() != DateArr[1]*1-1 || DateObj.getDate() != DateArr[2])
                        	{
                        		BadDateTimeAlert(this.strName);
                        		bValidateFalse = true;
				}
			}
			if (bValidateFalse)
                                BadValidateFocusObj.focus();
                                
                        return !bValidateFalse;
                }
	}
        
        // Konstruktor pro validaci formularoveho prvku typu "file"
        function FormFile(strName, bMustBe)
        {
                this.strName = strName;    
                this.bMustBe = bMustBe;
                this.Validate = function(field)
                {
                        var bValidateFalse = false;
                        if (this.bMustBe && field.value == "") // Kontrola na neprazdnost pole
                        {
                                FieldMustBeSetAlert(this.strName);
                                bValidateFalse = true;
                        }
                        else
                        {
                                if (field.value != "") // Pokud pole neni povinne a je prazdne, kontrola zadane cesty k souboru se nebude provadet 
                                {
                                        // Nasleduje regularni vyraz pro vyhledani nazvu souboru (musi mit priponu !) z cele cesty k tomuto souboru
                                        // Hint: "[^\\/\\\\]+" - jakykoliv alespon jeden znak krome znaku "/" nebo "\" 
                                        var re = new RegExp("[^\\/\\\\]+\\.[^\\/\\\\]+$");
                                        var FileNamePos = field.value.search(re);
                                
                                        if (FileNamePos < 0)// Nebyl nalezen nazev souboru odpovidajici regularnimu vyrazu -> spatny format -> alert
                                        {
                                                FileNameIsNotCorrectAlert(this.strName);
                                                bValidateFalse = true;
                                        }
                                        else
                                        {
                                                var FileName = field.value.substring(FileNamePos);
                                        
                                                if (FileName.length > 255) // Maximalni mozny pocet znaku v nazvu souboru je 255
                                                {
                                                        FileNameTooBigAlert(this.strName, FileName.length);
                                                        bValidateFalse = true;
                                                }
                                        }
                                }
                        }
                        if (bValidateFalse)
                                field.focus();
                                
                        return !bValidateFalse;
                }
        }

