/*Организации запросов с учётом паузы между ними.
  !До подключения этого js файла ОБЯЗАТЕЛЬНО инициализируйте API
   VK.init({apiId:*ID вышего приложения*})*/

var myVK={				//Объект для организации запросов с учётом паузы между ними
	"settings":0,		//Текущии настройки пользователя
	"free":true,		//Можно ли сейчас сделать запрос?
	"buffer":[],		//Буфер запросов
	"timeOut":334,		//Время в ms между запросами
	"user":{"uid":0},	//Данные пользователя
	"friends":[],		//Данные друзей Пользователя
	"setUid":function(r){if(r.session)myVK.user.uid=Number(r.session.mid)},//Получение id пользователя
	"api":function(method, params,settings,onOk,onError,onFinish){//Ставит запрос в очередь буфера запросов
		/*Если settings отрицательное число или false, то метод VK.Auth.login не будет вызван
		  Если пользователя ещё не авторизирован, то при разрешении через settings будет вызван метод VK.Auth.login*/
		isNaN(settings)?settings=0:'';
		myVK.buffer[myVK.buffer.length]={"method":method,"params":params,"settings":Math.abs(settings),"onOk":onOk,"onError":onError,"onFinish":onFinish};
		var needSettings=0;
		for(var i=0; i<myVK.buffer.length; i++){needSettings=myVK.buffer[i].settings|needSettings};
		needSettings-=needSettings&myVK.settings;
		if((needSettings||!myVK.user.uid)&&settings>=0&&settings!==false){
			myVK.free=false;
			VK.Auth.login(function(r){
				myVK.free=true;
				if(!r.session){myVK.buffer.length--; onError?onError():''; onFinish?onFinish():''};
			},needSettings);
		}else{myVK.free?myVK.run():''}
	},
	"run":function(){//Запускает очередной запрос из буфера запросов
		var attr=myVK.buffer.shift();
		attr?myVK.call(attr.method,attr.params,attr.onOk,attr.onError,attr.onFinish):'';
	},
	"call":function(method,params, onOk,onError,onFinish){//Выполняет и обрабатывает запрос, а также вызывает по таймауту myVK.run
		/*Если params функция то params заменяеться на результат её выполнения*/
		myVK.free=false;
		typeof(params)=="function"?params=params():'';
		VK.Api.call(method,params?params:{},function(r){
			var response;
			setTimeout(function(){myVK.free=true; myVK.run()},myVK.timeOut);
			if(r.response!==undefined){response=r.response; onOk?onOk(response):''}
			else{response=r.error; onError?onError(response):''}
			onFinish?onFinish(response):'';
		});
	}
};
VK.Auth.getLoginStatus(myVK.setUid);//Узнает текущий статус, а также получаем id пользователя
VK.Observer.subscribe('auth.login',myVK.setUid);//ПОДПИСКА НА СОБЫТИЕ: Получение id пользователя при авторизации
VK.Observer.subscribe('auth.sessionChange',function(r){//ПОДПИСКА НА СОБЫТИЕ: Сохранение настроек при их изменение
	myVK.buffer.unshift({"method":'getUserSettings',"settings":0,"onOk":function(settings){myVK.settings=settings}});
	myVK.free?myVK.run():'';
});
