diff --git a/application/controllers/Api.php b/application/controllers/Api.php
index 0c628a8..344fa77 100644
--- a/application/controllers/Api.php
+++ b/application/controllers/Api.php
@@ -214,7 +214,7 @@ class Api extends CI_Controller {
  		$data = $_POST;
  		if(isset($_FILES['profile_picture'])) {
  			$data['file'] = $_FILES['profile_picture'];
- 		} 		
+ 		} 
  		$data['auth_token'] = $this->auth_token;
  		$res = $this->Api_model->update_profile($data);
  		if($res['status']!=0){
@@ -287,6 +287,19 @@ class Api extends CI_Controller {
  		}
  	}
 
+ 	public function searchEvent($str = null) {
+ 		$data['str'] = $str;
+ 		$res = $this->Api_model->searchEvent($data);
+ 		if($res['status']!=0){
+ 			$this->response($res['data']);
+ 		}
+ 		else{
+ 			$this->errorResponse($res['code'],$res['message']);
+ 		}
+ 	}
+
+
+
  	
 
 }
\ No newline at end of file
diff --git a/application/controllers/Venue.php b/application/controllers/Venue.php
index 5934844..95c3601 100644
--- a/application/controllers/Venue.php
+++ b/application/controllers/Venue.php
@@ -28,6 +28,7 @@ class Venue extends CI_Controller {
 	function addVenues(){
         $this->load->model('Host_model');
         $this->load->model('Region_model');
+
         $template['host_data'] = $this->Host_model->getHostCategories('','1');
         $template['regionData'] = $this->Region_model->getRegionData('','1');
 
@@ -73,7 +74,6 @@ class Venue extends CI_Controller {
             $err = 1;
             $errMsg = 'Provide Proper Layout details';
         }
-
         if(isset($_POST['has_layout']) && $_POST['has_layout'] == 1){
             $config = set_upload_service("assets/uploads/services");
             $this->load->library('upload');
@@ -115,9 +115,14 @@ class Venue extends CI_Controller {
         $_POST['location_lat'] = $locData['lat'];
         $_POST['location_lng'] = $locData['lng'];
 
-        unset($_POST['has_layout'],$_POST['seat_color'],$_POST['seat_price'],$_POST['seat_capacity']);
+        $locality = '';
+        if(isset($_POST['locality']) && !empty($_POST['locality'])){
+            $locality = $_POST['locality'];
+        }
+        unset($_POST['locality'],$_POST['locality_type'],$_POST['has_layout'],$_POST['seat_color'],
+              $_POST['seat_price'],$_POST['seat_capacity']);
 
-        $status = $this->Venue_model->createVenue($_POST);
+        $status = $this->Venue_model->createVenue($_POST,$locality);
         if($status == 1){
             $flashMsg['class'] = 'success';
             $flashMsg['message'] = 'Venue Created';
@@ -264,5 +269,20 @@ class Venue extends CI_Controller {
         }
         echo json_encode($resArr);exit;
     }
+
+    function getLocalityData(){
+        $resArr = array('status'=>0);
+        if(!isset($_POST) || empty($_POST) || !isset($_POST['region_id']) || empty($_POST['region_id'])){
+            echo json_encode($resArr);exit;
+        }
+
+        $this->load->model('Region_model');
+        $localityData = $this->Region_model->getlocalityData($_POST['region_id'],'','1');
+        if(!empty($localityData)){
+            $resArr['status'] = 1;
+            $resArr['data'] = $localityData;
+        }
+        echo json_encode($resArr);exit;
+    }
 }
 ?>
diff --git a/application/controllers/Webservice.php b/application/controllers/Webservice.php
new file mode 100644
index 0000000..2cca146
--- /dev/null
+++ b/application/controllers/Webservice.php
@@ -0,0 +1,120 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+if (isset($_SERVER['HTTP_ORIGIN'])) {
+        header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
+        header('Access-Control-Allow-Credentials: true');
+        header('Access-Control-Max-Age: 86400'); 
+    }
+
+	if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
+		if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
+			header("Access-Control-Allow-Methods: GET, POST, OPTIONS");         
+
+		if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
+			header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
+
+		exit(0);
+	}
+
+class Webservice extends CI_Controller {
+	var $auth_token;
+
+	public function __construct() {
+		parent::__construct();
+		$this->load->model('Webservice_model');		
+		$this->load->model('Validation_app_model');
+		$method = $this->router->fetch_method();				
+		$data = (array) json_decode(file_get_contents('php://input'));
+		if($method == 'profile') {
+			$data = $_POST;
+		}
+		if (isset(apache_request_headers()['Auth'])) {
+            $this->auth_token = apache_request_headers()['Auth'];
+            $data['auth_token'] = $this->auth_token;
+        }
+		$res = $this->Validation_app_model->validation_check($method, $data);
+		if($res['state'] == 1) {
+ 			$this->errorResponse($res['response']['code'], $res['response']['message']);
+ 			die;
+ 		} 		
+ 	}
+
+ 	public function login() {
+ 		$data = (array) json_decode(file_get_contents('php://input'));
+ 		$res = $this->Webservice_model->login($data);
+ 		if($res['status']!=0){
+ 			$this->response($res['data']);
+ 		}
+ 		else{
+ 			$this->errorResponse($res['code'],$res['message']);
+ 		}
+ 	}
+
+
+ 	public function check_email_availability() {
+ 		$data = (array) json_decode(file_get_contents('php://input'));
+ 		$res = $this->Webservice_model->availability($data);
+ 		if($res['status']!=0){
+ 			$this->response($res['data']);
+ 		}
+ 		else{
+ 			$this->errorResponse($res['code'],$res['message']);
+ 		}
+ 	}
+
+ 	public function registration(){
+ 		$data = (array) json_decode(file_get_contents('php://input'));
+ 		$res = $this->Webservice_model->register($data);
+ 		if($res['status']!=0){
+ 			$this->response($res['data']);
+ 		}
+ 		else{
+ 			$this->errorResponse($res['code'],$res['message']);
+ 		}
+ 	}
+
+ 	public function get_places_list($cat_id = null) {
+ 		$data['cat_id'] = $cat_id;
+ 		$data['auth_token'] = $this->auth_token;
+ 		$res = $this->Webservice_model->discover($data);
+ 		if($res['status']!=0){
+ 			$this->response($res['data']);
+ 		}
+ 		else{
+ 			$this->errorResponse($res['code'],$res['message']);
+ 		}
+ 	}
+
+ 	public function place_details($event_id = null) {
+ 		if($event_id == null) {
+ 			$this->errorResponse("ER16","Event id is null or empty");
+ 			die;
+ 		}
+ 		$data['event_id'] = $event_id;
+ 		$data['auth_token'] = $this->auth_token;
+ 		$res = $this->Webservice_model->event($data);
+ 		if($res['status']!=0){
+ 			$this->response($res['data']);
+ 		}
+ 		else{
+ 			$this->errorResponse($res['code'],$res['message']);
+ 		}
+ 	}
+
+ 	public function response($data) {
+ 		$result =  array(
+ 			'status' => 'Success',
+ 			'data' =>$data
+ 		);
+ 		print json_encode($result);
+ 	}
+
+ 	public function errorResponse($errorCode, $errorDesc) {
+ 		$result =  array(
+ 			'status' => 'error',
+ 			'error'=> $errorCode,
+ 			'message'=> $errorDesc
+ 		);
+ 		print json_encode($result);
+ 	}
+}
\ No newline at end of file
diff --git a/application/models/Api_model.php b/application/models/Api_model.php
index 72e3c6b..0479bfd 100644
--- a/application/models/Api_model.php
+++ b/application/models/Api_model.php
@@ -8,7 +8,7 @@ class Api_model extends CI_Model {
 
  	public function login($data){
  		try{
- 			$this->db->select('customer.name,customer.phone,customer.email,customer.profile_image AS image,customer.gender,users.id AS userId, customer.city');
+ 			$this->db->select('customer.name,customer.dob,customer.phone,customer.email,customer.profile_image AS image,customer.gender,users.id AS userId, customer.city,customer.dob');
  			$this->db->where('users.status',1);
 	 		$this->db->where('users.password',md5($data['password']));
 	 		$this->db->where('customer.email',$data['email_id']);
@@ -66,7 +66,7 @@ class Api_model extends CI_Model {
 	 				$email_id = $data['email_id'];
 	 				$message = "Hi,\n\r Welcome to TimeOut.\r\n Please use username: ".$email_id." and Password: ".$temp_password." for access your account";
 	 				$this->send_mail($subject,$email_id,$message);
-	 				$this->db->select('customer.name,customer.phone,customer.email,customer.profile_image AS image,customer.gender,users.id AS userId, customer.city');
+	 				$this->db->select('customer.name,customer.dob,customer.phone,customer.email,customer.profile_image AS image,customer.gender,users.id AS userId, customer.city,customer.dob');
 		 			$this->db->where('users.id',$id);
 			 		$this->db->from('users');
 			 		$this->db->join('customer','customer.customer_id = users.id');
@@ -294,7 +294,7 @@ class Api_model extends CI_Model {
  					$page_limit = ($page - 1) * $per_page;
 
  					if($count > $page_limit) {
- 						$result = $this->db->select('booking.id AS book_id,booking.event_id,booking.bookId AS bookingCode,booking.qrcode,booking.no_of_ticket,booking.amount,booking.status AS book_status,events.event_name,events.event_discription,event_gallery.media_url,venue.location')->where('customer_id',$user_id)->where('booking.status!=',3)->from('booking')->join('events','booking.event_id = events.event_id')->join('event_date_time','booking.event_date_id = event_date_time.id')->join('venue', 'venue.id = events.venue_id')->join('event_gallery', 'events.event_id = event_gallery.event_id AND event_gallery.media_type = 0', 'LEFT')->limit($per_page,$page_limit)->get()->result();
+ 						$result = $this->db->select('booking.id AS book_id,booking.event_id,booking.bookId AS bookingCode,booking.qrcode,booking.no_of_ticket,booking.amount,booking.status AS book_status,events.event_name,events.event_discription,event_gallery.media_url,venue.location')->where('customer_id',$user_id)->where('booking.status!=',3)->from('booking')->join('events','booking.event_id = events.event_id')->join('event_date_time','booking.event_date_id = event_date_time.id')->join('venue', 'venue.id = events.venue_id')->join('event_gallery', 'events.event_id = event_gallery.event_id AND event_gallery.media_type = 0', 'LEFT')->group_by('booking.id')->limit($per_page,$page_limit)->get()->result();
  						$meta = array('total_pages'=>ceil($count/$per_page),
  									  'total'=>$count,
  									  'current_page'=>$page,
@@ -453,7 +453,7 @@ class Api_model extends CI_Model {
 		 		}
 
 		 		if($img_error == 1) {
-		 			$this->db->select('customer.name,customer.phone,customer.email,customer.profile_image AS image,customer.gender,users.id AS userId, customer.city');
+		 			$this->db->select('customer.name,customer.dob,customer.phone,customer.email,customer.profile_image AS image,customer.gender,users.id AS userId, customer.city');
 		 			$this->db->where('users.id',$user_id);
 			 		$this->db->from('users');
 			 		$this->db->join('customer','customer.customer_id = users.id');
@@ -593,8 +593,9 @@ class Api_model extends CI_Model {
  			$user_id = $this->auth_token_get($data['auth_token']); 			
  			if($user_id > 0) {
  				$cat_id = $data['cat_id'];
+ 				$city_id = $data['city'];
  				$category = $this->db->where('cat_id',$cat_id)->get('event_category')->row();
- 				$result = $this->db->query("SELECT events.event_id, events.event_name,events.event_discription AS event_description,events.seat_pricing, events.custom_seat_layout, venue.layout, venue.layout_details,`event_gallery`.`media_url` FROM events INNER JOIN event_date_time ON events.event_id = event_date_time.event_id AND event_date_time.date >= DATE_FORMAT(NOW(),'%Y-%m-%d') INNER JOIN venue ON venue.id = events.venue_id LEFT JOIN `event_gallery` ON `events`.`event_id` = `event_gallery`.`event_id` AND `event_gallery`.`media_type` = 0 WHERE events.status = 1 AND events.category_id = ".$cat_id." GROUP BY events.event_id")->result();
+ 				$result = $this->db->query("SELECT events.event_id, events.event_name,events.event_discription AS event_description,events.seat_pricing, events.custom_seat_layout, venue.layout, venue.layout_details,`event_gallery`.`media_url` FROM events INNER JOIN event_date_time ON events.event_id = event_date_time.event_id AND event_date_time.date >= DATE_FORMAT(NOW(),'%Y-%m-%d') INNER JOIN venue ON venue.id = events.venue_id LEFT JOIN `event_gallery` ON `events`.`event_id` = `event_gallery`.`event_id` AND `event_gallery`.`media_type` = 0 WHERE events.status = 1 AND events.category_id = ".$cat_id." AND venue.region_id = ".$city_id." GROUP BY events.event_id")->result();
 				if(count($result)>0){
 					$resultData = array();
 					foreach ($result as $rs) {
@@ -642,7 +643,8 @@ class Api_model extends CI_Model {
  			$user_id = $this->auth_token_get($data['auth_token']); 			
  			if($user_id > 0) {
  				$event_id = $data['event_id'];
- 				$result = $this->db->query("SELECT events.event_id, AVG(review.rate) AS rate, MAX(booking.id) AS attendees, events.event_name,events.event_discription AS event_description,events.seat_pricing, events.custom_seat_layout, venue.layout, venue.layout_details,venue.venue_name,venue.venue_details,venue.location,venue.location_lat AS lat,venue.location_lng AS lng, GROUP_CONCAT(DISTINCT `event_gallery`.`media_url`) AS media_url,favourite.status AS fav_status, GROUP_CONCAT(DISTINCT tags.tag_name) AS tag, GROUP_CONCAT(DISTINCT CONCAT_WS('#',event_date_time.date,event_date_time.time)) AS date_time FROM events INNER JOIN event_date_time ON events.event_id = event_date_time.event_id INNER JOIN venue ON venue.id = events.venue_id LEFT JOIN `event_gallery` ON `events`.`event_id` = `event_gallery`.`event_id` AND `event_gallery`.`status` != 0 LEFT JOIN booking on booking.event_id = events.event_id LEFT JOIN favourite ON favourite.event_id = events.event_id AND favourite.user_id = ".$user_id." AND favourite.status = 1 LEFT JOIN event_tags ON events.event_id = event_tags.event_id LEFT JOIN tags on tags.tag_id = event_tags.tag_id LEFT JOIN review ON events.event_id = review.event_id WHERE events.event_id = ".$event_id." GROUP BY events.event_id, event_date_time.event_id")->result();
+				$this->db->query("SET SESSION group_concat_max_len = 20000");
+ 				$result = $this->db->query("SELECT events.event_id, AVG(review.rate) AS rate, MAX(booking.id) AS attendees, events.event_name,events.event_discription AS event_description,events.seat_pricing, events.custom_seat_layout, events.seat_pricing, venue.layout, venue.layout_details,venue.venue_name,venue.venue_details,venue.location,venue.location_lat AS lat,venue.location_lng AS lng, GROUP_CONCAT(DISTINCT `event_gallery`.`media_url`) AS media_url,favourite.status AS fav_status, events.max_booking, host_categories.show_layout, GROUP_CONCAT(DISTINCT tags.tag_name) AS tag, GROUP_CONCAT(DISTINCT CONCAT_WS('#',event_date_time.id,event_date_time.date,event_date_time.time)) AS date_time FROM events INNER JOIN event_date_time ON events.event_id = event_date_time.event_id INNER JOIN venue ON venue.id = events.venue_id LEFT JOIN `event_gallery` ON `events`.`event_id` = `event_gallery`.`event_id` AND `event_gallery`.`status` != 0 LEFT JOIN booking on booking.event_id = events.event_id LEFT JOIN favourite ON favourite.event_id = events.event_id AND favourite.user_id = ".$user_id." AND favourite.status = 1 LEFT JOIN event_tags ON events.event_id = event_tags.event_id LEFT JOIN tags on tags.tag_id = event_tags.tag_id LEFT JOIN review ON events.event_id = review.event_id INNER JOIN host_categories ON venue.host_cat_id = host_categories.host_cat_id WHERE events.event_id = ".$event_id." GROUP BY events.event_id, event_date_time.event_id")->result();
 					if(count($result)>0){
 						$resultData = array();
 						$event_layout = '';
@@ -667,8 +669,8 @@ class Api_model extends CI_Model {
 							$time_spec = array();
 							$latlng = array('lat'=>$rs->lat, 'lng'=>$rs->lng);
 							foreach ($dates as $rss) {
-								list($date,$time) = explode('#', $rss);
-								$time_spec[$date][] = $time;
+								$timeArray = explode('#', $rss);
+								$time_spec[$timeArray[1]][] = array("id"=>$timeArray[0],"time"=>$timeArray[2]);
 							}
 							$tags = explode(',', $rs->tag);
 							$media_url = explode(',', $rs->media_url);
@@ -684,12 +686,15 @@ class Api_model extends CI_Model {
 								'event_tags'=>$tags,
 								'event_layout_url'=>$rs->layout,
 								'event_price_layout'=>$event_layout,
+								'seat_pricing'=>$rs->seat_pricing,
 								'event_times'=>$time_spec,
 								'fav_status'=>$rs->fav_status,
 								'event_id'=>$rs->event_id,
 								'venue_name'=>$rs->venue_name,
 								'venue_details'=>$rs->venue_details,
 								'venue_location'=>$rs->location,
+								'max_booking'=>$rs->max_booking,
+								'show_layout'=>$rs->show_layout,
 								'latlng'=>$latlng
 							);
 							array_push($resultData, $resData);
@@ -838,6 +843,16 @@ class Api_model extends CI_Model {
  		} 
  		return $res; 		
  	}
+
+
+	function searchEvent($data) {
+ 		$str = strtolower($data['str']);
+ 		$event = $this->db->select('event_name,event_id')->from('events')->where("event_name LIKE '%$str%'")->where('status',1)->limit(5)->get();
+ 		$region = $this->db->select('id,name')->from('region')->where("name LIKE '%$str%'")->where('status',1)->limit(5)->get();
+ 		$response = array('events'=>$event->result(), 'cityList'=>$region->result());
+ 		$res = array('status'=>1,'data'=>$response);
+ 		return $res;
+ 	}
  	
  }
 ?>
\ No newline at end of file
diff --git a/application/models/Region_model.php b/application/models/Region_model.php
index d591076..40ab788 100644
--- a/application/models/Region_model.php
+++ b/application/models/Region_model.php
@@ -40,5 +40,17 @@ class Region_model extends CI_Model {
  										     array('id'=>$region_id));
  		return $status;
  	}
+
+ 	public function getlocalityData($region_id = '',$locality_id = '', $status = '0'){
+ 		$where = array('status'=>$status);
+ 		if(!empty($region_id)){
+ 			$where['region_id'] = $region_id;
+ 		}
+ 		if(!empty($locality_id)){
+ 			$where['id'] = $locality_id;
+ 		}
+ 		$data = $this->db->get_where('locality',$where);
+ 		return $data->result();
+ 	}
 }
 ?>
\ No newline at end of file
diff --git a/application/models/Validation_app_model.php b/application/models/Validation_app_model.php
new file mode 100644
index 0000000..c23f2ff
--- /dev/null
+++ b/application/models/Validation_app_model.php
@@ -0,0 +1,80 @@
+<?php 
+
+class Validation_app_model extends CI_Model {
+	public $validation_array = array(
+			'login'=> array('email'=>array('required'=>array('code'=>'ER02', 'message'=>'Email id is null or empty'),
+											  'email'=>array('code'=>'ER03', 'message'=>'Invalid Email id')
+										),
+							'password'=>array('required'=>array('code'=>'ER04', 'message'=>'Password is null or empty'),
+								        )
+						),
+			'check_email_availability'=> array('email'=>array('required'=>array('code'=>'ER02', 'message'=>'Email id is null or empty'),
+											  'email'=>array('code'=>'ER03', 'message'=>'Invalid Email id')
+										),
+							'phone'=>array('required'=>array('code'=>'ER07', 'message'=>'Phone no is null or empty'),
+										   'phone'=>array('code'=>'ER08', 'message'=>'Invalid Phone no')
+						),
+					),
+			'registration'=> array('email'=>array('required'=>array('code'=>'ER02', 'message'=>'Email id is null or empty'),
+											  'email'=>array('code'=>'ER03', 'message'=>'Invalid Email id')
+										),
+							'phone'=>array('required'=>array('code'=>'ER07', 'message'=>'Phone no is null or empty'),
+										   'phone'=>array('code'=>'ER08', 'message'=>'Invalid Phone no'),
+								        ),
+							'password'=>array('required'=>array('code'=>'ER04', 'message'=>'Password is null or empty'),
+								        )
+						),
+			'get_places_list'=>array('auth_token'=>array('required'=>array('code'=>'ER17', 'message'=>'User Id is null or empty'),
+								        )
+						),
+			'place_details'=>array('auth_token'=>array('required'=>array('code'=>'ER17', 'message'=>'User Id is null or empty'),
+								        )
+						),
+		);
+
+	public function validation_check($method_name, $parms) {
+ 		$state = 0;
+ 		$rules = $this->validation_array[$method_name]; 		
+ 		$error_key = '';
+ 		foreach ($rules as $key => $value) {
+ 			foreach ($value as $keys => $values) {
+ 				switch ($keys) {
+ 						case 'required':
+ 							if(!isset($parms[$key]) || $parms[$key]=='' || $parms[$key]== null){
+ 								$state = 1;
+ 								$error_key = $values;
+ 							} 
+ 							break;
+ 						case 'email':
+ 							if (isset($parms[$key]) && !filter_var($parms[$key], FILTER_VALIDATE_EMAIL)) {
+	  							$state = 1;
+ 								$error_key = $values; 
+							} 
+ 							break;
+ 						case 'phone':
+ 							if(isset($parms[$key])){
+ 							$phone = preg_replace('/[^0-9]/', '', $parms[$key]);
+	 							if (strlen($phone) !== 10) {
+		  							$state = 1;
+	 								$error_key = $values; 
+								}
+							} 
+ 							break;
+
+
+ 						
+ 						default:
+ 							# code...
+ 							break;
+ 					}
+ 					if($state==1){
+ 						break;
+ 					}
+ 			}
+ 			if($state==1){
+ 				break;
+ 			}
+ 		}
+ 		return array('state'=>$state,'response'=>$error_key);
+ 	} 	
+}
\ No newline at end of file
diff --git a/application/models/Validation_model.php b/application/models/Validation_model.php
index 2660985..12b16e6 100644
--- a/application/models/Validation_model.php
+++ b/application/models/Validation_model.php
@@ -96,6 +96,7 @@ class Validation_model extends CI_Model {
 							'event_id'=>array('required'=>array('code'=>'ER16', 'message'=>'Event id is null or empty')
 								        ),
 						),
+			'searchEvent'=>array()
 				);
 			
 	
diff --git a/application/models/Venue_model.php b/application/models/Venue_model.php
index c84b3a8..545a9ba 100644
--- a/application/models/Venue_model.php
+++ b/application/models/Venue_model.php
@@ -22,11 +22,20 @@ class Venue_model extends CI_Model {
  		return 0;
  	}
 
- 	public function createVenue($venueData = array()){
+ 	public function createVenue($venueData = array(),$locality = ''){
  		if(empty($venueData)){
  			return 0;
  		}
+ 		if(!empty($locality)){
+	 		$status = $this->db->insert('locality',
+	 				  array('locality'=>$locality,'region_id'=>$venueData['region_id']));
+
+	 		if($status){
+	 			$venueData['locality_id'] = $this->db->insert_id();
+	 		}
+	 	}
  		$status = $this->db->insert('venue',$venueData);
+
  		return $status;
  	}
 
diff --git a/application/models/Webservice_model.php b/application/models/Webservice_model.php
new file mode 100644
index 0000000..aed3881
--- /dev/null
+++ b/application/models/Webservice_model.php
@@ -0,0 +1,287 @@
+<?php 
+
+class Webservice_model extends CI_Model {
+	
+	public function _consruct(){
+		parent::_construct();
+ 	}
+
+ 	function login($data){
+ 		try{
+ 			$this->db->select("customer.name AS user_name,customer.phone,customer.email,customer.profile_image AS profile_photo,users.id AS user_id, IF(customer.phone_verified = 0,'false','true') AS is_phone_verified");
+ 			$this->db->where('users.status',1);
+	 		$this->db->where('users.password',md5($data['password']));
+	 		$this->db->where('customer.email',$data['email']);
+	 		$this->db->from('users');
+	 		$this->db->join('customer','customer.customer_id = users.id');
+	 		$result = $this->db->get()->row();
+	 		if($result){
+	 			$auth_token = md5(microtime().rand());
+	 			$response = array('user'=>$result,'auth_token'=>$auth_token);
+	 			$this->generateAuth($result->user_id,$auth_token);
+	 			$res = array('status'=>1,'data'=>$response);
+	 		} else {
+	 			$res = array('status'=>0,'message'=>'Invalid username / Password','code'=>'ER05');
+	 		}
+ 		} catch(Exception $e) {
+ 			 $res = array('status'=>0,'message'=>'Ohh No!! Something went South!!','code'=>'ER06');
+ 		} 
+ 		return $res;	
+ 	}
+
+
+ 	function availability($data) {
+ 		try{
+ 			$is_email_available = "true";
+ 			$is_phone_available = "true";
+ 			$res_count = $this->db->where('email',$data['email'])->or_where('phone',$data['phone'])->get('customer')->result();
+ 			if(count($res_count) > 0) {
+ 				foreach ($res_count as $rs) {
+ 					if($rs->email == $data['email']) {
+ 						$is_email_available = "false";
+ 					}
+
+ 					if($rs->phone == $data['phone']) {
+ 						$is_phone_available = "false";
+ 					}
+ 				}
+ 			}
+
+			$data = array(
+ 						'is_email_available'=>$is_email_available,
+ 						'is_phone_available'=>$is_phone_available
+ 						);
+		 	$res = array('status'=>1,'data'=>$data);
+
+ 		} catch(Exception $e) {
+ 			 $res = array('status'=>0,'message'=>'Ohh No!! Something went South!!','code'=>'ER06');
+ 		} 
+ 		return $res;
+ 	}
+
+
+ 	function register($data) {
+ 		try{
+ 			$res_count = $this->db->where('email',$data['email'])->or_where('phone',$data['phone'])->get('customer')->row();
+ 			if(count($res_count) > 0) {
+ 				if($res_count->email == $data['email'] && $res_count->phone == $data['phone']){
+ 					$res = array('status'=>0,'message'=>'Already have an account with email id and phone no. Please login','code'=>'ER12');
+ 				} else if($res_count->email == $data['email']){
+ 					$res = array('status'=>0,'message'=>'Email id already exists','code'=>'ER09');
+ 				} else if($res_count->phone == $data['phone']) {
+ 					$res = array('status'=>0,'message'=>'Phone no already exists','code'=>'ER10');
+ 				}
+ 			} else {
+ 				$temp_password = $data['password'];
+	 			$data['password'] = md5($data['password']);
+
+	 			$user_data = array(
+	 								'password'=>$data['password'],
+	 							    'display_name'=>'Customer',
+	 							    'user_type'=> 3
+	 							);
+	 			$this->db->insert('users',$user_data);
+	 			$id = $this->db->insert_id();
+	 			if($id) {
+	 				$customer_data = array(
+	 									'customer_id'=>$id,
+	 									'phone'=>$data['phone'],
+	 									'email'=>$data['email']
+	 								 );
+	 				$this->db->insert('customer', $customer_data);
+
+	 				$subject = "New account created successfully";
+	 				$email_id = $data['email'];
+	 				$message = "Hi,\n\r Welcome to TimeOut.\r\n Please use username: ".$email_id." and Password: ".$temp_password." for access your account";
+	 				$this->send_mail($subject,$email_id,$message);
+	 				$this->db->select("customer.name AS user_name,customer.phone,customer.email,customer.profile_image AS profile_photo,users.id AS user_id, IF(customer.phone_verified = 0,'false','true') AS is_phone_verified");
+		 			$this->db->where('users.id',$id);
+			 		$this->db->from('users');
+			 		$this->db->join('customer','customer.customer_id = users.id');
+			 		$result = $this->db->get()->row();
+			 		if($result){
+			 			$auth_token = md5(microtime().rand());
+			 			$this->generateAuth($result->user_id,$auth_token);
+			 			$response = array('user'=>$result,'auth_token'=>$auth_token);
+			 			$res = array('status'=>1,'data'=>$response);
+			 		} else {
+			 			$res = array('status'=>0,'message'=>'No record found','code'=>'ER13');
+			 		}
+	 			} else {
+	 				$res = array('status'=>0,'message'=>'Registration failed please try again','code'=>'ER11');
+	 			}	 			
+		 	}
+ 		} catch(Exception $e) {
+ 			 $res = array('status'=>0,'message'=>'Ohh No!! Something went South!!','code'=>'ER06');
+ 		} 
+ 		return $res;
+ 	}
+
+
+ 	function discover($data) {
+
+ 		try {
+ 			if($data['auth_token']) {
+ 				$user_id = $this->auth_token_get($data['auth_token']); 
+ 			} else {
+ 				$user_id = 0;
+ 			}
+ 			if(isset($data['cat_id'])) {
+ 				$where = ' AND events.category_id = '.$data['cat_id'];
+ 			} else {
+ 				$where = '';
+ 			}
+ 				$result = $this->db->query("SELECT events.event_id AS event_id, events.event_name AS name,`event_gallery`.`media_url` AS image, COUNT(booking.id) AS attendees, event_category.category, AVG(review.rate) AS rating, venue.location, IF(favourite.status = 1, 'true','false') AS is_favorite, IF(events.provider_id = 1,'true','false') AS is_editors_choice, events.avg_price AS rate FROM events INNER JOIN event_date_time ON events.event_id = event_date_time.event_id AND event_date_time.date >= DATE_FORMAT(NOW(),'%Y-%m-%d') LEFT JOIN `event_gallery` ON `events`.`event_id` = `event_gallery`.`event_id` AND `event_gallery`.`media_type` = 0 LEFT JOIN booking ON booking.event_id = events.event_id LEFT JOIN event_category ON events.category_id = event_category.cat_id LEFT JOIN review ON review.event_id = events.event_id LEFT JOIN venue ON venue.id = events.venue_id LEFT JOIN favourite ON favourite.event_id = events.event_id AND favourite.user_id = ".$user_id." AND favourite.status = 1 WHERE events.status = 1 ".$where." GROUP BY events.event_id")->result();
+				if(count($result)>0){
+					$resultData = array();					
+					$resultData['events'] = $result;
+					$res = array('status'=>1,'data'=>$resultData);
+				} else {
+					$res = array('status'=>0,'message'=>'No records found','code'=>'ER13');
+				}
+ 		} catch(Exception $e) {
+ 			 $res = array('status'=>0,'message'=>'Ohh No!! Something went South!!','code'=>'ER06');
+ 		} 
+ 		return $res; 		
+ 	}
+
+ 	function event($data) {
+
+ 		try {
+ 			$user_id = $this->auth_token_get($data['auth_token']); 			
+ 			if($user_id > 0) {
+ 				$event_id = $data['event_id'];
+ 				$this->db->query("SET SESSION group_concat_max_len = 20000");
+ 				$rs = $this->db->query("SELECT events.event_id, AVG(review.rate) AS rate, MAX(booking.id) AS attendees, events.event_name,events.event_discription AS event_description,events.seat_pricing, events.custom_seat_layout, venue.layout, venue.layout_details,venue.venue_name,venue.venue_details,venue.location,venue.location_lat AS lat,venue.location_lng AS lng, GROUP_CONCAT(DISTINCT `event_gallery`.`media_url`) AS media_url,IF(favourite.status = 1,'true','false') AS fav_status, GROUP_CONCAT(DISTINCT tags.tag_name) AS tag, GROUP_CONCAT(DISTINCT CONCAT_WS('#',event_date_time.id,event_date_time.date,event_date_time.time)) AS date_time, events.max_booking FROM events INNER JOIN event_date_time ON events.event_id = event_date_time.event_id INNER JOIN venue ON venue.id = events.venue_id LEFT JOIN `event_gallery` ON `events`.`event_id` = `event_gallery`.`event_id` AND `event_gallery`.`status` != 0 LEFT JOIN booking on booking.event_id = events.event_id LEFT JOIN favourite ON favourite.event_id = events.event_id AND favourite.user_id = ".$user_id." AND favourite.status = 1 LEFT JOIN event_tags ON events.event_id = event_tags.event_id LEFT JOIN tags on tags.tag_id = event_tags.tag_id LEFT JOIN review ON events.event_id = review.event_id WHERE events.event_id = ".$event_id." GROUP BY events.event_id, event_date_time.event_id")->row();
+					if(count($rs)>0){
+						$resultData = array();
+						$event_layout = '';
+						$colorData = array();
+						$booking = $this->db->where('event_id',$event_id)->select('ticket_details')->get('booking')->result();
+						if(count($booking) > 0){
+							foreach ($booking as $row) {
+								$priceData = json_decode($row->ticket_details);
+								if(count($priceData) > 0){
+									foreach ($priceData as $value) {
+										$colorData[$value->color] = isset($colorData[$value->color]) ? + $colorData[$value->color] + $value->no_ticket: $value->no_ticket;
+									}
+								}
+							}
+						}
+
+
+						//foreach ($result as $rs) {
+							if($rs->layout!=''){
+								if($rs->custom_seat_layout!=''){
+									$pricelist = json_decode($rs->custom_seat_layout, TRUE);
+									$price = min(array_column($pricelist, 'price'));
+									$event_layout = $rs->custom_seat_layout;
+								} else {
+									$pricelist = json_decode($rs->layout_details, TRUE);
+									$price = min(array_column($pricelist, 'price'));
+									$event_layout = $rs->layout_details;
+								}
+							} else {
+								$pricelist = json_decode($rs->seat_pricing, TRUE);
+								$price = $pricelist['price'];
+								$event_layout = $rs->seat_pricing;
+							}
+							$event_layout = json_decode($event_layout);
+							$event_layouts = array();
+							foreach ($event_layout as $value) {
+								if(isset($colorData[$value->color])) {
+									$avaliable = $value->capacity - $colorData[$value->color];
+								} else {
+									$avaliable = $value->capacity;
+								}
+								$priceLayout = array('class_name' => $value->color,
+													'rate'=>$value->price,
+													'total_tickets'=>$value->capacity,
+													'available_tickets'=>$avaliable,
+                									"max_ticket"=>$rs->max_booking
+                								);
+								array_push($event_layouts, $priceLayout);
+
+							}
+
+							$dates = explode(',', $rs->date_time);
+							$time_spec = array();
+							foreach ($dates as $rss) {
+								list($id,$date,$time) = explode('#', $rss);
+								$time_spec[] = array('id'=>$id, 'date'=>$date, 'time'=>$time);
+							}
+							
+							$tags = explode(',', $rs->tag);
+							$media_url = explode(',', $rs->media_url);
+							
+							$resData = array(
+								'event_id'=>$rs->event_id,
+								'name'=>$rs->event_name,
+								'description'=>$rs->event_description,
+								'rating'=>$rs->rate,
+								'total_attendees'=>$rs->attendees,
+								'layout_image'=>$rs->layout,
+								'is_favorite'=>$rs->fav_status,
+								'photos'=>$media_url,
+								'time'=>$time_spec[0]['time'],
+								'date'=>$time_spec[0]['date'],
+								'date_list'=>$time_spec,
+								'classes'=>$event_layouts,
+								'latitude'=>$rs->lat,
+								'longitude'=>$rs->lng
+							);
+							/*array_push($resultData, $resData);
+						}*/
+						$res = array('status'=>1,'data'=>$resData);
+					} else {
+						$res = array('status'=>0,'message'=>'No records found','code'=>'ER13');
+					}
+				
+ 			} else {
+ 				$res = array('status'=>0,'message'=>'Invalid user','code'=>'ER19');
+ 			}
+ 			
+
+ 		} catch(Exception $e) {
+ 			 $res = array('status'=>0,'message'=>'Ohh No!! Something went South!!','code'=>'ER06');
+ 		} 
+ 		return $res; 		
+ 	}
+
+ 	function generateAuth($userId,$auth_token) {
+ 		$this->db->insert('customer_auth',array('user_id'=>$userId, 'auth_token'=>$auth_token));
+ 	}
+
+ 	function auth_token_get($token) {
+ 		$rs = $this->db->select('user_id')->where('auth_token', $token)->get('customer_auth')->row();
+ 		if(count($rs) > 0) {
+ 			return $rs->user_id;
+ 		} else {
+ 			return 0;
+ 		}
+ 	}
+
+ 	function send_mail($subject,$email,$message,$attach=null) {
+ 		$ci =& get_instance(); 
+		$ci->load->library('email');
+        $ci->email->initialize(array(
+          'protocol' => 'smtp',
+          'smtp_host' => 'smtp.sendgrid.net',
+          'smtp_user' => 'adarsh@techware.in',
+          'smtp_pass' => 'Golden_123',
+          'smtp_port' => 587,
+          'crlf' => "\r\n",
+          'newline' => "\r\n"
+        ));
+        
+        $ci->email->from('no-reply@nuvento.com', 'TimeOut');
+        $ci->email->to($email);
+        $ci->email->cc('epocnova@gmail.com');
+        $ci->email->subject($subject);
+        $ci->email->message($message);
+        if($attach!=null) {
+          $ci->email->attach($attach);
+        }
+        return $ci->email->send();
+ 	}
+ }
\ No newline at end of file
diff --git a/application/views/Event/eventAddForm.php b/application/views/Event/eventAddForm.php
index ec7d56f..590b43e 100644
--- a/application/views/Event/eventAddForm.php
+++ b/application/views/Event/eventAddForm.php
@@ -224,7 +224,7 @@
                   <div class="col-sm-6">
                     <div class="form-group">
                       <label>Event Description</label>
-                      <textarea type="text" class="ip_reg_form_input form-control reset-form-custom required" placeholder="Venue Description" name="event_discription" required 
+                      <textarea id="rich_editor" type="text" class="ip_reg_form_input form-control reset-form-custom required" placeholder="Venue Description" name="event_discription" required 
                       style="height:108px;" data-parsley-trigger="change" data-parsley-minlength="2"></textarea>
                     </div>
                   </div>
diff --git a/application/views/Event/eventEditForm.php b/application/views/Event/eventEditForm.php
index 82dc892..d15c15c 100644
--- a/application/views/Event/eventEditForm.php
+++ b/application/views/Event/eventEditForm.php
@@ -217,7 +217,7 @@
                 <div class="col-sm-6">
                   <div class="form-group">
                     <label>Event Description</label>
-                    <textarea type="text" class="ip_reg_form_input form-control reset-form-custom required" placeholder="Venue Description" name="event_discription" required 
+                    <textarea id="rich_editor" type="text" class="ip_reg_form_input form-control reset-form-custom required" placeholder="Venue Description" name="event_discription" required 
                     style="height:108px;" data-parsley-trigger="change" data-parsley-minlength="2"><?= $event_data->event_discription ?></textarea>
                   </div>
                 </div>
diff --git a/application/views/Venue/venueAddForm.php b/application/views/Venue/venueAddForm.php
index d6b1e4b..ed1a005 100644
--- a/application/views/Venue/venueAddForm.php
+++ b/application/views/Venue/venueAddForm.php
@@ -34,8 +34,7 @@
                 <?php if(!empty($regionData)){ ?>
                   <div class="form-group">
                     <label>Region</label>
-                    <select name="region_id" class="form-control required" 
-                            placeholder="Select Region" required>
+                    <select name="region_id" class="form-control required" placeholder="Select Region" required>
                       <option selected disabled>Choose a Region</option>
                       <?php 
                         foreach ($regionData as $region) {
@@ -51,15 +50,13 @@
                 <div class="form-group">
                   <label>Venue Title</label>
                   <input type="text" class="form-control required" data-parsley-trigger="change"
-                  data-parsley-minlength="1" name="venue_name" required="" 
-                  placeholder="Enter Venue Title" value="<?= (isset($venue_data->venue_name))?$venue_data->venue_name:'' ?>">
-                  <span class="glyphicon form-control-feedback"></span>
+                    data-parsley-minlength="1" name="venue_name" required="" placeholder="Enter Venue Title" 
+                    value="<?= (isset($venue_data->venue_name))?$venue_data->venue_name:'' ?>">
                 </div>
                 <div class="form-group">
                   <label>Venue Address</label>
                   <input type="text" class="form-control required" data-parsley-trigger="change" 
                   id="loc_search_1" name="location" placeholder="Venue Address" value="<?= (isset($venue_data->location))?$venue_data->location:'' ?>" required>
-                  <span class="glyphicon  form-control-feedback"></span>
                 </div>
               </div>
               <div class="col-md-6">
@@ -83,9 +80,30 @@
                 <?php } ?> 
                 <div class="form-group">
                   <label>Venue Details</label>
-                  <textarea type="text" class="ip_reg_form_input form-control reset-form-custom required"  placeholder="Venue Details" name="venue_details" data-parsley-trigger="change" data-parsley-minlength="1" required="" style="height:108px;"><?= (isset($venue_data->venue_details))?$venue_data->venue_details:'' ?></textarea>
+                  <textarea type="text" class="ip_reg_form_input form-control reset-form-custom required"  placeholder="Venue Details" name="venue_details" data-parsley-trigger="change" data-parsley-minlength="1" required="" style="height:34px;"><?= (isset($venue_data->venue_details))?$venue_data->venue_details:'' ?></textarea>
                   <span class="glyphicon  form-control-feedback"></span>
                 </div>  
+                <?php if(!isset($venue_id) || empty($venue_id)){ ?>
+                  <div class="form-group">
+                    <label id="localityLabel">Venue Locality</label>
+                    <div id="showType" class="hide">
+                      <div class="col-md-5">
+                        <input type="radio" name="locality_type" value="0" checked>
+                        <label class="padAll-10">Use Existing Locality</label>
+                      </div>
+                      <div class="col-md-4">
+                        <input class="marginLeft15" type="radio" name="locality_type" value="1">
+                        <label class="padAll-10">Add New Locality</label>
+                      </div>
+                    </div>
+                    <div id="addNew" class="form-group">
+                      <input type="text" class="form-control required" data-parsley-trigger="change" name="locality" placeholder="Locality">
+                    </div>
+                    <div id="useExist" class="form-group hide">
+                      <select name="locality_id" class="form-control required" placeholder="Select Locality"></select>
+                    </div>
+                  </div>
+                <?php } ?>  
               </div>
               <input id="has_layout" type="hidden" name="has_layout" value='0'>
               <div class="col-md-12" id="layoutCntr" class="hide">  
@@ -263,4 +281,3 @@
     data-parsley-trigger="change" data-parsley-minlength="1" name="seat_price[]"data-parsley-pattern="^[0-9\ . \/]+$" placeholder="Default Seat Price">
   </div>
 </div>
-
diff --git a/assets/js/custom-script.js b/assets/js/custom-script.js
index c23cbaf..f4262f6 100644
--- a/assets/js/custom-script.js
+++ b/assets/js/custom-script.js
@@ -733,4 +733,79 @@ function slideTo(id){
     jQuery('html, body').animate({
         scrollTop: jQuery('[id="'+id+'"]').offset().top
     }, 800);
-}
\ No newline at end of file
+}
+
+jQuery('[name="locality_type"]').on('click',function(event) {
+  var type = jQuery(this).val();
+
+  if(type == 0){
+    jQuery('[id="useExist"]').removeClass('hide');
+    jQuery('[name="locality_id"]').prop("disabled",false);
+    jQuery('[name="locality_id"]').addClass("required");
+
+    jQuery('[id="addNew"]').addClass('hide');
+    jQuery('[name="locality"]').prop("disabled",true);
+    jQuery('[name="locality"]').removeClass("required");
+  } else {
+    jQuery('[id="addNew"]').removeClass('hide');
+    jQuery('[name="locality"]').prop("disabled",false);
+    jQuery('[name="locality"]').addClass("required");
+
+    jQuery('[id="useExist"]').addClass('hide');
+    jQuery('[name="locality_id"]').prop("disabled",true);
+    jQuery('[name="locality_id"]').removeClass("required");
+  }
+});
+
+jQuery('[name="region_id"]').on('change',function(){
+  var thisObj = jQuery(this),
+      region_id = thisObj.val();
+
+  if(region_id == '' || region_id == 'undefined' || region_id == undefined || region_id == 'null' || region_id == null){
+    return false;
+  }
+
+  jQuery.ajax({
+    url  : base_url+"Venue/getLocalityData", 
+    type : 'POST',
+    data : {'region_id':region_id},
+    success: function(resp){
+      if(resp == '' || resp == undefined || resp == 'undefined' || resp == null || resp == 'null'){
+        return false;
+      }
+      var resp_data = jQuery.parseJSON(resp);
+      if(resp_data['status'] == 0){
+
+        jQuery('[id="showType"]').addClass('hide');
+        jQuery('[id="localityLabel"]').removeClass('hide');
+
+        jQuery('[id="addNew"]').removeClass('hide');
+        jQuery('[name="locality"]').prop("disabled",false);
+        jQuery('[name="locality"]').addClass("required");
+
+        jQuery('[id="useExist"]').addClass('hide');
+        jQuery('[name="locality_id"]').prop("disabled",true);
+        jQuery('[name="locality_id"]').removeClass("required");
+      }
+
+      if(resp_data['status'] == 1){
+        jQuery('[id="addNew"]').addClass('hide');
+        jQuery('[name="locality"]').prop("disabled",true);
+        jQuery('[name="locality"]').removeClass("required");
+
+        jQuery('[id="useExist"]').removeClass('hide');
+        jQuery('[name="locality_id"]').prop("disabled",false);
+        jQuery('[name="locality_id"]').addClass("required");
+
+        jQuery('[id="showType"]').removeClass('hide');
+        jQuery('[id="localityLabel"]').addClass('hide');
+
+        jQuery('[name="locality_id"]').html('');
+        jQuery('[name="locality_id"]').html('<option selected disabled>Choose Venue Locality</option>');
+        jQuery.each(resp_data['data'], function(key, data) {
+          jQuery('[name="locality_id"]').append(jQuery("<option></option>").attr("value",data['id']).text(data['locality'])); 
+        });
+      }
+    }
+  });
+});
\ No newline at end of file