function hot_reserve($user, $pass, $param)
{
    //var_dump($param);
    $rooms_id = isset($param->rooms_id) ? $param->rooms_id : 0;
    //    $hotel_id = isset($param->hotel_id) ? $param->hotel_id : 0;
    $check_in = isset($param->check_in) ? $param->check_in : NULL;
    $check_out = isset($param->check_out) ? $param->check_out : NULL;
    $adult = isset($param->adult) ? $param->adult : 2;
    $child = isset($param->child) ? $param->child : 0;
    $inf = isset($param->inf) ? $param->inf : 0;
    $passengers = isset($param->passengers) ? $param->passengers : NULL;
    $mobile = isset($param->mobile) ? $param->mobile : '';
    $email = isset($param->email) ? $param->email : '';
    $address = isset($param->address) ? $param->address : '';
    //
    //    if ($room_id == 0 || $check_in == NULL ) {
    //        $return['err']['code'] = 2001;
    //        $return['err']['ecode'] = 21011;
    //        $return['err']['msg'] = "CHECK INPUT VALUES";
    //        return json_encode($return);
    //    }
    global $db_hotel;
    $passengers = json_decode($passengers, TRUE);
    //var_dump($passengers);
    $rooms = json_decode($rooms_id, TRUE);
    $reserve_room_data = $db_hotel->reserve_room_data($rooms);
    //    print_r($reserve_room_data);
    if (count($reserve_room_data) != count($rooms)) {
        $return['err']['code'] = 2001;
        $return['err']['ecode'] = "C21012";
        $return['err']['msg'] = "CHECK INPUT VALUES";
        return json_encode($return);
    }
    if (count($passengers) != count($rooms)) {
        $return['err']['code'] = 2001;
        $return['err']['ecode'] = "C21013";
        $return['err']['msg'] = "CHECK INPUT VALUES";
        return json_encode($return);
    }
    if (count($rooms) > 1) {
        if ($reserve_room_data[1]['source_id'] != $reserve_room_data[1]['source_id'] || $reserve_room_data[1]['hotels_id'] != $reserve_room_data[1]['hotels_id']) {
            $return['err']['code'] = 2001;
            $return['err']['ecode'] = "C21014";
            $return['err']['msg'] = "CHECK INPUT VALUES";
            return json_encode($return);
        }
    }
    $source_id = $reserve_room_data[1]['source_id'];
    $sess = UsernameToken($user, $pass);
    $user_id = (int) $sess['user_id'];
    $refrence_id = $db_hotel->refrence_generator($user_id, 2);
    $today = new DateTime();
    foreach ($rooms as $room_number => $room_id) {
        $adult = 0;
        $child = 0;
        $inf = 0;
        foreach ($passengers[$room_number] as $pid => $passenger) {
            //            $passengers[$room_number]['room_id']=$room_id;
            if (!isset($passenger['prefix'])) {
                //                if($passenger['gender']=='M') $passengers[$room_id][]
            }
            try {
                $birth = new DateTime($passenger['birthday']);
                // three days difference!
            } catch (Exception $ex) {
                $return['err']['code'] = 2001;
                $return['err']['ecode'] = "C21014.1";
                $return['err']['msg'] = "CHECK passenger_birth";
                return json_encode($return);
            }
            $diff = $birth->diff($today);
            $age = $diff->format('%y') + 1;
            $passengers[$room_number][$pid]['age'] = $age;
            if ($passengers[$room_number][$pid]['passenger_type'] == 'CHD') {
                $child++;
            } elseif ($passengers[$room_number][$pid]['passenger_type'] == 'ADT') {
                $adult++;
            } else {
                $return['err']['code'] = 2001;
                $return['err']['ecode'] = "C21014.1";
                $return['err']['msg'] = "CHECK passenger_type";
                return json_encode($return);
            }
            //_______________________
            $reserve_room_data[$room_number]['room_id'] = $room_id;
            $reserve_room_data[$room_number]['adult'] = $adult;
            $reserve_room_data[$room_number]['child'] = $child;
            $reserve_room_data[$room_number]['inf'] = $inf;
        }
        $db_hotel->insert_passenger($refrence_id, '', $passengers[$room_number], $mobile, $email, $address, $room_id, $room_number);
    }
    $source_hotel_id = $reserve_room_data[1]['id_source_hotel'];
    //var_dump($reserve_room_data);
    /* Reserve_room_data Parameter
        $return[$rooms_id[$i]]['id_room_source']=$row['id_room_source'];
        $return[$rooms_id[$i]]['source_id']=$row['source_id'];
        $return[$rooms_id[$i]]['hotels_id']=$row['hotels_id'];
        $return[$rooms_id[$i]]['id_source_hotel']=$row['id_source_hotel'];
        $return[$rooms_id[$i]]['extra_data']=$row['extra_data'];
       */
    //$id_reserve_tmp = $db_hotel->hot_reserve_temp($refrence_id, $user_id, $source_id, $reserve_room_data, $check_in, $check_out);
    $id_reserve_tmp = $db_hotel->hot_reserve_temp($refrence_id, $user_id, $source_id, $reserve_room_data, $check_in, $check_out);
    $fn_reserve = hot_reserve_fn_finder($source_id);
    if ($fn_reserve == FALSE) {
        $return['err']['code'] = 2001;
        $return['err']['ecode'] = "C21015";
        $return['err']['msg'] = "CHECK INPUT VALUES";
        return json_encode($return);
    }
    $out = call_user_func($fn_reserve, $refrence_id, $reserve_room_data, $check_in, $check_out, $passengers, $mobile, $email, $address);
    //    if(isset($out['err'])){
    //        return json_encode($out);
    //    }
    $db_hotel->close();
    return json_encode($out);
}
function search2($user, $pass, $aztarikh, $tatarikh, $from_city, $to_city, $extra, $airlines, $sort, $way)
{
    if (trim($airlines) == '') {
        $airlines = array();
    } else {
        $airlines = explode(",", $airlines);
    }
    $out = array("err" => array("code" => "1", "msg" => "Unknown ERROR"), "data" => array());
    $param = array();
    $sess = UsernameToken($user, $pass);
    $user_id = (int) $sess['user_id'];
    $customer_id = (int) $sess['customer_id'];
    $out['data'] = array();
    if ($customer_id <= 0) {
        $out['err']['code'] = 2;
        $out['err']['msg'] = 'AUTH ERROR';
        return json_encode($out);
    }
    $source = new source_class();
    $wer = $source->createWhere($customer_id);
    $aztarikh = trim($aztarikh);
    $tatarikh = trim($tatarikh);
    $extra = trim($extra);
    $from_city = trim($from_city);
    $to_city = trim($to_city);
    if ($aztarikh != '') {
        $param['aztarikh'] = $aztarikh;
    }
    if ($tatarikh != '') {
        $param['tatarikh'] = $tatarikh;
    }
    if ($extra != '') {
        $param['extra'] = $extra;
    }
    if (strlen($from_city) == 3 && strlen($to_city) == 3) {
        $param['from_city'] = $from_city;
        $param['to_city'] = $to_city;
    }
    if (count($airlines) > 0) {
        $param['extra'] = 'extra';
        $airs = array();
        foreach ($airlines as $airline) {
            $tmp = explode("|", $airline);
            foreach ($tmp as $tt) {
                $airs[] = $tt;
            }
        }
        $param['airline'] = $airs;
    }
    $param['sort'] = $sort;
    $param['way'] = $way;
    /*
     else
     {
     $out['err']['code'] = 2;
     $out['err']['msg'] = 'From or To CITY IATA code is not right.';
     }
    * 
    */
    $flight = new flight_class(TRUE, $param, $wer);
    $out['data'] = $flight->data;
    $out['err']['code'] = 0;
    $out['err']['msg'] = '';
    //    $out['query'] = $flight->query;
    $conf = new conf();
    $my = new mysqli($conf->local_host, $conf->local_user, $conf->local_pass, $conf->local_db);
    if ($my->connect_errno !== FALSE) {
        $my->set_charset("utf8");
        $my->query("insert into search_log (user_id,func,query,param) values ({$user_id},'search2','" . $my->real_escape_string($flight->query) . "','" . json_encode($param) . "')");
    }
    return json_encode($out);
}