<?php 
/*---------------------------------------------------------------------------------------------------------------
common functions
---------------------------------------------------------------------------------------------------------------*/
function w($words){
	echo $words;
}

function e_text($text,$type = ''){
//type 1: Make a string's first character uppercase
//type 2: Make a string's first character lowercase
//type 3: Uppercase the first character of each word in a string
	switch($type){
		case 1: $text = ucfirst($text); break;
		case 2: $text = lcfirst($text); break;
		case 3: $text = ucwords(strtolower($text)); break;
		default: break;
	}
	echo $text;
}


function page_redirect($url){
	header('Location: '.$url);
}

function page_location($url){
	echo "<script>window.location='".$url."';</script>";
}

function js_alert($words){
	echo "<script>alert('".$words."');</script>";
}

function js_confirm($words){
	return "javascript:return confirm('".$words."');";
}

function is_not_null($value) {
	if(is_array($value)){
		if(sizeof($value)>0){return true;}
		else{return false;}
	}else{
		if((is_string($value)||is_int($value))&&($value!='')&&($value!='NULL')&&(strlen(trim($value))>0)){return true;}
		else{return false;}
	}
}

function isInteger($n) {
	if (preg_match("/[^0-^9]+/",$n) > 0) { return false; } return true;
} 

function is_number($value) {
	if((is_string($value)||is_int($value))&&($value!='')&&($value!='NULL')&&(strlen(trim($value))>0)){return true;}
}

function convert_time_format($time,$format){
	return date($format,strtotime($time));
}

function validateEmail($email){
   if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email))
      return true;
   else
      return false;
}

function validateDomainName($domain)
{
	if (preg_match ("/^[a-z0-9][a-z0-9\-]+[a-z0-9](\.[a-z]{2,4})+$/i", $domain)) {
		return true;
	} else {
		return false;
	}
}

function stripslashes_deep($value){
    $value = is_array($value) ?
                array_map('stripslashes_deep', $value) :
                stripslashes($value);

    return $value;
}

/*---------------------------------------------------------------------------------------------------------------
db functions
---------------------------------------------------------------------------------------------------------------*/

function db_count($query){
	$result = mysql_query($query);
	$count = mysql_num_rows($result);
	//if(mysql_error()) echo mysql_error();
	return $count;
}

function db_row($query){ //jz allow to get one data 
	$result = mysql_query($query);
	$row = mysql_fetch_row($result);
	return $row[0];
}

function db_assoc($query){  //jz for one row data
	$data = array();
	$result = mysql_query($query);
	$data = mysql_fetch_assoc($result);
	return $data;
}

function db_array($query){
	$text_query = mysql_query($query);
	$no=0;
	while($row = mysql_fetch_array($text_query, MYSQL_ASSOC)){
		$text[$no] = $row;
		$no++;
	}
	return $text;
}

function db_input($string, $link = 'db_connection') {
	global $$link;
	/*
	if (function_exists('mysql_real_escape_string')) {
		return mysql_real_escape_string($string, $$link);
	} elseif (function_exists('mysql_escape_string')) {
		return mysql_escape_string($string);
	}
	*/
	return addslashes($string);
}

function db_perform($table, $data, $action = 'insert', $parameters = '', $link = 'db_connection') {
	reset($data);
	if ($action == 'insert') {
	  $query = 'insert into ' . $table . ' (';
	  while (list($columns, ) = each($data)) {
		$query .= $columns . ', ';
	  }
	  $query = substr($query, 0, -2) . ') values (';
	  reset($data);
	  while (list(, $value) = each($data)) {
		switch ((string)$value) {
		  case 'now()':
			$query .= 'now(), ';
			break;
		  case 'null':
			$query .= 'null, ';
			break;
		  default:
			$query .= '\'' . db_input($value) . '\', ';
			break;
		}
	  }
	  $query = substr($query, 0, -2) . ')';
	} elseif ($action == 'update') {
	  $query = 'update ' . $table . ' set ';
	  while (list($columns, $value) = each($data)) {
		switch ((string)$value) {
		  case 'now()':
			$query .= $columns . ' = now(), ';
			break;
		  case 'null':
			$query .= $columns .= ' = null, ';
			break;
		  default:
			$query .= $columns . ' = \'' . db_input($value) . '\', ';
			break;
		}
	  }
	  $query = substr($query, 0, -2) . ' where ' . $parameters;

	}
	//echo $query;
	return mysql_query($query);	
//	return mysql_query($query, $link);
}

/*---------------------------------------------------------------------------------------------------------------
advanced function
--------------------------------------------------------------------------------------------------------------*/
function get_time_difference( $start, $end )
{
    $uts['start']      =    strtotime( $start );
    $uts['end']        =    strtotime( $end );
    if( $uts['start']!==-1 && $uts['end']!==-1 )
    {
        if( $uts['end'] >= $uts['start'] )
        {
            $diff    =    $uts['end'] - $uts['start'];
            if( $days=intval((floor($diff/86400))) )
                $diff = $diff % 86400;
            if( $hours=intval((floor($diff/3600))) )
                $diff = $diff % 3600;
            if( $minutes=intval((floor($diff/60))) )
                $diff = $diff % 60;
            $diff    =    intval( $diff );            
            return( array('days'=>$days, 'hours'=>$hours, 'minutes'=>$minutes, 'seconds'=>$diff, 'type' => 'pos') ); //pos = positive
        }
        else
        {
            //trigger_error( "Ending date/time is earlier than the start date/time", E_USER_WARNING );
			$diff    =    $uts['start'] - $uts['end'];
            if( $days=intval((floor($diff/86400))) )
                $diff = $diff % 86400;
            if( $hours=intval((floor($diff/3600))) )
                $diff = $diff % 3600;
            if( $minutes=intval((floor($diff/60))) )
                $diff = $diff % 60;
            $diff    =    intval( $diff );            
            return( array('days'=>$days, 'hours'=>$hours, 'minutes'=>$minutes, 'seconds'=>$diff, 'type' => 'neg') ); //neg = negative

        }
    }
    else
    {
        //trigger_error( "Invalid date/time data detected", E_USER_WARNING );
		return( false );
    }
    
}

function change_date_format($date,$date_format='Y-m-d'){
	if(empty($date)) return false;
	
	$timestamp = strtotime($date);
	return date($date_format, $timestamp);
}

function diff_date($ori_date,$total_days,$format='Y-m-d'){
	$ori_date = strtotime($ori_date); //to change $ori_date format to suit to strtotime date format
	$s['days'] = strtotime($total_days, $ori_date); // or, strtotime( '-1 days' );
	$y = date( $format, $s['days'] );
	return $y;
}

function get_expirydate($days,$the_date = '', $format = 'Y-m-d', $plus=true){
	$days = intval($days);

	if(empty($the_date))
		$the_date = date('Y-m-d') ;
	
	$edate = strtotime($the_date); 
	if($plus){
		$expiry_date = date($format, mktime(0,0,0,date('m',$edate),date('d',$edate)+$days,date('Y',$edate))); 
	}else{
		//minus day
		$expiry_date = date($format, mktime(0,0,0,date('m',$edate),date('d',$edate)-$days,date('Y',$edate))); 
	}		
	return $expiry_date;	
}

function multiexplode($delimiters,$string) {
    $ary = explode($delimiters[0],$string);
    array_shift($delimiters);
    if($delimiters != NULL) {
        foreach($ary as $key => $val) {
             $ary[$key] = multiexplode($delimiters, $val);
        }
    }
    return  $ary;
}

function prepare_url_arguments($include=array(),$exclude=array(),$return_array= false){
	$the_argv = $_SERVER['QUERY_STRING'];
	$argvs = multiexplode(array('&','='),$the_argv); 
	$new_arvg = array();
	
	
	if(!empty($include)){
		foreach((array)$argvs as $a){
			if(in_array($a[0],$include)){
				$new_arvg[] = $a[0]."=".$a[1];
			}
		}
	}elseif(!empty($exclude)){
		foreach((array)$argvs as $a){
			if(in_array($a[0],$exclude)){
				//do nth
			}else{
				$new_arvg[] = $a[0]."=".$a[1];			
			}
		}
	}else{
		foreach((array)$argvs as $a){
			$new_arvg[] = $a[0]."=".$a[1];			
		}
	}
	if($return_array)
		return $new_arvg;
	else
		return implode('&',$new_arvg);
}

/*---------------------------------------------------------------------------------------------------------------
html function 
---------------------------------------------------------------------------------------------------------------*/
function e_the_error($the_error,$head='',$foot='',$prefix='<div class="the_error">',$subfix='</div>'){
	if(empty($the_error)) return false;
	
	echo $head.$prefix.implode("<br>",$the_error).$subfix.$foot;
}
function e_the_message($the_message,$head='',$foot='',$prefix='<div class="the_message">',$subfix='</div>'){
	if(empty($the_message)) return false;
	
	echo $head.$prefix.implode("<br>",$the_message).$subfix.$foot;
}

function e_limit_text($text,$limitsLength = 100,$readMore = ' ... ', $prefix ='', $subfix =''){
	$text = strip_tags($text); //to remove html tag - prevent display error
	if (strlen($text) > $limitsLength ) {
		echo $prefix.substr($text, 0, $limitsLength).$readMore.$subfix;
	}else{
		echo $prefix.$text.$subfix;
	}	
}
function e_pagination($type = 1, $total = 0, $limit = 10, $offset = 1, $url= "#" , $template = "", $shownothing = false, $delimiter= '&nbsp;', $new_words = array()){
	//template pattern: @@page, @@from, @@to, @@total
	//type 2 is special handle

	if(empty($total)) return false; //to prevent error
	if(empty($limit)) $limit = 10;
	if(empty($offset)) $offset = 1;
	if($type==2) $url = "javascript:".$url;
	
	$words = array( 'word_first' => '&laquo; First',
					'word_prev' => '&lt; Previous',
					'word_next' => 'Next &gt;',
					'word_last' => 'Last &raquo;' );
	if(!empty($new_words) && is_array($new_words)){
		$words = array_merge($words,$new_words);
	}					
	
	$total_pages = ceil($total/$limit);
	$from = ($offset-1)*$limit + 1;
	$to = ($offset ==$total_pages)? $total : ($offset*$limit);
	$pages = array();
	
	if( ($total_pages<=1) && $shownothing){ //show nothing means if there's only 1 page wic means no pagination.
		return false;
	}

	/* Create a PREV link if there is one */
	if($offset > 1){
		if($type==2){ $prevurl = str_replace("@@offset",(int)($offset - 1),$url); }
		else{ $prevurl = $url . (int)($offset - 1); }
		$page_prev = ' <a href="'.$prevurl.'">'.$words['word_prev'].'</a> ';

		if($type==2){ $firsturl = str_replace("@@offset",(int)(1),$url); }
		else{ $firsturl = $url . (int)(1); }
		$page_first = ' <a href="'.$firsturl.'">'.$words['word_first'].'</a> ';
	}
	
	
	/* Loop through the total pages */
	for($i = 1; $i <= $total_pages; $i++){
		if(($offset) == $i){
			//$pages[] = '<span style="text-decoration:underline">'.$i.'</span>';
			$pages[] = '<span>'.$i.'</span>';
		}else{
			if($type==2){ $cururl = str_replace("@@offset",(int)($i),$url); }
			else{ $cururl = $url . $i; }
			$pages[] = '<a href="'.$cururl.'">'.$i.'</a>';
		}
	}
	/* Print next link if there is one */
	if($offset < $total_pages){
		if($type==2){ $nexturl = str_replace("@@offset",(int)($offset + 1),$url); }
		else{ $nexturl = $url . (int)($offset + 1); }
		$page_next = ' <a href="'.$nexturl.'">'.$words['word_next'].'</a>';

		if($type==2){ $lasturl = str_replace("@@offset",(int)($total_pages),$url); }
		else{ $lasturl = $url . (int)($total_pages); }
		$page_last = ' <a href="'.$lasturl.'">'.$words['word_last'].'</a>';
	}
	
	$pagination = implode($delimiter,$pages);
	
	if(empty($template)){
		$output = "$page_prev $pagination $page_next &nbsp;&nbsp;[$from-$to of $total]";
		//$output = "$page_first $page_prev $pagination $page_next $page_last &nbsp;&nbsp;[$from-$to of $total]";		
	}else{
		// @@prev @@page @@next &nbsp;&nbsp;[@@from-@@to of @@total]
		$output = $template;
		$output = str_replace("@@page"	,$pagination,$output);
		$output = str_replace("@@first"	,$page_first,$output);
		$output = str_replace("@@prev"	,$page_prev,$output);
		$output = str_replace("@@next"	,$page_next,$output);
		$output = str_replace("@@last"	,$page_last,$output);
		$output = str_replace("@@total"	,$total		,$output);
		$output = str_replace("@@from"	,$from		,$output);
		$output = str_replace("@@to"	,$to		,$output);
	}
	return $output;
	//echo htmlentities($output, ENT_QUOTES, 'UTF-8');
}


function number_format_i18n( $number, $decimals = 0 ) {
	$formatted = number_format( $number, intval( $decimals ), '.', ',' );
	return $formatted ;
}
function e_pagination_adv_single( $url, $page, $class, $raw_text, $format = '%PAGE_NUMBER%' ) {
	if ( empty( $raw_text ) )
		return '';
	$text = str_replace( $format, number_format_i18n( $page ), $raw_text );
	return "<a href='" . $url. $page . "' class='$class'>$text</a>";
}
function e_pagination_adv($total, $limit = 10, $offset = 1, $url= "#" , $template = "", $shownothing = false, $delimiter= '&nbsp;', $new_options = array()){

	//template pattern: @@page, @@from, @@to, @@total
	if(empty($total)) return false; //to prevent error
	//if(empty($limit)) $limit = 10;
	if(empty($offset)) $offset = 1;

	$total_pages = ceil($total/$limit);
	
	$posts_per_page = intval( $limit  );
	$paged = max( 1, $offset );
	$total_pages = max( 1, $total_pages );

	if( ($total_pages==1) && $shownothing){ //show nothing means if there's only 1 page wic means no pagination.
		return false;
	}

	$from = ($offset-1)*$limit + 1;
	$to = ($offset ==$total_pages)? $total : ($offset*$limit);
	$pages = array();

	$options = array(
		'pages_text'    => 'Page %CURRENT_PAGE% of %TOTAL_PAGES%',
		'current_text'  => '%PAGE_NUMBER%',
		'page_text'     => '%PAGE_NUMBER%',
		'first_text'    => '&laquo; First',
		'last_text'     => 'Last &raquo;', 
		'prev_text'     => '&lt; Previous', 
		'next_text'     => 'Next &gt;', 
		'dotleft_text'  => '...',
		'dotright_text' => '...',
		'num_pages' => 5,
		'num_larger_page_numbers' => 3,
		'larger_page_numbers_multiple' => 10,
		//'always_show' => false,
		//'use_pagenavi_css' => true,
		//'style' => 1,
	);

	if(!empty($new_options) && is_array($new_options)){
		$options = array_merge($options,$new_options);
	}					

	$pages_to_show = ( $options['num_pages'] );
	$larger_page_to_show = ( $options['num_larger_page_numbers'] );
	$larger_page_multiple = ( $options['larger_page_numbers_multiple'] );
	$pages_to_show_minus_1 = $pages_to_show - 1;
	$half_page_start = floor( $pages_to_show_minus_1/2 );
	$half_page_end = ceil( $pages_to_show_minus_1/2 );
	$start_page = $paged - $half_page_start;

	if ( $start_page <= 0 )
		$start_page = 1;

	$end_page = $paged + $half_page_end;

	if ( ( $end_page - $start_page ) != $pages_to_show_minus_1 )
		$end_page = $start_page + $pages_to_show_minus_1;

	if ( $end_page > $total_pages ) {
		$start_page = $total_pages - $pages_to_show_minus_1;
		$end_page = $total_pages;
	}

	if ( $start_page < 1 )
		$start_page = 1;

	$out = '';
	if ( !empty( $options['pages_text'] ) ) {
		$pages_text = str_replace(
			array( "%CURRENT_PAGE%", "%TOTAL_PAGES%" ),
			array( number_format_i18n( $paged ), number_format_i18n( $total_pages ) ),
		$options['pages_text'] );
		//$out .= "<span class='pages'>$pages_text</span>";
		$pagination = "<span class='pages'>$pages_text</span>";
	}

	if ( $start_page >= 2 && $pages_to_show < $total_pages ) {
		$first_text = str_replace( '%TOTAL_PAGES%', number_format_i18n( $total_pages ), $options['first_text'] );
		//$out .= e_pagination_adv_single( $url, 1, 'first', $first_text, '%TOTAL_PAGES%' );
		$page_first = e_pagination_adv_single( $url, 1, 'first', $first_text, '%TOTAL_PAGES%' );

		if ( !empty( $options['dotleft_text'] ) ){
			//$out .= "<span class='extend'>{$options['dotleft_text']}</span>";
			$pages[] = "<span class='extend'>{$options['dotleft_text']}</span>";
		}			
	}

	$larger_pages_array = array();
	/* // nvr activate this part
	if ( $larger_page_multiple )
		for ( $i = $larger_page_multiple; $i <= $total_pages; $i+= $larger_page_multiple )
			$larger_pages_array[] = $i;
	*/

	$larger_page_start = 0;
	foreach ( $larger_pages_array as $larger_page ) {
		if ( $larger_page < $start_page && $larger_page_start < $larger_page_to_show ) {
			//$out .= e_pagination_adv_single( $url, $larger_page, 'smaller page', $options['page_text'] );
			$pages[] = e_pagination_adv_single( $url, $larger_page, 'smaller page', $options['page_text'] );
			$larger_page_start++;
		}
	}

	if ( !empty( $options['prev_text'] ) ){
		//$out .= get_previous_posts_link( $options['prev_text'] );
		if ( $paged > 1 ) {
			$nextpage = intval($paged) - 1;
			//$out .= e_pagination_adv_single( $url, $nextpage, "", $options['prev_text'] );
			$page_prev = e_pagination_adv_single( $url, $nextpage, "", $options['prev_text'] );
		}
	}
		

	$timeline = 'smaller';
	foreach ( range( $start_page, $end_page ) as $i ) {
		if ( $i == $paged && !empty( $options['current_text'] ) ) {
			$current_page_text = str_replace( '%PAGE_NUMBER%', number_format_i18n( $i ), $options['current_text'] );
			//$out .= "<span class='current'>$current_page_text</span>";
			$pages[] = "<span class='current'>$current_page_text</span>";
			$timeline = 'larger';
		} else {
			//$out .= e_pagination_adv_single( $url, $i, "page $timeline", $options['page_text'] );
			$pages[] = e_pagination_adv_single( $url, $i, "page $timeline", $options['page_text'] );
		}
	}

	if ( !empty( $options['next_text'] ) ){
		if( $paged < $total_pages){
			$nextpage = intval($paged) + 1;
			//$out .= e_pagination_adv_single( $url, $nextpage, "", $options['next_text'] );
			$page_next = e_pagination_adv_single( $url, $nextpage, "", $options['next_text'] );
		}
		//$out .= get_next_posts_link( $options['next_text'], $total_pages );
	}

	$larger_page_end = 0;
	foreach ( $larger_pages_array as $larger_page ) {
		if ( $larger_page > $end_page && $larger_page_end < $larger_page_to_show ) {
			//$out .= e_pagination_adv_single( $url, $larger_page, 'larger page', $options['page_text'] );
			$pages[] = e_pagination_adv_single( $url, $larger_page, 'larger page', $options['page_text'] );
			$larger_page_end++;
		}
	}

	if ( $end_page < $total_pages ) {
		if ( !empty( $options['dotright_text'] ) ){
			//$out .= "<span class='extend'>{$options['dotright_text']}</span>";
			$pages[] = "<span class='extend'>{$options['dotright_text']}</span>";
		}
			
		//$out .= e_pagination_adv_single( $url, $total_pages, 'last', $options['last_text'], '%TOTAL_PAGES%' );
		$page_last = e_pagination_adv_single( $url, $total_pages, 'last', $options['last_text'], '%TOTAL_PAGES%' );
	}
	
	//$out = $before . "<div class='wp-pagenavi'>\n$out\n</div>" . $after;
	$pagination = implode($delimiter,$pages);


	if(empty($template)){
		//$output = "$page_prev $pagination $page_next &nbsp;&nbsp;[$from-$to of $total]";
		$output = "$page_first &nbsp; $page_prev $pagination $page_next &nbsp; $page_last &nbsp;&nbsp;[$from-$to of $total]";		
	}else{
		//EG: @@first &nbsp; @@prev @@page @@next @@last &nbsp;&nbsp;[@@from-@@to of @@total]
		$output = $template;
		$output = str_replace("@@page"	,$pagination,$output);
		$output = str_replace("@@first"	,$page_first,$output);
		$output = str_replace("@@prev"	,$page_prev,$output);
		$output = str_replace("@@next"	,$page_next,$output);
		$output = str_replace("@@last"	,$page_last,$output);
		$output = str_replace("@@total"	,$total		,$output);
		$output = str_replace("@@from"	,$from		,$output);
		$output = str_replace("@@to"	,$to		,$output);
	}

	return $output;
}

function randomPassword() {
	$alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
	for ($i = 0; $i < 20; $i++) {
		$n = rand(0, strlen($alphabet)-1);
		$pass[$i] = $alphabet[$n];
	}
	return implode($pass);
}
/*---------------------------------------------------------------------------------------------------------------
special function (get from database) for this system only
---------------------------------------------------------------------------------------------------------------*/
function admin_login($username, $password){
	$data = db_array("select * from admin where 1=1 ");
}

function get_all_configs(){
	$configs = array();
	$data = db_array("select * from configuration order by option_name asc ");
	foreach((array)$data as $d){
		$configs[$d['option_name']] = $d['option_value'];
	}
	return $configs;
	
}

function get_an_config($option_name){
	$data = db_row("select option_value from configuration where option_name = '{$option_name}' ");
	return stripslashes_deep($data);
}

function get_countries(){
	$data = db_array("select * from country order by country_name asc ");
	return stripslashes_deep($data);
}

function get_cartypes(){
	$data = db_array("select * from cartypes order by cartype asc ");
	return stripslashes_deep($data);
}

function get_country_label($id){
	$data = db_row("select country_name from country where country_id = '{$id}' ");
	return stripslashes_deep($data);
}

function get_payment(){
	$data = db_array("select * from payment_method where p_id > 0 order by p_id asc ");
	return stripslashes_deep($data);
}
function get_payment_method_label($id){
	$data = db_row("select p_method from payment_method where p_id = '{$id}' ");
	return stripslashes_deep($data);
}

function get_salutations(){
	$data = db_array("select * from salutation order by salutation asc ");
	return stripslashes_deep($data);
}

function get_salutation_label($id){
	$data = db_row("select salutation from salutation where salutation_id = '{$id}' ");
	return stripslashes_deep($data);
}

function get_period_type(){
	$data = db_array("select * from period_type order by type asc ");
	return stripslashes_deep($data);
}
function get_period_type_label($id){
	$data = db_row("select type from period_type where type_id = '{$id}' ");
	return stripslashes_deep($data);
}
function get_season_type(){
	$data = db_array("select * from season_type order by season asc ");
	return stripslashes_deep($data);
}
function get_season_type_label($id){
	$data = db_row("select season from season_type where season_id = '{$id}' ");
	return stripslashes_deep($data);
}

function get_fckeditor($field_name,$field_value,$width='',$height=200,$toolbarSet='Edifice_toolbar'){
	//can add new toolbarset at 'fckeditor/fckconfig.js'
	$sBasePath = THE_ROOT_URL."/fckeditor/";
	$oFCKeditor = new FCKeditor($field_name) ;
	$oFCKeditor->BasePath = $sBasePath ;
	$oFCKeditor->Config['SkinPath'] = $sBasePath . 'editor/skins/silver/' ;
	if($width)$oFCKeditor->Width = $width;
	$oFCKeditor->Height = $height;
	$oFCKeditor->ToolbarSet = $toolbarSet;
	$oFCKeditor->Value = stripslashes($field_value); 
	return $oFCKeditor->Create() ;
}


function get_user($id_or_email){
	if(empty($id_or_email))
		return false;
	
	if(is_numeric($id_or_email)){
		$query = "select * from user where delete_flag = 0 and user_id = '{$id_or_email}' ";;
	}else{
		return false; //currently no support the email (as duplicate email is allowed)
		//$query = "select * from user where email = '{$id_or_email}' ";
	}	
	$data = db_assoc($query);
	return stripslashes_deep($data);
}

function get_user_vehicle($id_or_email){
	if(empty($id_or_email))
		return false;
	
	if(is_numeric($id_or_email)){
		$query = "select uv.season_type, uv.vehicle_id, c.cartype, c.cartype_name, uv.txtColor, uv.txtVeh, uv.txtIU from user u, user_vehicle uv, cartypes c where u.user_id = uv.tenant_id and uv.cartype = c.cartype and u.delete_flag = 0 and u.user_id = '{$id_or_email}' ";
	}else{
		return false; //currently no support the email (as duplicate email is allowed)
		//$query = "select * from user where email = '{$id_or_email}' ";
	}	
	$data = db_array($query);
	return stripslashes_deep($data);
}

function get_user_single_vehicle($id, $carplateno){
	if((empty($carplateno))||(empty($id))){
		return false;
	}
	
	if(($carplateno)&&($id)){
		$query = "select * from user u, user_vehicle uv, cartypes c where u.user_id = uv.tenant_id and uv.cartype = c.cartype and u.delete_flag = 0 and uv.tenant_id = '{$id}' and uv.txtVeh = '{$carplateno}' ";
		
	}else{
		return false; 
	}

	
	$data = db_array($query);
	return stripslashes_deep($data);
}

function get_user_single_vehicle_subscription_no($id, $sid){
	if((empty($sid))||(empty($id))){
		return false;
	}
	
	if(($sid)&&($id)){
	
		$query = "SELECT * FROM ( 
					SELECT u.user_id, uv.txtVeh, uv.cartype, c.cartype_name, uv.txtIU 
					FROM user u, user_vehicle uv, cartypes c
					WHERE u.user_id = uv.tenant_id
					AND uv.cartype = c.cartype
					AND u.delete_flag= 0) user_info 
				  INNER JOIN (
					SELECT s.user_id, s.subscription_id, si.quantity, si.item_name, si.subscription_item_id, si.date_start, si.due_date, si.price, cp.carpark_location, cp.carpark_id, cp.carpark_name, ssh.subscription_status_id, cp.price_structure_id
					FROM subscriptions s, subscription_item si, subscription_status_history ssh, carpark cp, subscription_vehicle sv
					WHERE si.subscription_id = s.subscription_id
					AND si.subscription_id = sv.subscription_id
					AND si.subscription_id = ssh.subscription_id
					AND si.is_ignore = 0
					AND si.is_extend = 0
					AND si.carpark_id = cp.carpark_id) user_sub
				  ON user_info.user_id = user_sub.user_id
				  AND user_info.user_id = '{$id}' 
				  AND user_sub.subscription_id = '{$sid}' 
				  ORDER BY user_sub.subscription_id";

	}else{
		return false; 
	}
	$data = db_array($query);
	return stripslashes_deep($data);
}



function get_user_single_vehicle_subscription($id, $sid){
	if((empty($sid))||(empty($id))){
		return false;
	}
	
	if(($sid)&&($id)){
	
		$query = "SELECT * FROM ( 
					SELECT u.user_id, uv.txtVeh, uv.cartype, c.cartype_name, uv.txtIU 
					FROM user u, user_vehicle uv, cartypes c
					WHERE u.user_id = uv.tenant_id
					AND uv.cartype = c.cartype
					AND u.delete_flag= 0) user_info 
				  INNER JOIN (
					SELECT s.user_id, s.subscription_id, s.subtotal, si.quantity, si.item_name, si.subscription_item_id, si.date_start, si.due_date, si.price, cp.carpark_location, cp.carpark_id, cp.carpark_name, ssh.subscription_status_id, cp.price_structure_id
					FROM subscriptions s, subscription_item si, subscription_status_history ssh, carpark cp, subscription_vehicle sv
					WHERE si.subscription_id = s.subscription_id
					AND si.subscription_id = sv.subscription_id
					AND si.subscription_id = ssh.subscription_id
					AND si.is_ignore = 0
					AND si.carpark_id = cp.carpark_id) user_sub
				  ON user_info.user_id = user_sub.user_id
				  AND user_info.user_id = '{$id}' 
				  AND user_sub.subscription_id = '{$sid}' 
				  ORDER BY user_sub.subscription_id";
		
	}else{
		return false; 
	}
	
	$data = db_array($query);
	return stripslashes_deep($data);
}


function get_user_single_vehicle_subscription_all($id, $sid){
	if((empty($sid))||(empty($id))){
		return false;
	}
	
	if(($sid)&&($id)){
	
		$query = "SELECT DISTINCT * FROM ( 
					SELECT u.user_id, uv.txtVeh, uv.cartype, c.cartype_name, uv.txtIU 
					FROM user u, user_vehicle uv, cartypes c
					WHERE u.user_id = uv.tenant_id
					AND uv.cartype = c.cartype
					AND u.delete_flag= 0) user_info 
				  INNER JOIN (
					SELECT s.user_id, s.subscription_id, s.total_amt, s.subtotal, s.tax_amt, si.quantity, si.item_name, si.subscription_item_id, si.date_start, si.due_date, si.price, cp.carpark_location, cp.carpark_id, cp.carpark_name, ssh.subscription_status_id, cp.price_structure_id
					FROM subscriptions s, subscription_item si, subscription_status_history ssh, carpark cp, subscription_vehicle sv
					WHERE si.subscription_id = s.subscription_id
					AND si.subscription_id = sv.subscription_id
					AND si.subscription_id = ssh.subscription_id
					AND si.carpark_id = cp.carpark_id) user_sub
				  ON user_info.user_id = user_sub.user_id
				  AND user_info.user_id = '{$id}' 
				  AND user_sub.subscription_id = '{$sid}' 
				  ORDER BY user_sub.subscription_id";
		
	}else{
		return false; 
	}

	$data = db_array($query);
	return stripslashes_deep($data);
}

function get_txnid($sid){
	if(empty($sid)){
	return false;
	}else{
		$query = "SELECT txnid FROM payments WHERE itemid = '{$sid}' AND payment_status= 'Completed'";
	}
	$data = db_row($query);
	
	return stripslashes_deep($data);
}

function get_user_IU($id, $IU){
	if((empty($IU))||(empty($id))){
		return false;
	}
	
	if(($IU)&&($id)){
		$query = "select * from user u, user_vehicle uv, cartypes c where u.user_id = uv.tenant_id and uv.cartype = c.cartype and u.delete_flag = 0 and uv.tenant_id = '{$id}' and uv.txtIU = '{$IU}' ";
	}else{
		return false;
	}	
	$data = db_row($query);

	return stripslashes_deep($data);
	//return stripslashes_deep($query);
	
}
//XY remove comment function /**/
function get_user_txtVeh($txtVeh){
	if((empty($txtVeh))){
		return false;
	}
	
	if($txtVeh){
		$query = "select * from user_vehicle where txtVeh = '{$txtVeh}' ";
	}else{
		return false;
	}	
	$data = db_row($query);

	return stripslashes_deep($data);
	
}


function get_subscribed_veh($sid,$txtVeh){
	if(empty($txtVeh)||empty($sid)){
		return false;
	}
	
		$query = "select * from subscription_vehicle where txtVeh = '{$txtVeh}' and subscription_id = '{$sid}' ";
		
	$data = db_row($query);

	return stripslashes_deep($data);
	
}
function get_carpark($carpark_id){
	$data = db_assoc("select * from carpark c, carpark_allotments ca where c.carpark_id = ca.carpark_id and c.delete_flag = 0 and c.carpark_id = '{$carpark_id}'");
	return stripslashes_deep($data);
}

//XY make changes make it filter the no activete carpark but duno will affect which pages yet
function get_carparks($order_by = "carpark_id asc"){//
	$data = db_array("select * from carpark where activate = 0 AND delete_flag = 0 order by $order_by ");
	return stripslashes_deep($data);
}
function get_carpark_allotment_used($carpark_id){
	$data = db_assoc("select * from carpark c, carpark_allotments ca where c.carpark_id = ca.carpark_id and c.delete_flag = 0 and c.carpark_id = '{$carpark_id}'");
	return stripslashes_deep($data);
}
function get_carpark_allotment($carpark_id){
	$data = db_array("select ca.date, ca.allotment, ca.allotment_used from carpark c, carpark_allotments ca where c.carpark_id = ca.carpark_id and c.delete_flag = 0 and c.carpark_id = '{$carpark_id}'");

	return stripslashes_deep($data);
}

function get_non_subscribed_carpark($txtVeh){
	$data = db_array("SELECT * FROM carpark WHERE carpark_id NOT IN (SELECT DISTINCT carpark_id FROM subscription_item WHERE txtVeh = '{$txtVeh}')");

	return stripslashes_deep($data);
}

function get_non_subscribed_carpark_u($id){
	$data = db_array("SELECT * FROM carpark WHERE activate = 0 AND carpark_id NOT IN (SELECT DISTINCT si.carpark_id FROM subscription_item si, subscriptions s WHERE si.subscription_id = s.subscription_id AND user_id = '{$id}')");

	return stripslashes_deep($data);
}

function get_carpark_allotment_between($carpark_id,$date1,$date2){
	$data = db_array("select ca.date, ca.allotment, ca.allotment_used from carpark c, carpark_allotments ca where c.carpark_id = ca.carpark_id and c.delete_flag = 0 and c.carpark_id = '{$carpark_id}' and ca.date between '{$date1}' and '{$date2}'");
	//var_dump("select ca.date, ca.allotment, ca.allotment_used from carpark c, carpark_allotments ca where c.carpark_id = ca.carpark_id and c.delete_flag = 0 and c.carpark_id = '{$carpark_id}' and ca.date between '{$date1}' and '{$date2}'");
	return stripslashes_deep($data);
}

function get_carpark_today($carpark_id,$date){
	$data = db_assoc("select * from carpark c, carpark_allotments ca where c.carpark_id = ca.carpark_id and c.delete_flag = 0 and c.carpark_id = '{$carpark_id}' and ca.date = '{$date}'");
	return stripslashes_deep($data);
}

function get_carpark_tenants($carpark_id,$ssi,$date,$limit,$offset,$cancel =0){
		list($year,$month,$day)=explode('-',$date);		
		$start = $limit*((int)($offset-1));
		if($ssi != 0){			
	  	$query = "select * 
				from 
				(select distinct year(si.date_start) as year_start, 
						month(si.date_start) as month_start, 
						day(si.date_start) as day_start, 
						year(si.due_date) as year_end, 
						month(si.due_date) as month_end, 
						day(si.due_date) as day_end, 
						subscription_id, 
						date_start, 
						due_date,
						carpark_id
						from subscription_item si) as sis
				inner join subscriptions s on sis.subscription_id = s.subscription_id 
				inner join subscription_item si on sis.subscription_id = si.subscription_id 
				inner join subscription_status_history ssh on sis.subscription_id = ssh.subscription_id
				inner join carpark c on sis.carpark_id = c.carpark_id
				inner join user u on s.user_id = u.user_id
				where si.carpark_id = '{$carpark_id}' 
				and si.is_ignore = 0
				and ssh.subscription_status_id <> '2'
				and sis.year_start <= '{$year}' 
				and sis.month_start <= '{$month}' 
				and sis.year_end >= '{$year}' 
				and sis.month_end >= '{$month}' 
				and sis.due_date >= '{$date}'
				limit $start, $limit";	
		}else{
		/*$query = "select * from 
					(select distinct 
					year(si.date_start) as year_start, 
					month(si.date_start) as month_start, 
					day(si.date_start) as day_start, 
					year(si.due_date) as year_end, 
					month(si.due_date) as month_end, 
					day(si.due_date) as day_end, 
					subscription_id, 
					date_start, 
					due_date 
					carpark_id
					from subscription_item si) sis, subscriptions s
					inner join subscription_item si on si.subscription_id = s.subscription_id
					inner join carpark c on si.carpark_id = c.carpark_id
					inner join subscription_status_history ssh on si.subscription_id = ssh.subscription_id
					inner join user u on s.user_id = u.user_id
					where si.carpark_id = '{$carpark_id}'
					and sis.year_start <= '{$year}' 
					and sis.month_start <= '{$month}' 
					and sis.year_end >= '{$year}' 
					and sis.month_end >= '{$month}' 
					and sis.due_date >= '{$date}'
					group by si.subscription_id
					order by sis.subscription_id 
					limit $start, $limit
				";	*/
			$query = "select * 
				from 
				(select distinct year(si.date_start) as year_start, 
						month(si.date_start) as month_start, 
						day(si.date_start) as day_start, 
						year(si.due_date) as year_end, 
						month(si.due_date) as month_end, 
						day(si.due_date) as day_end, 
						subscription_id, 
						date_start, 
						due_date,
						carpark_id
						from subscription_item si) as sis
				inner join subscriptions s on sis.subscription_id = s.subscription_id 
				inner join subscription_item si on sis.subscription_id = si.subscription_id 
				inner join subscription_status_history ssh on sis.subscription_id = ssh.subscription_id
				inner join carpark c on sis.carpark_id = c.carpark_id
				inner join user u on s.user_id = u.user_id
				where si.carpark_id = '{$carpark_id}' 
				and si.is_ignore = 0
				and sis.year_start <= '{$year}' 
				and sis.month_start <= '{$month}' 
				and sis.year_end >= '{$year}' 
				and sis.month_end >= '{$month}' 
				and sis.due_date >= '{$date}'
				limit $start, $limit";		
		}
	$data = db_array($query);
	return stripslashes_deep($data);
}

function get_carpark_tenants_no($carpark_id,$ssi,$date){
		list($year,$month,$day)=explode('-',$date);
		
		if($ssi != 0){			
	  
		/*	{
		$query = "select * from 
				(select distinct year(si.date_start) as year_start, month(si.date_start) as month_start, day(si.date_start) as day_start, year(si.due_date) as year_end, month(si.due_date) as month_end, day(si.due_date) as day_end, subscription_id, date_start, due_date from subscription_item si) sis
				JOIN(
				SELECT u.first_name, u.last_name, u.company_name, u.profile, s.subscription_id, ssh.subscription_status_id, s.total_amt
				FROM user u, subscriptions s, subscription_item si, subscription_status_history ssh, carpark c 
				where u.user_id = s.user_id 
				and s.subscription_id = si.subscription_id 
				and si.subscription_id = ssh.subscription_id 
				and si.carpark_id = c.carpark_id 
				and c.delete_flag = 0 
				and si.is_ignore = 0 
				and c.carpark_id = '{$carpark_id}') us 
				ON us.subscription_id = sis.subscription_id 
				and us.subscription_status_id = '{$ssi}' 
				and sis.year_start <= '{$year}' 
				and sis.month_start <= '{$month}' 
				and sis.year_end >= '{$year}' 
				and sis.month_end >= '{$month}' 
				and sis.due_date >= '{$date}' 
				order by sis.subscription_id";
		} */		
		$query = "select sis.subscription_id
				from 
				(select distinct year(si.date_start) as year_start, 
						month(si.date_start) as month_start, 
						day(si.date_start) as day_start, 
						year(si.due_date) as year_end, 
						month(si.due_date) as month_end, 
						day(si.due_date) as day_end, 
						subscription_id, 
						date_start, 
						due_date 
						from subscription_item si) as sis
				left join subscription_item si on sis.subscription_id = si.subscription_id 
				left join subscription_status_history ssh on sis.subscription_id = ssh.subscription_id
				where si.carpark_id = '{$carpark_id}' 
				and si.is_ignore = 0
				and ssh.subscription_status_id <> '2'
				and sis.year_start = '{$year}' 
				and sis.month_start = '{$month}' 
				and sis.year_end >= '{$year}' 
				and sis.month_end >= '{$month}' 
				and sis.due_date >= '{$date}'";	
		$data = db_array($query);
		}else{
			/*
			$query = "select * from 
				(select distinct year(si.date_start) as year_start, month(si.date_start) as month_start, day(si.date_start) as day_start, year(si.due_date) as year_end, month(si.due_date) as month_end, day(si.due_date) as day_end, subscription_id, date_start, due_date from subscription_item si) sis
				JOIN(
				SELECT u.first_name, u.last_name, u.company_name, u.profile, s.subscription_id, ssh.subscription_status_id, s.total_amt
				FROM user u, subscriptions s, subscription_item si, subscription_status_history ssh, carpark c 
				where u.user_id = s.user_id 
				and s.subscription_id = si.subscription_id 
				and si.subscription_id = ssh.subscription_id 
				and si.carpark_id = c.carpark_id 
				and c.delete_flag = 0 
				and si.is_ignore = 0 
				and c.carpark_id = '{$carpark_id}') us 
				ON us.subscription_id = sis.subscription_id 
				and us.subscription_status_id <> '2' 
				and sis.year_start <= '{$year}' 
				and sis.month_start <= '{$month}' 
				and sis.year_end >= '{$year}' 
				and sis.month_end >= '{$month}' 
				and sis.due_date >= '{$date}' 
				order by sis.subscription_id";
		*/
		$query = "select sis.subscription_id
				from 
				(select distinct year(si.date_start) as year_start, 
						month(si.date_start) as month_start, 
						day(si.date_start) as day_start, 
						year(si.due_date) as year_end, 
						month(si.due_date) as month_end, 
						day(si.due_date) as day_end, 
						subscription_id, 
						date_start, 
						due_date 
						from subscription_item si) as sis
				left join subscription_item si on sis.subscription_id = si.subscription_id 
				left join subscription_status_history ssh on sis.subscription_id = ssh.subscription_id
				where si.carpark_id = '{$carpark_id}' 
				and si.is_ignore = 0
				and ssh.subscription_status_id <> '2'
				and sis.year_start = '{$year}' 
				and sis.month_start = '{$month}' 
				and sis.year_end >= '{$year}' 
				and sis.month_end >= '{$month}' 
				and sis.due_date >= '{$date}'";
		
		$data = db_array($query);	
		}
	
	return stripslashes_deep($data);
}

function get_prorate($date_start,$carpark_id){
	$carpark = get_carpark($carpark_id);
	
	$daysofmonth = date('t',strtotime($date_start));
	$day = date('d',strtotime($date_start));
	
	if($day != 1){
		$noofdays = $daysofmonth - $day + 1;
		$price = ($noofdays * $carpark['price']) / $daysofmonth;
	}else{
		$price = 0;
	}
	return stripslashes_deep($price);
}

function get_price_structure_label($id){
	$data = db_row("select label from price_structure where price_structure_id = '{$id}' ");
	return stripslashes_deep($data);
}
function get_price_structure_value($id){
	$data = db_row("select value from price_structure where price_structure_id = '{$id}' ");
	return stripslashes_deep($data);
}
function get_price_structure_detail($id){
	$data = db_assoc("select * from price_structure where price_structure_id = '{$id}' ");
	return stripslashes_deep($data);
}


function get_subscriptions($where = '', $order_by = "subscription_id asc"){
	if(!empty($where))
		$where = " WHERE $where ";
	$data = db_array("select * from subscriptions $where order by $order_by ");
	return stripslashes_deep($data);
}
function count_subscription_items($subscription_id,$is_quantity = false){
	if($is_quantity){ //count by quantity
		$data = db_row("select sum(quantity) as total from subscription_item where subscription_id = '{$subscription_id}' ");
	}else{
		$data = db_row("select count(subscription_item_id) as total from subscription_item where subscription_id = '{$subscription_id}' ");
	}
	return $data;
}

function get_subscription_item($sid,$cid){
	$data = db_row("SELECT subscription_item_id FROM subscription_item WHERE subscription_id = '{$sid}' AND carpark_id = '{$cid}'");
	return stripslashes_deep($data);
}

function get_subscription_item_id($subscription_item_id){
	$data = db_array("select * from subscription_item where subscription_item_id = '{$subscription_item_id}' limit 1 ");
	return stripslashes_deep($data);
}

function get_subscriptions_by_user_vehicle($id, $vid){
	$data = db_array("select c.carpark_id, c.carpark_name, si.subscription_item_id, ssh.subscription_status_id, s.subscription_id, si.txtVeh, si.price
					from subscriptions s 
					inner join subscription_item si on s.subscription_id = si.subscription_id
					inner join subscription_status_history ssh on s.subscription_id = ssh.subscription_id
					inner join carpark c on si.carpark_id = c.carpark_id
					where s.user_id = '{$id}'
					and txtVeh = '{$vid}'
					and ssh.subscription_status_id = 3
					and c.delete_flag = 0 
					and si.is_ignore = 0 
					and si.is_extend = 0
					and s.parent_id = 0");
					
	return stripslashes_deep($data);
}

function get_subscriptions_by_user($id){
	
	$data = db_array("select * from user u, subscriptions s, subscription_item si, subscription_status_history ssh, carpark c 
					where u.user_id = s.user_id 
					and s.subscription_id = si.subscription_id 
					and si.subscription_id = ssh.subscription_id 
					and si.carpark_id = c.carpark_id 
					and c.delete_flag = 0 
					and s.user_id = '{$id}' 
					group by s.subscription_id
					order by s.subscription_id desc ");
		
	/*
	$data = db_array("select s.subscription_id, si.txtIU, s.subtotal, ps.label, si.item_name, si.price, s.parent_id, si.carpark_id
					from user u, subscriptions s, subscription_item si, subscription_status_history ssh, carpark c, price_structure ps
					where u.user_id = s.user_id 
					and si.price_structure_id = ps.price_structure_id
					and s.subscription_id = si.subscription_id 
					and si.subscription_id = ssh.subscription_id 
					and si.carpark_id = c.carpark_id 
					and c.delete_flag = 0 
					and s.user_id = '{$id}' 
					group by si.carpark_id");
	*/				//order by ssh.subscription_id desc 
	return stripslashes_deep($data);
}

function get_subscriptions_by_user_renew($id){

	$data = db_array("select * from user u, subscriptions s, subscription_item si, subscription_status_history ssh, carpark c where u.user_id = s.user_id and s.subscription_id = si.subscription_id and si.subscription_id = ssh.subscription_id and si.carpark_id = c.carpark_id and c.delete_flag = 0 and si.is_extend = 0 and si.is_ignore = 0 and s.user_id = '{$id}' order by ssh.subscription_id desc ");
	return stripslashes_deep($data);
}

function get_subscriptions_by_user_ter($id){

	$data = db_array("select * 
					from user u, subscriptions s, subscription_item si, subscription_status_history ssh, carpark c 
					where u.user_id = s.user_id and s.subscription_id = si.subscription_id 
					and si.subscription_id = ssh.subscription_id 
					and si.carpark_id = c.carpark_id 
					and c.delete_flag = 0 
					and si.is_ignore = 0 
					and s.user_id = '{$id}' 
					order by ssh.subscription_id desc ");
	return stripslashes_deep($data);
}

//NEW_NAME: Orders::get_subscription
function get_subscription_detail($subscription_id){
	$data = db_assoc("select * from subscriptions where subscription_id = '{$subscription_id}' limit 1");
	return stripslashes_deep($data);
}

function get_subscription_and_invoice($subscription_id){
	$data = db_assoc("select * from subscriptions o LEFT JOIN invoice i ON o.subscription_id = i.subscription_id WHERE o.subscription_id = '{$subscription_id}' limit 1");
	return stripslashes_deep($data);
}

function get_invoice($subscription_id){
	$data = db_assoc("select * from invoice where subscription_id = '{$subscription_id}' limit 1");
	return stripslashes_deep($data);
}

function get_subscription_items($subscription_id, $order_by = 'subscription_item_id asc'){
	$data = db_array("select * from subscription_item where subscription_id = '{$subscription_id}' order by $order_by ");
	return stripslashes_deep($data);
}

function get_subscription_vehicle($subscription_id, $order_by = 'sv.txtVeh asc'){
	$data = db_array("select * from subscription_vehicle sv, user_vehicle uv, cartypes c where sv.subscription_id = '{$subscription_id}' and sv.txtVeh = uv.txtVeh and uv.cartype = c.cartype order by $order_by ");
	
	return stripslashes_deep($data);
}

function get_subscription_items_expand($subscription_id, $where = '', $order_by = 'subscription_item_id asc'){
	if(!empty($where))
		$where = " AND $where ";
	$data = db_array("select * from subscription_item where subscription_id = '{$subscription_id}' $where order by $order_by ");
	return stripslashes_deep($data);
}

//NEW_NAME: Orders::get_subscription
function get_subscription_status_history($subscription_id,$subscription_status_id=0){
	if($subscription_status_id>0){
		$where = " AND h.subscription_status_id = $subscription_status_id ";
	}
	$data = db_assoc("select h.* from subscription_status_history h
						left join subscription_status os ON os.subscription_status_id = h.subscription_status_id
						where h.subscription_id = '{$subscription_id}' $where order by h.subscription_status_history_id desc limit 1 ");

	return stripslashes_deep($data);
}
function get_subscription_status_label_from_history($subscription_id){
	$data = db_row("select subscription_status_name from subscription_status_history h
							left join subscription_status os ON os.subscription_status_id = h.subscription_status_id
							where subscription_id = '{$subscription_id}' order by subscription_status_history_id desc limit 1 ");
	return stripslashes_deep($data);
}

function get_subscription_status_date_from_history($subscription_id){
	$data = db_row("select h.date_modified from subscription_status_history h
							left join subscription_status os ON os.subscription_status_id = h.subscription_status_id
							where subscription_id = '{$subscription_id}' order by subscription_status_history_id desc limit 1 ");
	return stripslashes_deep($data);
}

function get_due_date2($start_timestamp, $price_structure_id, $timestamp_format = 'Y-m-d H:i:s',$type=1, $quantity=1){
	#type 1: start date: 01/01/2000; End date: 31/01/2000;
	#type 1: start date: 01/01/2000; End date: 01/02/2000;
	
	if(empty($start_timestamp) || empty($price_structure_id)) 
		return '';
		
	$price_structure = get_price_structure_detail($price_structure_id);
	if(empty($price_structure)) 
		return '';
	
	if($price_structure['value'] > 0 ){
		if($quantity > 1){
			$i = 2;
			while($i<=$quantity){
				$days = $price_structure['value'];
				$due_date = $start_timestamp; //start date	
					
				$due_date = strtotime($price_structure['price_code'], $start_timestamp); // or, strtotime( '-1 days' );
				if($type==2){
					$due_date = strtotime('-1 days', $due_date);  //Play trick here!!
				}
				$due_date = date($timestamp_format,$due_date);
				$start_timestamp = strtotime($due_date);
				$i++;				
			}
			return $due_date;	
		}else{
			$days = $price_structure['value'];
			//$edate = $start_timestamp; //start date
			//$due_date = date($timestamp_format, mktime(0,0,0,date('m',$edate),date('d',$edate)+$days,date('Y',$edate))); 
			//$due_date = strtotime($price_structure['price_code'], $start_timestamp); // or, strtotime( '-1 days' );
			$due_date = strtotime('0 days',$start_timestamp);
			if($type==2){
				$due_date = strtotime('-1 days', $due_date);  //Play trick here!!
			}
			$due_date = date($timestamp_format,$due_date);	
		}
		return $due_date;	
	}else{
		if($quantity > 1){
			$i = 1;
			while($i<=$quantity){
				$days = $price_structure['value'];
				$due_date = $start_timestamp; //start date
		
				$due_date = strtotime($price_structure['price_code'], $start_timestamp); // or, strtotime( '-1 days' );
				if($type==2){
					$due_date = strtotime('-1 days', $due_date);  //Play trick here!!
				}
				$due_date = date($timestamp_format,$due_date);
				$start_timestamp = strtotime($due_date);
				$i++;				
			}
			return $due_date;	
		}else{
	
		$days = $price_structure['value'];
		//$edate = $start_timestamp; //start date
		//$due_date = date($timestamp_format, mktime(0,0,0,date('m',$edate),date('d',$edate)+$days,date('Y',$edate))); 
		
		$due_date = strtotime($price_structure['price_code'], $start_timestamp); // or, strtotime( '-1 days' );
		if($type==2){
			$due_date = strtotime('-1 days', $due_date);  //Play trick here!!
		}
		$due_date = date($timestamp_format,$due_date);	
		}
		return $due_date;	
	}
	return '';
}

function get_due_date($start_timestamp, $price_structure_id, $timestamp_format = 'Y-m-d H:i:s',$type=1, $quantity=1){

	$start_timestamp = date('Y-m-d',$start_timestamp);
	if(empty($start_timestamp) || empty($price_structure_id)) 
		return '';
		
	$price_structure = get_price_structure_detail($price_structure_id);
	if(empty($price_structure)) 
		return '';
		
	$daystr = date('d',strtotime($start_timestamp));
		
	if($price_structure['value'] > 0 ){			
		if($quantity > 1){
			if($daystr != 1){
				$due_date = $start_timestamp;			
				$i = 1;
				if($price_structure['price_structure_id']==3){//1 month
					$i =2;	
				}
				//if($price_structure['price_structure_id']>=4){//1 month
					//$i =0;	
				//}
				while($i<=$quantity){	
					$daysofmonth = date('t',strtotime($due_date));
					
					list($year,$month,$day)=explode('-',$due_date);	
					$due_date = $year.'-'.$month.'-'.$daysofmonth;	
					
						if(($price_structure['price_structure_id'])==3){ //1 month
							$dd = db_row("SELECT DATE_ADD( '$due_date', INTERVAL 1 MONTH )");//DATE_ADD(mm,1,'$due_date' - day('$due_date')+1)-1		
							//$dd = $due_date;		
						}elseif(($price_structure['price_structure_id'])==4){ //3 months
							$dd = db_row("SELECT DATE_ADD( '$due_date', INTERVAL 3 MONTH )");
						}elseif(($price_structure['price_structure_id'])==5){ //6 months
							$dd = db_row("SELECT DATE_ADD( '$due_date', INTERVAL 6 MONTH )");
						}
						
						list($y,$m,$d)=explode('-',$dd);
						$dom = date('t',strtotime($dd));
						$due_date = $y.'-'.$m.'-'.$dom;
					
						$i++;
				}				
				//js_alert($due_date);
				$due_date = date($timestamp_format,strtotime($due_date));					
				return $due_date;	
			}else{
				$due_date = $start_timestamp;
				$ss = date('t',strtotime($due_date));
				list($y2,$m2,$d2)=explode('-',$due_date);
				$i = 1;
				//while($i<=$quantity-1){	
				if($price_structure['price_structure_id']==3){
					$bb = 1;
				}elseif($price_structure['price_structure_id']==4){
					$bb = 0;	
				}else{
					$bb = 0;
				}
				while($i<=$quantity-$bb){		
					if(($price_structure['price_structure_id'])==3){ //1 month
						$dd = db_row("SELECT DATE_ADD( '$due_date', INTERVAL 1 MONTH )");				
					}elseif(($price_structure['price_structure_id'])==4){ //3 months
						$dd = db_row("SELECT DATE_ADD( '$due_date', INTERVAL 3 MONTH )");
					}elseif(($price_structure['price_structure_id'])==5){ //6 months
						$dd = db_row("SELECT DATE_ADD( '$due_date', INTERVAL 6 MONTH )");
					}					
					
					$dom = date('t',strtotime($dd));
					list($y,$m,$d)=explode('-',$dd);					
					$due_date = $y.'-'.$m.'-'.$dom;					
					$i++;
				}				
				$due_date = date($timestamp_format,strtotime($due_date));					
				return $due_date;
			}
		}else{	
			if($daystr != 1){//first row of the date
				$daysofmonth = date('t',strtotime($start_timestamp));
				list($year,$month,$day)=explode('-',$start_timestamp);	
				$due_date = $year.'-'.$month.'-'.$daysofmonth;
				
				if(($price_structure['price_structure_id'])==3){//end of the month
					$due_date = $year.'-'.$month.'-'.$daysofmonth;
				}elseif(($price_structure['price_structure_id'])==4){ //3 months
					$due_date = db_row("SELECT DATE_ADD( '$due_date', INTERVAL 3 MONTH )");
				}elseif(($price_structure['price_structure_id'])==5){ //6 months
					$due_date = db_row("SELECT DATE_ADD( '$due_date', INTERVAL 6 MONTH )");
				}
				$daysofmonth2 = date('t',strtotime($due_date));
				list($year,$month,$day)=explode('-',$due_date);	
				$due_date = $year.'-'.$month.'-'.$daysofmonth2;
				
				$due_date = date($timestamp_format,strtotime($due_date));
							
			}else{
				/* original coding ==
				$daysofmonth = date('t',strtotime($start_timestamp));
				list($year,$month,$day)=explode('-',$start_timestamp);	
				$due_date = $year.'-'.$month.'-'.$daysofmonth;
		
				$due_date = date($timestamp_format,strtotime($due_date));
				*/
				$daysofmonth = date('t',strtotime($start_timestamp));
				list($year,$month,$day)=explode('-',$start_timestamp);	
				$due_date = $year.'-'.$month.'-'.$daysofmonth;
				
				if(($price_structure['price_structure_id'])==3){//end of the month
					$due_date = $year.'-'.$month.'-'.$daysofmonth;
				}elseif(($price_structure['price_structure_id'])==4){ //3 months
					$due_date = db_row("SELECT DATE_ADD( '$due_date', INTERVAL 3 MONTH )");
				}elseif(($price_structure['price_structure_id'])==5){ //6 months
					$due_date = db_row("SELECT DATE_ADD( '$due_date', INTERVAL 6 MONTH )");
				}
				$daysofmonth2 = date('t',strtotime($due_date));
				list($year,$month,$day)=explode('-',$due_date);	
				$due_date = $year.'-'.$month.'-'.$daysofmonth2;
				
				$due_date = date($timestamp_format,strtotime($due_date));
				
			}
			return $due_date;
			
		}
	}		
	return '';
}


function get_invoice_detail($subscription_id){
	$data = db_assoc("select * from invoice where subscription_id = '{$subscription_id}' ");
	return stripslashes_deep($data);
}

function has_children($subscription_id){
	$data = db_row("select count(subscription_id) as total_child from subscriptions where parent_id > 0 AND  parent_id = '{$subscription_id}' ");
	return $data;	
}
function get_children($subscription_id){
	$data = db_assoc("select * from subscriptions where parent_id > 0 AND parent_id = '{$subscription_id}' order by date_orig asc ");
	return stripslashes_deep($data);
}

function check_subscription_stop($subscription_id){
	$data = db_row("select count(si.subscription_item_id) as total_stop 
					from subscription_item si
					inner join subscription_status_history ssh on si.subscription_id = ssh.subscription_id
					and si.subscription_id > 0 
					AND si.subscription_id = '{$subscription_id}'
					AND ssh.subscription_status_id <> 2 
					AND si.is_ignore = 1 ");
	return $data;	
}



//email content & send email function ------------------------------------------------------------------------
function get_invoice_html($new_data,$file='email_invoice.html'){
	$default = array('user_company' => '',
					 'user_address' => '',
					 'user_email' => '',
					 'user_salutation' => '',
					 'user_display_name' => '',
					 'total_amount' => '',
					 'invoice_number' => '',
					 'invoice_date' => '',
					 'customer_number' => '',
					 'countGST7' => '',
					 'totalBeforeGST' => '',
					 'invoice_date' => '',
					 );
	
	$data = array_merge($default,$new_data);
	$body = file_get_contents($file);
	foreach($data as $k=>$v){
		$body = str_replace('%'.$k.'%' , $v, $body);
	}
	return $body;
}

function get_email_html($new_data,$file){
	if(!is_array($new_data)) return false;
	if(!file_exists($file))return false;
	
	$default = array();
	$data = array_merge($default,$new_data);
	$body = file_get_contents($file);
	foreach($data as $k=>$v){
		$body = str_replace('%'.$k.'%' , $v, $body);
	}
	return $body;
}


function send_email($receipant,$subject,$email_body,$from_name,$from_email,$bcc_from_mail = false){
	$hdr_nl = "\r\n";
	$header  = "MIME-Version: 1.0$hdr_nl";
	$header .= 'Content-Type: text/html; charset="uft8"' . $hdr_nl;
	$header .= "From: \"$from_name\" <$from_email>$hdr_nl";
	$header .= "Reply-To: $from_email$hdr_nl";
	$header .= "Return-Path: $from_email$hdr_nl";
	//$header .= "CC: $from_email$hdr_nl" ;
	if($bcc_from_mail)
		$header .= "BCC: $from_email$hdr_nl" ;
	
	//Send out email 
	$email = mail($receipant,$subject,$email_body,$header);
	return $email;
}

/*---------------------------------------------------------------------------------------------------------------
special function (INVOICE & RECEIPT) for this system only
---------------------------------------------------------------------------------------------------------------*/

//trying get customer ID
function get_customer_id($subscription_id){	
	$subscription = get_subscription_detail($subscription_id);
	if(empty($subscription))
		return false;
		
	$user = get_user($subscription['user_id']); 
	//print_r($user);
	//echo($user['user_id']);
	
	//CUST_PREFIX
	$cust_prefix = CUST_PREFIX;
	$cust_id = array($cust_prefix, sprintf("%05d",$user['user_id']));
	$cust_id = implode('-',$cust_id);
	
	//echo($cust_id);
	//exit;
	return array($cust_id);
	
}
function insert_invoice_id($subscription_id){
	$subscription = get_subscription_detail($subscription_id);
	if(empty($subscription))
		return false;
		
	//insert into invoice
	$the_year = change_date_format($subscription['date_orig'],'Y');
	$first_id = db_row("SELECT subscription_id from subscriptions WHERE YEAR( date_orig ) = '".$the_year."' ORDER BY subscription_id ASC LIMIT 1 ");
	$last_id = $subscription_id; //current id;
	$the_invoice_id = $last_id - ($first_id - 1);
	
	$invoice = array('subscription_id' => $subscription_id,
					 'invoice_year' => $the_year,
					 'invoice_num'   => $the_invoice_id, 
					 'invoice_date' => 'now()');
	db_perform('invoice', $invoice);
	return mysql_insert_id();
}
//Invoice id IN-16-YY-5-XXXX
	
function get_invoice_id($subscription_id,$create_if_dont_have = true){	

	$data = get_invoice_detail($subscription_id);
	$invoiceNum = $data['invoice_num'];
	$i = (int)substr($invoiceNum,-1);
	$count = 5;

	if(empty($data)){
		if($create_if_dont_have){
			insert_invoice_id($subscription_id);
			$data = get_invoice_detail($subscription_id);
		}else{
			return false;
		}
	}
	//use to count subscription_id hit 9999
	if(strlen($invoiceNum)>=5){			
		$count = $count + $i;
		$showInvioceID = (int)$invoiceNum-($i*9999);	
	}else
		$showInvioceID = $invoiceNum;
		
	//INVOICE_PREFIX
	$invoice_prefix = INVOICE_PREFIX;
	$invoice_id = array($invoice_prefix,16,substr($data['invoice_year'],-2),$count,sprintf("%04d",$showInvioceID));
	$invoice_id = implode('-',$invoice_id);
	
	return array($invoice_id, $data['invoice_date']);	
}
//Receipt id RE-YY-invoiceNum
function get_receipt_id($subscription_id,$subscription_status_id=0, $create_if_dont_have = true){
	
	$data = get_invoice_detail($subscription_id);
	$invoiceNum = $data['invoice_num'];
	$i = (int)substr($invoiceNum,-1);
	$count = 5;
	
	if(empty($data)){
		if($create_if_dont_have){
			insert_invoice_id($subscription_id);
			$data = get_invoice_detail($subscription_id);
		}else{
			return false;
		}
	}
	
	//use to count subscription_id hit 9999
	if(strlen($invoiceNum)>=5){			
		$count = $count + $i;
		$showInvioceID = (int)$invoiceNum-($i*9999);	
	}else
		$showInvioceID = $invoiceNum;
		
	$subscription_status = get_subscription_status_history($subscription_id,$subscription_status_id);
	
	//RECEIPT_PREFIX
	$receipt_prefix = RECEIPT_PREFIX;
	$receipt_id = array($receipt_prefix,16,substr($data['invoice_year'],-2),$count,sprintf("%04d",$showInvioceID));
	$receipt_id = implode('-',$receipt_id);
	
	return array($receipt_id, $subscription_status['date_added']);
	
}

function prepare_email_vitems($subscription_items2){

	$config = get_all_configs();
	
	$vitems = '';
	$vremarks = '';
	$no = 0;
	foreach((array)$subscription_items2 as $o){
	
		$no ++;
		$vitems .= '
				<tr style="height:30px;">
					<td align="left"><b>&nbsp;'.$no.'.</b></td>
					<td align="left">'.$o['txtVeh'].'</td>
					<td align="left">'.$o['cartype_name'].'</td>
					<td align="right">'.$o['txtIU'].'</td>
				</tr>
		';
	}
	
	return array($vitems,$vremarks);
}

function prepare_email_items($subscription_items){

	$config = get_all_configs();
	
	$items = '';
	$no = 0;
	foreach((array)$subscription_items as $o){
		
		$no ++;
		$remark_items = "";
		$due_date = get_due_date(strtotime($o['date_start']),$o['price_structure_id'],'Y-m-d H:i:s','',$o['due_count']);
		if(!empty($due_date)){
			$remark_items = '
				<tr style="height:20px;">
					<td align="center">&nbsp;</td>
					<td><br><span style="color:#FF3333; font-size:12px"><b>Subscription starts <br/>from '.change_date_format($o['date_start'],$config['date_format']).'<br/> to '.change_date_format($o['due_date'],$config['date_format']).'</b></span></td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>

				</tr>';
		}
		if($o['prorate']!= 0 ){
		$day1 = date('F',strtotime($o['date_start']));
			$pro = '<tr style="height:20px;">
					<td align="center">&nbsp;</td>
					<td align="left"><p>Pro-rate Fee For '.$day1.'</p></td>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
					<td align="right">'.$o['prorate'].'</td>
				</tr>';	
		}else{
			$pro = '';
		}
		$items .= '
				<tr style="height:20px;">
					<td align="left"><b>&nbsp;'.$no.'.</b></td>
					<td align="left">'.$o['item_name'].'</td>
					<td align="right">'.$o['quantity'].'</td>
					<td align="right">'.number_format($o['price'],2).'</td>
					<td align="right">'.number_format( $o['price']*$o['quantity'],2).'</td>
				</tr>
				'.$pro.'
				<tr style="height:20px;">
					<td align="center">&nbsp;</td>
					<td>'.$o['description'].'</td>
					<td align="right">&nbsp;</td>
					<td align="right">&nbsp;</td>
					<td align="right">&nbsp;</td>
				</tr>
				'.$remark_items.'
				<tr style="height:20px;">
					<td colspan="4">&nbsp;</td>
				</tr>
		';
	}
	
	return array($items,$remarks);
}

function prepare_invoice($subscription_id,$file='email_invoice.html'){

	//get config data;
	$config = get_all_configs();

	$subscription = get_subscription_detail($subscription_id);
	if(empty($subscription))
		return false;
		
	$user = get_user($subscription['user_id']);
	$subscription_items = get_subscription_items($subscription_id);
	$subscription_items2 = get_subscription_vehicle($subscription_id);
	
	list($invoice_id, $invoice_date) = get_invoice_id($subscription_id);
	list($cust_id) = get_customer_id($subscription_id);
	

	list($items,$remarks) = prepare_email_items($subscription_items);
	list($vitems,$vremarks) = prepare_email_vitems($subscription_items2);

	$data =array('user_company' 	=> $user['company_name'],
				 'user_address'		=> $user['address'],
				 'user_email' 		=> $subscription['email'],
				 'user_salutation' 	=> get_salutation_label($user['salutation_id']),
				 'user_display_name'=> $user['display_name'],
				 'total_amount' 	=> $subscription['total_amt'],
				 'items' 			=> $items,
				 'vitems' 			=> $vitems,
				 'remarks' 			=> $remarks,
				 'vremarks' 		=> $vremarks,
				 'invoice_number' 	=> $invoice_id,
				 'customer_number'  => $cust_id,
				 'countGST7'		=> $subscription['tax_amt'],
				 'totalBeforeGST'	=> $subscription['subtotal'],
				 'gst'				=> $config['gst'],
				 'invoice_date' 	=> change_date_format($invoice_date,$config['date_format']),
				 'subscription_id'	=> $subscription_id
				 );
	return $body = get_invoice_html($data,$file);
}

function prepare_receipt($subscription_id,$file='email_receipt.html'){
	//get config data;
	$config = get_all_configs();

	$subscription = get_subscription_detail($subscription_id);
	if(empty($subscription))
		return false;
		
	$user = get_user($subscription['user_id']);
	$subscription_items = get_subscription_items($subscription_id);
	$subscription_items2 = get_subscription_vehicle($subscription_id);
	
	list($cust_id) = get_customer_id($subscription_id);
	list($receipt_id, $receipt_date) = get_receipt_id($subscription_id);
	//list($invoice_id, $invoice_date) = get_invoice_id($subscription_id);
	
	list($items,$remarks) = prepare_email_items($subscription_items);
	list($vitems,$vremarks) = prepare_email_vitems($subscription_items2);

	$data =array('user_company' 	=> $user['company_name'],
				 'user_address'		=> $user['address'],
				 'user_email' 		=> $subscription['email'],
				 'user_salutation' 	=> get_salutation_label($user['salutation_id']),
				 'user_display_name'=> $user['display_name'],
				 'total_amount' 	=> number_format($subscription['total_amt'],2),
				 'items' 			=> $items,
				 'vitems' 			=> $vitems,
				 'remarks' 			=> $remarks,
				 'vremarks' 		=> $vremarks,
				 'receipt_number' 	=> $receipt_id, 
				 'customer_number'  => $cust_id,
				 'countGST7'		=> $subscription['tax_amt'],
				 'totalBeforeGST'	=> $subscription['subtotal'],
				 'gst'				=> $config['gst'],
				 'receipt_date' 	=> change_date_format($receipt_date,$config['date_format']),
				 'subscription_id'	=> $subscription_id
				 );
	
	return $body = get_email_html($data,$file);
}
function prepare_new_subscription_pending($subscription_id,$file='email_newsub_pending.html'){

	//get config data;
	$config = get_all_configs();
	$subscription = get_subscription_detail($subscription_id);
	if(empty($subscription))
		return false;
		
	$user = get_user($subscription['user_id']);
	$subscription_items = get_subscription_items($subscription_id);
	$subscription_items2 = get_subscription_vehicle($subscription_id);
	
	list($invoice_id, $invoice_date) = get_invoice_id($subscription_id);
	list($cust_id) = get_customer_id($subscription_id);
	

	list($items,$remarks) = prepare_email_items($subscription_items);
	list($vitems,$vremarks) = prepare_email_vitems($subscription_items2);

	$data =array('user_company' 	=> $user['company_name'],
				 'user_address'		=> $user['address'],
				 'user_email' 		=> $subscription['email'],
				 'user_salutation' 	=> get_salutation_label($user['salutation_id']),
				 'user_display_name'=> $user['display_name'],
				 'total_amount' 	=> $subscription['total_amt'],
				 'items' 			=> $items,
				 'vitems' 			=> $vitems,
				 'remarks' 			=> $remarks,
				 'vremarks' 		=> $vremarks,
				 'invoice_number' 	=> $invoice_id,
				 'customer_number'  => $cust_id,
				 'countGST7'		=> $subscription['tax_amt'],
				 'totalBeforeGST'	=> $subscription['subtotal'],
				 'invoice_date' 	=> change_date_format($invoice_date,$config['date_format']),
				 );
	return $body = get_invoice_html($data,$file);
}


/*---------------------------------------------------------------------------------------------------------------
special function (CRON JOB & REPLIED EMAIL CHECKING) for this system only
---------------------------------------------------------------------------------------------------------------*/
function cron_prepare_email_reply_url($the_url, $subscription_id,$tenant_id,$tenant_email,$item_ids, $confirm, $title='HERE',$item_id=0){
	
	if(empty($the_url))
		return $title;
		
	$subs = array();
	$subs[] = "o=".$subscription_id;
	$subs[] = "c=".$tenant_id;
	$subs[] = "com=".$confirm;
	
	if(is_array($item_ids))
		$subs[] = 'its='.implode(',',$item_ids);
	else
		$subs[] = 'its='.$item_ids;
		
	if($item_id>0)
		$subs[] = 'it='.$item_id;
		
		
	$subs[] = 'se='.md5($tenant_email);	
	
	if(!empty($the_url)){
		$url = $the_url.'?'.implode('&',$subs);
		$url = '<a href="'.$url.'">'.$title.'</a>';	
	}else{
		$url = $title;
	}
	return $url;
}

/*---------------------------------------------------------------------------------------------------------------
special function (.....) for this system only
---------------------------------------------------------------------------------------------------------------*/
function dd_time($timestamp, $fieldname = 'the_date', $display = 'block') {
	global $month;
	echo '<div id="'.$fieldname.'" style="display: '.$display.'">'."\n";
	$day = gmdate('j', $timestamp);
	echo '<select name="'.$fieldname.'_day" size="1">'."\n";
	for($i = 1; $i <=31; $i++) {
		if($day == $i) {
			echo "<option value=\"$i\" selected=\"selected\">$i</option>\n";	
		} else {
			echo "<option value=\"$i\">$i</option>\n";	
		}
	}
	echo '</select>&nbsp;&nbsp;'."\n";
	$month2 = gmdate('n', $timestamp);
	echo '<select name="'.$fieldname.'_month" size="1">'."\n";
	for($i = 1; $i <= 12; $i++) {
		if ($i < 10) {
			$ii = '0'.$i;
		} else {
			$ii = $i;
		}
		if($month2 == $i) {
			echo "<option value=\"$i\" selected=\"selected\">$month[$ii]</option>\n";	
		} else {
			echo "<option value=\"$i\">$month[$ii]</option>\n";	
		}
	}
	echo '</select>&nbsp;&nbsp;'."\n";
	$year = gmdate('Y', $timestamp);
	echo '<select name="'.$fieldname.'_year" size="1">'."\n";
	for($i = $year; $i <= ($year+10); $i++) {
		if($year == $i) {
			echo "<option value=\"$i\" selected=\"selected\">$i</option>\n";	
		} else {
			echo "<option value=\"$i\">$i</option>\n";	
		}
	}
	echo '</select>&nbsp;@'."\n";
	echo '<span dir="ltr">'."\n";
	$hour = gmdate('H', $timestamp);
	echo '<select name="'.$fieldname.'_hour" size="1">'."\n";
	for($i = 0; $i < 24; $i++) {
		if($hour == $i) {
			echo "<option value=\"$i\" selected=\"selected\">$i</option>\n";	
		} else {
			echo "<option value=\"$i\">$i</option>\n";	
		}
	}
	echo '</select>&nbsp;:'."\n";
	$minute = gmdate('i', $timestamp);
	echo '<select name="'.$fieldname.'_minute" size="1">'."\n";
	for($i = 0; $i < 60; $i++) {
		if($minute == $i) {
			echo "<option value=\"$i\" selected=\"selected\">$i</option>\n";	
		} else {
			echo "<option value=\"$i\">$i</option>\n";	
		}
	}
	
	echo '</select>&nbsp;:'."\n";
	$second = gmdate('s', $timestamp);
	echo '<select name="'.$fieldname.'_second" size="1">'."\n";
	for($i = 0; $i <= 60; $i++) {
		if($second == $i) {
			echo "<option value=\"$i\" selected=\"selected\">$i</option>\n";	
		} else {
			echo "<option value=\"$i\">$i</option>\n";	
		}
	}
	echo '</select>'."\n";
	echo '</span>'."\n";
	echo '</div>'."\n";
}

function add_default_daily_allotments($cid){
	$today = date('Y-m-d');
	$dates = diff_date($today, '365 days');
	
	$sale_query = "select date from carpark_allotments where carpark_id = '".$cid."' order by date desc";
	$carpark = get_carpark($cid);

	$last_sale_date = db_row($sale_query);
	if($last_sale_date==''&& !$last_sale_date){
		$last_sale_date = $today;
		$last_sale_date = diff_date($last_sale_date, '-1 day'); 
	}
	
	$diff = get_time_difference($last_sale_date,$dates);
	
	if($diff['type']=='pos'){
		$daily_allotments = array('carpark_id' => $cid,
						   'date' => $last_sale_date,
						   'allotment' => $carpark['default_allotment'] );
		for($d=0;$d<$diff['days'];$d++){
			$daily_allotments['date'] = diff_date($daily_allotments['date'], '1 day'); 
			
			$insert = db_perform('carpark_allotments',$daily_allotments);
		}
	}
}

/*---------------------------------------------------------------------------------------------------------------
function to export cxv file by admin 
---------------------------------------------------------------------------------------------------------------*/
function generatecsv($fcarpark,$datestart,$dateEnd){
	$CSV_SEPARATOR_COLUMN = ",";
	$CSV_SEPARATOR_ROW = "\r\n";
	$csv_output_body = "";//Write 1st column (Placing columns names in first row)
	$attribute_titles = array("Carpark","IU / Cash Card number","Vehicle Number","Holder Name","Valid From","Valid To","Company Name","Dept/Address","Multi IU", "Season Type", "Period Type","Status", "IP Address");
	$csv_output_body .= implode($CSV_SEPARATOR_COLUMN,$attribute_titles) . $CSV_SEPARATOR_ROW;//Get data
	/*
	$Qdata = mysql_query("select u.status,u.display_name,u.company_name,u.address,si.txtVeh,si.txtIU,st.season,si.due_date,si.date_start,c.carpark_name,c.ip_address, pt.type
							from user u
							inner join user_vehicle uv on u.user_id = uv.tenant_id
							inner join subscriptions s on u.user_id =  s.user_id
							inner join subscription_item si on s.subscription_id = si.subscription_id
							inner join carpark c on si.carpark_id = c.carpark_id
							inner join subscription_status_history ss on ss.subscription_id = s.subscription_id
							inner join period_type pt on pt.type_id = u.type_id
							inner join season_type st on st.season_id = uv.season_type
							where ss.subscription_status_id = 3 
							and c.carpark_id = '{$fcarpark}' and si.date_start >= '{$datestart}' and si.due_date >= '{$dateEnd}'"
							);
	*/
	// inner join period_type pt on pt.type_id = u.type_id
	// inner join season_type st on st.season_id = uv.season_type   st.season, pt.type
	
	$Qdata = mysql_query("SELECT u.status,u.display_name,u.company_name,u.address,si.txtVeh,si.txtIU,si.due_date,si.date_start,c.carpark_name,c.ip_address,uv.season_type
						FROM subscription_item si
						inner join subscriptions s on si.subscription_id=s.subscription_id
						inner join subscription_status_history ssh on si.subscription_id=ssh.subscription_id
						inner join user u on s.user_id = u.user_id 
						inner join user_vehicle uv on u.user_id = uv.tenant_id
						inner join carpark c on si.carpark_id = c.carpark_id
						where si.carpark_id = '{$fcarpark}'
						AND '{$datestart}' between si.date_start and si.due_date
						AND '{$dateEnd}' between si.date_start and si.due_date
						AND ssh.subscription_status_id = 3 ");
						
	$carpark = mysql_query("select * from carpark where carpark_id = '{$fcarpark}' ");
	$sql = mysql_fetch_array($carpark);
	
	while ($row_data = mysql_fetch_array($Qdata)) {
		$new_row = array();
		$new_row[] = filter_text($row_data['carpark_name']);
		$new_row[] = filter_text($row_data['txtIU']);
		$new_row[] = filter_text($row_data['txtVeh']);
		$new_row[] = filter_text($row_data['display_name']);
		$new_row[] = date('d/m/Y', strtotime($row_data['date_start']));
		$new_row[] = date('d/m/Y', strtotime($row_data['due_date']));
		$new_row[] = filter_text($row_data['company_name']);
		$new_row[] = filter_text($row_data['address']);
		$new_row[] = filter_text($row_data['txtIU']);
		$new_row[] = filter_text($row_data['season_type']);
		$new_row[] = 'Day';//filter_text($row_data['type']);
		$new_row[] = filter_text($row_data['status']);
		$new_row[] = filter_text($row_data['ip_address']);
		$csv_output_body .= implode($CSV_SEPARATOR_COLUMN,$new_row) . $CSV_SEPARATOR_ROW;
	}//END WHILE LOOP 	//Create File

//print_r($datestart);
//exit;

	header("Content-type: text/csv");
	header("Content-Disposition: attachment; filename=LHNCarpark_ExportCSV_" .$sql['carpark_name']. "_".$datestart."_".$dateEnd.".csv");
	header("Pragma: no-cache");
	header("Expires: 0");
	print $csv_output_body;
	exit;
}
/*---------------------------------------------------------------------------------------------------------------
function to export cxv file by admin 
---------------------------------------------------------------------------------------------------------------*/
function generateaccountscsv($datestart,$dateEnd){
	$CSV_SEPARATOR_COLUMN = ",";
	$CSV_SEPARATOR_ROW = "\r\n";
	$monthnumber = date('m', strtotime($datestart));	
	$newtimestamp = strtotime('+1439 minutes', strtotime($dateEnd));
	$endtimestamp = date('Y-m-d H:i:s', $newtimestamp);
	$csv_output_body = "";//Write 1st column (Placing columns names in first row)
	$attribute_titles = array("Invoice date","Invoice no.","Order id","Customer name","Car registration no.","Site","From","To","Monthly charges","Amount before GST", "GST", "Amount after GST","Transaction id","Mode of payment","Cheque number");
	$csv_output_body .= implode($CSV_SEPARATOR_COLUMN,$attribute_titles) . $CSV_SEPARATOR_ROW;//Get data		
	$Qdata = mysql_query("select i.invoice_date as 'Invoice date',
 (case when i.invoice_num < 10 then concat('IN16145000',CAST(invoice_num as CHAR))
 when i.invoice_num >= 10 && i.invoice_num <= 99 then concat('IN1614500',CAST(invoice_num as CHAR))
 when i.invoice_num >= 100 && i.invoice_num < 1000 then concat('IN161450',CAST(invoice_num as CHAR))
 when i.invoice_num >= 1000 && i.invoice_num < 10000 then concat('IN16145',CAST(invoice_num as CHAR))
 when i.invoice_num >= 10000 then concat('IN1614',SUBSTRING(CAST(invoice_num as CHAR),1,4)) END) as 'Invoice no.',
 s.subscription_id as 'Order id',CONCAT(first_name, ' ', last_name)  as 'Customer name',
 si.txtVeh as 'Car registration no.',si.item_name as 'Site',
 si.date_start as 'From', si.due_date as 'To',si.price as 'Monthly charges',
 (si.prorate + si.charge) as 'Amount before GST',ROUND((si.prorate + si.charge) * 0.07, 2) as 'GST', 
 (case when (s.subtotal -((si.prorate + si.charge) + ROUND((si.prorate + si.charge) * 0.07, 2))) = 0.01 then s.subtotal else ((si.prorate + si.charge) + ROUND((si.prorate + si.charge) * 0.07, 2)) end)  as 'Amount after GST',
 n.Transaction_id as 'Transaction id', pm.p_method as 'Mode of payment','' as 'Cheque number' from 
 subscriptions s left outer join  neratel n on s.subscription_id = n.subscription_id left outer join
 subscription_item si on si.subscription_id = s.subscription_id left outer join
 invoice i on i.subscription_id = si.subscription_id left outer join
 user u on u.user_id = s.user_id left outer join 
 payment_method pm on pm.p_id = s.payment_method 
 where i.invoice_date between '{$datestart}' and '{$endtimestamp}' 
 and (s.payment_method ='1' or s.payment_method='2' or s.payment_method='4')
 order by si.item_name,s.subscription_id");
	while ($row_data = mysql_fetch_array($Qdata)) {
		$new_row = array();
		$new_row[] = date('d/m/Y', strtotime($row_data['Invoice date']));		
		$new_row[] = filter_text($row_data['Invoice no.']);
		$new_row[] = filter_text($row_data['Order id']);
		$new_row[] = filter_text($row_data['Customer name']);
		$new_row[] = filter_text($row_data['Car registration no.']);
		$new_row[] = filter_text($row_data['Site']);	
		$new_row[] = date('d/m/Y', strtotime($row_data['From']));
		$new_row[] = date('d/m/Y', strtotime($row_data['To']));		
		$new_row[] = filter_text($row_data['Monthly charges']);
		$new_row[] = filter_text($row_data['Amount before GST']);
		$new_row[] = filter_text($row_data['GST']);
		$new_row[] = filter_text($row_data['Amount after GST']);		
		$new_row[] = filter_text($row_data['Transaction id']);
		$new_row[] = filter_text($row_data['Mode of payment']);
		$new_row[] = filter_text($row_data['Cheque number']);		
		$csv_output_body .= implode($CSV_SEPARATOR_COLUMN,$new_row) . $CSV_SEPARATOR_ROW;
	}//END WHILE LOOP 	//Create File

//print_r($datestart);
//exit;

	header("Content-type: text/csv");
	header("Content-Disposition: attachment; filename=LHNCarpark_GenerateCSV_".$datestart."_".$dateEnd.".csv");
	header("Pragma: no-cache");
	header("Expires: 0");
	print $csv_output_body;
	exit;
}

function filter_text($text) {
	$filter_array = array(",","\r","\n","\t");
	return str_replace($filter_array,"",$text);
}
//add function to check carpark allotments 
function get_current_carpark_allotments($id){
	
	$query = "select s.carpark_id, si.subscription_id, s.allotment, s.allotment_used
				from carpark_allotments as s, subscription_item as si
				where si.carpark_id = s.carpark_id 
				and si.carpark_id = s.carpark_id 
				and si.subscription_id = '{$id}'
				and si.date_start = s.date";
	
	$data = db_assoc($query);		
	
	if($data['allotment'] <= $data['allotment_used']){
		$status = 'Full';
	}else{
		$status = 'Ok';
	}
	
	return $status ;
}

function get_carpark_multi_types($carpark_id){
	$data = db_array("select * from carpark_types where carpark_id = '{$carpark_id}'");	
	return stripslashes_deep($data);
}

function get_selected($carpark_id){
	$data = db_array("select carpark_type as id
					from carpark_types ct
					inner join cartypes c 
					on ct.carpark_type = c.cartype 
					where carpark_id = '{$carpark_id}'");	
					
	return stripslashes_deep($data);
}

function draw_dropdown($carpark_id, $selected_value = array()){
	
	$data = db_array("select * from cartypes");	
					
	$getResults = stripslashes_deep($data);
	$results = '';
	
	foreach( (array)$getResults as $record){
		$display_selected = (in_array($record['cartype'],$selected_value))? ' selected="selected" ':'';
		$results .= '<option value="'.$record['cartype'].'" '.$display_selected.'>'.$record['cartype_name'].'</option>'."\n";
	}
	return $results;
}

function get_vehicle_type_text($id){
	$data = db_array("select c.cartype_name 
					from cartypes c
					inner join carpark_types ct on c.cartype = ct.carpark_type
					where ct.carpark_id = '{$id}' 
					order by c.cartype_name ASC ");

	return stripslashes_deep($data);
}

function get_user_vehicle_by_cartypes($id, $carpark_id){ 
	if(empty($id) || empty($carpark_id))
		return false;
	
	if(is_numeric($carpark_id) != 0){
		$type = db_array("select uv.vehicle_id, c.cartype, c.cartype_name, uv.txtColor, uv.txtVeh, uv.txtIU 
						from carpark_types ct
						inner join user_vehicle uv on uv.cartype = ct.carpark_type 
						inner join cartypes c on uv.cartype = c.cartype 
						inner join user u on u.user_id = uv.tenant_id 
						where carpark_id = '$carpark_id'
						and u.delete_flag = 0 
						and u.user_id = '$id'
						");
		$getResults = stripslashes_deep($type);		
		$results = '';
		
		foreach( (array)$getResults as $record){
			$results .= '<option value="'.$record['txtVeh'].'">'.$record['txtVeh'].'  '.$record['cartype_name'].'</option>'."\n";
		}
		return $results;
	}
}
function carpark_id($id){
	$query = db_assoc("select * from subscription_item where subscription_id = '$id' ");
	return stripslashes_deep($query);
}

function vehicle_get_carpark($id){
	$query = db_array("select carpark_id from carpark_types where carpark_type = '$id' ");
	return stripslashes_deep($query);
}
function vehicle_get_id($id){
	$query = db_assoc("select cartype from user_vehicle where txtVeh like  '%$id%' ");
	return stripslashes_deep($query);
}
function get_price_structure($carpark_id){
	$query = db_assoc("select price_structure_id from carpark where carpark_id =  '$carpark_id' ");
	return stripslashes_deep($query);	
}

function transcation_id($orderym, $runningnumber){
	$runningnumber = (int)$runningnumber;
	return stripslashes_deep($orderym). sprintf("%06s", $runningnumber);
}

function get_carparks_name(){//
	$data = db_array("select * from carpark where activate = 0 AND delete_flag = 0 order by carpark_name asc");
	return stripslashes_deep($data);
}

function get_sub_item_tenants($carpark_id,$ssi,$date,$limit,$offset,$cancel =0){
	$start = $limit*((int)($offset-1));
	$count = 0;
	
	$sql = "SELECT count(*) as total, si.date_start, si.due_date, si.subscription_id,u.first_name, u.last_name, u.company_name, u.profile, si.prorate, si.price
	 		FROM `subscription_item` si
			inner join `subscription_status_history` ssh on si.`subscription_id` = ssh.`subscription_id`
			inner join `subscriptions` s on si.`subscription_id` = s.`subscription_id`
			inner join `user` u  on s.user_id = u.user_id
			WHERE si.`carpark_id` = '" . $carpark_id . "'
			AND si.is_ignore = 0
			AND '".$date."' between si.`date_start` and si.`due_date`";
			
	if(empty($ssi)){
		$sql .= " GROUP BY si.subscription_id limit $start, $limit";	
	}else{
		$sql .= " AND ssh.subscription_status_id = '{$ssi}' GROUP BY si.subscription_id limit $start, $limit";			
	}
	
	$data = stripslashes_deep(db_array($sql));
	
	if($data){
		foreach($data as $key => $value){
			$count = $count+$value['total'];
		}
	}
	
	if($count == 0){
		return $data = array();
	}else{
		return $data ;
	}
}

function get_sub_item_tenants_no($carpark_id,$date){
	$sql = "SELECT count(*) as tenant_no
	 		FROM `subscription_item` si
			inner join `subscription_status_history` ssh on si.`subscription_id` = ssh.`subscription_id`
			inner join `subscriptions` s on si.`subscription_id` = s.`subscription_id`
			inner join `user` u  on s.user_id = u.user_id
			WHERE si.`carpark_id` = '" . $carpark_id . "'
			AND si.is_ignore = 0
			AND ssh.subscription_status_id = '3'
			AND '".$date."' between si.`date_start` and si.`due_date`";
			
	return $data = stripslashes_deep(db_row($sql));
}
?>