var SENDER_TEXT_MAX_LENGTH = 11;
var SENDER_DEFAULT_VALUE = "Bramka SMS";
// 7 dni
var COOKIE_EXPIRATION = new Date(7*24*60*60*1000 + new Date().getTime());

var iAvailCharsNumber = 306;

function enableDateAndTimeEvent(oEvent) {
	if(oTimeCheckbox.checked) {
		enableDateAndTime(true);
	}
	else {
		enableDateAndTime(false);
	}
}

function enableDateAndTime(bEnable) {

	if(bEnable) {
		oDateField.disabled = false;
		oHourField.disabled = false;
		oMinsField.disabled = false;
	}
	else {
		oDateField.disabled = true;
		oHourField.disabled = true;
		oMinsField.disabled = true;
	}
}
function setMsgText(sText)
{
	oContent.value = sText;
	clearMsgText(oContent);
	countChars();
}
function countSpecialChars(oContent) {

	if(arMatches = oContent.value.match(/\^|{|}|\\|\[|~|\]|\||\u20AC/g)) 
		return arMatches.length; 
	else
		return 0;
}

function clearMsgText(oContent) {
	//
 	oContent.value = oContent.value.replace(/\r\n/g,"\n");
	//
	oContent.value = oContent.value.replace(/[^A-Za-z0-9_\-\.\+@\xA3\$\xA5\xE8\xE9\xF9\xEC\xF2\xC7\xD8\xF8\xC5\xE5\^\{\}\\\[\~\]\|\u20AC\xC6\xE6\xDF\xC9\x21\x22\x23\xA4\x25\x26\x27\x28\x29\x2A,\/\:;<=>?\xA1 \xC4\xD6\xD1\xDC\xA7\xBF\xE4\xF6\xF1\xFC\xE0\u000A\u000D\u0104\u0105\u0106\u0107\u0118\u0119\u0141\u0142\u0143\u0144\u00D3\u00F3\u015A\u015B\u0179\u017A\u017B\u017C]*/g,"");
	//onkeypress="return disallowRegexpChar(event, this, '[0-9 ]')"
	//
}

function disallowCharsInMessage(oEvent) {
   		var code = (oEvent.which == null) ? oEvent.keyCode : oEvent.which;
//		var code = oEvent.keyCode;
   		if (code < 0x20 || code > 0x7e) {
 			return true;
		}
   		var str = String.fromCharCode(code);
		var tmp = str.match(/[A-Za-z0-9_\-\.\+@\xA3\$\xA5\xE8\xE9\xF9\xEC\xF2\xC7\xD8\xF8\xC5\xE5\^\{\}\\\[\~\]\|\u20AC\xC6\xE6\xDF\xC9\x21\x22\x23\xA4\x25\x26\x27\x28\x29\x2A,\/\:;<=>?\xA1 \xC4\xD6\xD1\xDC\xA7\xBF\xE4\xF6\xF1\xFC\xE0\u000A\u000D\u0104\u0105\u0106\u0107\u0118\u0119\u0141\u0142\u0143\u0144\u00D3\u00F3\u015A\u015B\u0179\u017A\u017B\u017C]*/);

   		if (tmp == null)  {
			preventDefaultEvent(oEvent);
   			return false;
		}
   		return true;
}

var bCountCharsLocked = false;
function countChars(oEvent) {

	if(bCountCharsLocked) {
		return;	
	}
	bCountCharsLocked = true;

	var oContent = document.getElementById("trescWiadomosci");
	if(oContent.value.length > iAvailCharsNumber) {
		oContent.value = oContent.value.substr(0, iAvailCharsNumber);
	}
	//clearMsgText(oContent);


	var iSpecialChars = countSpecialChars(oContent);
	var iCharsCounter = oContent.value.length + iSpecialChars;

	while(iCharsCounter > iAvailCharsNumber) {
    	oContent.value = oContent.value.substr(0, oContent.value.length-1);
		iSpecialChars = countSpecialChars(oContent);
		iCharsCounter = oContent.value.length + iSpecialChars;
 	}

	var iMsgItems = 0;
 	if(iCharsCounter == 0) {
		iMsgItems = 0; 
	}
   	else if(iCharsCounter <= 160) {  
		iMsgItems = 1; 
	}
    else {
		iTmp = iCharsCounter;
      	iTmp += (153-1);
       	iTmp -= (iTmp % 153);
       	iMsgItems = iTmp / 153;
    }
	if (sLanguage == "uk")
		document.getElementById("licznikZnakow").innerHTML = "<strong>" + iCharsCounter + "</strong> characters (<strong>" + iMsgItems + "</strong> SMS)";
	else
		document.getElementById("licznikZnakow").innerHTML = "<strong>" + iCharsCounter + "</strong> znaków (<strong>" + iMsgItems + "</strong> SMS)";
	
	setTimeout(unlockCountChars, 15);
}

function unlockCountChars() {
	bCountCharsLocked = false;
}

/* zachowanie pol w formularzu */

var sVerifiedSender;
var sLogin;

var oForm;
var arInputs;
var arSelects;
var arTextareas;
var oSendButton;
var oLinkBook;
var oLinkSigns;
var oLinkNewSigns;
var oResultDiv;
var oCheckPriceLink;
//var oSenderText;
//var oSenderNumber;
var oSender;
var oRecipient;
var oPrefix;
var oTimeCheckbox;
var oDateField;
var oHourField;
var oMinsField;
var oCountries;
var oContent;

var oTypeEcono;
var oTypeFlash;
var oTypeTrad;

function activateSmsGateway(sLoginParam, sVerifiedSenderParam) {
	sLogin = sLoginParam;
	sVerifiedSender = sVerifiedSenderParam;
	oResultDiv = document.getElementById("blokWyslijSmsTresc");
	oForm = document.getElementById("formularzBramki");
	arInputs = oForm.getElementsByTagName("input");
	arSelects = oForm.getElementsByTagName("select");
	oSendButton = document.getElementById("buttonWyslij");
	oLinkBook = document.getElementById("linkPokazKsiazke");
	oLinkSigns = document.getElementById("linkPokazPodpisy");
	oLinkNewSigns = document.getElementById("linkNowyPodpis");
	oCheckPriceLink = document.getElementById("kosztWiadomosciLink");
	oPrefix = document.getElementById("prefixKraju");
	
	oSender = document.getElementById("nadawca");
	oRecipient = document.getElementById("odbiorca");

	oTimeCheckbox = document.getElementById("aktywujTermin");
	oDateField = document.getElementById("dataWysylki");
	oHourField = document.getElementById("godzinaWysylki");
	oMinsField = document.getElementById("minutaWysylki");

	oCountries = document.getElementById("listaKrajow");
	oContent = document.getElementById("trescWiadomosci");
	
	oTypeEcono = document.getElementById("typEkonomicznySMS");
	oTypeFlash = document.getElementById("typFlashSMS");
	oTypeTrad = document.getElementById("typTradycyjnySMS");
	
	addEventHandler(oContent, "keyup", countChars)	
	addEventHandler(oCountries, "change", selectCountryPrefix);
	addEventHandler(oTimeCheckbox, "click", enableDateAndTimeEvent);

	if(sLogin) {
		enableForm();
		updateCreditBalance();
		restoreSmsType();
		oTypeEcono.disabled = "disabled";
	}
	else
		disableForm();
}
	
function activatePriceChecking() {
	addEventHandler(oCheckPriceLink, "click", getPrice);
	addEventHandler(oRecipient, "keyup", restoreLink);
	addEventHandler(oCountries, "change", restoreLink);
	addEventHandler(oContent, "keyup", restoreLink);
	addEventHandler(oTypeEcono, "click", restoreLink);
	addEventHandler(oTypeFlash, "click", restoreLink);	
	addEventHandler(oTypeTrad, "click", restoreLink);	
}

function enableForm() {
	for(var i=0; i<arInputs.length; i++) {
		arInputs[i].disabled = null;
	}
	
	for(var i=0; i<arSelects.length; i++) {
		arSelects[i].disabled = null;
	}

	oContent.disabled = null;
	oContent.value = "";
	oContent.style.textAlign = "left";
	
	enableButton(true, oSendButton, sendSms);
	
	enableDateAndTimeEvent();
	
	enableLink(oLinkBook, loadPhoneBook);

	activatePhoneBook(restoreLink);

	// pole nadawcy
	var oSender = document.getElementById("nadawca");
	if(sVerifiedSender) {
		activateSenderField();
		setSenderField();
	}
	// gdy nie ma potwierdzonego pola nadawcy w bazie:
	else {
		disableSenderField();
	}
	// typ wiadomosci
	activateSmsTypeRadios();
	// sprawdzenie kosztu
	activatePriceChecking();
	
	addEventHandler(oContent, "keydown", disallowCharsInMessage);
}

function disableForm() {

	for(var i=0; i<arInputs.length; i++) {
		arInputs[i].disabled = "disabled";
	}
	for(var i=0; i<arSelects.length; i++) {
		arSelects[i].disabled = "disabled";
	}	

	oContent.disabled = "disabled";
	if (sLanguage == "uk")
		oContent.value = 	"\n\nPlease log on if you'd like to send messages from this SMS Gateway. " +
						"If you haven't an account yet, you can register it quickly.\n";
	else
		oContent.value = 	"\n\nJeżeli chcesz skorzystać z tej Bramki SMS musisz się zalogować. " +
							"Jeżeli nie masz jeszcze konta - zarejestruj się.\n";
	oContent.style.textAlign = "center";

	enableButton(false, oSendButton, sendSms);
	disableLink(oLinkBook, showBlock);
	disableLink(oCheckPriceLink, getPrice);
	
	disableSenderField();
}


function disableSenderField() {
	oSender.readOnly = "readonly";
	oSender.value = SENDER_DEFAULT_VALUE;
	oSender.disabled = "disabled";
	if (sLanguage == "uk")
		oLinkSigns.innerHTML = "[activate sender]";
	else
		oLinkSigns.innerHTML = "[uaktywnij pole nadawcy]";
	oLinkNewSigns.style.display = "none";
	activateHiddenBlock("linkPokazPodpisy", "bloczekAktywacja", "przyciskZamykajacy3", null);
}

function activateSenderField() {
	activateSenders();
	if (sLanguage == "uk")
		oLinkSigns.value = "[select sender]";
	else
		oLinkSigns.value = "[wstaw nadawcę]";
	oLinkNewSigns.style.display = "inline";
	// przywroc zapamietane ustawienia
	var sSender = getCookie("SMS_SENDER_VALUE_" + sLogin);
	if(sSender) {
		oSender.value = sSender;
	}
	else {
		if(!sVerifiedSender.match(/[^0-9]+/g))
			oSender.value = "+" + sVerifiedSender.replace("|", "");
		else
			oSender.value = sVerifiedSender;
	}
	setSenderField();
}

var sSenderFieldSaved;

function setSenderField() {
	if(oTypeEcono.checked) {
		oSender.disabled = "disabled";
		disableLink(oLinkSigns, showBlock);
		sSenderFieldSaved = oSender.value;
		oSender.value = "";
	}
	else {
		if(oSender.disabled) {
			oSender.disabled = null;
			enableLink(oLinkSigns, showBlock);
			if(sSenderFieldSaved) {
				oSender.value = sSenderFieldSaved;
				sSenderFieldSaved = "";
			}
		}
	}

	oSender.readOnly = "readonly";
	setCookie("SMS_SENDER_VALUE_" + sLogin, oSender.value, COOKIE_EXPIRATION);
}


function activateSmsTypeRadios() {
	addEventHandler(oTypeEcono, "click", setSmsType);
	addEventHandler(oTypeFlash, "click", setSmsType);	
	addEventHandler(oTypeTrad, "click", setSmsType);	
}



function restoreSmsType() {
	var sTypeId = getCookie("SMS_TYPE_ID");
	var oTypeCookie = document.getElementById(sTypeId);
	if(oTypeCookie) {
		oTypeCookie.checked = "checked";
		if(oTypeCookie == oTypeEcono) {
			for(var i=0; i< oCountries.options.length; i++) {
				if(oCountries.options[i].value == "+48") {
					oCountries.options[i].selected = true;
				}
				oPrefix.value = "+48";
			}
			oCountries.disabled = "disabled";
			oTimeCheckbox.disabled = "disabled";
			enableDateAndTime(false);
		}
		else {
			oCountries.disabled = null;			
			oTimeCheckbox.disabled = null;
			enableDateAndTimeEvent(null);
		}
	}
	else
		oTypeTrad.checked = "checked";

	setSenderField();
}

var sContentSaved = "";

function setSmsType(oEvent) {
	setSenderField();

	var oEventSrc = getEventSrc(oEvent);
	setCookie("SMS_TYPE_ID", oEventSrc.id, COOKIE_EXPIRATION);
	if(oEventSrc == oTypeEcono) {
		for(var i=0; i< oCountries.options.length; i++) {
			if(oCountries.options[i].value == "+48") {
				oCountries.options[i].selected = true;
			}
			oPrefix.value = "+48";
		}
		oCountries.disabled = "disabled";
		oTimeCheckbox.disabled = "disabled";
		enableDateAndTime(false);
	}
	else {
		oCountries.disabled = null;
		oTimeCheckbox.disabled = null;
		enableDateAndTimeEvent(null);
	}

	if (oTypeTrad.checked) {
		if(oContent.value == sContentSaved.substr(0, 160))
			oContent.value = sContentSaved;
		sContentSaved = "";
		iAvailCharsNumber = 306;
	}
	else {
		if(!sContentSaved)
			sContentSaved = oContent.value;		
		iAvailCharsNumber = 160;
	}
	countChars();
}

function hideElement(oElement) {
	oElement.style.display = "none";
}

function showElement(oElement) {
	oElement.style.display = "inline";
}

/********************************/

function getSmsType() {
	if(oTypeTrad.checked)
		return 1;
	else if(oTypeEcono.checked)
		return 3;
	else if(oTypeFlash.checked)
		return 2;
}

function getSenderType() {

	if(oSender.value.indexOf("+") == -1)
		return 0;
	else
		return 1;
}

function getDelivTime() {
	var iMins = 0;
	if(oTimeCheckbox.checked) {
		var arDate = oDateField.value.split("-");
		var oDate = new Date (arDate[0], arDate[1]-1, arDate[2], oHourField.value, oMinsField.value, 0, 0);
		iMins = Math.round((oDate.getTime() - new Date().getTime()) / (60000));
	}
	return iMins;
}

/********************************/

function sendSms(oEvent)
{
	if(!oRecipient || oRecipient.value == "") {
		if (sLanguage == "uk")
			alert("Set recipient number");
		else
			alert("Określ odbiorcę wiadomości");
		return null;
	}
	if(!oContent || oContent.value == "") {
		if (sLanguage == "uk")
			alert("No message body.");
		else
			alert("Brak treści wiadomości.");
		return null;
	}
	var iSmsType = getSmsType();
	var iSenderType = getSenderType();
	var sDelivTime =  getDelivTime();
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
	{
		enableButton(false, oSendButton, sendSms);
		showProgress(true, "blokWyslijSmsPostep", "blokWyslijSmsTresc");
		xmlHttp.open("POST", "engine/sendSms.php", true);  
		xmlHttp.onreadystatechange = getSendSmsResults;
		xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlHttp.send("recipient=" + encodeURIComponent(oPrefix.value + "|" + oRecipient.value) + "&" + 				
					"content=" + encodeURIComponent(oContent.value) + "&" +					   
					"sender=" + encodeURIComponent(oSender.value) + "&" +
					"senderType=" + encodeURIComponent(iSenderType) + "&" +													
					"delivTime=" + encodeURIComponent(sDelivTime) + "&" + 
					"smsType=" + encodeURIComponent(iSmsType));
	}
	else
	    setTimeout('sendSms()', 1000);
}


function getSendSmsResults() 
{
	// kontynuuje jedynie jesli transakcja zostala zakonczona
	if (xmlHttp.readyState == 4) 
	{
  		// status 200 oznacza pomyslne ukonczenie transakcji
		if (xmlHttp.status == 200) 
		{	
			// wyodrebnia wiadomosc wyslana z serwera
			sResponse = xmlHttp.responseText;
			oResultDiv.innerHTML = sResponse;
			if(oResultDiv.firstChild.id == "topup")
				activatePacksList();
			else
				activateSmsGateway(sLogin, sVerifiedSender)
			showProgress(false, "blokWyslijSmsPostep", "blokWyslijSmsTresc");
		} 
		// dla statusu protokolu HTTP innego niz 200 zglasza blad
		else 
		{
			alert("Wystapil blad podczas uzyskiwania dostepu do serwera: " + xmlHttp.statusText);
		}
	}
}
