function pperror(message,callback) {
	jAlert(message,$('#popup_error_title').html(),function() {
		unlock_ui();
        if (isFunction(callback))
            callback();
	});
}
function ppinfo(message,callback) {
	jAlert(message,$('#popup_info_title').html(),function() {
		unlock_ui();
		if (isFunction(callback)) callback();
	});
}
function ppinput(message,callback,title) {
	if (title == null || title == undefined) {
		title = $('#popup_input_title').html();
	}
	jPrompt(message,undefined,title,function(value) {
		unlock_ui();
		if (isFunction(callback)) callback(value);
	});
}
function ppconfirm(question,tcallback,fcallback,ok_button,cancel_button) {
	jConfirm(question,$('#popup_info_title').html(),function(r) {
		if (r) {
			if (isFunction(tcallback)) tcallback();
			//unlock_ui();
		} else {
			if (isFunction(fcallback)) fcallback();
			//unlock_ui();
		}
	},ok_button,cancel_button);
}
function pperror_div(error_div_id,callback) {
	pperror($('#'+error_div_id).html(),callback);
}
function ppconfirm_div(div_id,tcallback,fcallback) {
	ppconfirm($('#'+div_id).html(),tcallback,fcallback);
}
function pperror_json_if_error(error_json) {
    if (error_json && 'errorcode' in error_json && error_json['errorcode'] != null && error_json['errorcode'] != 0) {
        pperror_json(error_json);
        return false;
    }
    return true;
}
function pperror_json(error_json,callback) {
	if (error_json && 'errormessage' in error_json && error_json['errormessage'] != null && error_json['errormessage'] != undefined) {
		if ('errorcode' in error_json && error_json['errorcode'] != null && error_json['errormessage'] != undefined)
			pperror(errmsg(error_json['errormessage'],error_json['errorcode']),callback);
		else
			pperror_request(error_json['errormessage'],'-257');
	} else {
		pperror_request();
	}
}
function pperror_internal() {
	pperror(errmsg($('#internal_server_error').html(),$('#internal_server_error_code').html()));
}
function pperror_request() {
	pperror(errmsg($('#error-257').html(),'-257'));
}
function pperror_invalid_token() {
	pperror(errmsg($('#error-122').html(),'-122'));
}
function errmsg(error_message,error_code) {
	return error_message+"<br/><br/><small>("+error_code+")</small>";
}
function ajaxErrorHandler(e, XHR, options) {
	if (XHR.status == 500) {
		pperror_internal();
	} else {
		pperror_request();
	}
}

$(document).ajaxError(ajaxErrorHandler);




// blockUI functions -->
$.blockUI.defaults.overlayCSS = {};
$.alerts.draggable = false;

var pwcnt = 0;
var pwdsize = 5;
var pwactive = false;

function pwtext_str_initial() {
	return $('#pwtext_str_initial').html();
}

function update_pwtext() {
	var pwtext_str = is_uploading ? get_uploading_progress() : pwtext_str_initial();
	var dotcount = (pwcnt++)%pwdsize;
	var pwtext = $('#pwtext');
	for (var i=0;i<dotcount;i++) {
		pwtext_str += '.';
	}
	pwtext_str += '<font color="#000">';
	for (var i=dotcount;i<pwdsize;i++) {
		pwtext_str += '.';
	}
	pwtext_str += '</font>';
	if (pwtext.exists()) {
		pwtext.html(pwtext_str);
	}
	if (pwactive)
		setTimeout('update_pwtext()',500);
}

var is_uploading = false;
var uploading_id = '';
var uploading_progress = '0';
function get_uploading_progress() {
	if (uploading_progress == '0') {
		return pwtext_str_initial();
	} else {
		return "uploading: "+uploading_progress+"%";
	}
}
function update_uploading_progress() {
	if (is_uploading) {
		post_ajax('upload_progress.php',{ 'uid' : uploading_id },function(res) {
			setTimeout('update_uploading_progress()',1000);
			uploading_progress = res['percent'];
		},true);
	} else {
		uploading_progress = '0';
	}
}
function start_upload(_uploading_id) {
	uploading_id = _uploading_id;
	is_uploading = true;
	update_uploading_progress();
}

var lock_ui_timer = null;
var lock_forever = false;
function lock_ui() {
	if (lock_ui_timer == null)
		lock_ui_timer = setTimeout('do_lock_ui()',250);
}
function do_lock_ui(lock_callback) {
	$('#pwtext').text(pwtext_str_initial());
	lock_div = $('#pwtext');
	$.blockUI({
		message: lock_div,
		fadeIn: 0,
		fadeOut: 0,
		baseZ: 1200,
		css: { 
			border: 'none', 
			padding: '15px', 
			backgroundColor: '#000', 
			'-webkit-border-radius': '10px', 
			'-moz-border-radius': '10px', 
			opacity: .5, 
			'font-size': 15,
			color: '#fff'
		},
		showOverlay : true,
		onBlock: function() {
			pwactive = true;
			update_pwtext();
			if (isFunction(lock_callback))
				lock_callback();
		}
	});
}
function do_lock_ui_forever(lock_callback) {
	lock_forever = true;
	do_lock_ui(lock_callback);
}

function unlock_ui(unblock_callback) {
	if (lock_forever)
		return;
	if (lock_ui_timer != null) {
		clearTimeout(lock_ui_timer);
		lock_ui_timer = null;
	}
	do_unlock_ui(unblock_callback);
}
function do_unlock_ui(unblock_callback) {
	is_uploading = false;
	if (!$.support.opacity && !window.XMLHttpRequest) { // that means, it's IE6
		$('.blockUI').each(function() {
			$(this).css('zIndex',"100");
		});
	}
	$.unblockUI({ 
		onUnblock: function() {
			pwactive = false;
			if (isFunction(unblock_callback))
				unblock_callback();
		}
	});
}

