<?php
require('../includes/header.php');

?>


<!doctype html>
<html class="no-js" lang="en">


<head>
    <meta charset="utf-8">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <title>PROJECTS || POWER LINKS CTG</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <!-- Place favicon.ico in the root directory -->
    <link rel="shortcut icon" type="image/x-icon" href="../images/icon.png">
    <link rel="apple-touch-icon" href="apple-touch-icon.png">
	
	
	

</head>

<body>
    <!--[if lt IE 8]>
        <p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
    <![endif]-->  

    <!-- Body main wrapper start -->
    <div class="wrapper">
        <!-- Start Header Style -->

        <!-- End Header Style -->
        <!-- Start Bradcaump area -->
        <div class="ht__bradcaump__area" data--black__overlay="6" style="background: rgba(0, 0, 0, 0) url(<?php echo WEB_URL; ?>/plc/images/bg/5.jpg) no-repeat scroll center center / cover ;">
            <div class="ht__bradcaump__wrap">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12">
                            <div class="bradcaump__inner text-center">
                                <h2 class="bradcaump-title">PROJECTS</h2>
                                <nav class="bradcaump-inner">
                                  <a class="breadcrumb-item" href="index.html">Home</a>
                                  <span class="brd-separetor">-</span>
                                  <span class="breadcrumb-item active">PROJECTS</span>
                                </nav>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
	
        <!-- End Bradcaump area -->
		
		<div class="profile-tabs">
					
  	<ul class="main__menu" role="tablist" id="myTab">
		<li class="nav-item"><a class="nav-link active" href="#AllPROJECT" aria-controls="profile" role="tab" data-toggle="tab">All PROJECTS</a></li>
				
						<li class="nav-item"><a class="nav-link" href="#RUNNING" aria-controls="profile" role="tab" data-toggle="tab">RUNNING</a></li>
						<li class="nav-item"><a class="nav-link" href="#COMPALITE" aria-controls="profile" role="tab" data-toggle="tab">COMPALITE</a></li>
						
					</ul>
        
	
	<div class="tab-content">
	<hr>
<div id="AllPROJECT" class="tab-pane active">
<section class="htc__latest__project__area ptb--150 bg__white">
            <div class="container">
                <div class="row">
                    <div class="htc__latest__project__wrap clearfix">
                        <!-- Start Single Project -->
						
						<?php $sqli=$conn->query("Select * from project where display BETWEEN 1 AND 2 ORDER BY RAND()");
							foreach ($sqli as $key => $project) {
											?>
                        <div class="col-md-4 col-lg-4 col-sm-6 col-xs-12">
                            <div class="project foo">
                                <div class="project__thumb">
                                    <a href="single-project.html">
                                        <img class="" alt="project images" src='../../../emp/upload/<?php echo $project ['FileName']; ?>' 
										width="" height="500" >
                                    </a>
                                    <div class="project__hover__info">
                                        <div class="project__action">
                                            <h2><a href="single-project.php?Id=<?php echo $project["Id"]; ?>&Display=<?php echo $project["Display"]; ?>"><?php echo $project["ProjectName"]; ?></a></h2>
                                            <h4><?php echo $project ['SortAddress']; ?></h4>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
						<?php } ?>
                        <!-- End Single Project -->
                       
                    </div>
                </div>
            </div>
        </section>
      
    </div>
	<div id="RUNNING" class="tab-pane">
<section class="htc__latest__project__area ptb--150 bg__white">
            <div class="container">
                <div class="row">
                    <div class="htc__latest__project__wrap clearfix">
                        <!-- Start Single Project -->
						
						<?php $sqli=$conn->query("Select * from project where display=1 ORDER BY RAND()");
							foreach ($sqli as $key => $project) {
											?>
                        <div class="col-md-4 col-lg-4 col-sm-6 col-xs-12">
                            <div class="project foo">
                                <div class="project__thumb">
                                    <a href="single-project.html">
                                        <img class="" alt="project images" src='../../../emp/upload/<?php echo $project ['FileName']; ?>' 
										width="" height="500" >
                                    </a>
                                    <div class="project__hover__info">
                                        <div class="project__action">
                                            <h2><a href="single-project.php?Id=<?php echo $project["Id"]; ?>&Display=<?php echo $project["Display"]; ?>"><?php echo $project["ProjectName"]; ?></a></h2>
                                            <h4 ><?php echo $project ['SortAddress']; ?></h4>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
						<?php } ?>
                        <!-- End Single Project -->
                       
                    </div>
                </div>
            </div>
        </section>
      
    </div>
	<div id="COMPALITE" class="tab-pane">
<section class="htc__latest__project__area ptb--150 bg__white">
            <div class="container">
                <div class="row">
                    <div class="htc__latest__project__wrap clearfix">
                        <!-- Start Single Project -->
						
						<?php $sqli=$conn->query("Select * from project where display=2 ORDER BY RAND()");
							foreach ($sqli as $key => $project) {
											?>
                        <div class="col-md-4 col-lg-4 col-sm-6 col-xs-12">
                            <div class="project foo">
                                <div class="project__thumb">
                                    <a href="single-project.html">
                                        <img class="" alt="project images" src='../../../emp/upload/<?php echo $project ['FileName']; ?>' 
										width="" height="500" >
                                    </a>
                                    <div class="project__hover__info">
                                        <div class="project__action">
                                            <h2><a href="single-project.php?Id=<?php echo $project["Id"]; ?>&Display=<?php echo $project["Display"]; ?>"><?php echo $project["ProjectName"]; ?></a></h2>
                                            <h4><?php echo $project ['SortAddress']; ?></h4>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
						<?php } ?>
                        <!-- End Single Project -->
                       
                    </div>
                </div>
            </div>
        </section>
      
    </div>
	</div>
			
		</div>

		


        
        <!-- End Footer Area -->
    </div>
    <!-- Body main wrapper end -->



</body>
</html>
<script>
$(function(){
  var hash = window.location.hash;
  hash && $('ul.nav a[href="' + hash + '"]').tab('show');

  $('.main__menu a').click(function (e) {
    $(this).tab('show');
    var scrollmem = $('body').scrollTop() || $('html').scrollTop();
    window.location.hash = this.hash;
    $('html,body').scrollTop(scrollmem);
  });
});
</script>

<?php
require('../includes/footer.php');
?>