var uploadTimer;
var H_PATH = 'http://us.ua/';

$(document).ready(function(){
	
	$('#filefields').change(function(){
		$('#btn_cancel').after('<b id="uploading">Загружаем: ' + $('#filefields').val() + '</b>');
		$('#fakefile').hide();
		$('#upload').submit();
	});
	
	$('#btn_cancel').click(function(){
		window.clearTimeout(uploadTimer);
		
	//	$('#responseUpload').remove();
		
		$('#fakefile').show();
		$('#open_browser').removeClass('hide');
		$('#filefields').removeClass('hide');
		$('#progress1').addClass('startprogress');
		$('#btn_browser').val('Выберите файл для загрузки');
		$('#uploading').remove();
		$('#percents').text('Загрузка...');
		$('#progress2').css({'background-position': '-10px 0'});
		
		return false;
	});
	
    $('#upload').submit(function(){
		$('#open_browser').addClass('hide');
		$('#filefields').addClass('hide');

		$('#progress1').removeClass('startprogress');
//		return false;
	});

});

(function($) {
	$.fn.uploadProgress = function(options) {
		options = $.extend({
		dataType: "json",
		interval: 2000,
		progressBar: "#progressbar",
		start: function() {},
		uploading: function(upload) {
			$('#percents').text(upload.percents+'%');
			$('#progress2').css({'background-position': Math.round(upload.percents) * 5.68 + 'px 0px'});
		},
		complete: function() {},
		success: function() {
			$('#percents').text('100%');
			$('#progress2').css({'background-position': '568px 0px'});
			
			a_sid = getCookie('a_sid');
			
			jQuery.ajax({
				
				type: 'post',
				cache: false,
				url: H_PATH + 'ajax-request.php',
				data: 'a_sid=' + a_sid,
				dataType: 'json',
				success: function(response) {
				
					success = response.success;
					file_id = response.file_id;
					
					if (success != '' && file_id != '')
					{
						$('#upload').remove();
						
						if ($('#success').text() == '' || $('#success').text() == 'undefine')
						{
							$('#download_link').before('<div id="success" class="center">' + success.replace(/\+/g, ' ') + '</div>').text(H_PATH + file_id + '/');
							$('#file_info').append('<input type="hidden" name="file_id" id="file_id" value="' + file_id + '" />');
							$('#file_info').removeClass('hide');
						}
					}
					else if (success == false || file_id == false)
					{
						error = response.error;
						
						if (error == '')
						{
							error = 'Во время загрузки файла на файлообменный сервер "Укршара" произошел сбой.' + "\n" + 'Пожалуйста, посмотрите свой файл в последних закаченных на сервер - возможно он закачался; либо повторите попытку.';
						}
						
						alert(error);
					}
				}
			
			})
		},
		error: function() {
			$('#percents').text('0%');
			$('#progress2').css({'background-position': '-10px 0px'});
		},
		preloadImages: []
	}, options);
  
	$(function() {

		/* tried to add iframe after submit (to not always load it) but it won't work.
		safari can't get scripts properly while submitting files */

		if($.browser.safari && top.document == document) {
			/* iframe to send ajax requests in safari
			thanks to Michele Finotto for idea */
  
			iframe = document.createElement('iframe');
			iframe.name = "progressFrame";
			$(iframe).css({width: '0', height: '0', position: 'absolute', top: '-3000px'});
			document.body.appendChild(iframe);

			var d = iframe.contentWindow.document;
			d.open();

			/* weird - safari won't load scripts without this lines... */
			d.write('<html><head></head><body></body></html>');
			d.close();
  
			var b = d.body;
			var s = d.createElement('script');

			s.src = options.jqueryPath;

			/* must be sure that jquery is loaded */

			s.onload = function() {
				var s1 = d.createElement('script');
				s1.src = options.uploadProgressPath;
				b.appendChild(s1);
			}
			
			b.appendChild(s);
		}
	});
  
	return this.each(function(){
		
		$(this).bind('submit', function() {

			var uuid = "";
			for (i = 0; i < 32; i++) { uuid += Math.floor(Math.random() * 16).toString(16); }
			
			/* update uuid */
			options.uuid = uuid;
  
			/* start callback */
			options.start();
 
			/* patch the form-action tag to include the progress-id if X-Progress-ID has been already added just replace it */
			if(old_id = /X-Progress-ID=([^&]+)/.exec($(this).attr("action"))) {
				var action = $(this).attr("action").replace(old_id[1], uuid);
				$(this).attr("action", action);
			} else {
				$(this).attr("action", jQuery(this).attr("action") + "?X-Progress-ID=" + uuid);
			}

			var uploadProgress = $.browser.safari ? progressFrame.jQuery.uploadProgress : jQuery.uploadProgress;
			uploadTimer = window.setInterval(function() { uploadProgress(this, options) }, options.interval);
		});
	});
};
 
jQuery.uploadProgress = function(e, options) {

	jQuery.ajax({
		type: 'post',
		cache: false,
		url: options.progressUrl,
		data: 'X-Progress-ID=' + options.uuid + '&task=' + $('#task').val() + '&server=' + $('#server').val() + '&a_sid=' + getCookie('a_sid'),
		dataType: options.dataType,
		success: function(upload) {
			
			if (upload.state == 'uploading') {
				upload.percents = Math.floor((upload.received / upload.size)*1000)/10;
				var bar = $.browser.safari ? $(options.progressBar, parent.document) : $(options.progressBar);
				bar.css({width: upload.percents+'%'});
				options.uploading(upload);
			}
			
			if (upload.state == 'done' || upload.state == 'error') {
				window.clearTimeout(uploadTimer);
				options.complete(upload);
			}

			if (upload.state == 'done') {
				options.success(upload);
			}
  
			if (upload.state == 'error') {
				options.error(upload);
			}
		}
	});
};
 
})(jQuery);

function setCookie(name, value, expires, path, domain, secure) {
	if (!name || !value) return false;
	var str = name + '=' + encodeURIComponent(value);
	
	if (expires) str += '; expires=' + expires.toGMTString();
	if (path)    str += '; path=' + path;
	if (domain)  str += '; domain=' + domain;
	if (secure)  str += '; secure';
	
	document.cookie = str;
	return true;
}

function getCookie(name) {
	var pattern = "(?:; )?" + name + "=([^;]*);?";
	var regexp  = new RegExp(pattern);
	
	if (regexp.test(document.cookie))
	return decodeURIComponent(RegExp["$1"]);
	
	return false;
}

function deleteCookie(name, path, domain) {
	setCookie(name, null, new Date(0), path, domain);
	return true;
}