function postFormAJAX(form, target, extra, url) {
	var params = $(form).serialize();
	if (isDefined(extra) && !isEmpty(extra)){
		params = params + '&' + extra;
	}
	if (isDefined(url)) {
		url = getAJAXUrl(url);
	}
	else {
		url = getAJAXUrl($(form).attr('action'));
	}

	target.load(url, params);
}

function postFormJSON(form, callback){
	postFormJSON(form, null, callback);
}

function postFormJSON(form, extra, callback){
	var params = $(form).serialize();
	if (isDefined(extra)){
		params = params + '&' + extra;
	}
	$.post(getJSONUrl($(form).attr('action')), params, callback, 'json');
}

function getLinkJSON(anchor, callback){
    $.post(getJSONUrl($(anchor).attr('href')), null, callback, 'json');
}

function processResultJSON(data){
    if (isDefined(data._ERROR_MESSAGE_)){
        alert(data._ERROR_MESSAGE_);
        return false;
    }
    if (isDefined(data._EVENT_MESSAGE_)){
        alert(data._EVENT_MESSAGE_);
    }
    return true;
}

function getJSONUrl(url){
    var jurl = $.url.setUrl(url);
    var nurl = jurl.attr('path').split('.')[0] + '.json';
    if (!isEmpty(jurl.attr('query'))){
        nurl = nurl + '?' + jurl.attr('query');
    }
    return nurl;
}

function getAJAXUrl(url){
    var jurl = $.url.setUrl(url);
    var nurl = jurl.attr('path').split('.')[0] + '.ajax';
    if (!isEmpty(jurl.attr('query'))){
        nurl = nurl + '?' + jurl.attr('query');
    }
    return nurl;
}

function isDefined(object){
    return (typeof object != 'undefined');
}

function isEmpty(object){
    return !isDefined(object) || (object == '') || (object + '' == 'null');
}

function getServerTime(serverTime, browserTime) {
	var nowDate = new Date();
	var elapsed = nowDate.getTime() - browserTime;
	nowDate.setTime(serverTime + elapsed);
	return nowDate;
}

function formatTime(nowDate) {
	var hh = nowDate.getHours();
	var mm = nowDate.getMinutes();
	var ss = nowDate.getSeconds();
	var time = '';
	var ampm = 'AM';
	if (hh > 11) {
		if (hh > 12) {
			hh = hh - 12;
		}
		ampm = 'PM';
	}
	if (hh < 10) hh = '0' + hh;
	if (mm < 10) mm = '0' + mm;
	if (ss < 10) ss = '0' + ss;
	return hh + ':' + mm + ':' + ss + ' ' + ampm;
}
