function hs_update_size() {
    var exp = hs.getExpander();
    exp.x.span = exp.innerContent.offsetWidth;
    exp.y.span = exp.innerContent.offsetHeight;
    var size = { width: exp.x.span + 'px', height: exp.y.span + 'px' };
    hs.setStyles(exp.content, size);
    if (exp.objOutline) {
        exp.objOutline.setPosition(exp, exp.x.min, exp.y.min, exp.x.span, exp.y.span);
    }
}

function hs_display_errors(errors, id) {
    var html = '<ul>';
    for(var i = 0; i < errors.length; i++) {
        html += '<li>' + errors[i] + '<\/li>';
    }
    html += '<\/ul>';
    var el = $(id);
    el.innerHTML = html;
    if(el.style.display == 'none') {
        el.style.display = 'block';
    }
    hs_update_size();
}

function hs_post_form(form, url, error) {
    var errors = new Array();
    var result = null;
    var redirect = null;
    new Ajax.Request(
        url,
        {
            asynchronous: false,
            method: 'post',
            postBody: Form.serialize(form),
            onComplete : function ( req ) {
                try {
                    // "errors" : ["error1", "error2", ... ]
                    result = eval("(" + req.responseText + ")");
                    if(result && result.errors) {
                        if(result.errors.length > 0) {
                            for(var i = 0; i < result.errors.length; i++) {
                                var error = result.errors[i];
                                if(error == 'NOT_LOGINED') {
                                    redirect = 1;
                                }
                                else if(error == 'SYSERR') {
                                    redirect = 1;
                                }
                                else {
                                    errors[errors.length] = error;
                                }
                            }
                        }
                    }
                    else {
                        errors[0] = error;
                    }
                }
                catch(e) {
                    errors[0] = error;
                }
            },
            onFalure : function () {
                errors[0] = error;
            }
        }
    );
    
    return result;
}

function hs_get(url, error) {
    var errors = new Array();
    var result = null;
    new Ajax.Request(
        url,
        {
            asynchronous: false,
            method: 'get',
            onComplete : function ( req ) {
                try {
                    // "errors" : ["error1", "error2", ... ]
                    result = eval("(" + req.responseText + ")");
                    if(result && result.errors) {
                        if(result.errors.length > 0) {
                            for(var i = 0; i < result.errors.length; i++) {
                                errors[errors.length] = result.errors[i];
                            }
                        }
                    }
                    else {
                        errors[0] = error;
                    }
                }
                catch(e) {
                    errors[0] = error;
                }
            },
            onFalure : function () {
                errors[0] = error;
            }
        }
    );
    
    return result;
}

function get_token() {
    var token = '';
    try {
        var url = '/services/createtoken?x=' + Math.random();
        var result = hs_get(url, null);
        if(result && result.token) {
            token = result.token;
        }
    }
    catch(e) {
    }
    return token;
}

function go_with_token(a) {
    location.href = a.href + '?_token=' + get_token();
    return false;
}

function get_popup_token() {
    var token = '';
    try {
        var url = '/services/createpopuptoken?x=' +  Math.random();
        var result = hs_get(url, null);
        if(result && result.token) {
            token = result.token;
        }
    }
    catch(e) {
    }
    return token;
}

function go_with_popup_token(a) {
    location.href = a.href + '?_popup=' + get_popup_token();
    return false;
}
