Utils = new ( Class.create({
    
    initialize : function()
    {
    },
    
    CenterScreen : function(element)
    {
        var scrollOffsets = document.viewport.getScrollOffsets();
        var viewportHeight = document.viewport.getHeight();
        var viewportWidth = document.viewport.getWidth();
        var elementHeight = element.getHeight();
        var elementWidth = element.getWidth();
        
	var x = viewportWidth / 2 - elementWidth / 2 + scrollOffsets.left;
	var y = viewportHeight / 2 - elementHeight / 2 + scrollOffsets.top;
	if(x < 0) { x = 0 }
	if(y < 0) { y = 0 }
	
        element.setStyle({
            top: y + "px",
            left: x + "px"
          });
    },
    
    GetUploadForm : function(action, uploadText)
    {
        var form = new Element("form");
        form.id = "uploadForm";
        form.action = action;
        form.method = "post";
        form.enctype = "multipart/form-data";
        var input = new Element("input");
        input.name = "uploadFile";        
        input.id = "uploadFile";
        input.type = "file";
        input.size = 35;
        form.insert(input);
        var button = new Element("input");
        button.id = "uploadButton";
        button.type = "submit";
        button.value = uploadText;
        form.insert(button);
        return form;
    },
    
    IsDateEqual : function(date1, date2)
    {
        return  date1.getFullYear() == date2.getFullYear()
                && date1.getMonth() == date2.getMonth()
                && date1.getDate() == date2.getDate();
    },
    
    IsValidString : function(originalString, filter)
    {
        switch(filter)
        {
            case "Email" :
                if( originalString.indexOf("@") != -1 &&
                    originalString.indexOf("@") == originalString.lastIndexOf("@") &&
                    originalString.indexOf(".") != -1 &&
                    originalString.length >= 5 ) return true;
                return false;
            
            case "NotNullOrEmpty" :
                if(originalString == null || originalString == "") return false;
                return true;
            
            case "Number" :
                var anum = /(^\d+$)|(^\d+\.\d+$)/
                if(anum.test(originalString)) return true;
                return false;
            
            case "URL" :
                var hasDot = false;
                var charCount = 0;
                var hasSlash = false;
                for(i = 0; i < originalString.length && !hasSlash; i++)
                {
                    if(originalString.charAt(i) == '.')
                    {
                        if(!hasDot && charCount == 0) return false;
                        if(hasDot && charCount < 2) return false;
                        charCount = 0;
                        hasDot = true;
                    }
                    else
                    {
                        charCount++;
                    }
                    
                    if(originalString.charAt(i) == '/')
                    {
                        if(hasDot) hasSlash = true;
                    }
                    
                }
                
                if(!hasDot) return false;
                if(hasDot && charCount < 2) return false;
                
                return true;
        }
        return false;
    },
    
    ConvertToTwoDigits : function(number)
    {
        if(number < 10) return "0" + number;
        else return number;
    },
    
    StripSlashes : function(s)
    {
        str = s.replace(/\\'/g,'\'');
        str = str.replace(/\\"/g,'"');
        str = str.replace(/\\\\/g,'\\');
        str = str.replace(/\\0/g,'\0');
        return str;
    },
    
    BR2NL : function(s)
    {
        if( typeof(s) == "string" ) return s.replace(/<br \/>/g,"\n");
        else return s;
    },
    
    AddSpaces : function(nStr)
    {
        nStr += '';
        nStr = this.RemoveSpaces(nStr);
		x = nStr.split('.');
		x1 = x[0];
		x2 = x.length > 1 ? '.' + x[1] : '';
		var rgx = /(\d+)(\d{3})/;
		while (rgx.test(x1)) {
			x1 = x1.replace(rgx, '$1' + ' ' + '$2');
		}
		return x1 + x2;
    },
    
    RemoveSpaces : function(nStr)
    {
        return nStr.gsub(" ", "");
    },
    
	GetCombobox : function(htmlID, dictionary, selectedValue, emptyText)
	{
		var input = new Element("select");
		
		// Empty option
		var option = new Element("option");
		option.value = null;
		option.update(emptyText);
		input.insert(option);
		
		// Options
		for(var i = 0; i < dictionary.length; i++)
		{
			if(dictionary[i] != null)
			{
				var option = new Element("option");
				option.value = dictionary[i].ValueMember;
				option.update(dictionary[i].DisplayMember);
				if(selectedValue == dictionary[i].ValueMember) { option.selected = "selected"; }
				input.insert(option);
			}
		}
		input.id = htmlID;
		return input;
	},
	
    GetTimeStamp : function(date)
    {
        return Math.floor(date.getTime() / 1000);
    },
    
    GetFormattedDate : function(timestamp)
    {
        if(timestamp == 0) return "";
        var tempDate = new Date(timestamp * 1000);
        var formattedDateString = tempDate.getFullYear() + "."
            formattedDateString += this.ConvertToTwoDigits(tempDate.getMonth() + 1) + "."
            formattedDateString += this.ConvertToTwoDigits(tempDate.getDate());
        return formattedDateString;
    },
    
    GetFormattedTime : function(timestamp)
    {
        if(timestamp == 0) return "";
        var tempDate = new Date(timestamp * 1000);
        var formattedString = this.ConvertToTwoDigits(tempDate.getHours()) + ":";
            formattedString += this.ConvertToTwoDigits(tempDate.getMinutes()) + ":";
            formattedString += this.ConvertToTwoDigits(tempDate.getSeconds());
        return formattedString;
    },
    
    GetFormattedDateTime : function(timestamp)
    {
        return this.GetFormattedDate(timestamp) + " - " + this.GetFormattedTime(timestamp);
    },
    
    ReplaceWithRangeInput : function(originalElement)
    {
        var thisClass = this;
        
        var left = originalElement.viewportOffset().left;
        var top = originalElement.viewportOffset().top;
        
        var width = originalElement.getWidth();
        var inputWidth = originalElement.getWidth() / 2 - 50;
        var height = originalElement.getHeight();
        originalElement.hide();
        
        var fromInput = new Element("input");
        fromInput.id = originalElement.id + "From";
        fromInput.setStyle({float: "left", width: inputWidth + "px" });
        
        var toInput = new Element("input");
        toInput.id = originalElement.id + "To";
        toInput.setStyle({float: "left", width: inputWidth + "px" });
        
        var fromLabel = new Element("span"); fromLabel.update("-tól"); fromLabel.setStyle({float: "left", width: "25px", textAlign: "right", marginRight: "30px", marginTop: "4px"});
        var toLabel = new Element("span"); toLabel.update("-ig"); toLabel.setStyle({float: "left", width: "20px", textAlign: "right", marginTop: "4px"});
        
        var resultDIV = new Element("div");
        resultDIV.setStyle({float: "left", padding: "0px", margin: "0px", width: width + "px", height: height + "px" });
        resultDIV.insert(fromInput); resultDIV.insert(fromLabel);
        resultDIV.insert(toInput); resultDIV.insert(toLabel);
        
        Element.insert(originalElement, { before: resultDIV });
    },
    
    ReplaceWithDateRangeInput : function(originalElement)
    {
        var thisClass = this;
        
        var left = originalElement.viewportOffset().left;
        var top = originalElement.viewportOffset().top;
        
        var width = originalElement.getWidth();
        var inputWidth = originalElement.getWidth() / 2 - 50;
        var height = originalElement.getHeight();
        originalElement.hide();
        
        var fromInput = new Element("input");
        fromInput.id = originalElement.id + "From";
        fromInput.setStyle({float: "left", width: inputWidth + "px" });
        fromInput.value = originalElement.value;
            
        var toInput = new Element("input");
        toInput.id = originalElement.id + "To";
        toInput.setStyle({float: "left", width: inputWidth + "px" });
        toInput.value = originalElement.value;
            
        var fromLabel = new Element("span"); fromLabel.update("-tól"); fromLabel.setStyle({float: "left", width: "25px", textAlign: "right", marginRight: "30px", marginTop: "4px"});
        var toLabel = new Element("span"); toLabel.update("-ig"); toLabel.setStyle({float: "left", width: "20px", textAlign: "right", marginTop: "4px"});
    
        var resultDIV = new Element("div");
        resultDIV.setStyle({float: "left", padding: "0px", margin: "0px", width: width + "px", height: height + "px" });
        resultDIV.insert(fromInput); resultDIV.insert(fromLabel);
        resultDIV.insert(toInput); resultDIV.insert(toLabel);
        
        Element.insert(originalElement, { before: resultDIV });
        
        this.ReplaceWithDateTimeInput(fromInput, false);
        this.ReplaceWithDateTimeInput(toInput, false);
    },
	
    ReplaceWithDateTimeInput : function(originalElement, isTimeDisplayed)
    {
        var thisClass = this;
        
        var left = originalElement.viewportOffset().left;
        var top = originalElement.viewportOffset().top;
        
        var width = originalElement.getWidth();
        var inputWidth = null;
        if(isTimeDisplayed) inputWidth = originalElement.getWidth() / 2 - 46 - 20;
        else inputWidth = originalElement.getWidth() - 45 - 10;
        var height = originalElement.getHeight();
        originalElement.hide();
        
        var dateInput = new Element("input");
        dateInput.id = originalElement.id + "date";
        dateInput.readOnly = true;
        dateInput.setStyle({float: "left", width: inputWidth + "px" });
        dateInput.value = this.GetFormattedDate(originalElement.value);
        
        var datePickerImg = new Element("img");
        datePickerImg.id = originalElement.id + "dateImg";
        datePickerImg.src = "Themes/DefaultImages/datePicker.png";
        datePickerImg.setStyle({float: "left", marginTop: "4px", marginLeft: "6px", cursor: "pointer"});
        
        var datePickerDeleteImg = new Element("img");
        datePickerDeleteImg.id = originalElement.id + "dateDeleteImg";
        datePickerDeleteImg.src = "Themes/DefaultImages/pickerDelete.png";
        datePickerDeleteImg.setStyle({float: "left", marginTop: "4px", marginLeft: "6px", cursor: "pointer"});
        
        if(isTimeDisplayed)
        {
            var timeInput = new Element("input");
            timeInput.id = originalElement.id + "time";
            timeInput.readOnly = true;
            timeInput.setStyle({float: "right", width: inputWidth + "px" });
            timeInput.value = this.GetFormattedTime(originalElement.value);
            
            var timePickerImg = new Element("img");
            timePickerImg.id = originalElement.id + "timeImg";
            timePickerImg.src = "Themes/DefaultImages/timePicker.png";
            timePickerImg.setStyle({float: "right", marginTop: "4px", marginLeft: "6px", cursor: "pointer"});
            
            var timePickerDeleteImg = new Element("img");
            timePickerDeleteImg.id = originalElement.id + "timeDeleteImg";
            timePickerDeleteImg.src = "Themes/DefaultImages/pickerDelete.png";
            timePickerDeleteImg.setStyle({float: "right", marginTop: "4px", marginLeft: "6px", cursor: "pointer"});
        }
        
        var resultDIV = new Element("div");
        resultDIV.setStyle({float: "left", padding: "0px", margin: "0px", width: width + "px", height: height + "px" });
        resultDIV.insert(dateInput); resultDIV.insert(datePickerDeleteImg); resultDIV.insert(datePickerImg);
        if(isTimeDisplayed) { resultDIV.insert(timePickerImg); resultDIV.insert(timePickerDeleteImg); resultDIV.insert(timeInput); }
        
        Element.insert(originalElement, { before: resultDIV });
        
        var datePicker = new DatePicker({
            container: "datePicker",
            DayClickAction: function(clickedDate)
            {
                var currentDate = new Date(originalElement.value * 1000);
                currentDate.setYear(clickedDate.getFullYear());
                currentDate.setMonth(clickedDate.getMonth());
                currentDate.setDate(clickedDate.getDate());
                
                var timestamp = currentDate.getTime() / 1000;
                originalElement.value = timestamp;
                dateInput.value = thisClass.GetFormattedDate(timestamp);
            }
        });
        
        // Events
        Event.observe(originalElement.id + "dateImg", "click", function(event)
        {
            if(originalElement.value != 0)
            {
                datePicker.currentDate = new Date(originalElement.value * 1000);
                datePicker.selectedDate = datePicker.currentDate;
            }
            else
            {
                datePicker.currentDate = new Date();
                datePicker.selectedDate = datePicker.currentDate;
            }
            
            datePicker.config.left = Event.pointerX(event) + 5;
            datePicker.config.top = Event.pointerY(event) - 5;
            datePicker.Show();
            $("datePicker").setStyle({display: "block"});
        });
        
        Event.observe(originalElement.id + "dateDeleteImg", "click", function(event)
        {
            originalElement.value = 0;
            dateInput.value = thisClass.GetFormattedDate(0);
        });
        
        if(isTimeDisplayed)
        {
            var timePicker = new TimePicker({
                container: "timePicker",
                HourAndMinuteSelectedAction: function(clickedHour, clickedMinute)
                {
                    var currentDate = new Date(originalElement.value * 1000);
                    currentDate.setHours(clickedHour);
                    currentDate.setMinutes(clickedMinute);
                    
                    var timestamp = currentDate.getTime() / 1000;
                    originalElement.value = timestamp;
                    timeInput.value = thisClass.GetFormattedTime(timestamp);
                }
            });
            
            // Events
            Event.observe(originalElement.id + "timeImg", "click", function(event)
            {
                if(originalElement.value != 0)
                {
                    var currentDate = new Date(originalElement.value * 1000);
                    timePicker.selectedHour = currentDate.getHours();
                    timePicker.selectedMinute = currentDate.getMinutes();
                }
                
                timePicker.config.left = Event.pointerX(event) + 5;
                timePicker.config.top = Event.pointerY(event) - 5;
                timePicker.Show();
                $("timePicker").setStyle({display: "block"});
            });
            
            Event.observe(originalElement.id + "timeDeleteImg", "click", function(event)
            {
                if(originalElement.value > 0)
                {
                    var currentDate = new Date(originalElement.value * 1000);
                    currentDate.setHours(0);
                    currentDate.setMinutes(0);
                    currentDate.setSeconds(0);
                    
                    var timestamp = currentDate.getTime() / 1000;
                    originalElement.value = timestamp;
                    timeInput.value = thisClass.GetFormattedTime(0);
                }
                else
                {
                    timeInput.value = thisClass.GetFormattedTime(0);
                }
            });
        }
    },
    
    GetFileFormatString: function(s)
    {
        var result = s;
        result = result.gsub("á", "a" );
        result = result.gsub( "é", "e" );
        result = result.gsub( "í", "i" );
        result = result.gsub( "ó", "o" );
        result = result.gsub( "ö", "o" );
        result = result.gsub( "ő", "o" );
	result = result.gsub( "ú", "u" );
        result = result.gsub( "ű", "u" );
        result = result.gsub( "ü", "u" );
        result = result.gsub( " ", "_" );
        return result;
    },
	
    ABC: "0123456789aábcdeéfghiíjklmnoóöőpqrstuúüűvwxyz",
    
    Compare: function(a, b)
    {
	    a = a.toLowerCase(); b = b.toLowerCase();
	    var minLength = (a.length <= b.length) ? a.length : b.length;
	    for(var i = 0; i < minLength; i++)
	    {
		    if(this.ABC.indexOf(a[i]) > this.ABC.indexOf(b[i]) ) return -1;
		    if(this.ABC.indexOf(a[i]) < this.ABC.indexOf(b[i]) ) return 1;
	    }
	    if(a.length > b.length) return -1;
	    if(b.length > a.length) return 1;
	    return 0;
    },
    
    GetDisplayMember: function(dictionary, value)
    {
	for(var i = 0; i < dictionary.length; i++)
	{
	    if(dictionary[i] != null && dictionary[i].ValueMember == value)
	    {
		return dictionary[i].DisplayMember;
	    }
	}
	return "";
    },
    
    IsMouseInElement : function(element, mouse)
    {
	var scrollOffsets = document.viewport.getScrollOffsets();
	var top = element.viewportOffset().top + scrollOffsets.top;
	var bottom = top + element.getHeight();
	var left = element.viewportOffset().left + scrollOffsets.left;
	var right = left + element.getWidth();
	
	return mouse.X >= left && mouse.X <= right && mouse.Y >= top && mouse.Y <= bottom ? true : false;
    }
    
}))();
