--[[
Bramka SMS Orange Multi Box
wersja 1.0/Konnekt

Ostatnie zmiany: 20.09.2005

(c) 2005 mls <mls@o2.pl>
--]]

version = 'OMB_1.0/20050920';

-- funkcja laczy sie z serwerem orange
function omb_connect()
	hSession = InternetOpen("Mozilla/5.0 (MLS/Konnekt SMS API)"); 
	hConnect = InternetConnect(hSession, "www.orange.pl", 80, "", "");
	if hSession == 0 or hConnect == 0 then setError("Problem z nawiązaniem połączenia!"); end;
end;

-- funkcja GET
function omb_get(url)
	hRequest = HttpOpenRequest(hConnect, "GET", url);
	if not HttpSendRequest(hRequest) then setError("Problem z połączeniem!"); return 0; end;
	source = InternetReadFile(hRequest);
	InternetCloseHandle(hRequest);
	return source;
end;

-- funkcja POST
function omb_post(url, data)
	hRequest = HttpOpenRequest(hConnect, "POST", url);
	if not HttpSendRequest(hRequest, "Content-Type: application/x-www-form-urlencoded", data) then setError("Problem z połączeniem!"); return 0; end;
	source = InternetReadFile(hRequest);
	InternetCloseHandle(hRequest);
	return source;
end;

-- odlaczenie od serwera
function omb_disconnect()
	InternetCloseHandle(hConnect);
	InternetSetOption(hSession, 42, "");
	InternetCloseHandle(hSession);
end;

-- wlasciwa funkcja skryptu - wyslanie wiadomosci SMS
function sendSMS(SMS)
	setInfo("mls sms script version: "..version);
	omb_connect();
	omb_get("/");
	if SMS.from ~= "" then
		SMS.msg = SMS.msg.."/"..SMS.from;
	end;
	url_login = '_dyncharset=UTF-8'..
		'&/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.loginErrorURL=/portal/map/map/signin'..
		'&_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.loginErrorURL= '..
		'&/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.loginSuccessURL=http://www.orange.pl/portal/map/map/pim'..
		'&_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.loginSuccessURL= '..
		'&/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.value.login='..urlEncode(SMS.ombUser)..
		'&_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.value.login= '..
		'&/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.value.password='..urlEncode(SMS.ombPass)..
		'&_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.value.password= '..
		'&/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.login.x=0'..
		'&/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.login.y=0'..
		'&_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.login= '..
		'&_DARGS=/gear/static/login.jsp';
	url_send = '_dyncharset=UTF-8'..
		'&/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.type=sms'..
		'&_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.type= '..
		'&enabled=false'..
		'&/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.errorURL=/portal/map/map/message_box?mbox_view=newsms'..
		'&_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.errorURL= '..
		'&/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.successURL=/portal/map/map/message_box?mbox_view=messageslist'..
		'&_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.successURL= '..
		'&smscounter=1'..
		'&counter=-1'..
		'&/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.to='..SMS.to..
		'&_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.to= '..
		'&_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.body= '..
		'&/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.body='..hidePL(urlEncode(SMS.msg))..
		'&/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.create.x=0'..
		'&/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.create.y=0'..
		'&/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.create=Wyslij'..
		'&_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.create= '..
		'&_DARGS=/gear/mapmessagebox/smsform.jsp';

	page1 = omb_post('/portal/map/map/homeo?_DARGS=/gear/static/login.jsp', url_login);
	if preg_match('/Poda\xc5\x82e\xc5\x9c b\xc5\x82\x01\x19dny login lub has\xc5\x82o/A', page1) > 0 then
		setError('Błędny login lub hasło.');
	else
		page1 = omb_get('/portal/map/map/message_box?mbox_view=newsms&mbox_edit=new');
		temp = {};
		if preg_match('/SMSy darmowe:<\/div>.*?<div class="value">([0-9]+)<\/div>.*?<\/div>.*?<div class="item">.*?<div class="label">SMSy z do\xc5\x82adowa\xc5\x84:<\/div>.*?<div class="value">([0-9]+)<\/div>/s', page1, temp) > 0 then
			limit_before = temp;
			page2 = omb_post('/portal/map/map/message_box?_DARGS=/gear/mapmessagebox/smsform.jsp', url_send);
			if preg_match('/Brak numeru telefonu odbiorcy/', page2) > 0 then setError('Brak numeru telefonu odbiorcy.');
			elseif preg_match('/Brak tre\xc5\x9ci wiadomo\xc5\x9ci/', page2) > 0 then setError('Brak treści wiadomości.');
			elseif preg_match('/Niepoprawny numer telefonu/', page2) > 0 then setError('Niepoprawny numer telefonu.');
			else
				temp = {};
				if preg_match('/SMSy darmowe:<\/div>.*?<div class="value">([0-9]+)<\/div>.*?<\/div>.*?<div class="item">.*?<div class="label">SMSy z do\xc5\x82adowa\xc5\x84:<\/div>.*?<div class="value">([0-9]+)<\/div>/s', page2, temp) > 0 then
					limit_after = temp;
					if (limit_after[1] < limit_before[1]) or (limit_after[2] < limit_before[2]) then
						setSuccess('pozostały limit: '..limit_after[1]..'/'..limit_after[2]);
					else
						setError('Wiadomość nie została wysłana, a przynajmniej licznik wiadomości nie zmienił swojej wartości.');
					end;
				else
					setError('Brak informacji o SMSach - zapewne Orange zmieniło coś na swoich stronach. SMS mógł jednak zostać wysłany.');
				end;
			end;
		else
			setError('Brak informacji o SMSach - zapewne Orange zmieniło coś na swoich stronach.');
		end;
	end;
	omb_disconnect();
end;
