(function ($) {
  var m = {
    '\b': '\\b',
    '\t': '\\t',
    '\n': '\\n',
    '\f': '\\f',
    '\r': '\\r',
    '"' : '\\"',
    '\\': '\\\\'},
  s = {
  'array': function (x)
  {
    var a = ['['], b, f, i, l = x.length, v;
    for (i = 0; i < l; i += 1)
    {
      v = x[i];
      f = s[typeof v];
      if (f)
      {
        v = f(v);
        if (typeof v == 'string')
        {
            if (b) {
                a[a.length] = ',';
            }
            a[a.length] = v;
            b = true;
        }
      }
    }
    a[a.length] = ']';
    return a.join('');
  },
  'boolean': function (x)
  {
    return String(x);
  },
  'null': function (x)
  {
    return "null";
  },
  'number': function (x)
  {
    return isFinite(x) ? String(x) : 'null';
  },
  'object': function (x)
  {
    if (x)
    {
      if (x instanceof Array)
      {
        return s.array(x);
      }
      var a = ['{'], b, f, i, v;
      for (i in x)
      {
        v = x[i];
        f = s[typeof v];
        if (f)
        {
          v = f(v);
          if (typeof v == 'string')
          {
            if (b) a[a.length] = ',';
            a.push(s.string(i), ':', v);
            b = true;
          }
        }
      }
      a[a.length] = '}';
      return a.join('');
      }
    return 'null';
  },
  'string': function (x)
  {
    if (/["\\\x00-\x1f]/.test(x))
    {
      x = x.replace(/([\x00-\x1f\\"])/g, function(a, b)
      {
        var c = m[b];
        if (c) return c;
        c = b.charCodeAt();
        return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
      });
    }
    return '"' + x + '"';
  }
  };

	$.toJSON = function(v) {
		var f = isNaN(v) ? s[typeof v] : s['number'];
		if (f) return f(v);
	};
	
	$.parseJSON = function(v, safe) {
		if (safe === undefined) safe = $.parseJSON.safe;
		if (safe && !/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(v))
			return undefined;
		return eval('('+v+')');
	};
	
	$.parseJSON.safe = false;
})(jQuery);
//$._url - predefined
(function($)
{
	var url = 'main.php';
  $._dh   = function(data)
  {
    
  };
	$._apc_id  = null;
	$._apc_int = 1000;
	$._apc_fun = null;
  
  $._indicator = null;  
  
	$._json = function()
	{
		if (arguments.length < 2) return false;		
		var ref = null;
		var ind = 1;
    
    if (arguments[0] == null) arguments[0] = $._dh;
    
    if (!$.isFunction(arguments[0]))
		{
			url = arguments[0];
			ref = arguments[1];
			ind = 2;
		}
		else
		{
			url = $._url;
			ref = arguments[0];
		}
			        
    if (($._post_files != undefined) && ($._post_files != null))
    {      
      var fnName = ref.toString().substr('function'.length);
      fnName = fnName.substr(0, fnName.indexOf('('));      
      if (fnName.length < 3)
      {
        $._fun_cache = ref;
        fnName = 'jQuery._fun_cache';
      }
      
      var objForm = $('http_poster');
      
      if (!objForm.length)
      {	  	
        objForm 							= document.createElement('form');
        objForm.name 				  = 'http_poster';
        objForm.style.display = 'none';
        objForm.method 			  = 'post';
        objForm.action 			  = url;
        objForm.enctype				= 'multipart/form-data';
        objForm.encoding      = 'multipart/form-data';        
        objForm.acceptCharset = 'windows-1251';        
        document.body.appendChild(objForm);        
      }
      objForm = $(objForm);
      objForm.html('<input type="hidden" name="cmd" value="' + arguments[ind] + '">\
                    <input type="hidden" name="ret" value="' + fnName + '">');
      objForm.append($._post_files);
      ind++;      
      
      for (var i = ind; i < arguments.length; i++)
      {
        var val = (typeof(arguments[i]) == 'object') ? $.toJSON(arguments[i]) :  arguments[i];
        objForm.append('<input type="hidden" name="' +
          'a' + (i - 1).toString() + '" val="' + val + '"/>');//ahtung!!! кавычки
      }
  
      var frameID = 'frame_' + (new Date()).getTime();
      objForm.append('<input type="hidden" name="axID" value="' + frameID + '"/>');		          
      
      if ($.browser.msie)
      {	  
        var frame = $('<iframe id="' + frameID + '" name="' + frameID + '" />');
        frame.attr('src', 'javascript:false');
      }
      else
      {
        var frame = $('<iframe/>');
        frame.attr({id:frameID, name:frameID});
      }
      
      frame.css({position:'absolute', top:'-1000px', left:'-1000px'});      
      $('body').append(frame);	            
      objForm.attr('target', frameID);
      
			if ($._apc_fun != null)
      {
        $._post_files = null;
        $._tempRef = objForm;
        $._json(function(uid)
        {
          $._apc_id    = uid;
          var oInput 	 = document.createElement('input');
          oInput.type  = 'hidden';
          oInput.name  = 'APC_UPLOAD_PROGRESS';
          oInput.value = $._apc_id;
          $._tempRef.append($(oInput));
          $._tempRef.submit();
          
          setTimeout(function()
          {
            var fun = arguments.callee;
            $._json(function(data)
            {
              if ($._apc_fun(data)) setTimeout(fun, $._apc_int);
            }, 'ProgressGet', $._apc_id);
          }, $._apc_int);
        }, 'UID');         
      } else objForm.submit();    
    }
    else
    {
      var data = 'cmd=' + arguments[ind];
      ind++;
      
      for(var i = ind; i < arguments.length; i++)
      {
        var val = (typeof(arguments[i]) == 'object') ? $.toJSON(arguments[i]) :  arguments[i];
        data += '&a' + (i - ind).toString() + '=' +  encodeURIComponent(val);
      }
      
      data += '&ax=1';
      if ($._indicator != null)
      {
        $._indicator(true);

        var refOld = ref;
        ref = function(data)
        {
          $._indicator(false);
          refOld(data);
        }
      }
      jQuery.ajax({
        type: "POST",
        url: url,
        data: data,
        success: ref,
        error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert(textStatus);
        alert(errorThrown);
        }, dataType: 'json'});
      //$.post(url, data, ref, 'json');		
    }		
	};
  $._frm_del = function(frameID)
	{
		var obj = document.getElementById(frameID);
		if (obj != null) obj.parentNode.removeChild(obj);
    $._post_files = null;
	};
})(jQuery);


