﻿/*
BiriVitamin SEBIT Application API Wrapper v1.0
Author: Pure Interactive
*/

/* HELPER CAPTCHA CLASS */
function Captcha(captchaId,readyCallback)
{
	//http://servis-birivitamin.sebittest.com
	this.curl = "http://ilkogretim.birivitamin.com/captcha.jpg?captchaId=" + captchaId;
	this.img = new Image();
	this.img.src = this.curl;
	this.img.base = this;
	this.img.onload = this._captchaLoadedEvent;
	this._callback = readyCallback;
	
	this.captchaId = captchaId;
};

Captcha.prototype._captchaLoadedEvent = function()
{
	//alert(this.base.img.src);
	this.base._callback();
};
//END OF CAPTCHA CLASS

//HELPER MESSAGE RESOLVER CLASS
function VMessage(message)
{
	this._debug = false;
	this._message = message;
};

VMessage.prototype.resolve = function()
{
	if(this._debug == true)
	{
		alert("- DEBUG MODE\nError Code: "+this._message);
	}
	
	switch(this._message)
	{
		case 101:
			return {message: "BiRi ADSL Üyeliği Bulunamadı.", description: "Lütfen üyelik bilgilerinizi kontrol edin."};
		break;
		
		case 102:
			return {message: "BiRi Vitamin Üyeliği Bulunamadı.", description: "BiRi Vitamin satın almanız gerekmektedir."};
		break;
		
		case 201:
			return {message: "Bu Kullanıcı Sistemde Bulunuyor.", description: "Bu kullanıcı sizin tarafınızdan ya da başka bir BiRi ADSL kullanıcısı tarafından kayıt edilmiştir. T.C Kimlik numaranız ve şifreniz ile giriş yapabilirsiniz."};
		break;
		
		case 202:
			return {message: "Bu Kullanıcı Bir Başka Vitamin Servisinde Bulunuyor.", description: "Diğer Vitamin servislerindeki kullanıcı adı ve şifre ile BiRi Vitamin'e giriş yapabilirsiniz."};
		break;
		
		case 203:
			return {message: "Bu Kullanıcı M.E.B'den Kayıt Olmuş.", description: "BiRi Vitamin kaydınız açıldı. Okulda kullandığınız kullanıcı adı ve şifre ile BiRi Vitamin'i dilediğiniz her yerden kullanabilirsiniz. BiRi Vitamin'i kullanmaya başlamak için lütfen giriş yapın."};
		break;
		
		case 204:
			return {message: "T.C. Kimlik Numaranız ve Doğum Tarihiniz eşleşmiyor.", description: "Lütfen girdiğiniz bilgileri kontrol edin."};
		break;
		
		case 206:
		case 207:
			return {message: "Kaydınız Alınmıştır.", description: "BiRi Vitamin kaydınız açıldı. T.C. Kimlik Numaranız ve Şifreniz ile giriş yapabilirsiniz."};
		break;
		
		/*case 208:
			return {message: "", description: ""};
		break;*/
		
		case 209:
			return {message: "Silme İşlemi Başarılı.", description: "Kullanıcı başarıyla silindi."};
		break;
		
		case 210:
			return {message: "Silme İşlemi Başarısız.", description: "Kullanıcınızı şu an silemiyoruz. Lütfen daha sonra tekrar deneyin."};
		break;
		
		case 211:
			return {message: "Giriş Başarısız.", description: "Kullanıcı kaydı bulunamadı, lütfen kullanıcı bilgilerinizi kontrol ediniz."};
		break;
		
		case 212:
			return {message: "Şifreniz Değiştirildi.", description: "Yeni şifreniz ile giriş yapabilirsiniz."};
		break;
		
		case 213:
			return {message: "Geçersiz İşlem.", description: "Bu ay kullanıcı silme hakkınız kalmamıştır. Lütfen daha sonra tekrar deneyin."};
		break;
		
		/*case 214:
			return {message: "", description: ""};
		break;*/
		
		case 301:
			return {message: "Kullanıcı Adı ve Şifre Eşleşmiyor.", description: "Kullanıcı adınız ve şifreniz birbiriyle eşleşmemektedir. Lütfen tekrar deneyin. Kayıtlı değilseniz kaydolun."};
		break;
		
		case 302:
			return {message: "Kullanıcı Beklemede.", description: "BiRi Vitamin paketinizi değiştirdiğiniz için kullanıcı yönetim ekranından, kullanıcı tanımlamalarınızı düzenlemeniz gerekmektedir."};
		break;
		
		case 303:
			return {message: "Kullanıcı Aktif Değil.", description: "BiRi Vitamin’i kullanabilmek için kaydolmanız gerekmektedir."};
		break;
		
		case 401:
		case 402:
		case 404:
		case 999:
			return {message: "Sistem Hatası.", description: "Sistemde bir hata meydana geldi, işleminize devam edemiyoruz. Lütfen daha sonra tekrar deneyin."};
		break;
		
		case 403:
			return {message: "Bağlantı Hatası.", description: "M.E.B'in E-okul servisine bağlantı gerçekleştirilemiyor. Lütfen daha sonra tekrar deneyin."};
		break;
		
		case 405:
			return {message: "Form Hatası.", description: "Lütfen zorunlu alanları boş bırakmayın."};
		break;
		
		case 406:
			return {message: "Güvenlik Hatası.", description: "Girdiğiniz rakamlar, resimdeki ile aynı olmalıdır."};
		break;
		
		case 410:
			return {message: "Güvenlik Hatası.", description: "Oturumunuz kapandığı için işleminize devam edemiyoruz. Lütfen kullanıcı yönetimine yeniden giriş yapınız."};
		break;
	}
};
//END OF MESSAGE RESOLVER CLASS

//API CORE FUNCTIONS
function apiReady()
{
	if(getMovie != undefined)
	{
		var m = getMovie("flashcontent");
		if(m != undefined)
		{
			if(m.sendData != undefined)
			{
				return true;
			}
		}
	}
	
	return false;
};

//reserved function
function generateGUIDOctet()
{
	return (((1+Math.random()) * 0x10000)|0).toString(16).substring(1);
};

//reserved function
function generateGUID(bits)
{
	var guid = "";
	for(var i=0;i<(bits/4);i++)
	{
		guid += generateGUIDOctet();
	}
	
	return guid;
};

//generates a valid captcha id
function generateCaptchaId()
{
	return ((new Date()).getTime() + Math.floor(Math.random()*101));
};

//generates a new Captcha object with newly created id, and returns it.
function getCaptcha(callBack)
{
	var captcha = new Captcha(generateCaptchaId(),callBack);
	return captcha;
};

function stringWrap(arr)
{
	var wrapped = new Array();
	for(i=0;i<arr.length;i++)
	{
		wrapped.push("'"+arr[i]+"'");
	}
	
	return wrapped;
};

function p_ExecuteVitaminQuery(functionName,params,callBack)
{
	var wrappedList = stringWrap(params);
	var plist = wrappedList.join(",");
	
	//$("#divDebugOutput").text(functionName+"("+plist+",'"+callBack+"')");
	//alert(functionName+"("+plist+",'"+callBack+"')");
	eval(functionName+"("+plist+",'"+callBack+"')");
};

function parseStringResponse(resp,delimiter)
{
	if(resp != "")
	{
		var parsedList = resp.split(delimiter);
		return parsedList;
	}
	
	return null;
};

function parseDataResponse(resp,delimiter)
{
	if(resp != "")
	{
		var parsed = resp.split(delimiter);
		return parsed;
	}
	
	return null;
};

function getIdSection(parsedResponse,sectionDelimiter)
{
	if(parsedResponse != "")
	{
		var returnArray = parsedResponse.split(sectionDelimiter);
		return returnArray;
	}
	
	return null;
};

function getDataSection(parsedResponse,sectionDelimiter)
{
	if(parsedResponse != "")
	{
		var returnArray = parsedResponse.split(sectionDelimiter);
		return returnArray;
	}
	
	return null;
};
//END OF API CORE FUNCTIONS


//PUBLIC METHODS

/*
@Function (async)
@Param callBack - callback function name as string value
@Returns - void
*/
function dologin(customerNumber,adslUsername,adslPassword,captchaId,captchaResponse,callBack)
{
	var params = new Array("login",customerNumber,adslUsername,adslPassword,captchaId,captchaResponse);
	p_ExecuteVitaminQuery("adslLoginFlash",params,callBack);
};

function applogin(identityNumber,password,callBack)
{
	var params = new Array("login",identityNumber,password);
	p_ExecuteVitaminQuery("loginFlash",params,callBack);
};

function insertUser(userId,schoolNumber,school,classroom,userName,birthDate,cityId,townId,address,eMail,phoneNumber,mobilePhone,profession,password,secretQuestion,secretAnswer,addOnId,callBack)
{
	var params = new Array("register",userId,schoolNumber,school,classroom,userName,birthDate,cityId,townId,address,eMail,phoneNumber,mobilePhone,profession,password,secretQuestion,secretAnswer,addOnId);
	p_ExecuteVitaminQuery("alternativeRegisterFlash",params,callBack);
};

function deleteUser(userId,callBack)
{
	var params = new Array("deleteuser",userId);
	p_ExecuteVitaminQuery("deleteUserFlash",params,callBack);
};

function doforgotPassword(username, captchaId, captchaResponse, callBack)
{
	var params = new Array("checkusername", username, captchaId, captchaResponse);
	p_ExecuteVitaminQuery("checkUsernameFPFlash",params,callBack);
};


/*
@Function (async)
@Param callBack - callback function name as string value
@Returns - void
*/
function getUserInfo(callBack)
{
	var params = new Array("getusers");
	p_ExecuteVitaminQuery("adslGetUsersFlash",params,callBack)
};

function checkUserName(userName,birthDate,addonId,callBack)
{
	var params = new Array("check",userName,birthDate,addonId);
	p_ExecuteVitaminQuery("alternativeCheckUsernameFlash",params,callBack);
};

/*
@Function (async)
@Param schoolId - operation code or school id
@Param callBack - callback function name as string value
@Returns - void
*/
function p_ComboQuery(schoolId,callBack)
{
	var params = new Array("selectschool",schoolId);
	p_ExecuteVitaminQuery("selectSchoolFlash",params,callBack);
};

/*
@Function (async)
@Param callBack - callback function name as string value
@Returns - void
@Description - this function attempts to load city list from server.
*/
function loadCities(callBack)
{
	p_ComboQuery("TR-SCHOOLS",callBack);
};

/*
@Function (async)
@Param cityId - a string value that will be passed to the server-side api as city id value.
@Param callBack - callback function name as string value
@Returns - void
@Description - this function attempts to load state list depends on the given city from server.
*/
function loadStates(cityId,callBack)
{
	if(cityId != "")
	{
		p_ComboQuery(cityId,callBack);
	}
};

/*
@Function (async)
@Param stateId - a string value that will be passed to the server-side api as state id value
@Param callBack - callback function name as string value
@Returns - void
@Description - this function attempts to load school list depends on the given state from server.
*/
function loadSchools(stateId,callBack)
{
	//wait here
	if(stateId != "")
	{
		p_ComboQuery(stateId,callBack);
	}
};

function loadSecretQuestions(callBack)
{
	var params = new Array("getsecretquestions");
	p_ExecuteVitaminQuery("getSecretQuestionsFlash",params,callBack);
};

function loadSecreQuestionsFPF(callBack)
{
  var params = new Array("getsecretquestions");
	p_ExecuteVitaminQuery("getSecretQuestionsFlashFP",params,callBack);
};

function checkSecretQuestion(userId,birthDate,secretQuestion,strAnswer,callBack)
{
  var params = new Array("checksecretquestion",userId,birthDate,secretQuestion,strAnswer);
  p_ExecuteVitaminQuery("checkSecretQuestionFlash",params,callBack);
};

function changePassword(userId,token,newPassword,callBack)
{
  var params = new Array("changepassword",userId,newPassword,token);
  p_ExecuteVitaminQuery("changePasswordFlash",params,callBack);
};