function setCookie(name, value, params) {
    params = params || {};

    // remove cookie
    if (value === null) {
        value = '';
        params.expires = -1;
    }

    var expires = '';
    if (params.expires && (typeof params.expires == 'number' || params.expires.toUTCString)) {
        var date;
        if (typeof params.expires == 'number') {
            date = new Date();
            date.setTime(date.getTime() + (params.expires * 24 * 60 * 60 * 1000));
        } else {
            date = options.expires;
        }
        expires = '; expires=' + date.toUTCString();
    }
    var path = params.path ? '; path=' + (params.path) : '';
    var domain = params.domain ? '; domain=' + (params.domain) : '';
    var secure = params.secure ? '; secure' : '';
    document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
};
function removeCookie(name) {
    this.setCookie(name, null);
};

function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie != '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}

function _get_form_vars( $form, vars ) {

    var varsinput = {};
    $form.find("INPUT[type!='checkbox'][type!='radio'],INPUT[type='checkbox']:checked,INPUT[type='radio']:checked,SELECT,TEXTAREA").each( function () {
        varsinput[ $(this).attr('name') ] = $(this).val();
    });

    vars = $.extend({}, varsinput, vars);

    return vars;
}


function postRequest( params ) {
    if ( !params["vars"] ) params["vars"] = {};

    var url;
    if ( !params.url ) {
        if ( !params["part"] ) {
            alert('You must pass Part param to postRequest');
            return;
        }
        url = '/ajax/'+params["part"]+'/'+( params["act"] ? '?act='+params["act"] : '');
    } else {
        url = params.url;
    }

    var vars = params.vars;
    if ( params["form"] )
      vars = _get_form_vars( params["form"], params.vars );

    $.ajax({
        async: false,
        type: 'post',
        port: "1",
        dataType: 'html',
        url: url,
        data: vars,
        success: function(data) {
          processResult(data, params);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert('Ошибка при выполнении запроса! '+textStatus+errorThrown );
        }
    });
}

function getRequest( params ) {
    var url;
    if ( !params.url ) {
        if ( !params["part"] ) {
            alert('You must pass Part param to postRequest');
            return;
        }
        url = '/ajax/'+params["part"]+'/?'+( params["act"] ? 'act='+params["act"] : '');
        for (var i in params.vars ) {
            url += '&'+i+'='+params.vars[i];
        }
    } else {
        url = params.url;
    }

    $.ajax({
        mode: "sync",
        type: 'get',
        port: "1",
        dataType: 'html',
        url: url,
        'cache': false,
        success: function(data) {
          processResult(data, params);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert('Ошибка при выполнении запроса! '+textStatus+' '+errorThrown);
        }
    });
}

function processResult( data, params ) {
    var d;
    if ((typeof(params["type"]) != 'undefined') && (params["type"] == 'html')) {
      d = data;

      if ( $.isFunction(params.onSuccess) )
          params.onSuccess(d);

    } else {
      try {
        eval("d = "+data);
      } 
      catch (error) {
        if ( $.isFunction(params.onFatalError) )
          return params.onFatalError(data)
        else
          return alert('Ошибка данных! Пожалуйста, свяжитесь с нами sp@svadebnyy.ru [' +
        data +
        ']');

      }

      if ( typeof(d["system_error"]) != 'undefined' ) {
        if ( $.isFunction(params.onFatalError) )
          return params.onFatalError();

        $.modal.close();
        showModalDialog({
          'title': 'При выполнении операции возникла ошибка!',
          'message': 'Oops.. При выполнении операции возникла ошибка <b>['+d["system_error"]["error"]+
                        ']</b>.<br> Работы по её устранению уже ведутся, <br> \
                        Мы будем очень признательны, если Вы сообщите нам этот номер\
                        <a herf="mailto:support@svadebnyy.ru">support@svadebnyy.ru</a>',
          'ok': '',
          'cancel': {title: 'Закрыть'}
        });
        return;
      }

      var cont = true;
      if (d["error"]) {
        if (typeof(params.onError) == 'function') {
          params.onError(d["error"], d);
        } else {
          for (var i in d["error"]) {
            params["form"].find("#" + i).html(d["error"][i]);
          }
        }
      } else if (typeof(params.onSuccess) == 'function') {
          cont = params.onSuccess(d);
      }

      if ( cont ) {
        if (d["cookie"]) {
          setCookie(d["cookie"]["name"], d["cookie"]["value"], {
            expires: 10,
            domain: 'svadebnyy.ru',
            path: '/'
          });
        }
        if (d["redirect"]) {
          top.location.assign(d["redirect"]);
        }
      }

    }
  }


