/**
*	Выводит сообщение в блок загрузки файла.
*	@param String message текст сообщения.
*	@param String elem_name имя элемента 
*	@return boolean
*/
function upload_message(message, elem_name)
{
	var message_elem_id = elem_name + '_message';
	var message_elem = document.getElementById( message_elem_id );
	if (message_elem)
	{
		message_elem.innerHTML = message;
		return true;
	}

	return false;
}

/**
*	Создает элемент iframe.
*	@param String elem_name имя элемента.
*/
function create_iframe(elem_name)
{
	var iframe_name = elem_name + '_iframe';
	var container_name = elem_name + '_div';

                
               // progess_bar_interval_id = setInterval(  function() {  update_progress_bar(); }, 3000);

	// Проверяем а нет ли у нас уже такого iframe.
	if ( document.getElementById( iframe_name ) )	{
		return true;
	}
            
	var div_elem = document.createElement('DIV');
	
	div_elem.innerHTML = '<iframe style="display:none" src="about:blank" id="' + iframe_name + '" name="' + iframe_name + '" onload="upload_message(\'Загружено\', \''+elem_name+'\');"></iframe>';

	var elem = document.getElementById( container_name );
	elem.appendChild(div_elem);

       // upload_progress.start(elem_name);
}

/**
*	Создает виджет элемента загрузки.
*	@param String container_id контейнер, в котором запускается менеджер загрузки.
*	@return boolean
*/
function create_upload_widget(container_id)
{
	var elem = document.getElementById( container_id );
	if (!elem) {
		return false;
	}

	var elem_name = elem.getAttribute('name');
	if (!elem_name) 	{
		return false;
	}

	var elem_value = elem.getAttribute('value');

        var upload_script = PROJECT_URL + 'upload.php';
        //var upload_script = HYDRA_ROOT_URL + 'cgi-bin/upload.pl';

	// Создаем форму.
	var form_elem = document.createElement('form');
	form_elem.setAttribute('action', upload_script);
	form_elem.setAttribute('encType', 'multipart/form-data');
	form_elem.setAttribute('method', 'post');
	form_elem.setAttribute('target', elem_name + '_iframe');
	form_elem.setAttribute('onsubmit', 'return create_iframe("' + elem_name + '");');
	elem.appendChild(form_elem);
	
	// Создаем файл
	var file_elem = document.createElement('input');
	file_elem.setAttribute('type', 'file');
	file_elem.setAttribute('name', elem_name + '_file');
	form_elem.appendChild(file_elem);

	// Создаем span
	var span_elem = document.createElement('span');
	span_elem.setAttribute('id', elem_name + '_message');
	form_elem.appendChild(span_elem);

	// Создаем input
	var input_elem = document.createElement('input');
	input_elem.setAttribute('type', 'text');
	input_elem.setAttribute('name', elem_name);
	input_elem.setAttribute('id', elem_name);
	input_elem.setAttribute('value', elem_value);
	form_elem.appendChild(input_elem);


        // Создаем input
	var input_elem = document.createElement('input');
	input_elem.setAttribute('type', 'hidden');
	input_elem.setAttribute('name', 'MAX_FILE_SIZE');
	input_elem.setAttribute('value', 10000000);
	form_elem.appendChild(input_elem);



        
	// Создаем target_dir при условии что она задана.
	var target_dir = elem.getAttribute('target_dir');
	if (target_dir)
	{
		var input_elem = document.createElement('input');
		input_elem.setAttribute('type', 'hidden');
		input_elem.setAttribute('name', 'target_dir');
		input_elem.setAttribute('id', elem_name + '_target_dir');
		input_elem.setAttribute('value', target_dir);
		form_elem.appendChild(input_elem);
	}




	// Создаем кнопку загрузки
	var buton_elem = document.createElement('input');
	buton_elem.setAttribute('type', 'submit');
	buton_elem.setAttribute('value', 'Загрузить');
	form_elem.appendChild(buton_elem);

        // Создаем прогрессбар
        var buton_elem = document.createElement('span');
	buton_elem.setAttribute('id', 'progress-bar');
	form_elem.appendChild(buton_elem);

        var input_elem = document.createElement('input');
        input_elem.setAttribute('type', 'hidden');

        input_elem.setAttribute('name2', elem_name);
        input_elem.setAttribute('id', elem_name + '_file_pb_id');

        input_elem.onserg3 = function() {upload_progress.stop(elem_name); };
        form_elem.appendChild(input_elem);

	return true;
}


function update_progress_bar()
{
    if (!in_call)
        call_ajax('progress_bar', 'progress-bar');
    in_call = true;
}

/**
 * Класс для прогрессбара
 */
var FileUploadProgress = function()
{
	this.files = new Array();
        this.called = new Array();
}

/**
 * Начинает обновление прогрессбара для заданного файла
 * @param string file_name имя файла
 */
FileUploadProgress.prototype.start = function(file_name)
{
    this.files[file_name] = setInterval(  function() {  upload_progress.update(file_name); }, 1000);

    hydra.get(file_name+'_file_pb_id').value = this.get_id(file_name);
    this.set_called(file_name, false);
}

FileUploadProgress.prototype.set_called = function(file_name, status)
{
    this.called[file_name] = status;
}

FileUploadProgress.prototype.get_called = function(file_name)
{
    return this.called[file_name];
}

FileUploadProgress.prototype.get_id = function(file_name)
{
    return this.files[file_name];
}

FileUploadProgress.prototype.stop = function(file_name)
{
    clearInterval( this.get_id(file_name) );
}

FileUploadProgress.prototype.update = function(file_name)
{
    // вызов делаем только если скрипт не выполняется в данный момент
    if (!this.get_called(file_name)) {
        var params = new Array();
        params['s_elem_name'] = file_name;
        call_ajax('progress_bar', 'progress-bar', params);
        this.set_called(file_name, true);
    }
}



var upload_progress =  new FileUploadProgress();
