<?php
require_once 'Sistema/Core.php';
require_once 'Sistema/Funkcijos.php';
require_once 'Sistema/Config.php';
$Person = $_SERVER['REMOTE_ADDR'];
if(isset($_SESSION['kalba'])){
    if($_SESSION['kalba'] == "lt"){include('Kalba/LT_kalba.php'); $kalbux = "lt";}
    elseif($_SESSION['kalba'] == "ru"){include('Kalba/RU_kalba.php');$kalbux = "ru";}
    elseif($_SESSION['kalba'] == "en"){include('Kalba/EN_kalba.php');$kalbux = "en";}
    else{include('Kalba/LT_kalba.php');$kalbux = "lt";}
}
else{$_SESSION['kalba'] == "lt"; include('Kalba/LT_kalba.php'); $kalbux = "lt";}
if(!preg_match('#http?\://(?:www\.)?joa\.lt#',$_SERVER['HTTP_REFERER']))
{
    if(isset($_SERVER['HTTP_REFERER'])) $iskur = $_SERVER['HTTP_REFERER']; else $iskur = 'nezinomas.';
    if(db::count('iskur','WHERE ip = ? AND kada = ? AND iskur = ?',["".$Person."","".date('Y-m-d')."","".$iskur.""]) === false)
    {
        db::create('iskur','(ip,kada,iskur) VALUES (?,?,?)',["".$Person."","".date('Y-m-d')."","".$iskur.""]);
    }

}
$subdomenas = substr($_SERVER['HTTP_HOST'], 0, (strlen("$antraste") + 1) * -1);
if($subdomenas != false){header('Location: http://wapmu.lt');}
online("", "", "", "nera");
if(db::findOne('game_ouner','WHERE serveris = ?',["".strtolower($subdomenas).""]) === false)
{
    header('Location: http://wapmu.lt');
}
head();
echo'
<nav class="navbar">
    <div class="logo"><a href="?id=" style="color: #fff;">JOA.LT</a>  
        <a href="?id=kalba&lang=ru" style="float: right;"><img src="Design/Images/02/flags/ru.gif" class="icon"></a>
        <a href="?id=kalba&lang=lt" style="float: right;"><img src="Design/Images/02/flags/lt.gif" class="icon"></a>
    </div>
    <ul class="nav-links">
        <input type="checkbox" id="checkbox_toggle" />
        <label for="checkbox_toggle" class="hamburger">&#9776;</label>
        <div class="menu">
            <li><a href="?id=">'.$Kalba['pagrindinis'].'</a></li>
            <li><a href="?id=serveriai">'.$Kalba['Serveriai'].'</a></li>
            <li><a href="?id=registracija">'.$Kalba['registracija'].'</a></li>
            <li><a href="?id=zinynas">'.$Kalba['zinynas'].'</a></li>
        </div>
    </ul>
</nav>
';
include_once 'Borders/Left.php';
switch($id)
{
    case'kalba':
        $lang = $_GET['lang'];
        $link = $_SERVER['HTTP_REFERER'];
        $Kalbos = $_SESSION['kalba'];
        if($lang == "lt"){$_SESSION['kalba'] = "lt";}
        elseif($lang == "ru"){$_SESSION['kalba'] = "ru";}
        elseif($lang == "en"){$_SESSION['kalba'] = "en";}
        else{$_SESSION['kalba'] = "lt";}
        if($link == false)
        {
            Header('LOCATION: https://upl.lt');
        }
        else{
            Header('LOCATION: '.$link.'');
        }
    break;

    case'':
        echo'
        <div class="section">
            <div class="ins">
                <div class="block2">
                    <div class="Desc paper">
                        <span style="color: brown; font-size: 20px;"><b>Joa.lt</b></span> - '.$Kalba['game_apr'].'
                    </div>
                    <div class="meniu">
                        <form action="?id=prisijungimas2" method="POST">
                            <center>
                                <span class="bold brown">'.$Kalba['Vardas'].'</span><br />
                                <input class="form-input" type="text" name="nick" placeholder="'.$Kalba['Vardas'].'"><br />
                                <span class="bold brown"><a href="?id=pamirsau">[?]</a> '.$Kalba['slaptazodis'].'</span><br />
                                <input class="form-input" type="password" id="CapsLock" name="pass" placeholder="'.$Kalba['slaptazodis'].'">
                                <span id="Captext">!! Caps Lock ON !!</span>
                                <br />
                                <div class="g-recaptcha" data-sitekey="6LdhzKskAAAAAJucvZLvLAtziplVMGAUbCtStgqV"></div>
                                <input type="submit" name="login"  class="btn" value="'.$Kalba['prisijungti'].'">
                            </center>
                        </form>
                    </div>
                    <div class="Desc">
                        '.$Kalba['dfd'].'<br />
                        <a href="?id=registracija" class=""><div class="links-purple">'.$Kalba['registracija'].'</div></a>
                        <a href="/index;news;" class="Mob"><div class="links-red">'.$Kalba['naujienos'].'</div></a>
                    </div>
                    <div class="Ilink Dash center">
                        <b>E-Mail:</b> info@joa.lt
                    </div>
                </div>
            </div>
        </div>
        ';
        ?>
        <script>
        var input = document.getElementById("CapsLock");
        var text = document.getElementById("Captext");
        input.addEventListener("keyup", function(event) {
        if (event.getModifierState("CapsLock")) {text.style.display = "block";
        } else {text.style.display = "none"}});
        </script>
        <?
    break;
    
    case'prisijungimas2':
		$nick = strtolower($_POST['nick']);
		$pass = md5($_POST['pass']);
        $captcha = $_POST['g-recaptcha-response'];
        $secretKey = "6LdhzKskAAAAANNYr7syvPfIWxkQ3QjDmgrdomfV";
        $url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . urlencode($secretKey) .  '&response=' . urlencode($captcha);
        $response = file_get_contents($url);
        $responseKeys = json_decode($response,true);
        echo'
        <div class="section">
            <div class="ins">
                <div class="block2">
                    <div class="Desc paper left">
                        <table>
                            <td><img src="img/css/leader.png" width="90"></td>
                            <td style="padding-left: 20px;"><span style="color: #8F1F1D; font-size: 20px;"><b>'.$Kalba['Informacija'].'</b></span><br />
								<div class="error">
								';
								if(db::count('users','WHERE nick = ? AND password = ?',["".$nick."","".$pass.""]) == 0 OR empty($nick) OR empty($pass))
								{
									echo $Kalba['neteisingi_duomenys'];
								}
								elseif($responseKeys["success"])
								{
									$vartotojo_trinimo_laikas = time() + 24 * 3600 * 30;
									$server_ip = $_SERVER['REMOTE_ADDR'];
									$Browser = $_SERVER['HTTP_USER_AGENT'];
									db::update('users','SET last_login = ?,kodas = ?, last_ip = ? WHERE nick = ? AND password = ?',["".time()."","".session_id()."","".$server_ip."","".$nick."","".$pass.""]);
									db::create('LogInHistory','(nick,pasw,ip,time,narsykle,date) VALUES (?,?,?,?,?,?)',["".$nick."","+","".$server_ip."","".time()."","".$Browser."","".date('Y-m-d, H:i:s').""]);
									if($remember == "on")
									{
										$encode = "" . strtolower($nick) . "|" . md5($pass) . "|" . $subdomenas . "";
										$encode = base64_encode($encode);
										$encode = str_replace("=", "", $encode);
										setcookie("cookies_sesija", "$encode", time() + (3600 * 24 * 30), "/");
									}
									header('Location: logged.php');
								}
								else
								{
									echo $Kalba['neteisingi_duomenys'];
									$Browser = $_SERVER['HTTP_USER_AGENT'];
									$server_ip = $_SERVER['REMOTE_ADDR'];
									if(!empty($nick))
									{
										db::create('LogInHistory','(nick,pasw,ip,time,narsykle,date) VALUES (?,?,?,?,?,?)',["".$nick."","-","".$server_ip."","".time()."","".$Browser."","".date('Y-m-d, H:i:s').""]);
									}
								}
								echo'
								</div>
							</td>
						</table>
                    </div>
                </div>
            </div>
        </div>
		';
    break;

	case'registracija':
        $ids = intval(isset($_GET['ids']) ? $_GET['ids'] : null);
        $Nickname = $_SESSION['nickname'];
		echo'
		<div class="section">
			<div class="ins">
				<div class="block2">
				';
				if($ids == NULL)
				{
					echo'
					<div class="Desc paper">
						'.$Kalba['taiskyles_txt'].'
						<hr />
						<div class="left">'.$Kalba['taisykles_registracija'].'<hr /></div>
						<div class="left">'.$Kalba['taisykles_saveika'].'<hr /></div>
						<div class="left">'.$Kalba['taisykles_normos'].'<hr /></div>
						<div class="left">'.$Kalba['taisykles_admin'].'<hr /></div>
						<div class="title"></div>
						<div class="aprasymas top1 center">
						'.$Kalba['ar_sutinkate_su_taisyklemis'].'
						<a href="index.php?id=registracija&ids=2"><div class="links-purple">'.$Kalba['taip_sutinku'].'</div></a>
						<a href="index.php"><div class="links-red">'.$Kalba['ne'].'</div></a>
						</div>
					</div>
					';
				}
				elseif($ids == 2)
				{
					echo'
					<div class="Desc paper">
						<table>
							<td><img src="img/css/leader.png" width="100"></td>
							<td style="padding-left: 20px;"><span style="color: #8F1F1D; font-size: 20px;"><b>'.$Kalba['Slapyvardis'].'</b></span><br />
							<div class="inside">'.$Kalba['iveskite_norima_slapyvardi'].'</div></td>
						</table>
					</div>
					<div class="Desc paper center">
						<b>'.$Kalba['jusu_slapyvardis'].':</b><br />
						<small>('.$Kalba['maz_be_simb'].')</small><br />
						<input id="slapyvardis" class="form-input" name="nick" maxlength="25" type="text" placeholder="'.$Kalba['Slapyvardis'].' (3-15 '.$Kalba['simb'].'.)">
						<input class="SubmitButton" type="submit" name="reg" value="'.$Kalba['Tikrinti'].'">
						<span id="UserDiv"></span>
					</div>
					';
				}
                elseif($ids == 3)
                {
                    if(strlen($Nickname) > 15 OR strlen($Nickname) < 3 OR empty($Nickname))
                    {
                        header('Location: ?id=registracija&ids=2');
                    }
                    else
                    {
                        echo'
                        <div class="Desc paper left">
                            '.$Kalba['pasirinktas_slapyvardis'].': <b>'.$Nickname.'</b> <a href="?id=registracija&ids=2">('.$Kalba['Keisti'].')</a>
                        </div>
                        <div class="Desc paper center">
                            <form action="?id=registracija&ids=4" method="POST">
                                <span class="bold brown">'.$Kalba['slaptazodis'].':</span><Br><small>('.$Kalba['maz_be_simb'].')</small><br />
                                <input class="form-input" type="password" name="pass1" placeholder="'.$Kalba['slaptazodis'].'"><br />
                                <span class="bold brown">'.$Kalba['pakartokite_slaptazodi'].':</span> <br><small>('.$Kalba['maz_be_simb'].')</small><br />
                                <input type="password" class="form-input" name="pass2" placeholder="'.$Kalba['pakartokite_slaptazodi'].'"><br />
                                <span class="bold brown">'.$Kalba['butinai_patvirtinkite'].':</span>
                                <center><div class="g-recaptcha" data-sitekey="6LdhzKskAAAAAJucvZLvLAtziplVMGAUbCtStgqV"></div></center>
                                <input class="btn btn_green" type="submit" name="reg" value="'.$Kalba['Uzsiregistruoti'].'">
                            </form>
                        </div>
                        ';
                    }
                }
                elseif($ids == 4)
                {
                    if(strlen($Nickname) > 15 OR strlen($Nickname) < 3 OR empty($Nickname))
                    {
                        header('Location: ?id=registracija&ids=2');
                    }
                    else
                    {
                        $pass1 = $_POST['pass1'];
                        $pass2 = $_POST['pass2'];
                        $captcha = $_POST['g-recaptcha-response'];
                        $secretKey = "6LdhzKskAAAAANNYr7syvPfIWxkQ3QjDmgrdomfV";
                        $url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . urlencode($secretKey) .  '&response=' . urlencode($captcha);
                        $response = file_get_contents($url);
                        $responseKeys = json_decode($response,true);
                        if(db::count('users','WHERE nick = ?',["".$Nickname.""]) > 0 OR $Nickname == 'support' OR $Nickname == 'gamta' or $Nickname == 'nointernet'){$klaida = '<span class="brown bold">! '.$Kalba['aptikta_kl'].'</span><br />'.$Kalba['toks_vartotojas_yra'].'';}
                        if(strlen($pass1) < 5 OR empty($pass1)){$klaida = '<span class="brown bold">! '.$Kalba['aptikta_kl'].'</span><br />'.$Kalba['slaptazodis_per_trumpas'].'';}
                        if($pass1 != $pass2){$klaida = '<span class="brown bold">! '.$Kalba['aptikta_kl'].'</span><br />'.$Kalba['slaptazodziai_nesutampa'].'';}
                        if(!$responseKeys["success"]){$kladia = '<span class="brown bold">! '.$Kalba['aptikta_kl'].'</span><br />'.$Kalba['klaidingas_kodas'].'';}
                        if(!empty($klaida))
                        {
                            echo'
                            <div class="Desc paper">
                                <div class="klaidos_tekstas">'.$klaida.'</div>
                            </div>
                            ';
                        }
                        else
                        {
                            echo'
                            <div class="Desc paper">
                                <div class="success center">
                                    <b>Joa.LT</b><br />
                                    '.$Kalba['sveikiname_uzsiregistravus'].'<br />
                                    '.$Kalba['dabar_galite_prisijungti_prie_zaidimo'].'
                                </div>
                            </div>
                            <div class="Desc paper">
                                <img src="img/icon/top.png"> <a href="index.php">'.$Kalba['keliauti_i_zaidima'].'</a>
                            </div>
                            ';
                            $kodo_sudarymas = str_shuffle('qwertyuiopasdfghjklzxcvbnm1234567890');
                            $kodo_sudarymas = substr($kodo_sudarymas, 0, 20);
                            db::create('users','(nick,password,kodas,ip,reg_date) VALUES (?,?,?,?,?)',["".strtolower($Nickname)."","".md5($pass2)."","".$kodo_sudarymas."","".$Person."","".date('Y-m-d').""]);
                            db::update('Stats','SET paskyros=paskyros+1 WHERE data = ?',["".date('Y-m-d').""]);
                            $_SESSION['nickname'] == '';
                        }
                    }
                }
				echo'
				</div>
			</div>
		</div>
		';
	break;

    case'pamirsau':
        echo'
        <div class="section">
            <div class="ins">
                <div class="block2">
                    <div class="Desc paper">
                        '.$Kalba['pamirsau_txt'].'
                    </div>
                    <div class="meniu center">
                        <form action="?id=pamirsau_2" method="POST">
                            <span class="bold brown">'.$Kalba['Vardas'].'</span><br />
                            <input class="form-input" name="nick" type="text"><br />
                            <span class="bold brown">'.$Kalba['el_pastas'].'</span><br />
                            <input class="form-input" name="email" type="email"><br />
                            <input class="btn btn_green" type="submit" value="'.$Kalba['OK'].'">
                        </form>
                    </div>
                </div>
            </div>
        </div>
        ';
    break;

    case'pamirsau_2':
        $nick = strtolower($_POST['nick']);
        $email = $_POST['email'];
        if(empty($nick) OR !empty($email)){$klaida = '<span class="bold brown">'.$Kalba['aptikta_kl'].'</span><br />'.$Kalba['tuscias_laukelis'].'';}
        if(!filter_var($email, FILTER_VALIDATE_EMAIL)){$klaida = '<span class="bold brown">'.$Kalba['aptikta_kl'].'</span><br />'.$Kalba['el_pastas_netinka'].'';}
        if(db::count('users','WHERE nick = ? AND email = ?',["".$nick."","".$email.""]) == 0) {$klaida = '<span class="bold brown">'.$Kalba['aptikta_kl'].'</span><br />'.$Kalba['el_pastas_netinka'].'';}
        if(!empty($klaida))
        {
            echo'
            <div class="section">
                <div class="ins">
                    <div class="block2">
                        <div class="Desc paper center">
                            <div class="error">'.$klaida.'</div>
                        </div>
                    </div>
                </div>
            </div>
            ';
        }
        else
        {
            echo'
            <div class="section">
                <div class="ins">
                    <div class="block2">
                        <div class="Desc paper center">
                            <div class="success">Naujas slaptažodisu išsiųstas į nurodyta elektroninį paštą. Norėdami aktyvuoti naują slaptažodį paspauskite ant nuorodos laiške.</div>
                        </div>
                    </div>
                </div>
            </div>
            ';
            $naujas_slaptazodis = substr(str_shuffle('QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890'), 0, 15);
            $apsaugos_kodas = substr(str_shuffle('QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890'), 0, 20);
            $laikas = time() + 3600 * 24;
            db::create('nauji_slaptazodziai','(serveris,kodas,slaptazodis,laikas,email,nick) VALUES (?,?,?,?,?,?)',["".$subdomenas."","".$apsaugos_kodas."","".$naujas_slaptazodis."",$laikas,"".$email."","".$nick.""]);
            $zinute ='
            Sveiki '.$nick.',
            Jums buvo sugeneruotas naujas slaptažodis
            -----------------------------------------
            Vardas: '.$nick.'
            Slaptažodis: '.$naujas_slaptazodis.'
            -----------------------------------------
            Norėdami aktyvuoti naują slaptažodį paspauskite nuoroda žemiau:
            https://joa.lt/aktyvacija.php?kodas='.$apsaugos_kodas.'
            Jeigu slaptažodžio nenorėjai pakeisti, tai tiesiog ignoruok šį el. laišką. O jeigu norėjai pasikeisti tai turi tam 24 valandas, kitaip ši nuoroda nustos veikti po 24 valandų.


            '.$subdomenas.'.joa.lt svetainės administracija.
            ';
            mail($email,'Slaptažodžio keitimas',$zinute,'From: '.$subdomenas.'.joa.lt <no-reply@joa.lt>','-f'.$subdomenas.'.joa.lt');
        }
    break;

    case'zinynas':
        echo'
        <div class="section">
            <div class="ins">
                <div class="block2">
                    <div class="Desc paper left">
                        <table>
                            <td><img src="/img/empire.png" width="70"></td>
                            <td><div class="topic">'.$Kalba['INFO_tekstas_2'].'</div></td>
                        </table>
                    </div>
                    <div class="pad10"></div>
                    <div class="meniu center;">
                        <a href="zinynas.php?id=kariai&kas=romenai" class="power" style="background: url(/img/gentys/v2/romenai.png) center '.$Color_romenai.'; width: 30%; "><span class="p_text" style=" padding: 10px;">'.$Kalba['romenai'].'</span></a>
                        <a href="zinynas.php?id=kariai&kas=germanai" class="power" style="background: url(/img/gentys/v2/germanai.png) center '.$Color_romenai.'; width: 30%;"><span class="p_text" style="padding: 10px;">'.$Kalba['germanai'].'</span></a>
                        <a href="zinynas.php?id=kariai&kas=galai" class="power" style="background: url(/img/gentys/v2/galai.png) center '.$Color_romenai.'; width: 30%;"><span class="p_text" style=" padding: 10px;">'.$Kalba['galai'].'</span></a>
                        <br><br>
                        <a href="zinynas.php?id=kariai&kas=hunai" class="power" style="background: url(/img/gentys/v2/hunai.png)center; width: 30%; top: -20px;"><span class="p_text" style=" padding: 10px;">'.$Kalba['hunai'].'</span></a>
                        <a href="zinynas.php?id=kariai&kas=egiptieciai" class="power" style="background: url(/img/gentys/v2/egiptieciai.png)center; width: 30%; top: -20px;"><span class="p_text" style=" padding: 10px;">'.$Kalba['egiptieciai'].'</span></a>
                        <a href="zinynas.php?id=kariai&kas=gyvunai" class="power" style="background: url(/img/lion.png) center '.$Color_romenai.'; width: 30%;"><span class="p_text" style=" padding: 10px;">'.$Kalba['gyvunai'].'</span></a>
                    </div>
                    <div class="pad10"></div>
                    <div class="meniu">
                    <a href="zinynas.php?id=pastatai" class="Ilink Dash top1">'.$Kalba['Pastatai'].'</a>
                    <a href="zinynas.php?id=duk" class="Ilink Dash top1">'.$Kalba['DUK'].'</a>
                    <a href="zinynas.php?id=taisykles" class="Ilink Dash top1">'.$Kalba['taisykles'].'</a>
                    <a href="zinynas.php?id=level" class="Ilink Dash top1">'.$Kalba['zaidejo_lygis'].'</a>
                    <a href="zinynas.php?id=nuotykiai" class="Ilink Dash top1">'.$Kalba['Nuotykiai'].'</a>
                    <a href="zinynas.php?id" class="Ilink Dash top1">'.$Kalba['Straipsniai'].'</a>
                    <a class="Ilink Dash top1">Mūšių Simuliatorius (Not working yet)</a>
                    </div>
                </div>
            </div>
        </div>
        ';
    break;

    case'email':
        echo'
        <div class="section">
            <div class="ins">
                <div class="block2">
                ';
                if(db::findOne('EmailReq','WHERE kodas = ?',["".$_GET['kodas'].""]) == false)
                {
                    header('Location: ?id=');
                }
                else
                {
                    $Email = db::findOne('EmailReq','WHERE kodas = ?',["".$_GET['kodas'].""]);
                    $Us = db::findOne('users','WHERE ID = ?',[$Email['uid']]);
                    db::update('users','SET email = ?, emailTime = ? WHERE ID = ?',["".$Email['email']."",time(),$Email['uid']]);
                    db::update('vartotojai','SET email = ? WHERE nick = ?',["".$Email['email']."","".$Us['nick'].""]);
                    db::delete('EmailReq','WHERE kodas = ?',["".$_GET['kodas'].""]);
                    echo'
                    <div class="panel">
                        <div class="naujienos center">
                            '.$Kalba['elp_patvirtintas'].'
                        </div>
                    </div>
                    ';
                }
                echo'
                </div>
            </div>
        </div>
        ';
    break;

    default:
        header('Location: https://upl.lt');
    break;
}

include 'Borders/Right.php';
echo'</div>';